hello light rail! just import the tracks, represent as a new lane type.

make clipping handle starts and ends separately
This commit is contained in:
Dustin Carlino 2020-06-26 16:47:18 -07:00
parent 16beebd1de
commit eab0988bd8
17 changed files with 317 additions and 209 deletions

View File

@ -1,5 +1,5 @@
use abstutil::{retain_btreemap, Timer};
use geom::PolyLine;
use geom::{PolyLine, Ring};
use map_model::raw::{OriginalIntersection, OriginalRoad, RawMap};
use map_model::IntersectionType;
@ -9,35 +9,26 @@ pub fn clip_map(map: &mut RawMap, timer: &mut Timer) {
// So we can use retain_btreemap without borrowing issues
let boundary_polygon = map.boundary_polygon.clone();
let boundary_lines: Vec<PolyLine> = map
.boundary_polygon
.points()
.windows(2)
.map(|pair| PolyLine::new(pair.to_vec()))
.collect();
let boundary_ring = Ring::new(boundary_polygon.points().clone());
// This is kind of indirect and slow, but first pass -- just remove roads that start or end
// outside the boundary polygon.
retain_btreemap(&mut map.roads, |_, r| {
let first_in = boundary_polygon.contains_pt(r.center_points[0]);
let last_in = boundary_polygon.contains_pt(*r.center_points.last().unwrap());
first_in || last_in
let light_rail = r.osm_tags.get("railway") == Some(&"light_rail".to_string());
first_in || last_in || light_rail
});
// First pass: Clip roads beginning out of bounds
let road_ids: Vec<OriginalRoad> = map.roads.keys().cloned().collect();
for id in road_ids {
let r = &map.roads[&id];
let first_in = map.boundary_polygon.contains_pt(r.center_points[0]);
let last_in = map
.boundary_polygon
.contains_pt(*r.center_points.last().unwrap());
// Some roads start and end in-bounds, but dip out of bounds. Leave those alone for now.
if first_in && last_in {
if map.boundary_polygon.contains_pt(r.center_points[0]) {
continue;
}
let mut move_i = if first_in { id.i2 } else { id.i1 };
let mut move_i = id.i1;
// The road crosses the boundary. If the intersection happens to have another connected
// road, then we need to copy the intersection before trimming it. This effectively
@ -51,14 +42,12 @@ pub fn clip_map(map: &mut RawMap, timer: &mut Timer) {
> 1
{
let copy = map.intersections[&move_i].clone();
// Start low, so we don't conflict with IDs generated by map_editor.
// Don't conflict with OSM IDs
move_i = OriginalIntersection {
osm_node_id: map.new_osm_node_id(-1),
};
map.intersections.insert(move_i, copy);
println!("Disconnecting {} from some other stuff", id);
// We don't need to mark the existing intersection as a border and make sure to split
// all other roads up too. That'll happen later in this loop.
}
let i = map.intersections.get_mut(&move_i).unwrap();
@ -67,45 +56,78 @@ pub fn clip_map(map: &mut RawMap, timer: &mut Timer) {
// Now trim it.
let mut mut_r = map.roads.remove(&id).unwrap();
let center = PolyLine::new(mut_r.center_points.clone());
let border_pt = boundary_lines
.iter()
.find_map(|l| center.intersection(l).map(|(pt, _)| pt))
.unwrap();
if first_in {
mut_r.center_points = center
.get_slice_ending_at(border_pt)
.unwrap()
.points()
.clone();
i.point = *mut_r.center_points.last().unwrap();
// This has no effect unless we made a copy of the intersection to disconnect it from
// other roads.
map.roads.insert(
OriginalRoad {
osm_way_id: id.osm_way_id,
i1: id.i1,
i2: move_i,
},
mut_r,
);
} else {
mut_r.center_points = center
.reversed()
.get_slice_ending_at(border_pt)
.unwrap()
.reversed()
.points()
.clone();
i.point = mut_r.center_points[0];
map.roads.insert(
OriginalRoad {
osm_way_id: id.osm_way_id,
i1: move_i,
i2: id.i2,
},
mut_r,
);
let border_pt = boundary_ring.all_intersections(&center)[0];
mut_r.center_points = center
.reversed()
.get_slice_ending_at(border_pt)
.unwrap()
.reversed()
.points()
.clone();
i.point = mut_r.center_points[0];
map.roads.insert(
OriginalRoad {
osm_way_id: id.osm_way_id,
i1: move_i,
i2: id.i2,
},
mut_r,
);
}
// Second pass: clip roads ending out of bounds
let road_ids: Vec<OriginalRoad> = map.roads.keys().cloned().collect();
for id in road_ids {
let r = &map.roads[&id];
if map
.boundary_polygon
.contains_pt(*r.center_points.last().unwrap())
{
continue;
}
let mut move_i = id.i2;
// The road crosses the boundary. If the intersection happens to have another connected
// road, then we need to copy the intersection before trimming it. This effectively
// disconnects two roads in the map that would be connected if we left in some
// partly-out-of-bounds road.
if map
.roads
.keys()
.filter(|r2| r2.i1 == move_i || r2.i2 == move_i)
.count()
> 1
{
let copy = map.intersections[&move_i].clone();
move_i = OriginalIntersection {
osm_node_id: map.new_osm_node_id(-1),
};
map.intersections.insert(move_i, copy);
println!("Disconnecting {} from some other stuff", id);
}
let i = map.intersections.get_mut(&move_i).unwrap();
i.intersection_type = IntersectionType::Border;
// Now trim it.
let mut mut_r = map.roads.remove(&id).unwrap();
let center = PolyLine::new(mut_r.center_points.clone());
let border_pt = boundary_ring.all_intersections(&center.reversed())[0];
mut_r.center_points = center
.get_slice_ending_at(border_pt)
.unwrap()
.points()
.clone();
i.point = *mut_r.center_points.last().unwrap();
map.roads.insert(
OriginalRoad {
osm_way_id: id.osm_way_id,
i1: id.i1,
i2: move_i,
},
mut_r,
);
}
retain_btreemap(&mut map.buildings, |_, b| {

View File

@ -159,6 +159,16 @@ pub fn extract_osm(
tags.insert(osm::SIDEWALK.to_string(), "right".to_string());
}
roads.push((
way.id,
RawRoad {
center_points: pts,
osm_tags: tags,
turn_restrictions: Vec::new(),
complicated_turn_restrictions: Vec::new(),
},
));
} else if tags.get("railway") == Some(&"light_rail".to_string()) {
roads.push((
way.id,
RawRoad {

View File

@ -1,16 +1,16 @@
data/input/austin/osm/Austin.osm,7c8d72cf97072af34cee665006b1e9e6,https://www.dropbox.com/s/8bedio4fpt6yvhg/Austin.osm.zip?dl=0
data/input/austin/osm/downtown_atx.osm,a30b0f460a481598e494f16a9d07a822,https://www.dropbox.com/s/tbadw3f0ex2zzx7/downtown_atx.osm.zip?dl=0
data/input/austin/osm/huge_austin.osm,fb166029fc8006bd20dc959fbbbde3b6,https://www.dropbox.com/s/4x421o9o8px0m6o/huge_austin.osm.zip?dl=0
data/input/raw_maps/ballard.bin,1276726c36e8baadf1b6679e972081e7,https://www.dropbox.com/s/iqs7sokeewh7h1g/ballard.bin.zip?dl=0
data/input/raw_maps/downtown.bin,7e376b202a845d3b754d6f2fc592a679,https://www.dropbox.com/s/000v5kqppmgu7ba/downtown.bin.zip?dl=0
data/input/raw_maps/downtown_atx.bin,7f0df797155555b2bb0a907ce2441501,https://www.dropbox.com/s/7q74bbbowjp740i/downtown_atx.bin.zip?dl=0
data/input/raw_maps/huge_austin.bin,021d2e85519b7be1a007e09e61fdcf16,https://www.dropbox.com/s/9ec4uhpuo26cwr7/huge_austin.bin.zip?dl=0
data/input/raw_maps/huge_seattle.bin,804b92f021dce338cfb125017a53ede2,https://www.dropbox.com/s/0l8xj5oa21hv2ce/huge_seattle.bin.zip?dl=0
data/input/raw_maps/lakeslice.bin,0841308c0bf1cd96c9ae8a62ff512cb0,https://www.dropbox.com/s/4nmdtw0mgqe7tyg/lakeslice.bin.zip?dl=0
data/input/raw_maps/montlake.bin,147f1ab54b31b00071223ab8fda90c07,https://www.dropbox.com/s/vb7crn3zyu21lv8/montlake.bin.zip?dl=0
data/input/raw_maps/south_seattle.bin,9a35da792822e1c0144e3b62f54ce9cc,https://www.dropbox.com/s/q7t1niqxvxhuk4a/south_seattle.bin.zip?dl=0
data/input/raw_maps/udistrict.bin,3b68416ba479cccecce1d76b585257f9,https://www.dropbox.com/s/36jcpcjhzsifuld/udistrict.bin.zip?dl=0
data/input/raw_maps/west_seattle.bin,fb61f9801e185bc9c111d894268bde2d,https://www.dropbox.com/s/9umvqqavj3che2k/west_seattle.bin.zip?dl=0
data/input/raw_maps/ballard.bin,5077acf87dac9cbf03dc5a831b09c494,https://www.dropbox.com/s/cni0pi80vsi6jpo/ballard.bin.zip?dl=0
data/input/raw_maps/downtown.bin,00ac774561dfeaa76da0136c47cd3108,https://www.dropbox.com/s/cgvxjra4prycyaw/downtown.bin.zip?dl=0
data/input/raw_maps/downtown_atx.bin,0cd7ecaf548124710936a173ef617e0a,https://www.dropbox.com/s/0qiji6lmwmkpt6y/downtown_atx.bin.zip?dl=0
data/input/raw_maps/huge_austin.bin,5d0fdca0eb9bae5cd5e0955442972bd4,https://www.dropbox.com/s/zs6te7tq7vgjicc/huge_austin.bin.zip?dl=0
data/input/raw_maps/huge_seattle.bin,e5477b0df3c2c678bdc6a00dfc742b4c,https://www.dropbox.com/s/phs694ygovx0wu4/huge_seattle.bin.zip?dl=0
data/input/raw_maps/lakeslice.bin,02d9f53cff62ffc34be755c73d0e89c7,https://www.dropbox.com/s/rsy99usiwvfrbpg/lakeslice.bin.zip?dl=0
data/input/raw_maps/montlake.bin,63254aaf2d839619129576547e16b9df,https://www.dropbox.com/s/15icwhf2kp3wbva/montlake.bin.zip?dl=0
data/input/raw_maps/south_seattle.bin,c9e863cfb5c197fa2d06124105ef7277,https://www.dropbox.com/s/m9ycx3ewoug1o0p/south_seattle.bin.zip?dl=0
data/input/raw_maps/udistrict.bin,f9d476b06d584464932c04bdad6f29c2,https://www.dropbox.com/s/3w1pa5d2jinl6hn/udistrict.bin.zip?dl=0
data/input/raw_maps/west_seattle.bin,c45424a4493161bbff4d182448b6a777,https://www.dropbox.com/s/sqkyxgmvbi80ios/west_seattle.bin.zip?dl=0
data/input/screenshots/downtown/01x01.gif,873df007edd02e5967f3917cbe8f342f,https://www.dropbox.com/s/4209gvxkypinlqs/01x01.gif.zip?dl=0
data/input/screenshots/downtown/01x02.gif,ec8b579d6cb498a2a85bc2af8b51f390,https://www.dropbox.com/s/9x5qtp86h3uemzm/01x02.gif.zip?dl=0
data/input/screenshots/downtown/01x03.gif,c126afdf55a94993e6c9a909eb685f8c,https://www.dropbox.com/s/4ev4pepyvrl6bs4/01x03.gif.zip?dl=0
@ -23,7 +23,7 @@ data/input/screenshots/downtown/01x09.gif,8eb32ff700be3a4ded979bb464a47a44,https
data/input/screenshots/downtown/01x10.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/kkcm26k3s64e7lp/01x10.gif.zip?dl=0
data/input/screenshots/downtown/01x11.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/7jm4dpfajpuvmqu/01x11.gif.zip?dl=0
data/input/screenshots/downtown/01x12.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/rc2qlprm2ysife9/01x12.gif.zip?dl=0
data/input/screenshots/downtown/02x01_i1.gif,9b9ad3a8a8a780e81dd497c4f40eff73,https://www.dropbox.com/s/twoq3hdkgr7bye0/02x01_i1.gif.zip?dl=0
data/input/screenshots/downtown/02x01_i3.gif,9b9ad3a8a8a780e81dd497c4f40eff73,https://www.dropbox.com/s/sjj94w9v2zvugnp/02x01_i3.gif.zip?dl=0
data/input/screenshots/downtown/02x02_i705.gif,a231f270628c93c393019478e005bb89,https://www.dropbox.com/s/ynljyixshwknwk9/02x02_i705.gif.zip?dl=0
data/input/screenshots/downtown/02x03_i887.gif,c07c5be06ed6b6d3e6ff4882a61deb97,https://www.dropbox.com/s/ndokzc5xk1255kn/02x03_i887.gif.zip?dl=0
data/input/screenshots/downtown/02x04.gif,72b80ea037bd141a060bdbadcccfa744,https://www.dropbox.com/s/qyke1wv7cyqxxg8/02x04.gif.zip?dl=0
@ -35,11 +35,11 @@ data/input/screenshots/downtown/02x09.gif,8eb32ff700be3a4ded979bb464a47a44,https
data/input/screenshots/downtown/02x10.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/gj6su4otw2fc75c/02x10.gif.zip?dl=0
data/input/screenshots/downtown/02x11.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/r96oo3xhw3snbe3/02x11.gif.zip?dl=0
data/input/screenshots/downtown/02x12.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/p4zuw67e5yx8qgg/02x12.gif.zip?dl=0
data/input/screenshots/downtown/03x01_i89.gif,525a5d4c623ea04081427d73979dcdf4,https://www.dropbox.com/s/csl5b6lp9aunrze/03x01_i89.gif.zip?dl=0
data/input/screenshots/downtown/03x02_i116.gif,41170070b20be084f0b3a0e5eac2a7e1,https://www.dropbox.com/s/6uh9b6l0g8300b6/03x02_i116.gif.zip?dl=0
data/input/screenshots/downtown/03x01_i88.gif,525a5d4c623ea04081427d73979dcdf4,https://www.dropbox.com/s/iy2t911eouze068/03x01_i88.gif.zip?dl=0
data/input/screenshots/downtown/03x02_i115.gif,41170070b20be084f0b3a0e5eac2a7e1,https://www.dropbox.com/s/cc57v5mha8jlqtr/03x02_i115.gif.zip?dl=0
data/input/screenshots/downtown/03x03_i267.gif,11a4e4faa5a27de2a1113a3e71b99b94,https://www.dropbox.com/s/u0kzn3kjczqs4xi/03x03_i267.gif.zip?dl=0
data/input/screenshots/downtown/03x04_i191.gif,8617738984c16076b19525a9beb7347e,https://www.dropbox.com/s/7zjdxa1lz491cv9/03x04_i191.gif.zip?dl=0
data/input/screenshots/downtown/03x05_i191.gif,87c886964c276cfd9dd5c9b78b1b143c,https://www.dropbox.com/s/fyy9cxocjjnzhfz/03x05_i191.gif.zip?dl=0
data/input/screenshots/downtown/03x04_i190.gif,8617738984c16076b19525a9beb7347e,https://www.dropbox.com/s/m2k3zqj54tnoboc/03x04_i190.gif.zip?dl=0
data/input/screenshots/downtown/03x05_i190.gif,87c886964c276cfd9dd5c9b78b1b143c,https://www.dropbox.com/s/nsh8432d5dgeph7/03x05_i190.gif.zip?dl=0
data/input/screenshots/downtown/03x06.gif,d9576b20145296e9bdfc43ffb6e36fc5,https://www.dropbox.com/s/wrmh1gycz8k46d4/03x06.gif.zip?dl=0
data/input/screenshots/downtown/03x07.gif,6743b45ba07e5bf5e62ca85bda46510b,https://www.dropbox.com/s/sjt0pwx2vsqrbtt/03x07.gif.zip?dl=0
data/input/screenshots/downtown/03x08.gif,d457f56ed16b95590e1eb532cd7fe7d7,https://www.dropbox.com/s/p381ho35iej8t8y/03x08.gif.zip?dl=0
@ -47,13 +47,13 @@ data/input/screenshots/downtown/03x09.gif,8eb32ff700be3a4ded979bb464a47a44,https
data/input/screenshots/downtown/03x10.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/3zvlkop0pnpbyjb/03x10.gif.zip?dl=0
data/input/screenshots/downtown/03x11.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/cisusz098ga83x4/03x11.gif.zip?dl=0
data/input/screenshots/downtown/03x12.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/5tqgnc2vi9tyey6/03x12.gif.zip?dl=0
data/input/screenshots/downtown/04x01_i5.gif,15b5408b7bd23a0b2ac12c004eec72e6,https://www.dropbox.com/s/f7ez9b2fyst26y3/04x01_i5.gif.zip?dl=0
data/input/screenshots/downtown/04x02_i50.gif,40017af3a9272b8089f43dd09302fd69,https://www.dropbox.com/s/v5r7vt2wbkwmp11/04x02_i50.gif.zip?dl=0
data/input/screenshots/downtown/04x03_i51.gif,6a9e2fbe7bf676f215e8effe88292073,https://www.dropbox.com/s/36sea9cr622qsfe/04x03_i51.gif.zip?dl=0
data/input/screenshots/downtown/04x04_i52.gif,7ba3bf69fbbcdb5647debf4dca367311,https://www.dropbox.com/s/fr03i17y7e23hpb/04x04_i52.gif.zip?dl=0
data/input/screenshots/downtown/04x01_i10.gif,15b5408b7bd23a0b2ac12c004eec72e6,https://www.dropbox.com/s/8hz2dm3md2jh8zc/04x01_i10.gif.zip?dl=0
data/input/screenshots/downtown/04x02_i49.gif,40017af3a9272b8089f43dd09302fd69,https://www.dropbox.com/s/tw611c3sls9c51g/04x02_i49.gif.zip?dl=0
data/input/screenshots/downtown/04x03_i50.gif,6a9e2fbe7bf676f215e8effe88292073,https://www.dropbox.com/s/k7e1sxgj3yoriy6/04x03_i50.gif.zip?dl=0
data/input/screenshots/downtown/04x04_i51.gif,7ba3bf69fbbcdb5647debf4dca367311,https://www.dropbox.com/s/cew9n0amt0kr491/04x04_i51.gif.zip?dl=0
data/input/screenshots/downtown/04x05_i332.gif,4ef5977629c165ab2bb994c62e83b60c,https://www.dropbox.com/s/t6drnbgj89wiau6/04x05_i332.gif.zip?dl=0
data/input/screenshots/downtown/04x06_i328.gif,9958412709be5d9085b2eb1f5c9b5521,https://www.dropbox.com/s/bm90pvx04uszq43/04x06_i328.gif.zip?dl=0
data/input/screenshots/downtown/04x07_i86.gif,f56845c30d758321b7a7f81100054a64,https://www.dropbox.com/s/93mk44kkb8wed96/04x07_i86.gif.zip?dl=0
data/input/screenshots/downtown/04x07_i85.gif,f56845c30d758321b7a7f81100054a64,https://www.dropbox.com/s/4645pbe94vy6y2n/04x07_i85.gif.zip?dl=0
data/input/screenshots/downtown/04x08.gif,0d09c6ffbb85794dc07e4059fa860100,https://www.dropbox.com/s/2npjjd7bk0dm5nn/04x08.gif.zip?dl=0
data/input/screenshots/downtown/04x09.gif,8c32d1deaab46a7f4421b7d05a17fb00,https://www.dropbox.com/s/26kivmz8qjjtny0/04x09.gif.zip?dl=0
data/input/screenshots/downtown/04x10.gif,7ad078b16bda9dafdd693011257c8c48,https://www.dropbox.com/s/7v79t3sa15okjvm/04x10.gif.zip?dl=0
@ -61,11 +61,11 @@ data/input/screenshots/downtown/04x11.gif,d37f7cfeb829fe475b2c42e401725457,https
data/input/screenshots/downtown/04x12.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/37sxgwjrdddfcfz/04x12.gif.zip?dl=0
data/input/screenshots/downtown/05x01_i357.gif,0b4a5aa5bdfc181fb96a071c0317faa1,https://www.dropbox.com/s/14j0o5qxmrgxnsx/05x01_i357.gif.zip?dl=0
data/input/screenshots/downtown/05x02_i1544.gif,9371bfe13ba66b8ad65753f6bad0cba9,https://www.dropbox.com/s/75dg0x9w3akzcwb/05x02_i1544.gif.zip?dl=0
data/input/screenshots/downtown/05x03_i2002.gif,b760a66fe6fdcfb9d8d3b5f0e87d5133,https://www.dropbox.com/s/j5ypg5q2c26uheb/05x03_i2002.gif.zip?dl=0
data/input/screenshots/downtown/05x04_i2052.gif,df5ff57e7958692b9fcf59ac1079db8d,https://www.dropbox.com/s/3kaxuo5c13phkbt/05x04_i2052.gif.zip?dl=0
data/input/screenshots/downtown/05x05_i54.gif,5dff9cf8a03709d88095bfa75a65ea8a,https://www.dropbox.com/s/u08b6hn9nyuzvtr/05x05_i54.gif.zip?dl=0
data/input/screenshots/downtown/05x06_i144.gif,071b82649c8372e8bcbdfde13552dec2,https://www.dropbox.com/s/litlr7am0pc9kcm/05x06_i144.gif.zip?dl=0
data/input/screenshots/downtown/05x07_i77.gif,2311c18875f962bc55323f790422a080,https://www.dropbox.com/s/sl6cyk1spefxy5t/05x07_i77.gif.zip?dl=0
data/input/screenshots/downtown/05x03_i2008.gif,b760a66fe6fdcfb9d8d3b5f0e87d5133,https://www.dropbox.com/s/8cs5hyn07fmsh8t/05x03_i2008.gif.zip?dl=0
data/input/screenshots/downtown/05x04_i2058.gif,df5ff57e7958692b9fcf59ac1079db8d,https://www.dropbox.com/s/trpf4ycs0nup4fu/05x04_i2058.gif.zip?dl=0
data/input/screenshots/downtown/05x05_i53.gif,5dff9cf8a03709d88095bfa75a65ea8a,https://www.dropbox.com/s/6pn7udikopq47pa/05x05_i53.gif.zip?dl=0
data/input/screenshots/downtown/05x06_i143.gif,071b82649c8372e8bcbdfde13552dec2,https://www.dropbox.com/s/91bg983h517meci/05x06_i143.gif.zip?dl=0
data/input/screenshots/downtown/05x07_i76.gif,26d8586b0a86e9a232831035cd5dbdb9,https://www.dropbox.com/s/xubktehz1tpymrg/05x07_i76.gif.zip?dl=0
data/input/screenshots/downtown/05x08_i1333.gif,5bedba5ff7f47e8c5ac0a3495e59706c,https://www.dropbox.com/s/o1q3dlbr3bduju8/05x08_i1333.gif.zip?dl=0
data/input/screenshots/downtown/05x09_i449.gif,56a5fcd591d16698c09a78b0b2e49001,https://www.dropbox.com/s/uspx3un9qk0bfml/05x09_i449.gif.zip?dl=0
data/input/screenshots/downtown/05x10_i1290.gif,bdd2f2fe491282df150943fe6a1c3431,https://www.dropbox.com/s/ymxj08395fce40p/05x10_i1290.gif.zip?dl=0
@ -73,69 +73,69 @@ data/input/screenshots/downtown/05x11.gif,2de2af21aac73d7ba71ddeb50cc48598,https
data/input/screenshots/downtown/05x12.gif,101ae586b9b556c6d3c7b58a39dc68d6,https://www.dropbox.com/s/a564bangsqk5cdp/05x12.gif.zip?dl=0
data/input/screenshots/downtown/06x01_i592.gif,a0b129695aae03d3068f21f70bf1b36a,https://www.dropbox.com/s/77scal7rd7yn3e6/06x01_i592.gif.zip?dl=0
data/input/screenshots/downtown/06x02_i1208.gif,60c848e5d1a2c2c067dac6c4535707ac,https://www.dropbox.com/s/9d7hn13pbpp6vrj/06x02_i1208.gif.zip?dl=0
data/input/screenshots/downtown/06x03_i174.gif,e5580742da03747d4106c2df11d9ad6f,https://www.dropbox.com/s/uzeo3yl3lomm79b/06x03_i174.gif.zip?dl=0
data/input/screenshots/downtown/06x04_i173.gif,e273d024c03ca6671935f9967101913c,https://www.dropbox.com/s/sm0s24dvit8971d/06x04_i173.gif.zip?dl=0
data/input/screenshots/downtown/06x05_i157.gif,6bc421036c5e69eed6bb33f79d5716ee,https://www.dropbox.com/s/77auct2x30bi610/06x05_i157.gif.zip?dl=0
data/input/screenshots/downtown/06x06_i31.gif,7ad69b73e2ce28c2bb998769da917bfa,https://www.dropbox.com/s/sdasw4kiu7x0bd8/06x06_i31.gif.zip?dl=0
data/input/screenshots/downtown/06x07_i84.gif,f9ccb60efa813e1c0f187ea5413cd7f6,https://www.dropbox.com/s/7xkau37jxr64giu/06x07_i84.gif.zip?dl=0
data/input/screenshots/downtown/06x08_i17.gif,ddcfabcaf334a80f8ddab1cf93548fae,https://www.dropbox.com/s/epbxom6kz3cl8j0/06x08_i17.gif.zip?dl=0
data/input/screenshots/downtown/06x09_i32.gif,22988339cdca9208a7ddb0f2bb856eb7,https://www.dropbox.com/s/tmamcz5eferzhff/06x09_i32.gif.zip?dl=0
data/input/screenshots/downtown/06x10_i83.gif,712926e76f601dd360dd85b164e7d9ac,https://www.dropbox.com/s/yzcv9zfvab3s927/06x10_i83.gif.zip?dl=0
data/input/screenshots/downtown/06x03_i173.gif,e5580742da03747d4106c2df11d9ad6f,https://www.dropbox.com/s/4oe9qgt843kjn5c/06x03_i173.gif.zip?dl=0
data/input/screenshots/downtown/06x04_i172.gif,e273d024c03ca6671935f9967101913c,https://www.dropbox.com/s/12g8qw138nac1ai/06x04_i172.gif.zip?dl=0
data/input/screenshots/downtown/06x05_i156.gif,6bc421036c5e69eed6bb33f79d5716ee,https://www.dropbox.com/s/3hmfwna9rdaakjq/06x05_i156.gif.zip?dl=0
data/input/screenshots/downtown/06x06_i1660.gif,5c1d05f2757ffb57112fbbaefd81365e,https://www.dropbox.com/s/jj274lw79cml1ug/06x06_i1660.gif.zip?dl=0
data/input/screenshots/downtown/06x07_i83.gif,e735555375fdf491020f79efbcc2724d,https://www.dropbox.com/s/axulkj801d21cys/06x07_i83.gif.zip?dl=0
data/input/screenshots/downtown/06x08_i16.gif,9b0159d66bce99f5c30dfe475edf97a0,https://www.dropbox.com/s/vjb480gf7go3vvj/06x08_i16.gif.zip?dl=0
data/input/screenshots/downtown/06x09_i31.gif,a14188b372edd2fb0906e0743042314d,https://www.dropbox.com/s/bgxq2wlrmmkns1n/06x09_i31.gif.zip?dl=0
data/input/screenshots/downtown/06x10_i82.gif,37fe70e21f7ae546451da1fc03c02c59,https://www.dropbox.com/s/jqrko5ls76b6m65/06x10_i82.gif.zip?dl=0
data/input/screenshots/downtown/06x11_i293.gif,9a58f2d827c605a22cf6c26a1158754a,https://www.dropbox.com/s/7x9j93rej5hh0la/06x11_i293.gif.zip?dl=0
data/input/screenshots/downtown/06x12_i2048.gif,31e1ff2257ee6a5798867eb55d829ed1,https://www.dropbox.com/s/gg2s7d04wlot257/06x12_i2048.gif.zip?dl=0
data/input/screenshots/downtown/06x12_i2054.gif,31e1ff2257ee6a5798867eb55d829ed1,https://www.dropbox.com/s/x3y4lpvfmmcfp41/06x12_i2054.gif.zip?dl=0
data/input/screenshots/downtown/07x01_i0.gif,d3bcb890f697c13ef6d886fbe43865cd,https://www.dropbox.com/s/n6unj0fw6vhx0d4/07x01_i0.gif.zip?dl=0
data/input/screenshots/downtown/07x02_i26.gif,f21d58b67a7a22bb865cc9212d8e4aab,https://www.dropbox.com/s/diob404mzcs23j6/07x02_i26.gif.zip?dl=0
data/input/screenshots/downtown/07x03_i71.gif,5a6e9211c13cf604b6d54d43dd36e7fe,https://www.dropbox.com/s/367hn33i75jr5wj/07x03_i71.gif.zip?dl=0
data/input/screenshots/downtown/07x04_i18.gif,51afdb1a8bb5743987c06a3b9beb5dda,https://www.dropbox.com/s/l21lf1m5sxlehml/07x04_i18.gif.zip?dl=0
data/input/screenshots/downtown/07x05_i20.gif,49535e34eff8528354c24325236cd76b,https://www.dropbox.com/s/qhzizj2iuun3qsk/07x05_i20.gif.zip?dl=0
data/input/screenshots/downtown/07x06_i20.gif,442913d5288ce11ba504c945b60f831d,https://www.dropbox.com/s/krp1bnmcg6oi9gi/07x06_i20.gif.zip?dl=0
data/input/screenshots/downtown/07x02_i25.gif,f21d58b67a7a22bb865cc9212d8e4aab,https://www.dropbox.com/s/oex9giarectc5n2/07x02_i25.gif.zip?dl=0
data/input/screenshots/downtown/07x03_i70.gif,5a6e9211c13cf604b6d54d43dd36e7fe,https://www.dropbox.com/s/ze84uo5l4i68ks6/07x03_i70.gif.zip?dl=0
data/input/screenshots/downtown/07x04_i17.gif,51afdb1a8bb5743987c06a3b9beb5dda,https://www.dropbox.com/s/7sg3eost9w8uyfu/07x04_i17.gif.zip?dl=0
data/input/screenshots/downtown/07x05_i19.gif,49535e34eff8528354c24325236cd76b,https://www.dropbox.com/s/m0nzhutd9v7hd9g/07x05_i19.gif.zip?dl=0
data/input/screenshots/downtown/07x06_i19.gif,b86e88b375e0f53773f61b1853f67f79,https://www.dropbox.com/s/mrz05ks3p0ehxgv/07x06_i19.gif.zip?dl=0
data/input/screenshots/downtown/07x07_i1364.gif,e0ee7338cd783d612600b9acca755955,https://www.dropbox.com/s/mwgsqqraglujbw8/07x07_i1364.gif.zip?dl=0
data/input/screenshots/downtown/07x08_i16.gif,fa7b97a154cb2524c7873a5363148eed,https://www.dropbox.com/s/16ufu3r7z1joxrf/07x08_i16.gif.zip?dl=0
data/input/screenshots/downtown/07x09_i32.gif,e261e79006a4c201b8ef1a1852dcfd03,https://www.dropbox.com/s/54hszzpzbhf4bri/07x09_i32.gif.zip?dl=0
data/input/screenshots/downtown/07x10_i33.gif,abf6ee4d4a40612fef1ce0f5abe082e3,https://www.dropbox.com/s/fvvtd6mu80ut54i/07x10_i33.gif.zip?dl=0
data/input/screenshots/downtown/07x11_i34.gif,33e5e1fba39998068ed3093e1fde95b1,https://www.dropbox.com/s/m1nd0ld9flb4ebt/07x11_i34.gif.zip?dl=0
data/input/screenshots/downtown/07x12_i785.gif,a36d01dd6379aeefa93fd2fa4b7d9a33,https://www.dropbox.com/s/pu9t6uic7kdebmq/07x12_i785.gif.zip?dl=0
data/input/screenshots/downtown/08x01_i6.gif,81550571986dd6906f563c36f9b5d3c9,https://www.dropbox.com/s/b6h4bu7x0jlyc6x/08x01_i6.gif.zip?dl=0
data/input/screenshots/downtown/08x02_i11.gif,aafcdf0785e5b1999ef85b84932bb1eb,https://www.dropbox.com/s/b3egm72djje3r6l/08x02_i11.gif.zip?dl=0
data/input/screenshots/downtown/08x03_i219.gif,9d037f646acdd6882e0efa59f733a2a8,https://www.dropbox.com/s/mlgqko1nh7x4l03/08x03_i219.gif.zip?dl=0
data/input/screenshots/downtown/08x04_i210.gif,2427a1a581034b9424d3709b59dd500d,https://www.dropbox.com/s/h0rtlx50s611bkk/08x04_i210.gif.zip?dl=0
data/input/screenshots/downtown/08x05_i126.gif,e004f3c0e0e60e76193c337734aa2a3b,https://www.dropbox.com/s/5s4eru5kp15swyz/08x05_i126.gif.zip?dl=0
data/input/screenshots/downtown/08x06_i123.gif,90264b49c56aa45d71b649c2420da714,https://www.dropbox.com/s/cv12tsrlw37qy89/08x06_i123.gif.zip?dl=0
data/input/screenshots/downtown/08x07_i114.gif,d074a53fba42fb6ac1ab17f5534418e1,https://www.dropbox.com/s/86qyx7qfnri02gf/08x07_i114.gif.zip?dl=0
data/input/screenshots/downtown/08x08_i100.gif,0edbffc09087f6fb001f63c821ea8d4d,https://www.dropbox.com/s/pgs88xw8k6xv7v1/08x08_i100.gif.zip?dl=0
data/input/screenshots/downtown/08x09_i119.gif,dff83d001ae81e0a82e4cec7f1930a27,https://www.dropbox.com/s/5f292mbtd56igtg/08x09_i119.gif.zip?dl=0
data/input/screenshots/downtown/07x08_i15.gif,fa7b97a154cb2524c7873a5363148eed,https://www.dropbox.com/s/9nhz9mdj95buunl/07x08_i15.gif.zip?dl=0
data/input/screenshots/downtown/07x09_i31.gif,e261e79006a4c201b8ef1a1852dcfd03,https://www.dropbox.com/s/zm6qloxcdk0lltg/07x09_i31.gif.zip?dl=0
data/input/screenshots/downtown/07x10_i32.gif,8f55fec528b91ee071ebbe4db77b9a13,https://www.dropbox.com/s/cpefugyq4rayjzo/07x10_i32.gif.zip?dl=0
data/input/screenshots/downtown/07x11_i33.gif,3233818f45785c0ee5019abfef0b241c,https://www.dropbox.com/s/vclpflw4orpz4kq/07x11_i33.gif.zip?dl=0
data/input/screenshots/downtown/07x12_i785.gif,cd3b11113a160f0db28d21fb0a2ce600,https://www.dropbox.com/s/pu9t6uic7kdebmq/07x12_i785.gif.zip?dl=0
data/input/screenshots/downtown/08x01_i1.gif,81550571986dd6906f563c36f9b5d3c9,https://www.dropbox.com/s/dfevhj1itlc14kk/08x01_i1.gif.zip?dl=0
data/input/screenshots/downtown/08x02_i1549.gif,45d9fa7210d48fab178940764868db9f,https://www.dropbox.com/s/ko8e8s7vess5r56/08x02_i1549.gif.zip?dl=0
data/input/screenshots/downtown/08x03_i218.gif,2f8448fda96ef13e87c8030770c7f01f,https://www.dropbox.com/s/3wnih4esly6qedb/08x03_i218.gif.zip?dl=0
data/input/screenshots/downtown/08x04_i209.gif,136b1abd41fa0ffa10874735c84ffe7c,https://www.dropbox.com/s/weyjgpixirdulvb/08x04_i209.gif.zip?dl=0
data/input/screenshots/downtown/08x05_i125.gif,322da6a58704c185aa6b104df666dece,https://www.dropbox.com/s/6nw3d5zweusdwkc/08x05_i125.gif.zip?dl=0
data/input/screenshots/downtown/08x06_i122.gif,44cf52ac50f972341f626f0844cce395,https://www.dropbox.com/s/i1sr35a4jcnbf0f/08x06_i122.gif.zip?dl=0
data/input/screenshots/downtown/08x07_i113.gif,d074a53fba42fb6ac1ab17f5534418e1,https://www.dropbox.com/s/yd4lvd4wygt2zvw/08x07_i113.gif.zip?dl=0
data/input/screenshots/downtown/08x08_i99.gif,0edbffc09087f6fb001f63c821ea8d4d,https://www.dropbox.com/s/yll2vscq4zmscr6/08x08_i99.gif.zip?dl=0
data/input/screenshots/downtown/08x09_i118.gif,dff83d001ae81e0a82e4cec7f1930a27,https://www.dropbox.com/s/6e7sc5cqynowhez/08x09_i118.gif.zip?dl=0
data/input/screenshots/downtown/08x10_i1392.gif,fef71f4979a3f3c88bf3b5a093e6b5cc,https://www.dropbox.com/s/v2eaz6p4l95nkct/08x10_i1392.gif.zip?dl=0
data/input/screenshots/downtown/08x11_i1340.gif,945fb8c3a9ae2be8bb26eef8f3b16117,https://www.dropbox.com/s/2f9did4emaakeeq/08x11_i1340.gif.zip?dl=0
data/input/screenshots/downtown/08x12_i724.gif,4a5ae80e7c92c459808267596bc01bcd,https://www.dropbox.com/s/zicsx5p143uixko/08x12_i724.gif.zip?dl=0
data/input/screenshots/downtown/09x01.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/zafs6t0vcagsxf0/09x01.gif.zip?dl=0
data/input/screenshots/downtown/09x02_i4.gif,de38b851dfdbd0aacefa0bdf043a66f8,https://www.dropbox.com/s/oy2osugoqfxk8kn/09x02_i4.gif.zip?dl=0
data/input/screenshots/downtown/09x03_i2.gif,06eae3f1b5ee5249cdccd092fb3ba462,https://www.dropbox.com/s/zn32hsk2rfvacqt/09x03_i2.gif.zip?dl=0
data/input/screenshots/downtown/09x03_i225.gif,06eae3f1b5ee5249cdccd092fb3ba462,https://www.dropbox.com/s/alittvy6dy4530w/09x03_i225.gif.zip?dl=0
data/input/screenshots/downtown/09x04_i493.gif,de3c13d144302bfcbf22e5d8c0ed6e0d,https://www.dropbox.com/s/kw4kmb5e168os6w/09x04_i493.gif.zip?dl=0
data/input/screenshots/downtown/09x05_i131.gif,9d73ebfbfc7f90d519e1e44cf4c1feb5,https://www.dropbox.com/s/56zqlvkpr1hjyoc/09x05_i131.gif.zip?dl=0
data/input/screenshots/downtown/09x05_i130.gif,9d73ebfbfc7f90d519e1e44cf4c1feb5,https://www.dropbox.com/s/sl44lein3mhtn18/09x05_i130.gif.zip?dl=0
data/input/screenshots/downtown/09x06_i244.gif,f68b72e0255f7c3f4bc2425d9a52fea6,https://www.dropbox.com/s/w0vfem42zgcfphy/09x06_i244.gif.zip?dl=0
data/input/screenshots/downtown/09x07_i242.gif,65bdfa0bb82daf49090f093a337ca8b2,https://www.dropbox.com/s/wcqput7vzwdy6wg/09x07_i242.gif.zip?dl=0
data/input/screenshots/downtown/09x08_i104.gif,8be6c139a53711fc1c504a9c3c132cda,https://www.dropbox.com/s/0vjytzqjsckt19c/09x08_i104.gif.zip?dl=0
data/input/screenshots/downtown/09x08_i103.gif,8be6c139a53711fc1c504a9c3c132cda,https://www.dropbox.com/s/q9zs5toc8kzgn20/09x08_i103.gif.zip?dl=0
data/input/screenshots/downtown/09x09_i240.gif,9a79e3e918a8c9d48a6daf0dc37bddd4,https://www.dropbox.com/s/llm0ozcuk8crhbc/09x09_i240.gif.zip?dl=0
data/input/screenshots/downtown/09x10_i237.gif,d0ffaa9a7777a467b66f55ab1fb10baa,https://www.dropbox.com/s/4idtn0my6wuu4qy/09x10_i237.gif.zip?dl=0
data/input/screenshots/downtown/09x11_i305.gif,5cbe12582fff25f68c572672cd3d15b4,https://www.dropbox.com/s/zgz58prtj54mwz4/09x11_i305.gif.zip?dl=0
data/input/screenshots/downtown/09x12_i437.gif,918dcb2835557d619d569bb0b4d1de17,https://www.dropbox.com/s/5zqx2eb5ojep64b/09x12_i437.gif.zip?dl=0
data/input/screenshots/downtown/10x01.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/b5qc21e42eyffp4/10x01.gif.zip?dl=0
data/input/screenshots/downtown/10x02.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/shiwea0smpu59vi/10x02.gif.zip?dl=0
data/input/screenshots/downtown/10x03_i778.gif,5e0eb8e38b80aad6e19ca4c33bc7fdfa,https://www.dropbox.com/s/tcl3uww40aybr18/10x03_i778.gif.zip?dl=0
data/input/screenshots/downtown/10x04_i7.gif,92679f51023f21ae01f0322b56c7fdf8,https://www.dropbox.com/s/4kha8aw7gnpe9zx/10x04_i7.gif.zip?dl=0
data/input/screenshots/downtown/10x05_i141.gif,038b0b258d1b536b8b2b186709bcc045,https://www.dropbox.com/s/0oulisyn6k1xsjh/10x05_i141.gif.zip?dl=0
data/input/screenshots/downtown/10x03_i7.gif,5e0eb8e38b80aad6e19ca4c33bc7fdfa,https://www.dropbox.com/s/csxgxwdwmhev85l/10x03_i7.gif.zip?dl=0
data/input/screenshots/downtown/10x04_i2.gif,92679f51023f21ae01f0322b56c7fdf8,https://www.dropbox.com/s/d1shh6o219ay81w/10x04_i2.gif.zip?dl=0
data/input/screenshots/downtown/10x05_i140.gif,038b0b258d1b536b8b2b186709bcc045,https://www.dropbox.com/s/9isdrpqjyey7zun/10x05_i140.gif.zip?dl=0
data/input/screenshots/downtown/10x06_i490.gif,a382d33b17501944f4827a1c4e4e22e4,https://www.dropbox.com/s/wxn8w5xo57w2xvp/10x06_i490.gif.zip?dl=0
data/input/screenshots/downtown/10x07_i490.gif,46bf0400040be951905161b4716c3904,https://www.dropbox.com/s/ikfue9rx3adzcv8/10x07_i490.gif.zip?dl=0
data/input/screenshots/downtown/10x08_i110.gif,5db80fd90f9d82419d2cce2f67b0edd5,https://www.dropbox.com/s/w68en9wunqc60ld/10x08_i110.gif.zip?dl=0
data/input/screenshots/downtown/10x08_i109.gif,5db80fd90f9d82419d2cce2f67b0edd5,https://www.dropbox.com/s/uyyvlz0lvlkuhqj/10x08_i109.gif.zip?dl=0
data/input/screenshots/downtown/10x09_i483.gif,8c106aa87487cfd6933a0bfb45f46755,https://www.dropbox.com/s/koth2ixr3ecygx3/10x09_i483.gif.zip?dl=0
data/input/screenshots/downtown/10x10_i480.gif,614f257e2098908589b5dbab808b4a36,https://www.dropbox.com/s/blpyy8d5hsv5wz2/10x10_i480.gif.zip?dl=0
data/input/screenshots/downtown/10x11_i310.gif,3f5ab6d315b1c58c2a3481e8512219c3,https://www.dropbox.com/s/8n8hsjl6rih2jx5/10x11_i310.gif.zip?dl=0
data/input/screenshots/downtown/10x12_i925.gif,611498fe40b157c0488a907be030769b,https://www.dropbox.com/s/vf6oighedzml7o5/10x12_i925.gif.zip?dl=0
data/input/screenshots/downtown/combine.sh,33c4527bdc6d5bd11b0ee7c4957a9a69,https://www.dropbox.com/s/214dtjy7scdcp2l/combine.sh.zip?dl=0
data/input/screenshots/lakeslice/01x01_i325.gif,444d06f5d04a7754eb68b635b40aeaec,https://www.dropbox.com/s/lgl0vsv1m8pobre/01x01_i325.gif.zip?dl=0
data/input/screenshots/lakeslice/01x02_i163.gif,4acbf1fa75fb004ec08d5465d509a2b6,https://www.dropbox.com/s/d42wcpqjqm4zsl9/01x02_i163.gif.zip?dl=0
data/input/screenshots/lakeslice/01x03_i1.gif,69818b4ab25c0865a5b3d3c1d5c99fab,https://www.dropbox.com/s/t3repj5rgv6um13/01x03_i1.gif.zip?dl=0
data/input/screenshots/lakeslice/01x04_i442.gif,8ae60fecf8fd12609257de8af58387c5,https://www.dropbox.com/s/4uma06j1pz5w2vl/01x04_i442.gif.zip?dl=0
data/input/screenshots/downtown/combine.sh,db60d5e5a221311e073343e52012802a,https://www.dropbox.com/s/214dtjy7scdcp2l/combine.sh.zip?dl=0
data/input/screenshots/lakeslice/01x01_i1357.gif,b4c6251a3ca7ccccf93622ad607cff0f,https://www.dropbox.com/s/xgyyio5l4zfc6x4/01x01_i1357.gif.zip?dl=0
data/input/screenshots/lakeslice/01x02_i163.gif,f945efe4a093801b972e59b9ddc7b02d,https://www.dropbox.com/s/ir8payetpzt168b/01x02_i163.gif.zip?dl=0
data/input/screenshots/lakeslice/01x03_i1.gif,9ca902d6ef2c81b0fe1f083b81926bc2,https://www.dropbox.com/s/dwool88jsttp6c1/01x03_i1.gif.zip?dl=0
data/input/screenshots/lakeslice/01x04_i1423.gif,c3f1622224cb61d6a08501288f55e8fc,https://www.dropbox.com/s/tpyqefqmtky5ig1/01x04_i1423.gif.zip?dl=0
data/input/screenshots/lakeslice/01x05_i36.gif,5bbfde156a268307267fb201c78654e6,https://www.dropbox.com/s/pgj7jpiwq43cjwp/01x05_i36.gif.zip?dl=0
data/input/screenshots/lakeslice/01x06_i37.gif,b261b9df0216506c2a1a433222304581,https://www.dropbox.com/s/2e7zdi1ym4iwfh8/01x06_i37.gif.zip?dl=0
data/input/screenshots/lakeslice/01x07_i27.gif,8f6cc6acf4bc5b21972f15e9f8edec29,https://www.dropbox.com/s/j58l09hua562ejj/01x07_i27.gif.zip?dl=0
@ -143,22 +143,22 @@ data/input/screenshots/lakeslice/01x08_i420.gif,0d9a342fa6525a04e9ce568f1917b935
data/input/screenshots/lakeslice/01x09_i349.gif,d08478461685b70d91c79af6651cc05d,https://www.dropbox.com/s/vtb5anvldevna0z/01x09_i349.gif.zip?dl=0
data/input/screenshots/lakeslice/01x10_i76.gif,57b8bdd989589dc8a3afc72912c9b8e9,https://www.dropbox.com/s/lr4lkh7khzqmkxv/01x10_i76.gif.zip?dl=0
data/input/screenshots/lakeslice/01x11_i147.gif,619a4eeeb4e9332e9c0e8c537f58e1c7,https://www.dropbox.com/s/u665i8v9yu8qudg/01x11_i147.gif.zip?dl=0
data/input/screenshots/lakeslice/01x12_i471.gif,38c51b3a596a5bafef66faa0a2a2245e,https://www.dropbox.com/s/lr62wtow71bmi4m/01x12_i471.gif.zip?dl=0
data/input/screenshots/lakeslice/01x13_i2.gif,7e821daa867b570870d57d84834b22ea,https://www.dropbox.com/s/4wtzmhsn198j5kv/01x13_i2.gif.zip?dl=0
data/input/screenshots/lakeslice/01x12_i3.gif,38c51b3a596a5bafef66faa0a2a2245e,https://www.dropbox.com/s/si2ohev472hs918/01x12_i3.gif.zip?dl=0
data/input/screenshots/lakeslice/01x13_i38.gif,7e821daa867b570870d57d84834b22ea,https://www.dropbox.com/s/4saxlmuv5m064aj/01x13_i38.gif.zip?dl=0
data/input/screenshots/lakeslice/01x14_i348.gif,74820411209897b6e706254bba7c355a,https://www.dropbox.com/s/ahunkt3xt51jkfp/01x14_i348.gif.zip?dl=0
data/input/screenshots/lakeslice/01x15_i347.gif,b4c61f22237bcf2e47c61c1641be8dd3,https://www.dropbox.com/s/7qqied0nqcan0hb/01x15_i347.gif.zip?dl=0
data/input/screenshots/lakeslice/01x16_i215.gif,65dc56c10d5c3fd6c7cce17e4155ea53,https://www.dropbox.com/s/i9pklvvln4hp9qy/01x16_i215.gif.zip?dl=0
data/input/screenshots/lakeslice/01x17_i214.gif,634be0334458c1cf12bb4a37a027e5ad,https://www.dropbox.com/s/wjh6vzhvz4uryri/01x17_i214.gif.zip?dl=0
data/input/screenshots/lakeslice/01x18_i0.gif,066f532397b5a3d0b8e9a8370ef051a7,https://www.dropbox.com/s/5j6h7qfy5cr0wfh/01x18_i0.gif.zip?dl=0
data/input/screenshots/lakeslice/01x18_i2.gif,066f532397b5a3d0b8e9a8370ef051a7,https://www.dropbox.com/s/vovux9ubpbbspim/01x18_i2.gif.zip?dl=0
data/input/screenshots/lakeslice/01x19_i5.gif,5f61552eb2e24340ec61dd2f9e1065ab,https://www.dropbox.com/s/rgvsylaezc79chi/01x19_i5.gif.zip?dl=0
data/input/screenshots/lakeslice/01x20_i21.gif,269b055ef40f7e6844d19325e7fcc559,https://www.dropbox.com/s/nlqy0c3wmw0hsr3/01x20_i21.gif.zip?dl=0
data/input/screenshots/lakeslice/01x21_i447.gif,bef26d24b06a5bc720cacfa59b1265b0,https://www.dropbox.com/s/qvf7on1d7kaudhx/01x21_i447.gif.zip?dl=0
data/input/screenshots/lakeslice/01x22_i450.gif,a17d3b918623fad35294cdcc81b0a722,https://www.dropbox.com/s/t9jnyt0vuo5c5wc/01x22_i450.gif.zip?dl=0
data/input/screenshots/lakeslice/01x23_i251.gif,e0da2a03d91bc32e41651024a55810c4,https://www.dropbox.com/s/sku1dp7cvp019d2/01x23_i251.gif.zip?dl=0
data/input/screenshots/lakeslice/01x23_i1184.gif,b2fd052c80952ab888b47715bc74ab81,https://www.dropbox.com/s/yffikpxlx9mncm8/01x23_i1184.gif.zip?dl=0
data/input/screenshots/lakeslice/02x01_i328.gif,6d636e7fe2bc4b997433bcdd49b921dd,https://www.dropbox.com/s/m6pcxp0oihu79qd/02x01_i328.gif.zip?dl=0
data/input/screenshots/lakeslice/02x02_i166.gif,be031b75d61584d32498b9798bb2178e,https://www.dropbox.com/s/1lfc413k4ojtq26/02x02_i166.gif.zip?dl=0
data/input/screenshots/lakeslice/02x03_i300.gif,3947c530f673710068f009ae3b006cff,https://www.dropbox.com/s/ymoda4p8236o4hr/02x03_i300.gif.zip?dl=0
data/input/screenshots/lakeslice/02x04_i1235.gif,1fb015af3e5d9225d135068ef4471d6d,https://www.dropbox.com/s/ekniq19794vrges/02x04_i1235.gif.zip?dl=0
data/input/screenshots/lakeslice/02x04_i1237.gif,1fb015af3e5d9225d135068ef4471d6d,https://www.dropbox.com/s/q7mntfqldaxjjgy/02x04_i1237.gif.zip?dl=0
data/input/screenshots/lakeslice/02x05_i909.gif,3ce48a08638a140c84600efc6b33912f,https://www.dropbox.com/s/q4ds4of9o3ule1z/02x05_i909.gif.zip?dl=0
data/input/screenshots/lakeslice/02x06_i704.gif,2406bfef3597d837173daae8a57c8e78,https://www.dropbox.com/s/qdp6zfu6t4dum7d/02x06_i704.gif.zip?dl=0
data/input/screenshots/lakeslice/02x07_i123.gif,9ec5dded434289bf42a844e05eed870f,https://www.dropbox.com/s/jolmmqajirptk4w/02x07_i123.gif.zip?dl=0
@ -182,7 +182,7 @@ data/input/screenshots/lakeslice/03x01.gif,da70eeb59d35438f548685c42ce1f2d0,http
data/input/screenshots/lakeslice/03x02_i590.gif,98b7fae5c5333b63ea1a4143dd72ecad,https://www.dropbox.com/s/jyz35d3a3v6qivo/03x02_i590.gif.zip?dl=0
data/input/screenshots/lakeslice/03x03.gif,91e10d87663f54d0d6123422a4eb83a6,https://www.dropbox.com/s/y3s3juhevw8gctm/03x03.gif.zip?dl=0
data/input/screenshots/lakeslice/03x04.gif,10941e6b1bda8b61555f830f58322b37,https://www.dropbox.com/s/e46x5875g3z50ta/03x04.gif.zip?dl=0
data/input/screenshots/lakeslice/03x05_i1242.gif,93205bde0984c43b60e2d7b5baf25c5b,https://www.dropbox.com/s/5pu63m5vcckqned/03x05_i1242.gif.zip?dl=0
data/input/screenshots/lakeslice/03x05_i1244.gif,93205bde0984c43b60e2d7b5baf25c5b,https://www.dropbox.com/s/nvfk4x0hqn2a1tc/03x05_i1244.gif.zip?dl=0
data/input/screenshots/lakeslice/03x06_i366.gif,2cb51203c77581e10aee058426648c70,https://www.dropbox.com/s/ltkbl0r0s0imsqg/03x06_i366.gif.zip?dl=0
data/input/screenshots/lakeslice/03x07_i120.gif,461b1de0d077889a8a51a63804997069,https://www.dropbox.com/s/1ukjemqvj5x86k5/03x07_i120.gif.zip?dl=0
data/input/screenshots/lakeslice/03x08_i67.gif,e5daaa1231ceb83a721941f4dfdc2dcd,https://www.dropbox.com/s/rbepa1xao9xi24h/03x08_i67.gif.zip?dl=0
@ -216,14 +216,14 @@ data/input/screenshots/lakeslice/04x12_i458.gif,d983e268ce3d3512c2d30d243b9be8e9
data/input/screenshots/lakeslice/04x13_i128.gif,e9ac7578e29d34a78589f2852747d3cb,https://www.dropbox.com/s/w85x3h4rzk6uqr2/04x13_i128.gif.zip?dl=0
data/input/screenshots/lakeslice/04x14_i173.gif,687e19540b8da97e3cd98a7e14dee891,https://www.dropbox.com/s/mtcu8twfi4ra5um/04x14_i173.gif.zip?dl=0
data/input/screenshots/lakeslice/04x15_i172.gif,a5147305ad6acf69ea04459d8006f6de,https://www.dropbox.com/s/vgcuaklgp3pdog0/04x15_i172.gif.zip?dl=0
data/input/screenshots/lakeslice/04x16_i1292.gif,ff3d00a01f7f9e4561f9ba900f5d603e,https://www.dropbox.com/s/zeppz1m59sk5aha/04x16_i1292.gif.zip?dl=0
data/input/screenshots/lakeslice/04x16_i1295.gif,ff3d00a01f7f9e4561f9ba900f5d603e,https://www.dropbox.com/s/0mi5wtys1xckbke/04x16_i1295.gif.zip?dl=0
data/input/screenshots/lakeslice/04x17.gif,cd9e12b8507f86e6572ae19fb6b4dea9,https://www.dropbox.com/s/tnxoukvvijytzel/04x17.gif.zip?dl=0
data/input/screenshots/lakeslice/04x18.gif,710c2ac084e1cfcc7b76d649607f320c,https://www.dropbox.com/s/yh63ydv2tzxo9is/04x18.gif.zip?dl=0
data/input/screenshots/lakeslice/04x19_i14.gif,b46228ced53ba0d79ee2c471e6551bbb,https://www.dropbox.com/s/0bexsapt2k0ugkw/04x19_i14.gif.zip?dl=0
data/input/screenshots/lakeslice/04x20_i1049.gif,034a0e7429a3af7005c5e8fa4d4c140f,https://www.dropbox.com/s/5trx45kj8mcsh8s/04x20_i1049.gif.zip?dl=0
data/input/screenshots/lakeslice/04x21.gif,d6fbe7e7c0968f42e8ba1edfddaba6c2,https://www.dropbox.com/s/neynw9s07o4q1m2/04x21.gif.zip?dl=0
data/input/screenshots/lakeslice/04x22.gif,9d306b892f20b92a0812a67a9289f334,https://www.dropbox.com/s/6j3q52n5tzrs7nk/04x22.gif.zip?dl=0
data/input/screenshots/lakeslice/04x23_i3.gif,a992f2dc8dd80fbe323bed2f803ef829,https://www.dropbox.com/s/v03keik2ktei5i2/04x23_i3.gif.zip?dl=0
data/input/screenshots/lakeslice/04x23_i0.gif,a992f2dc8dd80fbe323bed2f803ef829,https://www.dropbox.com/s/36hepxjecc8w79t/04x23_i0.gif.zip?dl=0
data/input/screenshots/lakeslice/05x01.gif,5b6403c119128b6108a7bc7d21996e92,https://www.dropbox.com/s/pj58sr18r0ut2fn/05x01.gif.zip?dl=0
data/input/screenshots/lakeslice/05x02_i162.gif,38c2cc99a04d840d90a4ef88d41d7dd8,https://www.dropbox.com/s/yv6ci5muhrk9dvf/05x02_i162.gif.zip?dl=0
data/input/screenshots/lakeslice/05x03_i868.gif,b088d70b28523ce9ae420a7f6653381c,https://www.dropbox.com/s/91wl1ncej0i8pnm/05x03_i868.gif.zip?dl=0
@ -247,36 +247,36 @@ data/input/screenshots/lakeslice/05x20.gif,8eb32ff700be3a4ded979bb464a47a44,http
data/input/screenshots/lakeslice/05x21.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/qaj31so7m67niy7/05x21.gif.zip?dl=0
data/input/screenshots/lakeslice/05x22.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/8dpa1hz7a9na31p/05x22.gif.zip?dl=0
data/input/screenshots/lakeslice/05x23.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/1cu70j4e5xv1vif/05x23.gif.zip?dl=0
data/input/screenshots/lakeslice/combine.sh,cd90caa2a9a59076f2eb63ffa74f3a82,https://www.dropbox.com/s/7b186yyyz1nkxhv/combine.sh.zip?dl=0
data/input/screenshots/lakeslice/combine.sh,efae2cc47ef5f968ec56d4c2e3e32f68,https://www.dropbox.com/s/7b186yyyz1nkxhv/combine.sh.zip?dl=0
data/input/screenshots/montlake/01x01_i17.gif,e518fb6834ddd05222d8be14eb05d935,https://www.dropbox.com/s/5flz8teh9c78hd0/01x01_i17.gif.zip?dl=0
data/input/screenshots/montlake/01x02_i1.gif,eadc32a670592561ab71b5b5011dedf3,https://www.dropbox.com/s/odamkgi66lhpibr/01x02_i1.gif.zip?dl=0
data/input/screenshots/montlake/01x03_i0.gif,a3d1cc3ed0389b254a17ad8e702f30e6,https://www.dropbox.com/s/smsjc42qpro5szn/01x03_i0.gif.zip?dl=0
data/input/screenshots/montlake/01x02_i2.gif,eadc32a670592561ab71b5b5011dedf3,https://www.dropbox.com/s/96xf91bgcjgyf59/01x02_i2.gif.zip?dl=0
data/input/screenshots/montlake/01x03_i1.gif,a3d1cc3ed0389b254a17ad8e702f30e6,https://www.dropbox.com/s/jcf2g93tjw3z17o/01x03_i1.gif.zip?dl=0
data/input/screenshots/montlake/01x04_i31.gif,b4b37aa9a853349a94a43fcb035201ef,https://www.dropbox.com/s/me6v87ky41i7hni/01x04_i31.gif.zip?dl=0
data/input/screenshots/montlake/01x05_i41.gif,464a20b7a029722f273ff491a7fef956,https://www.dropbox.com/s/au91ktk0xsrgcvf/01x05_i41.gif.zip?dl=0
data/input/screenshots/montlake/01x06_i25.gif,f58058dc29f62def6805f57e69f52510,https://www.dropbox.com/s/2hcl30t5gwxtyy7/01x06_i25.gif.zip?dl=0
data/input/screenshots/montlake/02x01_i13.gif,68adc783f7b9ee78769b814649d8da7b,https://www.dropbox.com/s/ft32tu18eudkk9d/02x01_i13.gif.zip?dl=0
data/input/screenshots/montlake/02x02_i4.gif,cee9685b164d0e76efa381dd050df604,https://www.dropbox.com/s/pl0t65otzq7eosj/02x02_i4.gif.zip?dl=0
data/input/screenshots/montlake/02x03_i57.gif,e63a3528cf6dc43bf54d9c682b13ad2a,https://www.dropbox.com/s/w3rib7gqhu4rbhq/02x03_i57.gif.zip?dl=0
data/input/screenshots/montlake/02x04_i24.gif,0a926d9409fd2d5769c42b0bbbb0d205,https://www.dropbox.com/s/n60ims2yeit0hmz/02x04_i24.gif.zip?dl=0
data/input/screenshots/montlake/02x05_i132.gif,11967c3500d317fdd1f404bb798a67d9,https://www.dropbox.com/s/4js14twh5xfz3sk/02x05_i132.gif.zip?dl=0
data/input/screenshots/montlake/02x06_i91.gif,b9dbbdd343acd753893820357bd67779,https://www.dropbox.com/s/5zra92ko89j65te/02x06_i91.gif.zip?dl=0
data/input/screenshots/montlake/03x01_i259.gif,942ea07dfe37d5473569e0347b241c90,https://www.dropbox.com/s/gjlr6j1yk8m3r1v/03x01_i259.gif.zip?dl=0
data/input/screenshots/montlake/03x02_i3.gif,cb71e0c36a8b78e38730f008cc2beac6,https://www.dropbox.com/s/illeyhs80gcnp7z/03x02_i3.gif.zip?dl=0
data/input/screenshots/montlake/02x02_i4.gif,bd0e493168d795409cfca410cc6a6127,https://www.dropbox.com/s/pl0t65otzq7eosj/02x02_i4.gif.zip?dl=0
data/input/screenshots/montlake/02x03_i57.gif,62c2d51d4587b7a49497a9ef8a8cb5f2,https://www.dropbox.com/s/g2ga1vjjj92n7uw/02x03_i57.gif.zip?dl=0
data/input/screenshots/montlake/02x04_i24.gif,863e132d5fcc7d65254bd4787847c92a,https://www.dropbox.com/s/fjhh99fdd37ibh9/02x04_i24.gif.zip?dl=0
data/input/screenshots/montlake/02x05_i132.gif,e6012d0504bf1d70fefd1b7a11f9e3b0,https://www.dropbox.com/s/8js07j3qv5zzyu7/02x05_i132.gif.zip?dl=0
data/input/screenshots/montlake/02x06_i316.gif,b92945068cfbf6b4b0cd1300f38adc63,https://www.dropbox.com/s/igtmy3imf88bl96/02x06_i316.gif.zip?dl=0
data/input/screenshots/montlake/03x01_i287.gif,bd8f434426ab4e418c6590cb4bc6042f,https://www.dropbox.com/s/n3fx5wjvc8ya8of/03x01_i287.gif.zip?dl=0
data/input/screenshots/montlake/03x02_i3.gif,13a4405cdfeb3b1085f3c2e6b8b14fc7,https://www.dropbox.com/s/urob44rlvxqzj75/03x02_i3.gif.zip?dl=0
data/input/screenshots/montlake/03x03_i61.gif,61c4e2cbce94f65f6b14f2848895de77,https://www.dropbox.com/s/w5b37nrsy31222v/03x03_i61.gif.zip?dl=0
data/input/screenshots/montlake/03x04_i69.gif,bfab1349087072a50a8f090e8ab14663,https://www.dropbox.com/s/rhe4tzdgi81wgxh/03x04_i69.gif.zip?dl=0
data/input/screenshots/montlake/03x04_i69.gif,afe6cd63bac5f81a22d71bae60ad76b0,https://www.dropbox.com/s/91nwbixt2z64lwd/03x04_i69.gif.zip?dl=0
data/input/screenshots/montlake/03x05_i263.gif,0de63817562633d333ef98ba57960813,https://www.dropbox.com/s/u7hgygw12jy0hyk/03x05_i263.gif.zip?dl=0
data/input/screenshots/montlake/03x06_i199.gif,9a6c1ef5b986d5794d5e3c899dd0b717,https://www.dropbox.com/s/dcw891hntvfenvd/03x06_i199.gif.zip?dl=0
data/input/screenshots/montlake/combine.sh,781c94dd9e5e0ae15f5538e288ce1fbc,https://www.dropbox.com/s/odbawy1k6nfll1r/combine.sh.zip?dl=0
data/input/screenshots/montlake/combine.sh,cfb1c2faef4e2117fe00ff03a71ad1b3,https://www.dropbox.com/s/odbawy1k6nfll1r/combine.sh.zip?dl=0
data/input/screenshots/udistrict/01x01_i155.gif,dcb4021792e5c45ca02ea5ca88a17d34,https://www.dropbox.com/s/llpkvd4x9yho626/01x01_i155.gif.zip?dl=0
data/input/screenshots/udistrict/01x02_i183.gif,98e0f47bbfacaa1f3837a233fe8b45b7,https://www.dropbox.com/s/gk7peo2rnewsxg7/01x02_i183.gif.zip?dl=0
data/input/screenshots/udistrict/01x03_i148.gif,9cd4b69a6c3f12fe11cb5d8c588c3bd3,https://www.dropbox.com/s/uu1m0lfixc0eokt/01x03_i148.gif.zip?dl=0
data/input/screenshots/udistrict/01x04_i175.gif,0c46a83831b7ea1e84a262a5d4bdb9ba,https://www.dropbox.com/s/ft4wnjwqkfyh9s0/01x04_i175.gif.zip?dl=0
data/input/screenshots/udistrict/01x05_i275.gif,6e280cecb344595f966726c5f0166cb1,https://www.dropbox.com/s/rjy3scc827hxjri/01x05_i275.gif.zip?dl=0
data/input/screenshots/udistrict/01x06_i0.gif,abcc23a8e157b2eb72e21a3fb60ec821,https://www.dropbox.com/s/148vzjmebe5eiuf/01x06_i0.gif.zip?dl=0
data/input/screenshots/udistrict/01x06_i2.gif,abcc23a8e157b2eb72e21a3fb60ec821,https://www.dropbox.com/s/6t0ozjspupeiyz3/01x06_i2.gif.zip?dl=0
data/input/screenshots/udistrict/01x07_i187.gif,0fb5757cdf6c659c4983c010e2080f61,https://www.dropbox.com/s/h8a3fj5apoc0dw4/01x07_i187.gif.zip?dl=0
data/input/screenshots/udistrict/01x08_i66.gif,2b5f9e20dd9f29d2768c46a12498ba89,https://www.dropbox.com/s/snjsx8q36l1z50r/01x08_i66.gif.zip?dl=0
data/input/screenshots/udistrict/01x09.gif,68a69600430ada459cd1a55b564e7a21,https://www.dropbox.com/s/olindya5idcylnm/01x09.gif.zip?dl=0
data/input/screenshots/udistrict/02x01_i1.gif,0ef3539f95bb934fe6c0d7350154be2e,https://www.dropbox.com/s/7plkv0gzbrnjjku/02x01_i1.gif.zip?dl=0
data/input/screenshots/udistrict/02x01_i0.gif,0ef3539f95bb934fe6c0d7350154be2e,https://www.dropbox.com/s/k66kylbnl9yb423/02x01_i0.gif.zip?dl=0
data/input/screenshots/udistrict/02x02_i195.gif,78eea1394245978f34ee73dc819ba7b8,https://www.dropbox.com/s/8gc6ili6is28074/02x02_i195.gif.zip?dl=0
data/input/screenshots/udistrict/02x03_i149.gif,be910049675e50fa4316a1f7ceddbd7b,https://www.dropbox.com/s/q8au7malxrkh4ul/02x03_i149.gif.zip?dl=0
data/input/screenshots/udistrict/02x04_i178.gif,c79d46632d1be0c1e9930c8d461734ad,https://www.dropbox.com/s/ba5iw5v6pyxyy5v/02x04_i178.gif.zip?dl=0
@ -308,9 +308,9 @@ data/input/screenshots/udistrict/05x02_i144.gif,7baf3b64c8bb263b80919a72a530a052
data/input/screenshots/udistrict/05x03_i562.gif,20aa9727384c694b5d7ff0668b8122b1,https://www.dropbox.com/s/d0mnt672c5u72m1/05x03_i562.gif.zip?dl=0
data/input/screenshots/udistrict/05x04_i6.gif,4cb87b0f149bbb2ca87034919935125b,https://www.dropbox.com/s/dpt6p8xpyuwivz5/05x04_i6.gif.zip?dl=0
data/input/screenshots/udistrict/05x05_i7.gif,9af9ef8590ff2911cbb714087ac40363,https://www.dropbox.com/s/j082dwq4qajjgmn/05x05_i7.gif.zip?dl=0
data/input/screenshots/udistrict/05x06_i751.gif,61b64681bbb3d6b1cef92e55698d650f,https://www.dropbox.com/s/7unn2he3qpqb058/05x06_i751.gif.zip?dl=0
data/input/screenshots/udistrict/05x07_i5.gif,65689385bd992a1b314c529569bf7ed6,https://www.dropbox.com/s/28rgvkiwhuu63za/05x07_i5.gif.zip?dl=0
data/input/screenshots/udistrict/05x08_i610.gif,46dc63cd92fd74a6c22389dd9c2c1187,https://www.dropbox.com/s/k4jp3xfvm32x91r/05x08_i610.gif.zip?dl=0
data/input/screenshots/udistrict/05x06_i697.gif,642e64c8c31ff2ec6c5f69fed00fce96,https://www.dropbox.com/s/mexhrk72fuyy9y6/05x06_i697.gif.zip?dl=0
data/input/screenshots/udistrict/05x07_i802.gif,ab216267a6391f1e4719b0c07c2a8a2f,https://www.dropbox.com/s/se2jygkayr8h5i2/05x07_i802.gif.zip?dl=0
data/input/screenshots/udistrict/05x08_i772.gif,f9b3dcc25712c295a872a961d70953ab,https://www.dropbox.com/s/dpojy5cyohyz0ww/05x08_i772.gif.zip?dl=0
data/input/screenshots/udistrict/05x09.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/m1z9a6ytjdt5l8p/05x09.gif.zip?dl=0
data/input/screenshots/udistrict/06x01_i218.gif,cdb154f95a9170af4c7c6524dba67f28,https://www.dropbox.com/s/1x9bdw02fsetr38/06x01_i218.gif.zip?dl=0
data/input/screenshots/udistrict/06x02_i146.gif,5198e0a326c56621463a9625e1df501e,https://www.dropbox.com/s/q9cm80nhzd1p56p/06x02_i146.gif.zip?dl=0
@ -321,7 +321,7 @@ data/input/screenshots/udistrict/06x06.gif,ae86609d7ca233af1ea7d090ed246635,http
data/input/screenshots/udistrict/06x07.gif,649fa67582cc8d983d7d63a519c7c825,https://www.dropbox.com/s/ylh4y2c2n929ybb/06x07.gif.zip?dl=0
data/input/screenshots/udistrict/06x08.gif,4cddcd69d367a8dd6b91ec8e6c0b9495,https://www.dropbox.com/s/bk8o5lzjyjfq59w/06x08.gif.zip?dl=0
data/input/screenshots/udistrict/06x09.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/wxi34p9kuz8ocwd/06x09.gif.zip?dl=0
data/input/screenshots/udistrict/07x01_i2.gif,9dc6f5b947d824ff9f95d514fc666e68,https://www.dropbox.com/s/edm2bh5pdob26i4/07x01_i2.gif.zip?dl=0
data/input/screenshots/udistrict/07x01_i1.gif,9dc6f5b947d824ff9f95d514fc666e68,https://www.dropbox.com/s/dgidytlygm8a07h/07x01_i1.gif.zip?dl=0
data/input/screenshots/udistrict/07x02_i153.gif,1dc0246fae86911bfbfb2cf0a90d263e,https://www.dropbox.com/s/dc4ae1s7eltaeq6/07x02_i153.gif.zip?dl=0
data/input/screenshots/udistrict/07x03_i93.gif,482a03aa0aa22351282f3c8e43ace594,https://www.dropbox.com/s/vgt4ckdxa5glbov/07x03_i93.gif.zip?dl=0
data/input/screenshots/udistrict/07x04_i250.gif,7036b1875829de48e29031a2434ef2bd,https://www.dropbox.com/s/06fdval7jpoyjtm/07x04_i250.gif.zip?dl=0
@ -330,7 +330,7 @@ data/input/screenshots/udistrict/07x06.gif,5ec11ca3817cecc6d51bf93b7f0da87e,http
data/input/screenshots/udistrict/07x07.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/9aigocj6mcx9tof/07x07.gif.zip?dl=0
data/input/screenshots/udistrict/07x08.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/6spsyydnprx3xl8/07x08.gif.zip?dl=0
data/input/screenshots/udistrict/07x09.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/kgshfypmb6d2tqw/07x09.gif.zip?dl=0
data/input/screenshots/udistrict/combine.sh,31f569581962334de4d49674e88dc8d9,https://www.dropbox.com/s/ghvm39u5xntcd3i/combine.sh.zip?dl=0
data/input/screenshots/udistrict/combine.sh,e5e73b9e9f67396422fb236a5d1a68c3,https://www.dropbox.com/s/ghvm39u5xntcd3i/combine.sh.zip?dl=0
data/input/seattle/N47W122.hgt,0db4e23e51f7680538b0bbbc72208e07,https://www.dropbox.com/s/mmb4mgutwotijdw/N47W122.hgt.zip?dl=0
data/input/seattle/blockface.bin,add872bab9040ae911366328a230f8b5,https://www.dropbox.com/s/rxd2care60tbe75/blockface.bin.zip?dl=0
data/input/seattle/blockface.kml,350bd9e59bf2af4e885a7c0741e6ee6b,https://www.dropbox.com/s/ukknmpjdvilncq9/blockface.kml.zip?dl=0
@ -364,25 +364,25 @@ data/input/seattle/sidewalks.bin,034dd47ab77902dbc81c0107f13d8965,https://www.dr
data/input/seattle/sidewalks.kml,94d385ba03ef1b57a5ba10965913ec6c,https://www.dropbox.com/s/vn8amar9xi6vbvh/sidewalks.kml.zip?dl=0
data/input/seattle/trips_2014.csv,d4a8e733045b28c0385fb81359d6df03,https://www.dropbox.com/s/5ppravwmk6bf20d/trips_2014.csv.zip?dl=0
data/system/cities/seattle.bin,24be9fb4dd63e74fa22cfde30f694fad,https://www.dropbox.com/s/mfa297h0or0r1b8/seattle.bin.zip?dl=0
data/system/maps/ballard.bin,733fc38c47ab69f01c25e6252f0e1057,https://www.dropbox.com/s/pe0inwe6gu94e7g/ballard.bin.zip?dl=0
data/system/maps/downtown.bin,b95e3a5719c46e768ad163d78027604f,https://www.dropbox.com/s/rzc1bev4pu4jb5y/downtown.bin.zip?dl=0
data/system/maps/downtown_atx.bin,bee1e3753954e9527511108e243db1a3,https://www.dropbox.com/s/ua90aw0zzmhbzlh/downtown_atx.bin.zip?dl=0
data/system/maps/huge_austin.bin,2fbc3ea0b42dde71c7113ac2c5a1a592,https://www.dropbox.com/s/3obeqlqjni6vd2l/huge_austin.bin.zip?dl=0
data/system/maps/huge_seattle.bin,95b122b8342f4a61a0cdd01c65e7829b,https://www.dropbox.com/s/zi3awb56pektyud/huge_seattle.bin.zip?dl=0
data/system/maps/lakeslice.bin,1ec4d9dc68ef2a93b5490a8a435304ab,https://www.dropbox.com/s/67zn3hbui3pk7h9/lakeslice.bin.zip?dl=0
data/system/maps/montlake.bin,04284c258caf9db4e4d252cd8f644a5f,https://www.dropbox.com/s/ajdm6n1b1q6394e/montlake.bin.zip?dl=0
data/system/maps/south_seattle.bin,461bb962563b4f744245a9257b26cd1a,https://www.dropbox.com/s/5olyc2dc6obtt6h/south_seattle.bin.zip?dl=0
data/system/maps/udistrict.bin,4530aea9a796e0966cebd2134bb986d5,https://www.dropbox.com/s/px6rp4o9t3ess43/udistrict.bin.zip?dl=0
data/system/maps/west_seattle.bin,afaad270ccc8ea8945c9d42783da713a,https://www.dropbox.com/s/9z01cuwqs89618c/west_seattle.bin.zip?dl=0
data/system/prebaked_results/lakeslice/weekday.bin,2c385986a11b84f043a61b4608e9124e,https://www.dropbox.com/s/m5hpyfg1cykaibb/weekday.bin.zip?dl=0
data/system/prebaked_results/montlake/car vs bike contention.bin,66fe0dfe06b682da455c78a01c7a5972,https://www.dropbox.com/s/jefg0ikjy9dsrdd/car%20vs%20bike%20contention.bin.zip?dl=0
data/system/prebaked_results/montlake/weekday.bin,04d807b45cea828572b5fce7b88af3ef,https://www.dropbox.com/s/es3mihwv7s1r9j1/weekday.bin.zip?dl=0
data/system/scenarios/ballard/weekday.bin,8ad251352cf0dc39bfebfe1dba4cafdd,https://www.dropbox.com/s/i6vssvy2ljugqxs/weekday.bin.zip?dl=0
data/system/scenarios/downtown/weekday.bin,4e11ff588a3218762a10ca7ac9c1153b,https://www.dropbox.com/s/0t9htg764tt49vs/weekday.bin.zip?dl=0
data/system/scenarios/huge_seattle/weekday.bin,50a8011b3f7455035c808a2788ebf6fa,https://www.dropbox.com/s/ydy0svpgshfrlfn/weekday.bin.zip?dl=0
data/system/scenarios/lakeslice/weekday.bin,d25dc83a71ad4e69dffd50962f8535b9,https://www.dropbox.com/s/0xcgwbza4nyxeg4/weekday.bin.zip?dl=0
data/system/scenarios/montlake/everyone_weekday.bin,6806c7788fb71471e142287c44991eb3,https://www.dropbox.com/s/44s818fimpu53v1/everyone_weekday.bin.zip?dl=0
data/system/scenarios/montlake/weekday.bin,1d9d8bf9287d523d3446759e2f0eaabf,https://www.dropbox.com/s/t53inn67d4r4gdp/weekday.bin.zip?dl=0
data/system/scenarios/south_seattle/weekday.bin,faaeac301df2e0b7c4c4407ea9ca9e81,https://www.dropbox.com/s/g0gv3ply8i3cu70/weekday.bin.zip?dl=0
data/system/scenarios/udistrict/weekday.bin,8f4e55116d01190c70f574df9f4f4575,https://www.dropbox.com/s/nkdoeajkzasndgz/weekday.bin.zip?dl=0
data/system/scenarios/west_seattle/weekday.bin,a1e4a8b7551475761386a0aebe151094,https://www.dropbox.com/s/gigpusjz0b6grdy/weekday.bin.zip?dl=0
data/system/maps/ballard.bin,b5c162c60564290d8a6f767cb3d5e546,https://www.dropbox.com/s/xc9f80kblw5clmt/ballard.bin.zip?dl=0
data/system/maps/downtown.bin,25ef830e6dd1d901c9f643064a116115,https://www.dropbox.com/s/fdu6xgmg4tvz1z6/downtown.bin.zip?dl=0
data/system/maps/downtown_atx.bin,87f500eaaa8edc62bd736310543e1529,https://www.dropbox.com/s/lfra9r1cgxnfb4t/downtown_atx.bin.zip?dl=0
data/system/maps/huge_austin.bin,c112ada2699d6a6a7eaebb2775a9de85,https://www.dropbox.com/s/2dv7vwn176cnhtk/huge_austin.bin.zip?dl=0
data/system/maps/huge_seattle.bin,7fb67f3de73d3cf8e466c121a3a75fd8,https://www.dropbox.com/s/6had4woeom611t0/huge_seattle.bin.zip?dl=0
data/system/maps/lakeslice.bin,48ed521d9987adc4e37656ef8e1efe16,https://www.dropbox.com/s/muozc01vnl6w8x6/lakeslice.bin.zip?dl=0
data/system/maps/montlake.bin,f4becd378c2311f0f8af7e0b54a60a0f,https://www.dropbox.com/s/eidkt8ektrtf84k/montlake.bin.zip?dl=0
data/system/maps/south_seattle.bin,1cae6e54a7bd3a96c2f047465fd86c20,https://www.dropbox.com/s/5q56oh4id0ja64y/south_seattle.bin.zip?dl=0
data/system/maps/udistrict.bin,8690bac3de1cb3d3bcc3dad2f2452a9a,https://www.dropbox.com/s/n0mhxtuiq9t4kwi/udistrict.bin.zip?dl=0
data/system/maps/west_seattle.bin,fce67b02d3a6987e368d343c493b9db9,https://www.dropbox.com/s/0l4x6ppkd0vzow4/west_seattle.bin.zip?dl=0
data/system/prebaked_results/lakeslice/weekday.bin,de0e6e287e58adbd17f0d56e15bc0f19,https://www.dropbox.com/s/5tegsh3wyqoe4hj/weekday.bin.zip?dl=0
data/system/prebaked_results/montlake/car vs bike contention.bin,6dc3c9d1a39f335a87fd2ba525ea322a,https://www.dropbox.com/s/jefg0ikjy9dsrdd/car%20vs%20bike%20contention.bin.zip?dl=0
data/system/prebaked_results/montlake/weekday.bin,2da479c8cbe57a2679af46662511de9b,https://www.dropbox.com/s/fw91svqc68k72bc/weekday.bin.zip?dl=0
data/system/scenarios/ballard/weekday.bin,03f195b1016c58b3a91d2e32501addda,https://www.dropbox.com/s/po1pijtt8jdg780/weekday.bin.zip?dl=0
data/system/scenarios/downtown/weekday.bin,6b4cfc7e41441567aaf7f8ad2dc2ae96,https://www.dropbox.com/s/3else8nyuyy3d79/weekday.bin.zip?dl=0
data/system/scenarios/huge_seattle/weekday.bin,764a2041748e30e0c38aa4f1c75a0eb4,https://www.dropbox.com/s/e7ru1refjvqcedy/weekday.bin.zip?dl=0
data/system/scenarios/lakeslice/weekday.bin,037280fcf4e349eba985147698a0e548,https://www.dropbox.com/s/14mlmb9tmah5jn5/weekday.bin.zip?dl=0
data/system/scenarios/montlake/everyone_weekday.bin,00857198000a1f4bdc86c857bbcc75bb,https://www.dropbox.com/s/pqi3d7huf2fdjhd/everyone_weekday.bin.zip?dl=0
data/system/scenarios/montlake/weekday.bin,0611c3f862f07d4b5ef7d059b848e210,https://www.dropbox.com/s/bspg8qn0tqvk5fp/weekday.bin.zip?dl=0
data/system/scenarios/south_seattle/weekday.bin,cc4b00b46ac22f600f3f2e8e02a9b935,https://www.dropbox.com/s/xiuu0tq087kynys/weekday.bin.zip?dl=0
data/system/scenarios/udistrict/weekday.bin,131a9c2daac3bacc7bb253bb52092200,https://www.dropbox.com/s/ggchmew53puc6te/weekday.bin.zip?dl=0
data/system/scenarios/west_seattle/weekday.bin,fea9feba76888be07eab0d8442fbc6b6,https://www.dropbox.com/s/k1tc4dxog1n9ooa/weekday.bin.zip?dl=0

View File

@ -62,6 +62,7 @@ pub struct ColorScheme {
pub sidewalk_lines: Color,
pub general_road_marking: Color,
pub road_center_line: Color,
pub light_rail_track: Color,
pub unzoomed_highway: Color,
pub unzoomed_arterial: Color,
pub unzoomed_residential: Color,
@ -159,6 +160,7 @@ impl ColorScheme {
sidewalk_lines: Color::grey(0.7),
general_road_marking: Color::WHITE,
road_center_line: Color::YELLOW,
light_rail_track: Color::hex("#844204"),
unzoomed_highway: Color::rgb(232, 146, 162),
unzoomed_arterial: Color::rgb(255, 199, 62),
unzoomed_residential: Color::WHITE,

View File

@ -45,6 +45,7 @@ impl abstutil::Cloneable for Value {}
impl ParkingMapper {
pub fn new(ctx: &mut EventCtx, app: &mut App) -> Box<dyn State> {
app.primary.current_selection = None;
ParkingMapper::make(ctx, app, Show::TODO, BTreeMap::new())
}
@ -69,6 +70,9 @@ impl ParkingMapper {
let mut done = HashSet::new();
let mut todo = HashSet::new();
for r in map.all_roads() {
if r.is_light_rail() {
continue;
}
if r.osm_tags.contains_key(osm::INFERRED_PARKING)
&& !data.contains_key(&r.orig_id.osm_way_id)
{
@ -268,7 +272,7 @@ impl State for ParkingMapper {
ctx.canvas_movement();
if ctx.redo_mouseover() {
let maybe_r = match app.calculate_current_selection(
let mut maybe_r = match app.calculate_current_selection(
ctx,
&DontDrawAgents {},
&ShowEverything::new(),
@ -280,6 +284,11 @@ impl State for ParkingMapper {
Some(ID::Lane(l)) => Some(map.get_l(l).parent),
_ => None,
};
if let Some(r) = maybe_r {
if map.get_r(r).is_light_rail() {
maybe_r = None;
}
}
if let Some(id) = maybe_r {
if self
.selected

View File

@ -155,7 +155,9 @@ impl State for RouteSelect {
fn pathfind(map: &Map, i1: IntersectionID, i2: IntersectionID) -> Option<Vec<RoadID>> {
let mut graph: UnGraphMap<IntersectionID, RoadID> = UnGraphMap::new();
for r in map.all_roads() {
graph.add_edge(r.src_i, r.dst_i, r.id);
if !r.is_light_rail() {
graph.add_edge(r.src_i, r.dst_i, r.id);
}
}
let (_, path) = petgraph::algo::astar(
&graph,
@ -331,6 +333,11 @@ impl State for PaintSelect {
} else {
app.primary.current_selection = None;
}
if let Some(ID::Road(r)) = app.primary.current_selection {
if app.primary.map.get_r(r).is_light_rail() {
app.primary.current_selection = None;
}
}
}
if self.mode == Mode::Pan {

View File

@ -469,6 +469,7 @@ pub fn can_edit_lane(mode: &GameplayMode, l: LaneID, app: &App) -> bool {
mode.can_edit_lanes()
&& !app.primary.map.get_l(l).is_sidewalk()
&& app.primary.map.get_l(l).lane_type != LaneType::SharedLeftTurn
&& app.primary.map.get_l(l).lane_type != LaneType::LightRail
}
pub fn close_intersection(

View File

@ -96,18 +96,21 @@ impl DrawLane {
let polygon = lane.lane_center_pts.make_polygons(lane.width);
let mut draw = GeomBatch::new();
draw.push(
match lane.lane_type {
LaneType::Driving => cs.driving_lane,
LaneType::Bus => cs.bus_lane,
LaneType::Parking => cs.parking_lane,
LaneType::Sidewalk => cs.sidewalk,
LaneType::Biking => cs.bike_lane,
LaneType::SharedLeftTurn => cs.driving_lane,
LaneType::Construction => cs.parking_lane,
},
polygon.clone(),
);
if lane.lane_type != LaneType::LightRail {
draw.push(
match lane.lane_type {
LaneType::Driving => cs.driving_lane,
LaneType::Bus => cs.bus_lane,
LaneType::Parking => cs.parking_lane,
LaneType::Sidewalk => cs.sidewalk,
LaneType::Biking => cs.bike_lane,
LaneType::SharedLeftTurn => cs.driving_lane,
LaneType::Construction => cs.parking_lane,
LaneType::LightRail => unreachable!(),
},
polygon.clone(),
);
}
if draw_lane_markings {
match lane.lane_type {
LaneType::Sidewalk => {
@ -148,6 +151,37 @@ impl DrawLane {
);
}
LaneType::Construction => {}
LaneType::LightRail => {
let track_width = lane.width / 4.0;
draw.push(
cs.light_rail_track,
lane.lane_center_pts
.shift_right((lane.width - track_width) / 2.5)
.get(timer)
.make_polygons(track_width),
);
draw.push(
cs.light_rail_track,
lane.lane_center_pts
.shift_left((lane.width - track_width) / 2.5)
.get(timer)
.make_polygons(track_width),
);
// Start away from the intersections
let tile_every = Distance::meters(3.0);
let mut dist_along = tile_every;
while dist_along < lane.lane_center_pts.length() - tile_every {
let (pt, angle) = lane.dist_along(dist_along);
// Reuse perp_line. Project away an arbitrary amount
let pt2 = pt.project_away(Distance::meters(1.0), angle);
draw.push(
cs.light_rail_track,
perp_line(Line::new(pt, pt2), lane.width).make_polygons(track_width),
);
dist_along += tile_every;
}
}
};
}

View File

@ -66,7 +66,11 @@ impl DrawMap {
let mut all_roads = GeomBatch::new();
for r in road_refs {
all_roads.push(
osm_rank_to_color(cs, r.get_rank()),
if r.is_light_rail() {
cs.light_rail_track
} else {
osm_rank_to_color(cs, r.get_rank())
},
r.get_thick_polygon(map).get(timer),
);
/*if false {

View File

@ -21,14 +21,15 @@ impl DrawRoad {
let center = r.get_current_center(map);
let width = Distance::meters(0.25);
// If the road is a one-way (only parking and sidewalk on the off-side), draw a solid line
// No center line at all if there's a shared left turn lane
if r.children_backwards
.iter()
.all(|(_, lt)| *lt == LaneType::Parking || *lt == LaneType::Sidewalk)
// No center line at all if there's a shared left turn lane or it's light rail
if !r.is_light_rail()
&& r.children_backwards
.iter()
.all(|(_, lt)| *lt == LaneType::Parking || *lt == LaneType::Sidewalk)
{
draw.push(cs.road_center_line, center.make_polygons(width));
} else if r.children_forwards.is_empty()
|| r.children_forwards[0].1 != LaneType::SharedLeftTurn
|| (r.children_forwards[0].1 != LaneType::SharedLeftTurn && !r.is_light_rail())
{
draw.extend(
cs.road_center_line,
@ -59,18 +60,7 @@ impl Renderable for DrawRoad {
if label.is_none() {
let mut batch = GeomBatch::new();
let r = app.primary.map.get_r(self.id);
if false {
// Style 1: banner
let mut txt = Text::new().with_bg();
txt.add(Line(r.get_name()));
batch.append(
txt.render_to_batch(g.prerender)
.scale(0.1)
.centered_on(r.center_pts.middle()),
);
} else {
// Style 2: Yellow center-line
if !r.is_light_rail() {
let name = r.get_name();
if r.center_pts.length() >= Distance::meters(30.0) && name != "???" {
// TODO If it's definitely straddling bus/bike lanes, change the color? Or

View File

@ -63,11 +63,14 @@ impl Angle {
// sure the text is never upside-down.
pub fn reorient(self) -> Angle {
let theta = self.normalized_degrees().rem_euclid(360.0);
if theta > 90.0 || theta > 270.0 {
self.opposite()
} else {
self
let mut result = self;
if theta > 90.0 {
result = result.opposite();
}
if theta > 270.0 {
result = result.opposite();
}
result
}
}

View File

@ -71,7 +71,8 @@ impl Ring {
self.pts
}
// The order of results isn't meaningful. Dedupes.
// Be careful with the order of results. Hits on an earlier line segment of other show up first,
// but if the ring hits a line segment at multiple points, who knows. Dedupes.
pub fn all_intersections(&self, other: &PolyLine) -> Vec<Pt2D> {
let mut hits = Vec::new();
let mut seen = HashSet::new();

View File

@ -33,6 +33,7 @@ pub enum LaneType {
Bus,
SharedLeftTurn,
Construction,
LightRail,
}
impl LaneType {
@ -45,6 +46,7 @@ impl LaneType {
LaneType::Sidewalk => false,
LaneType::SharedLeftTurn => false,
LaneType::Construction => false,
LaneType::LightRail => true,
}
}
@ -57,6 +59,7 @@ impl LaneType {
LaneType::Sidewalk => true,
LaneType::SharedLeftTurn => false,
LaneType::Construction => false,
LaneType::LightRail => true,
}
}
@ -69,6 +72,7 @@ impl LaneType {
LaneType::Sidewalk => "a sidewalk",
LaneType::SharedLeftTurn => "a shared left-turn lane",
LaneType::Construction => "a lane that's closed for construction",
LaneType::LightRail => "a light rail track",
}
}
@ -81,6 +85,7 @@ impl LaneType {
LaneType::Sidewalk => "sidewalk",
LaneType::SharedLeftTurn => "left-turn lane",
LaneType::Construction => "construction",
LaneType::LightRail => "light rail track",
}
}
}

View File

@ -14,6 +14,9 @@ pub fn get_lane_types(osm_tags: &BTreeMap<String, String>) -> (Vec<LaneType>, Ve
}
// Easy special cases first.
if osm_tags.get("railway") == Some(&"light_rail".to_string()) {
return (vec![LaneType::LightRail], Vec::new());
}
if osm_tags.get("junction") == Some(&"roundabout".to_string()) {
return (vec![LaneType::Driving, LaneType::Sidewalk], Vec::new());
}
@ -209,6 +212,7 @@ impl RoadSpec {
LaneType::Bus => 'u',
LaneType::SharedLeftTurn => 'l',
LaneType::Construction => 'c',
LaneType::LightRail => 'r',
}
}
@ -221,6 +225,7 @@ impl RoadSpec {
'u' => Some(LaneType::Bus),
'l' => Some(LaneType::SharedLeftTurn),
'c' => Some(LaneType::Construction),
'r' => Some(LaneType::LightRail),
_ => None,
}
}

View File

@ -14,7 +14,17 @@ pub fn remove_disconnected_roads(map: &mut RawMap, timer: &mut Timer) {
}
let mut partitions: Vec<Vec<OriginalRoad>> = Vec::new();
let mut unvisited_roads: BTreeSet<OriginalRoad> = map.roads.keys().cloned().collect();
let mut unvisited_roads: BTreeSet<OriginalRoad> = map
.roads
.iter()
.filter_map(|(id, r)| {
if r.osm_tags.get("railway") == Some(&"light_rail".to_string()) {
None
} else {
Some(*id)
}
})
.collect();
while !unvisited_roads.is_empty() {
let mut queue_roads: Vec<OriginalRoad> = vec![*unvisited_roads.iter().next().unwrap()];

View File

@ -118,6 +118,7 @@ fn make_vehicle_turns(
lane_types.insert(lt);
}
}
lane_types.remove(&LaneType::LightRail);
lane_types.remove(&LaneType::Parking);
lane_types.remove(&LaneType::SharedLeftTurn);
lane_types.remove(&LaneType::Construction);

View File

@ -449,4 +449,8 @@ impl Road {
}
grade
}
pub fn is_light_rail(&self) -> bool {
!self.children_forwards.is_empty() && self.children_forwards[0].1 == LaneType::LightRail
}
}