start representing OSM parking lots in the map model and rendering layer

This commit is contained in:
Dustin Carlino 2020-06-01 12:51:14 -07:00
parent 4a06806a3d
commit 30eafea94a
20 changed files with 547 additions and 190 deletions

View File

@ -125,6 +125,9 @@ pub fn clip_map(map: &mut RawMap, timer: &mut Timer) {
}
map.areas = result_areas;
// TODO Don't touch parking lots. It'll be visually obvious if a clip intersects one of these.
// The boundary should be manually adjusted.
if map.roads.is_empty() {
panic!("There are no roads inside the clipping polygon");
}

View File

@ -1,6 +1,8 @@
use abstutil::{FileWithProgress, Timer};
use geom::{GPSBounds, HashablePt2D, LonLat, PolyLine, Polygon, Pt2D, Ring};
use map_model::raw::{OriginalBuilding, RawArea, RawBuilding, RawMap, RawRoad, RestrictionType};
use map_model::raw::{
OriginalBuilding, RawArea, RawBuilding, RawMap, RawParkingLot, RawRoad, RestrictionType,
};
use map_model::{osm, AreaType};
use osm_xml;
use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet};
@ -212,6 +214,13 @@ pub fn extract_osm(
});
} else if tags.get("natural") == Some(&"coastline".to_string()) {
coastline_groups.push((way.id, pts));
} else if tags.get("amenity") == Some(&"parking".to_string()) {
// TODO Verify parking = surface or handle other cases?
map.parking_lots.push(RawParkingLot {
polygon: Polygon::new(&pts),
capacity: tags.get("capacity").and_then(|x| x.parse::<usize>().ok()),
osm_id: way.id,
});
} else {
// The way might be part of a relation later.
id_to_way.insert(way.id, pts);

View File

@ -1,16 +1,16 @@
data/input/austin/osm/Austin.osm,7c8d72cf97072af34cee665006b1e9e6,https://www.dropbox.com/s/4f3lu8ii5d2lf4c/Austin.osm.zip?dl=0
data/input/austin/osm/downtown_atx.osm,a30b0f460a481598e494f16a9d07a822,https://www.dropbox.com/s/8qodpqdn1pedzva/downtown_atx.osm.zip?dl=0
data/input/austin/osm/huge_austin.osm,fb166029fc8006bd20dc959fbbbde3b6,https://www.dropbox.com/s/4bbsfpsg48dctje/huge_austin.osm.zip?dl=0
data/input/raw_maps/ballard.bin,c57a2c38cc252206d164dc06d7fa6c4a,https://www.dropbox.com/s/wus0ufcnjyvcsuy/ballard.bin.zip?dl=0
data/input/raw_maps/downtown.bin,5d4a16403ff06f43bcf7074917bbb18d,https://www.dropbox.com/s/ntqzttf25037fty/downtown.bin.zip?dl=0
data/input/raw_maps/ballard.bin,9bc85f9302af37075799c90ba7831fd8,https://www.dropbox.com/s/wus0ufcnjyvcsuy/ballard.bin.zip?dl=0
data/input/raw_maps/downtown.bin,6390d770ec7ab1ebf4c9c286131da89a,https://www.dropbox.com/s/ntqzttf25037fty/downtown.bin.zip?dl=0
data/input/raw_maps/downtown_atx.bin,c2564782f1c84b288b03cd2cdfdb9f29,https://www.dropbox.com/s/0cs55y1jcmm2alk/downtown_atx.bin.zip?dl=0
data/input/raw_maps/huge_austin.bin,1f6acc02f700b30c2eb424c32bf29be9,https://www.dropbox.com/s/we0765ym7dlcsl1/huge_austin.bin.zip?dl=0
data/input/raw_maps/huge_seattle.bin,9567e966f258f2771eddf273b977906f,https://www.dropbox.com/s/jcssts861uaovva/huge_seattle.bin.zip?dl=0
data/input/raw_maps/lakeslice.bin,d52c4185b202c7b7110691acee463ad3,https://www.dropbox.com/s/4nmdtw0mgqe7tyg/lakeslice.bin.zip?dl=0
data/input/raw_maps/montlake.bin,1c8039f5e97d23c81ad956863d87d8d9,https://www.dropbox.com/s/qk8rhwr6vdm79vz/montlake.bin.zip?dl=0
data/input/raw_maps/mt_baker.bin,5a4b3ceb8d2d290f6a8087eebb2626fe,https://www.dropbox.com/s/nr18iu83lrcyg8e/mt_baker.bin.zip?dl=0
data/input/raw_maps/udistrict.bin,fa391c3ec89ada229df45c402ce3f918,https://www.dropbox.com/s/o1gtavxtw8n3bhy/udistrict.bin.zip?dl=0
data/input/raw_maps/west_seattle.bin,efe65b4f34bd6d9211c03d6a01334813,https://www.dropbox.com/s/112ym2cwg643c9n/west_seattle.bin.zip?dl=0
data/input/raw_maps/huge_seattle.bin,7c22e7cd0827cf97079368304ee55232,https://www.dropbox.com/s/jcssts861uaovva/huge_seattle.bin.zip?dl=0
data/input/raw_maps/lakeslice.bin,3265786e8564a61df66ee618a9fdd74f,https://www.dropbox.com/s/4nmdtw0mgqe7tyg/lakeslice.bin.zip?dl=0
data/input/raw_maps/montlake.bin,2af766aa232b6631e8e719604ecb9360,https://www.dropbox.com/s/qk8rhwr6vdm79vz/montlake.bin.zip?dl=0
data/input/raw_maps/mt_baker.bin,b29926d8ac599009cecf4925acd70b10,https://www.dropbox.com/s/nr18iu83lrcyg8e/mt_baker.bin.zip?dl=0
data/input/raw_maps/udistrict.bin,4e8923d7544b7f2c640d0c7dd7a077aa,https://www.dropbox.com/s/o1gtavxtw8n3bhy/udistrict.bin.zip?dl=0
data/input/raw_maps/west_seattle.bin,566a86b96c2830bd8d4ccaea52be87d3,https://www.dropbox.com/s/112ym2cwg643c9n/west_seattle.bin.zip?dl=0
data/input/screenshots/downtown/01x01.gif,728b7726e06d7960e661c05c26108bae,https://www.dropbox.com/s/4209gvxkypinlqs/01x01.gif.zip?dl=0
data/input/screenshots/downtown/01x02.gif,65f23e22339d8f6ea4b39151f3e44782,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,9 +23,9 @@ 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,be6b28a3b24f340a733e70561c0ed1c1,https://www.dropbox.com/s/zlhgz95fl17q4zy/02x01_i1.gif.zip?dl=0
data/input/screenshots/downtown/02x02_i705.gif,97a2c03057a71c52a21dccf157b2b72c,https://www.dropbox.com/s/mr87dnt16inxauq/02x02_i705.gif.zip?dl=0
data/input/screenshots/downtown/02x03_i887.gif,8eac4d4a46a62ca23bbc37c79cb5dd3b,https://www.dropbox.com/s/ndokzc5xk1255kn/02x03_i887.gif.zip?dl=0
data/input/screenshots/downtown/02x01_i1.gif,c22e784f18c523e423b4462ea2e58752,https://www.dropbox.com/s/zlhgz95fl17q4zy/02x01_i1.gif.zip?dl=0
data/input/screenshots/downtown/02x02_i705.gif,1c1e35f432ed6bd88db2cf5fdff67815,https://www.dropbox.com/s/mr87dnt16inxauq/02x02_i705.gif.zip?dl=0
data/input/screenshots/downtown/02x03_i887.gif,eaecb0b2ccb44381bddb577d3fa34fb3,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
data/input/screenshots/downtown/02x05.gif,3f9429db596aa2293127902f82f615fd,https://www.dropbox.com/s/ov9ethe2xdhnmar/02x05.gif.zip?dl=0
data/input/screenshots/downtown/02x06.gif,c990bab6308edc118475b35fff0ce263,https://www.dropbox.com/s/cfscgev68baq6di/02x06.gif.zip?dl=0
@ -36,9 +36,9 @@ data/input/screenshots/downtown/02x10.gif,8eb32ff700be3a4ded979bb464a47a44,https
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,2291b2a13ca6792e2f2d0aed672bb67a,https://www.dropbox.com/s/m1ri042f2rjc9zr/03x01_i89.gif.zip?dl=0
data/input/screenshots/downtown/03x02_i116.gif,203dbd447791605748bc1251457980dd,https://www.dropbox.com/s/rfsatslv6x1b0xu/03x02_i116.gif.zip?dl=0
data/input/screenshots/downtown/03x03_i267.gif,f2d35da43bd2e15adbb57d04a98f10a9,https://www.dropbox.com/s/selkp8xn96axmwj/03x03_i267.gif.zip?dl=0
data/input/screenshots/downtown/03x04_i191.gif,60d3eb915458f774fd1f72212086a503,https://www.dropbox.com/s/j773nse2zydtpjr/03x04_i191.gif.zip?dl=0
data/input/screenshots/downtown/03x02_i116.gif,1a38170ba89abb9d7466cfd27ab31d1b,https://www.dropbox.com/s/rfsatslv6x1b0xu/03x02_i116.gif.zip?dl=0
data/input/screenshots/downtown/03x03_i267.gif,17fbcbc78fac9b81cf2f48145c92cc21,https://www.dropbox.com/s/selkp8xn96axmwj/03x03_i267.gif.zip?dl=0
data/input/screenshots/downtown/03x04_i191.gif,8ad0ba3626542f2ed3406836c3e7b478,https://www.dropbox.com/s/j773nse2zydtpjr/03x04_i191.gif.zip?dl=0
data/input/screenshots/downtown/03x05_i191.gif,23e6f5c2cf372db693b884df1bac7438,https://www.dropbox.com/s/fyy9cxocjjnzhfz/03x05_i191.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
@ -48,143 +48,143 @@ data/input/screenshots/downtown/03x10.gif,8eb32ff700be3a4ded979bb464a47a44,https
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,b3388de13f71efeb369362f30089e1a6,https://www.dropbox.com/s/f0npg4nponiaart/04x01_i5.gif.zip?dl=0
data/input/screenshots/downtown/04x02_i50.gif,e86d2db29e966fa5b8f8153627bf42c2,https://www.dropbox.com/s/bufkwuf21iblylv/04x02_i50.gif.zip?dl=0
data/input/screenshots/downtown/04x03_i51.gif,a308124077babe008f52a35310d262b6,https://www.dropbox.com/s/7kwdp98vdc3xj59/04x03_i51.gif.zip?dl=0
data/input/screenshots/downtown/04x04_i52.gif,67e25c92b6ecb4773adfc9dbfc988929,https://www.dropbox.com/s/k8oxc7amr8ng8wh/04x04_i52.gif.zip?dl=0
data/input/screenshots/downtown/04x05_i332.gif,bd23bd04a1ea3d0d879b3c9042185447,https://www.dropbox.com/s/60p89ui1b13jvxs/04x05_i332.gif.zip?dl=0
data/input/screenshots/downtown/04x06_i328.gif,0dd8ad11a72799f7b66b2b580c1a9d34,https://www.dropbox.com/s/wol64yy8351d9ca/04x06_i328.gif.zip?dl=0
data/input/screenshots/downtown/04x07_i86.gif,950fa04b7270f720ef55500d596b7e77,https://www.dropbox.com/s/93mk44kkb8wed96/04x07_i86.gif.zip?dl=0
data/input/screenshots/downtown/04x02_i50.gif,d480c3dc2b577ccfaed8087ce583fd2d,https://www.dropbox.com/s/bufkwuf21iblylv/04x02_i50.gif.zip?dl=0
data/input/screenshots/downtown/04x03_i51.gif,cdeea7002eb066a1568c7d00719a6b46,https://www.dropbox.com/s/7kwdp98vdc3xj59/04x03_i51.gif.zip?dl=0
data/input/screenshots/downtown/04x04_i52.gif,be080cef6c9d58014f680816843c40f5,https://www.dropbox.com/s/k8oxc7amr8ng8wh/04x04_i52.gif.zip?dl=0
data/input/screenshots/downtown/04x05_i332.gif,282d7311232fbd52d17706e4c390b911,https://www.dropbox.com/s/60p89ui1b13jvxs/04x05_i332.gif.zip?dl=0
data/input/screenshots/downtown/04x06_i328.gif,2143c3f168ccf2db87ed3f39a6ba029c,https://www.dropbox.com/s/wol64yy8351d9ca/04x06_i328.gif.zip?dl=0
data/input/screenshots/downtown/04x07_i86.gif,696344c25c61e6356a0b71792b468339,https://www.dropbox.com/s/93mk44kkb8wed96/04x07_i86.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
data/input/screenshots/downtown/04x11.gif,d37f7cfeb829fe475b2c42e401725457,https://www.dropbox.com/s/b0vedcy6fgm110g/04x11.gif.zip?dl=0
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,25b8f0bbc5c6a5a4325464b333ac97e9,https://www.dropbox.com/s/almj6mzr31eidhg/05x01_i357.gif.zip?dl=0
data/input/screenshots/downtown/05x02_i1544.gif,55e046118612fb39bc2a7ba5038ebb47,https://www.dropbox.com/s/jcvchr2s2ywhug9/05x02_i1544.gif.zip?dl=0
data/input/screenshots/downtown/05x03_i2002.gif,5fe46d9cb3948c069071d31bbf36a1b6,https://www.dropbox.com/s/eip7f3y00fjqfo3/05x03_i2002.gif.zip?dl=0
data/input/screenshots/downtown/05x04_i2052.gif,866884ce08befcacb95633830e45cac8,https://www.dropbox.com/s/ubf2xgmaatqwel9/05x04_i2052.gif.zip?dl=0
data/input/screenshots/downtown/05x05_i54.gif,3a00035bbfbe0e44a76cfa6681fc69d4,https://www.dropbox.com/s/xywovzaq405ejq2/05x05_i54.gif.zip?dl=0
data/input/screenshots/downtown/05x06_i144.gif,8b34ec9fcb359e8902bcf4b9f0288fa8,https://www.dropbox.com/s/90vx9aie6sw9o6r/05x06_i144.gif.zip?dl=0
data/input/screenshots/downtown/05x07_i77.gif,f684fcb2c35f1857df7041ad79e19dd5,https://www.dropbox.com/s/vdrivtw5sahatwo/05x07_i77.gif.zip?dl=0
data/input/screenshots/downtown/05x08_i1333.gif,f3a1925ea7432a50cb278ef57f728ea8,https://www.dropbox.com/s/un50vfzilmi442c/05x08_i1333.gif.zip?dl=0
data/input/screenshots/downtown/05x09_i449.gif,1109e0abbe11e8c53db6939508d684ee,https://www.dropbox.com/s/n5e0qfa15vrzdx1/05x09_i449.gif.zip?dl=0
data/input/screenshots/downtown/05x01_i357.gif,4b09fdde6231df278ce8531656fd5833,https://www.dropbox.com/s/almj6mzr31eidhg/05x01_i357.gif.zip?dl=0
data/input/screenshots/downtown/05x02_i1544.gif,06c28c1178368047cd10499cc85c1b8d,https://www.dropbox.com/s/jcvchr2s2ywhug9/05x02_i1544.gif.zip?dl=0
data/input/screenshots/downtown/05x03_i2002.gif,edb2171d2e7e6f14fde14b6592c3f290,https://www.dropbox.com/s/eip7f3y00fjqfo3/05x03_i2002.gif.zip?dl=0
data/input/screenshots/downtown/05x04_i2052.gif,87d7d79729eef4764b8aca2cf913a767,https://www.dropbox.com/s/ubf2xgmaatqwel9/05x04_i2052.gif.zip?dl=0
data/input/screenshots/downtown/05x05_i54.gif,f9e08b4d3bdcb548b54864b21b1275ab,https://www.dropbox.com/s/xywovzaq405ejq2/05x05_i54.gif.zip?dl=0
data/input/screenshots/downtown/05x06_i144.gif,7c4fd995b4c3505277ead89aa60e1110,https://www.dropbox.com/s/90vx9aie6sw9o6r/05x06_i144.gif.zip?dl=0
data/input/screenshots/downtown/05x07_i77.gif,f16167df15771d193687a1b6e24b786a,https://www.dropbox.com/s/vdrivtw5sahatwo/05x07_i77.gif.zip?dl=0
data/input/screenshots/downtown/05x08_i1333.gif,60fd56c9b5f48c66391fc91447d84ea3,https://www.dropbox.com/s/un50vfzilmi442c/05x08_i1333.gif.zip?dl=0
data/input/screenshots/downtown/05x09_i449.gif,31caa671ced144a5396e40974e8fe8e9,https://www.dropbox.com/s/n5e0qfa15vrzdx1/05x09_i449.gif.zip?dl=0
data/input/screenshots/downtown/05x10_i1290.gif,b105924b97b400f0b39782e854b96968,https://www.dropbox.com/s/ymxj08395fce40p/05x10_i1290.gif.zip?dl=0
data/input/screenshots/downtown/05x11.gif,2de2af21aac73d7ba71ddeb50cc48598,https://www.dropbox.com/s/z9nuz2yji7olyc6/05x11.gif.zip?dl=0
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,aa39197e94751848814cc68c459244af,https://www.dropbox.com/s/4vloolibyc49rxy/06x01_i592.gif.zip?dl=0
data/input/screenshots/downtown/06x02_i1208.gif,3825865f0bc7ffd9d1755efd102f4818,https://www.dropbox.com/s/9917s2dm9g92c2j/06x02_i1208.gif.zip?dl=0
data/input/screenshots/downtown/06x03_i174.gif,465582e67831657049c95660723c2864,https://www.dropbox.com/s/nljv5dh6973bhjh/06x03_i174.gif.zip?dl=0
data/input/screenshots/downtown/06x04_i173.gif,4b7ba564bf3601d7d09d96098dcf22a7,https://www.dropbox.com/s/iuwn4shgbb7jl7v/06x04_i173.gif.zip?dl=0
data/input/screenshots/downtown/06x05_i157.gif,91ddb3e4798527784d89f5f295029f03,https://www.dropbox.com/s/6uoiqlimm36g0pn/06x05_i157.gif.zip?dl=0
data/input/screenshots/downtown/06x06_i31.gif,b8a2fa81717c30a4b97dc0a47371d0ee,https://www.dropbox.com/s/hgiqtiel8dtz7nb/06x06_i31.gif.zip?dl=0
data/input/screenshots/downtown/06x07_i84.gif,c41a9c5cdd2675108f73f67b4fc89c90,https://www.dropbox.com/s/mytf3o6vcihpae4/06x07_i84.gif.zip?dl=0
data/input/screenshots/downtown/06x08_i17.gif,8ab66d87cb64d205d57a3395f46b476f,https://www.dropbox.com/s/sq978fzsnn50fk5/06x08_i17.gif.zip?dl=0
data/input/screenshots/downtown/06x09_i32.gif,6ef4c6f9a95dcf63a13b9aaf7e32cde8,https://www.dropbox.com/s/p8wnzy3ucyroeb5/06x09_i32.gif.zip?dl=0
data/input/screenshots/downtown/06x10_i83.gif,a1cf18dbfd2d05a1ccd0316a06e3d8d6,https://www.dropbox.com/s/gvottebrrbkn6o7/06x10_i83.gif.zip?dl=0
data/input/screenshots/downtown/06x11_i293.gif,e865b250d40e245b326607a80def6a22,https://www.dropbox.com/s/75cx3kd9f27xada/06x11_i293.gif.zip?dl=0
data/input/screenshots/downtown/06x02_i1208.gif,82e449e4b6825509c0894884dccbebe1,https://www.dropbox.com/s/9917s2dm9g92c2j/06x02_i1208.gif.zip?dl=0
data/input/screenshots/downtown/06x03_i174.gif,78d8206e764fdde5a6eec0d375487fa9,https://www.dropbox.com/s/nljv5dh6973bhjh/06x03_i174.gif.zip?dl=0
data/input/screenshots/downtown/06x04_i173.gif,3f28bf0a2c1e0166f9287f348a5ba171,https://www.dropbox.com/s/iuwn4shgbb7jl7v/06x04_i173.gif.zip?dl=0
data/input/screenshots/downtown/06x05_i157.gif,8c44eb76b7905e1cf0160feb517452c1,https://www.dropbox.com/s/6uoiqlimm36g0pn/06x05_i157.gif.zip?dl=0
data/input/screenshots/downtown/06x06_i31.gif,33fc11e633dd56aad5c43f87456dfd6c,https://www.dropbox.com/s/hgiqtiel8dtz7nb/06x06_i31.gif.zip?dl=0
data/input/screenshots/downtown/06x07_i84.gif,45a11ba5c2fd1e6007b80ca58ac1f433,https://www.dropbox.com/s/mytf3o6vcihpae4/06x07_i84.gif.zip?dl=0
data/input/screenshots/downtown/06x08_i17.gif,e2509b0883ac6c55afe788eb5ccdd013,https://www.dropbox.com/s/sq978fzsnn50fk5/06x08_i17.gif.zip?dl=0
data/input/screenshots/downtown/06x09_i32.gif,8bce95b0d138f61bc8bf77d37738ed4b,https://www.dropbox.com/s/p8wnzy3ucyroeb5/06x09_i32.gif.zip?dl=0
data/input/screenshots/downtown/06x10_i83.gif,cd68851f937bda2fa26cf4c007e215ce,https://www.dropbox.com/s/gvottebrrbkn6o7/06x10_i83.gif.zip?dl=0
data/input/screenshots/downtown/06x11_i293.gif,940bc468f1d0970b5feb68a508c70b57,https://www.dropbox.com/s/75cx3kd9f27xada/06x11_i293.gif.zip?dl=0
data/input/screenshots/downtown/06x12_i2048.gif,7da9891f23b545b430eab91c036a1bc1,https://www.dropbox.com/s/gg2s7d04wlot257/06x12_i2048.gif.zip?dl=0
data/input/screenshots/downtown/07x01_i0.gif,a57f15d773441a120948995dbfecf8b4,https://www.dropbox.com/s/txc4d28l11jr6i0/07x01_i0.gif.zip?dl=0
data/input/screenshots/downtown/07x02_i26.gif,9af746aef101932b8dfbc71a149ad6c9,https://www.dropbox.com/s/3a03odmgu5s5w8o/07x02_i26.gif.zip?dl=0
data/input/screenshots/downtown/07x03_i71.gif,47876e00f985d0e254c737019f8fbacb,https://www.dropbox.com/s/ahtbvv7i58vh9n4/07x03_i71.gif.zip?dl=0
data/input/screenshots/downtown/07x04_i18.gif,1f62fc6ffcdfd29453282f9000f576f0,https://www.dropbox.com/s/41i4tocmma7hoen/07x04_i18.gif.zip?dl=0
data/input/screenshots/downtown/07x05_i20.gif,00a27d3b192f7f4a4cb10a6f6aba103e,https://www.dropbox.com/s/tijzdfjrcu6vu9t/07x05_i20.gif.zip?dl=0
data/input/screenshots/downtown/07x06_i20.gif,922169d879ee40761415542240f7731f,https://www.dropbox.com/s/csu23gbww9u4xsy/07x06_i20.gif.zip?dl=0
data/input/screenshots/downtown/07x07_i1364.gif,8a5cafa859aa6c1ff479d8d240287fc4,https://www.dropbox.com/s/wodpkg6gwxd1ozn/07x07_i1364.gif.zip?dl=0
data/input/screenshots/downtown/07x08_i16.gif,abb82ed46bad96aba0da90720bbdeef2,https://www.dropbox.com/s/gbyx1xx6zn2xihc/07x08_i16.gif.zip?dl=0
data/input/screenshots/downtown/07x09_i32.gif,adbfe0baecc57c1bbc385d3d4ec69909,https://www.dropbox.com/s/o1qomcuu0z6i9d1/07x09_i32.gif.zip?dl=0
data/input/screenshots/downtown/07x10_i33.gif,6c9c0400261d11206f35d9e4b144c8bc,https://www.dropbox.com/s/3kh0j2q3os9j1kn/07x10_i33.gif.zip?dl=0
data/input/screenshots/downtown/07x11_i34.gif,693ca9573387b0958a14d905f9d0ce2d,https://www.dropbox.com/s/19sfmjzxvka98l3/07x11_i34.gif.zip?dl=0
data/input/screenshots/downtown/07x12_i785.gif,0eeebaabb1e21a44dabb8b9056358abe,https://www.dropbox.com/s/pu9t6uic7kdebmq/07x12_i785.gif.zip?dl=0
data/input/screenshots/downtown/07x01_i0.gif,af21fe9392e8ae07ea349b8663bb20ad,https://www.dropbox.com/s/txc4d28l11jr6i0/07x01_i0.gif.zip?dl=0
data/input/screenshots/downtown/07x02_i26.gif,4e1cbcbb218ac0623f249f95d4b6b994,https://www.dropbox.com/s/3a03odmgu5s5w8o/07x02_i26.gif.zip?dl=0
data/input/screenshots/downtown/07x03_i71.gif,216f3983f0380cf85a7729305043389e,https://www.dropbox.com/s/ahtbvv7i58vh9n4/07x03_i71.gif.zip?dl=0
data/input/screenshots/downtown/07x04_i18.gif,c4612a98f917632c0d902a344c9eb07d,https://www.dropbox.com/s/41i4tocmma7hoen/07x04_i18.gif.zip?dl=0
data/input/screenshots/downtown/07x05_i20.gif,8edbeb9ea3ff658ef24ec2ee969dc83d,https://www.dropbox.com/s/tijzdfjrcu6vu9t/07x05_i20.gif.zip?dl=0
data/input/screenshots/downtown/07x06_i20.gif,0668a44d6881caa9933cbb48f131b991,https://www.dropbox.com/s/csu23gbww9u4xsy/07x06_i20.gif.zip?dl=0
data/input/screenshots/downtown/07x07_i1364.gif,79fd1751eab912b3506039c4abea5d82,https://www.dropbox.com/s/wodpkg6gwxd1ozn/07x07_i1364.gif.zip?dl=0
data/input/screenshots/downtown/07x08_i16.gif,71abd39feacb417430867b8eeb5b3519,https://www.dropbox.com/s/gbyx1xx6zn2xihc/07x08_i16.gif.zip?dl=0
data/input/screenshots/downtown/07x09_i32.gif,ed81ee2ff5cd5562be42b407345dca4a,https://www.dropbox.com/s/o1qomcuu0z6i9d1/07x09_i32.gif.zip?dl=0
data/input/screenshots/downtown/07x10_i33.gif,724a2529989b190a5c658bb0c164da2e,https://www.dropbox.com/s/3kh0j2q3os9j1kn/07x10_i33.gif.zip?dl=0
data/input/screenshots/downtown/07x11_i34.gif,e9dabc08fc9236a35dec8159fca03555,https://www.dropbox.com/s/19sfmjzxvka98l3/07x11_i34.gif.zip?dl=0
data/input/screenshots/downtown/07x12_i785.gif,7f8954e57cae5649134fb1e46b8568dc,https://www.dropbox.com/s/pu9t6uic7kdebmq/07x12_i785.gif.zip?dl=0
data/input/screenshots/downtown/08x01_i6.gif,b10f9ad648dc5efd553c57e0cdac9afa,https://www.dropbox.com/s/uj0fm5rpf0pbiw3/08x01_i6.gif.zip?dl=0
data/input/screenshots/downtown/08x02_i11.gif,1d2ad92bb5fa932bd4e69bb31eca36dd,https://www.dropbox.com/s/3gi23s4daz201yr/08x02_i11.gif.zip?dl=0
data/input/screenshots/downtown/08x03_i219.gif,7f204c4b1f1c20e965ab6a6b86e62a18,https://www.dropbox.com/s/i484j3yjiivbh7l/08x03_i219.gif.zip?dl=0
data/input/screenshots/downtown/08x04_i210.gif,fcd78218bd14f4015db771d8f6993b02,https://www.dropbox.com/s/mm4tyj28oemznr2/08x04_i210.gif.zip?dl=0
data/input/screenshots/downtown/08x05_i126.gif,3eaaa6d23bc465b16902a7fe04a14b83,https://www.dropbox.com/s/nyuiw5cxq6onihm/08x05_i126.gif.zip?dl=0
data/input/screenshots/downtown/08x06_i123.gif,5c326db0bb5ea32b16dc1590afab8053,https://www.dropbox.com/s/win6ackppf7jqig/08x06_i123.gif.zip?dl=0
data/input/screenshots/downtown/08x07_i114.gif,362d6dbe314040a2dded3db25cd02a17,https://www.dropbox.com/s/zgdlxs819w7jm3u/08x07_i114.gif.zip?dl=0
data/input/screenshots/downtown/08x08_i100.gif,111d91cda1f585c48a224be7a8ef251d,https://www.dropbox.com/s/6zmreieujfyfijz/08x08_i100.gif.zip?dl=0
data/input/screenshots/downtown/08x09_i119.gif,69b1f5ed4a1f374c01ec73a3148187c2,https://www.dropbox.com/s/zyobqtke0bvao1m/08x09_i119.gif.zip?dl=0
data/input/screenshots/downtown/08x10_i1392.gif,e6eb0b4a542a8319458b757a676a5009,https://www.dropbox.com/s/vrcy6bb7bhav2pd/08x10_i1392.gif.zip?dl=0
data/input/screenshots/downtown/08x11_i1340.gif,6cea1f9c0cc002006c90a55ff071a5cd,https://www.dropbox.com/s/t3lhkjd4z8cphlc/08x11_i1340.gif.zip?dl=0
data/input/screenshots/downtown/08x12_i724.gif,9559cc6e3efdf7cf19f58bed974254fa,https://www.dropbox.com/s/xhgg66plb2jz584/08x12_i724.gif.zip?dl=0
data/input/screenshots/downtown/08x02_i11.gif,b969a59bbfcf70055a3a794ceada7578,https://www.dropbox.com/s/3gi23s4daz201yr/08x02_i11.gif.zip?dl=0
data/input/screenshots/downtown/08x03_i219.gif,ba0130304eace4d30bb770d7b62fa7d6,https://www.dropbox.com/s/i484j3yjiivbh7l/08x03_i219.gif.zip?dl=0
data/input/screenshots/downtown/08x04_i210.gif,d6ad2f66150e0d4e3f4103830c479f5a,https://www.dropbox.com/s/mm4tyj28oemznr2/08x04_i210.gif.zip?dl=0
data/input/screenshots/downtown/08x05_i126.gif,0363cd7b16d81c9290d4885f1d91d647,https://www.dropbox.com/s/nyuiw5cxq6onihm/08x05_i126.gif.zip?dl=0
data/input/screenshots/downtown/08x06_i123.gif,a1f08789274c5f04df985e1d17b49f0b,https://www.dropbox.com/s/win6ackppf7jqig/08x06_i123.gif.zip?dl=0
data/input/screenshots/downtown/08x07_i114.gif,9eb14bea83c1ca42c78d8715dc62feb2,https://www.dropbox.com/s/zgdlxs819w7jm3u/08x07_i114.gif.zip?dl=0
data/input/screenshots/downtown/08x08_i100.gif,109485b15a62c5b143860f48e26fe5f6,https://www.dropbox.com/s/6zmreieujfyfijz/08x08_i100.gif.zip?dl=0
data/input/screenshots/downtown/08x09_i119.gif,b6aaff9164f1b769a0cc2fa7b5b2e711,https://www.dropbox.com/s/zyobqtke0bvao1m/08x09_i119.gif.zip?dl=0
data/input/screenshots/downtown/08x10_i1392.gif,a1c7c3930c67d20d770e8e7618f43fe1,https://www.dropbox.com/s/vrcy6bb7bhav2pd/08x10_i1392.gif.zip?dl=0
data/input/screenshots/downtown/08x11_i1340.gif,57ee39bc88da1042fe281895ff8f2a83,https://www.dropbox.com/s/t3lhkjd4z8cphlc/08x11_i1340.gif.zip?dl=0
data/input/screenshots/downtown/08x12_i724.gif,897514ac9ffc9a4fa5566a97c0b40677,https://www.dropbox.com/s/xhgg66plb2jz584/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,b637839e309610c7fd815d465c72fb9e,https://www.dropbox.com/s/oy2osugoqfxk8kn/09x02_i4.gif.zip?dl=0
data/input/screenshots/downtown/09x03_i2.gif,7361bf25ed96714f194235ff309e04a5,https://www.dropbox.com/s/n2kezvshli7vjzm/09x03_i2.gif.zip?dl=0
data/input/screenshots/downtown/09x04_i493.gif,97e2954c614216412ca5f5e33a7de8e0,https://www.dropbox.com/s/12cpmawn7pxxwfy/09x04_i493.gif.zip?dl=0
data/input/screenshots/downtown/09x05_i131.gif,d6dbcfe9c3d1f13674c30234ac45a274,https://www.dropbox.com/s/bd00vnnx1cr4zff/09x05_i131.gif.zip?dl=0
data/input/screenshots/downtown/09x06_i244.gif,9963155c5915160fd0d60550dee61feb,https://www.dropbox.com/s/rdfv6uemwtfsokh/09x06_i244.gif.zip?dl=0
data/input/screenshots/downtown/09x03_i2.gif,b50704b47df379eedc8a04bbbba5fb7f,https://www.dropbox.com/s/n2kezvshli7vjzm/09x03_i2.gif.zip?dl=0
data/input/screenshots/downtown/09x04_i493.gif,de2a73b984d393f73d748ad0fdaa2e31,https://www.dropbox.com/s/12cpmawn7pxxwfy/09x04_i493.gif.zip?dl=0
data/input/screenshots/downtown/09x05_i131.gif,a93adec91f19df08f1b9e64b2227ebf3,https://www.dropbox.com/s/bd00vnnx1cr4zff/09x05_i131.gif.zip?dl=0
data/input/screenshots/downtown/09x06_i244.gif,d936bbdc9a6cb3b97a91a9cc418baf8b,https://www.dropbox.com/s/rdfv6uemwtfsokh/09x06_i244.gif.zip?dl=0
data/input/screenshots/downtown/09x07_i242.gif,b01e1058ea6b0f242f15998297587ca0,https://www.dropbox.com/s/p2htq4cfoeq67n0/09x07_i242.gif.zip?dl=0
data/input/screenshots/downtown/09x08_i104.gif,0858a37ce725bc76f83dddfe3afcb6dd,https://www.dropbox.com/s/o6q3tjrss4hj3af/09x08_i104.gif.zip?dl=0
data/input/screenshots/downtown/09x09_i240.gif,7f63b81a2138796c69647876aeebc760,https://www.dropbox.com/s/efntwxws6p7tu63/09x09_i240.gif.zip?dl=0
data/input/screenshots/downtown/09x08_i104.gif,b327b9ae4dec2e3188043f90106493b6,https://www.dropbox.com/s/o6q3tjrss4hj3af/09x08_i104.gif.zip?dl=0
data/input/screenshots/downtown/09x09_i240.gif,5c3aa23400f7f5b856b66476a40beb96,https://www.dropbox.com/s/efntwxws6p7tu63/09x09_i240.gif.zip?dl=0
data/input/screenshots/downtown/09x10_i237.gif,dbc08ee280f4df99365e3b44606a261c,https://www.dropbox.com/s/6fpr6rckm71yuow/09x10_i237.gif.zip?dl=0
data/input/screenshots/downtown/09x11_i305.gif,ed20e200de2cfd84fbf417ae4a519abb,https://www.dropbox.com/s/bq2ujelc0du1gh3/09x11_i305.gif.zip?dl=0
data/input/screenshots/downtown/09x11_i305.gif,6250b2e00316b244cedb8a22a668e277,https://www.dropbox.com/s/bq2ujelc0du1gh3/09x11_i305.gif.zip?dl=0
data/input/screenshots/downtown/09x12_i437.gif,d628ef97825e9ef426a8bc9fc2f1a1c3,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,f25db44c57e9292ee5511f0fc52b0329,https://www.dropbox.com/s/tcl3uww40aybr18/10x03_i778.gif.zip?dl=0
data/input/screenshots/downtown/10x04_i7.gif,827a2ce1e58287415024db4dcd677f3d,https://www.dropbox.com/s/4kha8aw7gnpe9zx/10x04_i7.gif.zip?dl=0
data/input/screenshots/downtown/10x05_i141.gif,823242c2240b54a55b1f976c6ae647bf,https://www.dropbox.com/s/0oulisyn6k1xsjh/10x05_i141.gif.zip?dl=0
data/input/screenshots/downtown/10x05_i141.gif,6c2bfbbdba6a48c8f077a14a8485a270,https://www.dropbox.com/s/0oulisyn6k1xsjh/10x05_i141.gif.zip?dl=0
data/input/screenshots/downtown/10x06_i490.gif,ab3c97f17f930a9d23eb650d8e457f19,https://www.dropbox.com/s/wxn8w5xo57w2xvp/10x06_i490.gif.zip?dl=0
data/input/screenshots/downtown/10x07_i490.gif,24464b28271a1d0830f55c8f51c04fe0,https://www.dropbox.com/s/ikfue9rx3adzcv8/10x07_i490.gif.zip?dl=0
data/input/screenshots/downtown/10x08_i110.gif,970f0e86a1b5814210a8bba9cbd10af4,https://www.dropbox.com/s/w68en9wunqc60ld/10x08_i110.gif.zip?dl=0
data/input/screenshots/downtown/10x09_i483.gif,f30be4de35855375612da61d590da04e,https://www.dropbox.com/s/kropdkwktic6758/10x09_i483.gif.zip?dl=0
data/input/screenshots/downtown/10x10_i480.gif,2060d87a6f9128f0207d45e144a744bf,https://www.dropbox.com/s/xjidx9nxfw3wx94/10x10_i480.gif.zip?dl=0
data/input/screenshots/downtown/10x11_i310.gif,f17aee5d692ab077a921cf8857cce996,https://www.dropbox.com/s/qcoibvt29menu62/10x11_i310.gif.zip?dl=0
data/input/screenshots/downtown/10x11_i310.gif,c88f93eabfeecbe2d13093495707e966,https://www.dropbox.com/s/qcoibvt29menu62/10x11_i310.gif.zip?dl=0
data/input/screenshots/downtown/10x12_i925.gif,50cc4c3a8a0dac222cc2a73409587863,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,6ff898ef51d8aea35270a55d3ec801eb,https://www.dropbox.com/s/uiodmxawv8sheb1/01x01_i325.gif.zip?dl=0
data/input/screenshots/lakeslice/01x02_i163.gif,f200abe6960faf9987e05dc359662398,https://www.dropbox.com/s/6zebcdhbeirab49/01x02_i163.gif.zip?dl=0
data/input/screenshots/lakeslice/01x03_i1.gif,a359db5d9a62a19330e23a7d9eb9bc17,https://www.dropbox.com/s/qn65mm834k8w1jr/01x03_i1.gif.zip?dl=0
data/input/screenshots/lakeslice/01x04_i442.gif,7b0595c1eba81fc9d174bea5a0a8f118,https://www.dropbox.com/s/o6yoi2j0w011gur/01x04_i442.gif.zip?dl=0
data/input/screenshots/lakeslice/01x02_i163.gif,6f143d2370a4b323bee45c15e740a417,https://www.dropbox.com/s/6zebcdhbeirab49/01x02_i163.gif.zip?dl=0
data/input/screenshots/lakeslice/01x03_i1.gif,6b3c857df126bdabb8111dfad2740fb2,https://www.dropbox.com/s/qn65mm834k8w1jr/01x03_i1.gif.zip?dl=0
data/input/screenshots/lakeslice/01x04_i442.gif,3a8fcff56dd13b5c323e3ba5dbc6061f,https://www.dropbox.com/s/o6yoi2j0w011gur/01x04_i442.gif.zip?dl=0
data/input/screenshots/lakeslice/01x05_i36.gif,5f3db039fa061e1b7442b866d1cad489,https://www.dropbox.com/s/whwpzpt8pjr1tyc/01x05_i36.gif.zip?dl=0
data/input/screenshots/lakeslice/01x06_i37.gif,15ee21caabbc01ef5788aa891a92c2c6,https://www.dropbox.com/s/8o8alqj2mo5gfau/01x06_i37.gif.zip?dl=0
data/input/screenshots/lakeslice/01x07_i27.gif,6139009793933daececec7b71ee3bbd7,https://www.dropbox.com/s/mg9dxlqtmiwkyz8/01x07_i27.gif.zip?dl=0
data/input/screenshots/lakeslice/01x08_i420.gif,bdf6e8aa48d0c2c9274298f8a807898f,https://www.dropbox.com/s/j3nzg8wg8qpkm8t/01x08_i420.gif.zip?dl=0
data/input/screenshots/lakeslice/01x09_i349.gif,e32d451f2bb30ba19bf2f9fb4b492a9e,https://www.dropbox.com/s/72rnvmevby32688/01x09_i349.gif.zip?dl=0
data/input/screenshots/lakeslice/01x10_i76.gif,d2beb5a60674b14265775e399b7c87f1,https://www.dropbox.com/s/47i01nn2gjo2wjh/01x10_i76.gif.zip?dl=0
data/input/screenshots/lakeslice/01x11_i147.gif,4853f79cd5938b8a741a378d83e6d61a,https://www.dropbox.com/s/n45zoqwymgqtmpp/01x11_i147.gif.zip?dl=0
data/input/screenshots/lakeslice/01x12_i471.gif,2de53b6327b73307887ad7241c50b18d,https://www.dropbox.com/s/m34ht0l7t9nk8dp/01x12_i471.gif.zip?dl=0
data/input/screenshots/lakeslice/01x13_i2.gif,e2dda58a876e979104d7f5c288a9041a,https://www.dropbox.com/s/3wvlfmdlablh5o0/01x13_i2.gif.zip?dl=0
data/input/screenshots/lakeslice/01x14_i348.gif,8b916fb5166af19671215a779f7e3482,https://www.dropbox.com/s/xlurjqwpxb1f50s/01x14_i348.gif.zip?dl=0
data/input/screenshots/lakeslice/01x08_i420.gif,980012597834fd2dcca37e5da81a1188,https://www.dropbox.com/s/j3nzg8wg8qpkm8t/01x08_i420.gif.zip?dl=0
data/input/screenshots/lakeslice/01x09_i349.gif,14e8c17c87fc268fdb018329588169e1,https://www.dropbox.com/s/72rnvmevby32688/01x09_i349.gif.zip?dl=0
data/input/screenshots/lakeslice/01x10_i76.gif,1ab8a1ee06398fd2e55b93fe123bca7d,https://www.dropbox.com/s/47i01nn2gjo2wjh/01x10_i76.gif.zip?dl=0
data/input/screenshots/lakeslice/01x11_i147.gif,c5e366f5f76715073ec99894ecd21722,https://www.dropbox.com/s/n45zoqwymgqtmpp/01x11_i147.gif.zip?dl=0
data/input/screenshots/lakeslice/01x12_i471.gif,6adb00db69a00988780ee86b8cc6af7c,https://www.dropbox.com/s/m34ht0l7t9nk8dp/01x12_i471.gif.zip?dl=0
data/input/screenshots/lakeslice/01x13_i2.gif,0e37cd3b497b7d8f65f2bb2a8f3b69c2,https://www.dropbox.com/s/3wvlfmdlablh5o0/01x13_i2.gif.zip?dl=0
data/input/screenshots/lakeslice/01x14_i348.gif,2de6c2fde1c6cf851b46cbc29573da06,https://www.dropbox.com/s/xlurjqwpxb1f50s/01x14_i348.gif.zip?dl=0
data/input/screenshots/lakeslice/01x15_i347.gif,729c4dc58f0e885f39743df906be6b86,https://www.dropbox.com/s/x1hie3l406of7w6/01x15_i347.gif.zip?dl=0
data/input/screenshots/lakeslice/01x16_i215.gif,f98f79bb7964cd222f323b9006c06593,https://www.dropbox.com/s/auduvqf640hb4aw/01x16_i215.gif.zip?dl=0
data/input/screenshots/lakeslice/01x17_i214.gif,e2d8fc539c078bd778d2983c5a7f466d,https://www.dropbox.com/s/r6pirzyk82596mq/01x17_i214.gif.zip?dl=0
data/input/screenshots/lakeslice/01x18_i0.gif,e4562afcfa3cd063c9062d50d23b676a,https://www.dropbox.com/s/44lcmk7ydhwzhsx/01x18_i0.gif.zip?dl=0
data/input/screenshots/lakeslice/01x19_i5.gif,7fff661bdaab14610e55257ef810dd06,https://www.dropbox.com/s/box9tzmwaa1cjhs/01x19_i5.gif.zip?dl=0
data/input/screenshots/lakeslice/01x16_i215.gif,22398b55ff4e97a2bfb001c66e46a798,https://www.dropbox.com/s/auduvqf640hb4aw/01x16_i215.gif.zip?dl=0
data/input/screenshots/lakeslice/01x17_i214.gif,69e73b6883ca958c7f54cf5d6b0e15b9,https://www.dropbox.com/s/r6pirzyk82596mq/01x17_i214.gif.zip?dl=0
data/input/screenshots/lakeslice/01x18_i0.gif,9388f267024e31ef975cb69d955710ed,https://www.dropbox.com/s/44lcmk7ydhwzhsx/01x18_i0.gif.zip?dl=0
data/input/screenshots/lakeslice/01x19_i5.gif,7585896565819cc3ee3b4c02db448b3f,https://www.dropbox.com/s/box9tzmwaa1cjhs/01x19_i5.gif.zip?dl=0
data/input/screenshots/lakeslice/01x20_i21.gif,c0b85343f55935d3a0fff6b7e47e6554,https://www.dropbox.com/s/jhwhqu798pw5hux/01x20_i21.gif.zip?dl=0
data/input/screenshots/lakeslice/01x21_i447.gif,b1cdc7eb2a1059d60bac4afd3fa94e6e,https://www.dropbox.com/s/90oarua69yil7z5/01x21_i447.gif.zip?dl=0
data/input/screenshots/lakeslice/01x22_i450.gif,4445cf5fb04088fa747231ff4c37afaf,https://www.dropbox.com/s/trzvhwejbn8rk2s/01x22_i450.gif.zip?dl=0
data/input/screenshots/lakeslice/01x21_i447.gif,d3b6cf6592121ccfc7911ff0a093a5c8,https://www.dropbox.com/s/90oarua69yil7z5/01x21_i447.gif.zip?dl=0
data/input/screenshots/lakeslice/01x22_i450.gif,f0d5cf91254a1c2c115a25cdb28170c9,https://www.dropbox.com/s/trzvhwejbn8rk2s/01x22_i450.gif.zip?dl=0
data/input/screenshots/lakeslice/01x23_i251.gif,f77b5a182a5adc740d3c35b3176e2541,https://www.dropbox.com/s/s1x0viujannxe3q/01x23_i251.gif.zip?dl=0
data/input/screenshots/lakeslice/02x01_i328.gif,3d3ed8af448f21b2315e06480805b69f,https://www.dropbox.com/s/3fuoe5s5i76oiw2/02x01_i328.gif.zip?dl=0
data/input/screenshots/lakeslice/02x02_i166.gif,d738ee72b925300b7aa4846ed3067cd8,https://www.dropbox.com/s/r0b6emakg1hvpyq/02x02_i166.gif.zip?dl=0
data/input/screenshots/lakeslice/02x03_i300.gif,f2f10f2df233fda31c086f9c8a7c94bd,https://www.dropbox.com/s/9medvi8uwbxw8m8/02x03_i300.gif.zip?dl=0
data/input/screenshots/lakeslice/02x02_i166.gif,1d0c38ac6e80e223a3cfe64fe44e0dbf,https://www.dropbox.com/s/r0b6emakg1hvpyq/02x02_i166.gif.zip?dl=0
data/input/screenshots/lakeslice/02x03_i300.gif,87b7dea63813919bfed098c5c3397827,https://www.dropbox.com/s/9medvi8uwbxw8m8/02x03_i300.gif.zip?dl=0
data/input/screenshots/lakeslice/02x04_i1235.gif,7b7ad2a640681f7d786f2031c978e737,https://www.dropbox.com/s/nfur4j3vgmxln6o/02x04_i1235.gif.zip?dl=0
data/input/screenshots/lakeslice/02x05_i909.gif,dec9058c18cf9bb3205ae9938cacb40d,https://www.dropbox.com/s/t8z73308zmmfwy9/02x05_i909.gif.zip?dl=0
data/input/screenshots/lakeslice/02x06_i704.gif,d107a3a332133a1b32af9369208604c5,https://www.dropbox.com/s/2ie0tmk8qsrmiap/02x06_i704.gif.zip?dl=0
data/input/screenshots/lakeslice/02x07_i123.gif,fffa7e57ece9641c573cb0d84ead2168,https://www.dropbox.com/s/o793j4va7kjv7l7/02x07_i123.gif.zip?dl=0
data/input/screenshots/lakeslice/02x08_i201.gif,ad7e3e0cf4f10339a8d0aaaf14ce7b05,https://www.dropbox.com/s/mqadacrqi1z6ses/02x08_i201.gif.zip?dl=0
data/input/screenshots/lakeslice/02x09_i209.gif,87c8f5980e6625870b52b92e83e1d5d0,https://www.dropbox.com/s/5mtyj9v3ne6fjkk/02x09_i209.gif.zip?dl=0
data/input/screenshots/lakeslice/02x10_i79.gif,5d1d0e110f6d4936be5ed63675bd3d16,https://www.dropbox.com/s/dv3rwsfw05a76yc/02x10_i79.gif.zip?dl=0
data/input/screenshots/lakeslice/02x11_i315.gif,a0b5eced389605302a191412488ecf46,https://www.dropbox.com/s/ylh0w6jneg88230/02x11_i315.gif.zip?dl=0
data/input/screenshots/lakeslice/02x12_i313.gif,9f7bed1bbd156d89a4fe0b90971b3859,https://www.dropbox.com/s/hi43otif30d8ine/02x12_i313.gif.zip?dl=0
data/input/screenshots/lakeslice/02x13_i45.gif,586786a5d0c9a7c6e6c1b22df1884684,https://www.dropbox.com/s/x85ml86f7cxcqdf/02x13_i45.gif.zip?dl=0
data/input/screenshots/lakeslice/02x14_i312.gif,ea4fd1ed1ff000b340e1ecf422428cb9,https://www.dropbox.com/s/h1tuhg27aavmxob/02x14_i312.gif.zip?dl=0
data/input/screenshots/lakeslice/02x15_i239.gif,72e7b0e6dc6b15ea2a1eedeb7578e686,https://www.dropbox.com/s/n1vnxon9c4ppxk0/02x15_i239.gif.zip?dl=0
data/input/screenshots/lakeslice/02x16_i221.gif,c0c37b0158e525ce7f1f7715530a1543,https://www.dropbox.com/s/cssek1c3edv23uz/02x16_i221.gif.zip?dl=0
data/input/screenshots/lakeslice/02x17_i235.gif,5f0b2c3edce0047a3a88b76036e61706,https://www.dropbox.com/s/k6gn5qzksle118c/02x17_i235.gif.zip?dl=0
data/input/screenshots/lakeslice/02x05_i909.gif,35baa2a009016e5e35abe1ab41e7a7fa,https://www.dropbox.com/s/t8z73308zmmfwy9/02x05_i909.gif.zip?dl=0
data/input/screenshots/lakeslice/02x06_i704.gif,33d0ddf51fda19dbc10609d02338a337,https://www.dropbox.com/s/2ie0tmk8qsrmiap/02x06_i704.gif.zip?dl=0
data/input/screenshots/lakeslice/02x07_i123.gif,5c8e84b6c7eebffc6f2174f6d23e054f,https://www.dropbox.com/s/o793j4va7kjv7l7/02x07_i123.gif.zip?dl=0
data/input/screenshots/lakeslice/02x08_i201.gif,27e387fe67d394e3e2486bdd374d1045,https://www.dropbox.com/s/mqadacrqi1z6ses/02x08_i201.gif.zip?dl=0
data/input/screenshots/lakeslice/02x09_i209.gif,eeb08d6821ada10a4e6aacabe8694d32,https://www.dropbox.com/s/5mtyj9v3ne6fjkk/02x09_i209.gif.zip?dl=0
data/input/screenshots/lakeslice/02x10_i79.gif,cb6c604a29e1912034389f6813118bc0,https://www.dropbox.com/s/dv3rwsfw05a76yc/02x10_i79.gif.zip?dl=0
data/input/screenshots/lakeslice/02x11_i315.gif,22ddaeb9878cb9c05bc1a4637744731d,https://www.dropbox.com/s/ylh0w6jneg88230/02x11_i315.gif.zip?dl=0
data/input/screenshots/lakeslice/02x12_i313.gif,c4460ee87594a134f48eec1e1e78c4a3,https://www.dropbox.com/s/hi43otif30d8ine/02x12_i313.gif.zip?dl=0
data/input/screenshots/lakeslice/02x13_i45.gif,8e05882d2522cf910293c2a397dc242b,https://www.dropbox.com/s/x85ml86f7cxcqdf/02x13_i45.gif.zip?dl=0
data/input/screenshots/lakeslice/02x14_i312.gif,ae4bcd03ab4000b3698d01785e742fff,https://www.dropbox.com/s/h1tuhg27aavmxob/02x14_i312.gif.zip?dl=0
data/input/screenshots/lakeslice/02x15_i239.gif,e431cd5825e2c08f7a74e3eca5fad87f,https://www.dropbox.com/s/n1vnxon9c4ppxk0/02x15_i239.gif.zip?dl=0
data/input/screenshots/lakeslice/02x16_i221.gif,e396ba4eb54fade38eb4f980f8518837,https://www.dropbox.com/s/cssek1c3edv23uz/02x16_i221.gif.zip?dl=0
data/input/screenshots/lakeslice/02x17_i235.gif,4e38b9a788e3667f4226af7b11240dff,https://www.dropbox.com/s/k6gn5qzksle118c/02x17_i235.gif.zip?dl=0
data/input/screenshots/lakeslice/02x18_i236.gif,eb70114735027cf6680b466cfc145251,https://www.dropbox.com/s/ghgtdjrgcpot8s7/02x18_i236.gif.zip?dl=0
data/input/screenshots/lakeslice/02x19_i12.gif,f00822881feda2b19dc97149f3ec7b4a,https://www.dropbox.com/s/wd6b7w5uj9j46ss/02x19_i12.gif.zip?dl=0
data/input/screenshots/lakeslice/02x20_i190.gif,31fc8669b1f5a094e89454943841a8e8,https://www.dropbox.com/s/2wphy2v7s2wl0f2/02x20_i190.gif.zip?dl=0
data/input/screenshots/lakeslice/02x21_i229.gif,fafb65c78b9377447f54e4d0ab8e1881,https://www.dropbox.com/s/7jt78sq50vxgakw/02x21_i229.gif.zip?dl=0
data/input/screenshots/lakeslice/02x22_i32.gif,8112d9f6533b2fab64b29ff102e17b87,https://www.dropbox.com/s/35jpo6yh985u61d/02x22_i32.gif.zip?dl=0
data/input/screenshots/lakeslice/02x23_i33.gif,21c7f833f61a050bdb42ac9afae45ccb,https://www.dropbox.com/s/o1ane9hvxk2f8i6/02x23_i33.gif.zip?dl=0
data/input/screenshots/lakeslice/02x21_i229.gif,41e8eb50ab3733136b07b6ed081e09ff,https://www.dropbox.com/s/7jt78sq50vxgakw/02x21_i229.gif.zip?dl=0
data/input/screenshots/lakeslice/02x22_i32.gif,3aff52478ddbca936819e92978efd3b7,https://www.dropbox.com/s/35jpo6yh985u61d/02x22_i32.gif.zip?dl=0
data/input/screenshots/lakeslice/02x23_i33.gif,efed08ff63b249904d614ff9195ebf3d,https://www.dropbox.com/s/o1ane9hvxk2f8i6/02x23_i33.gif.zip?dl=0
data/input/screenshots/lakeslice/03x01.gif,da70eeb59d35438f548685c42ce1f2d0,https://www.dropbox.com/s/5ijnumye9627six/03x01.gif.zip?dl=0
data/input/screenshots/lakeslice/03x02_i590.gif,726f189cd3121cdff2e948172b83742d,https://www.dropbox.com/s/xp2mn4x1off8uwl/03x02_i590.gif.zip?dl=0
data/input/screenshots/lakeslice/03x03.gif,fb4583aded837619bbd42257fdfa3e5f,https://www.dropbox.com/s/woxrbkp6r88p748/03x03.gif.zip?dl=0
data/input/screenshots/lakeslice/03x02_i590.gif,bdf861e55ba67c3f4e42078d1c9f5431,https://www.dropbox.com/s/xp2mn4x1off8uwl/03x02_i590.gif.zip?dl=0
data/input/screenshots/lakeslice/03x03.gif,f55b915a4225ac0f6a6e745d133c4714,https://www.dropbox.com/s/woxrbkp6r88p748/03x03.gif.zip?dl=0
data/input/screenshots/lakeslice/03x04.gif,505fab7fee044bc59da6ee18e1272a8a,https://www.dropbox.com/s/e5yvkwsbok7rmdn/03x04.gif.zip?dl=0
data/input/screenshots/lakeslice/03x05_i1242.gif,99cc8b7b7b1ad35a8de2391df93604cf,https://www.dropbox.com/s/0lh63wgh2b67ojc/03x05_i1242.gif.zip?dl=0
data/input/screenshots/lakeslice/03x06_i366.gif,7520f1240f4232013d6af0d63ca79bb6,https://www.dropbox.com/s/15hedvq1ekndpm1/03x06_i366.gif.zip?dl=0
data/input/screenshots/lakeslice/03x07_i120.gif,28d991def186efd1546b3d7b1ae754b6,https://www.dropbox.com/s/qqmpd4yfz7et8n2/03x07_i120.gif.zip?dl=0
data/input/screenshots/lakeslice/03x06_i366.gif,68405f97b4dbf6abd0e729cd436b7ade,https://www.dropbox.com/s/15hedvq1ekndpm1/03x06_i366.gif.zip?dl=0
data/input/screenshots/lakeslice/03x07_i120.gif,2ac0db536f7958d169ed085fd6c3850f,https://www.dropbox.com/s/qqmpd4yfz7et8n2/03x07_i120.gif.zip?dl=0
data/input/screenshots/lakeslice/03x08_i67.gif,a25966bd44c2147306e5530efebfe84e,https://www.dropbox.com/s/rfp1x1jwkhe141x/03x08_i67.gif.zip?dl=0
data/input/screenshots/lakeslice/03x09_i68.gif,611b6f1aa82c1541b297c8a0ba7845da,https://www.dropbox.com/s/vbvmvzl3kfi4j6i/03x09_i68.gif.zip?dl=0
data/input/screenshots/lakeslice/03x10_i86.gif,da696b007751b13acdbe9652748179e5,https://www.dropbox.com/s/0iw0md14jl4fwzn/03x10_i86.gif.zip?dl=0
@ -192,30 +192,30 @@ data/input/screenshots/lakeslice/03x11_i154.gif,80f9faa55d7b40facc3cbfc826f7a8c4
data/input/screenshots/lakeslice/03x12_i152.gif,020d35fe5272b6464c32f8fee72b7e2a,https://www.dropbox.com/s/fupw68cay04hc33/03x12_i152.gif.zip?dl=0
data/input/screenshots/lakeslice/03x13_i31.gif,baebc8f1611a69c4761e2051aa652df0,https://www.dropbox.com/s/k9bi6kqjea3wtrn/03x13_i31.gif.zip?dl=0
data/input/screenshots/lakeslice/03x14_i149.gif,2eccc866e46c20a766ae827dbca1621c,https://www.dropbox.com/s/783xl664nlsg4op/03x14_i149.gif.zip?dl=0
data/input/screenshots/lakeslice/03x15_i170.gif,8f710b5dd09ca06c231101c0ab9d2528,https://www.dropbox.com/s/j8ryjgdib7tzo6q/03x15_i170.gif.zip?dl=0
data/input/screenshots/lakeslice/03x15_i170.gif,79d7bc2a718507d21ebcc7ffb1527d7f,https://www.dropbox.com/s/j8ryjgdib7tzo6q/03x15_i170.gif.zip?dl=0
data/input/screenshots/lakeslice/03x16_i28.gif,7776f58d0d830956818b4a6e503924f8,https://www.dropbox.com/s/l9wg5qhhpbtqv1v/03x16_i28.gif.zip?dl=0
data/input/screenshots/lakeslice/03x17_i28.gif,4b2f4fac0e38ed6ded6ee05cd49ba313,https://www.dropbox.com/s/84fw8kokt77ovmx/03x17_i28.gif.zip?dl=0
data/input/screenshots/lakeslice/03x17_i28.gif,8d2cc1d3fc28ec682ee248c32e5341d4,https://www.dropbox.com/s/84fw8kokt77ovmx/03x17_i28.gif.zip?dl=0
data/input/screenshots/lakeslice/03x18_i279.gif,b0d38843cad0bad7ede52b466df38c68,https://www.dropbox.com/s/1n9k3t2v9t2ir07/03x18_i279.gif.zip?dl=0
data/input/screenshots/lakeslice/03x19_i13.gif,9e4326811cca6cdc14ff25882dd7008f,https://www.dropbox.com/s/xi6jd42mu9npdg1/03x19_i13.gif.zip?dl=0
data/input/screenshots/lakeslice/03x20_i71.gif,f5dedea107d55a3e6eb05c5a0afeb35a,https://www.dropbox.com/s/yi4iuel381y9e1u/03x20_i71.gif.zip?dl=0
data/input/screenshots/lakeslice/03x21_i269.gif,c2d092448b94522fd488ca069ebf5970,https://www.dropbox.com/s/nc026otd8xri1ru/03x21_i269.gif.zip?dl=0
data/input/screenshots/lakeslice/03x22_i274.gif,9bed95ac068151297729e3a2dd2c6d7c,https://www.dropbox.com/s/6g6xzbvbz00yhyp/03x22_i274.gif.zip?dl=0
data/input/screenshots/lakeslice/03x19_i13.gif,8781692ff051a2733cb0bec690704666,https://www.dropbox.com/s/xi6jd42mu9npdg1/03x19_i13.gif.zip?dl=0
data/input/screenshots/lakeslice/03x20_i71.gif,4b79e61a7602bd3a828a9f6dd4b0616a,https://www.dropbox.com/s/yi4iuel381y9e1u/03x20_i71.gif.zip?dl=0
data/input/screenshots/lakeslice/03x21_i269.gif,04606344ac628901f876e8cebe1ea8c3,https://www.dropbox.com/s/nc026otd8xri1ru/03x21_i269.gif.zip?dl=0
data/input/screenshots/lakeslice/03x22_i274.gif,bb012d09348cd61b5141f5a3566940fa,https://www.dropbox.com/s/6g6xzbvbz00yhyp/03x22_i274.gif.zip?dl=0
data/input/screenshots/lakeslice/03x23_i276.gif,e4dc2dc31c3af94e2451bd2111b266af,https://www.dropbox.com/s/vxca24ldnk7br5z/03x23_i276.gif.zip?dl=0
data/input/screenshots/lakeslice/04x01_i117.gif,847692581c991f31c8605034b360b8b8,https://www.dropbox.com/s/9icftm4f1dp9ehn/04x01_i117.gif.zip?dl=0
data/input/screenshots/lakeslice/04x02_i115.gif,5cc0a9a248272fb5eee30796eb5bb485,https://www.dropbox.com/s/go74zk85cfwrhe5/04x02_i115.gif.zip?dl=0
data/input/screenshots/lakeslice/04x03_i112.gif,fc01bbe56ebc2096fbdb365ac40deb56,https://www.dropbox.com/s/4fxlu0htfdoo823/04x03_i112.gif.zip?dl=0
data/input/screenshots/lakeslice/04x04_i111.gif,f209b67795a29996e3837019d7744025,https://www.dropbox.com/s/lqkrcb4sx4vfzx3/04x04_i111.gif.zip?dl=0
data/input/screenshots/lakeslice/04x04_i111.gif,c6a9c6bb546f773d45862f13faa755e7,https://www.dropbox.com/s/lqkrcb4sx4vfzx3/04x04_i111.gif.zip?dl=0
data/input/screenshots/lakeslice/04x05_i108.gif,becf5cae1104cd8a23b75850670a07dd,https://www.dropbox.com/s/fdz8yf4h5zrvqlj/04x05_i108.gif.zip?dl=0
data/input/screenshots/lakeslice/04x06_i30.gif,38589196c245b5282abb488e2d1e2c7d,https://www.dropbox.com/s/z6okyogn4km0ovx/04x06_i30.gif.zip?dl=0
data/input/screenshots/lakeslice/04x06_i30.gif,8acdc2d48b43cdcb244b641c01e41508,https://www.dropbox.com/s/z6okyogn4km0ovx/04x06_i30.gif.zip?dl=0
data/input/screenshots/lakeslice/04x07_i24.gif,38335d7aaecdc205e9be487636559666,https://www.dropbox.com/s/sqjjm7rz77726m8/04x07_i24.gif.zip?dl=0
data/input/screenshots/lakeslice/04x08_i26.gif,26fb269040d0598f87250eec5da77cc4,https://www.dropbox.com/s/is3ss43t09bdm4t/04x08_i26.gif.zip?dl=0
data/input/screenshots/lakeslice/04x09_i64.gif,fa23965b33277b9d2baba2ddd7ad185f,https://www.dropbox.com/s/4ezx9o7q8jyhjpr/04x09_i64.gif.zip?dl=0
data/input/screenshots/lakeslice/04x09_i64.gif,2932a752f9cc30b49287ac75f90f7fd1,https://www.dropbox.com/s/4ezx9o7q8jyhjpr/04x09_i64.gif.zip?dl=0
data/input/screenshots/lakeslice/04x10_i63.gif,174a21e3028e4b887475c8613499a139,https://www.dropbox.com/s/g59izyo8nkvzl7x/04x10_i63.gif.zip?dl=0
data/input/screenshots/lakeslice/04x11_i118.gif,96b3923c00a77ff32a626c26b32f1a87,https://www.dropbox.com/s/3nmsvr73oupuiss/04x11_i118.gif.zip?dl=0
data/input/screenshots/lakeslice/04x12_i458.gif,4bd1f52a469a86596dcf08fd5aad6858,https://www.dropbox.com/s/dg363rovi4h1vtq/04x12_i458.gif.zip?dl=0
data/input/screenshots/lakeslice/04x13_i128.gif,2116636e3a99bb5ed61bd01b02941639,https://www.dropbox.com/s/kpils4nk7fc2x8c/04x13_i128.gif.zip?dl=0
data/input/screenshots/lakeslice/04x14_i173.gif,1a28fc0a3605865a2b9d5fe7159f468b,https://www.dropbox.com/s/e92962pedyrg2aq/04x14_i173.gif.zip?dl=0
data/input/screenshots/lakeslice/04x15_i172.gif,b748320861b8aae1ad62ec33261d66c3,https://www.dropbox.com/s/vgcuaklgp3pdog0/04x15_i172.gif.zip?dl=0
data/input/screenshots/lakeslice/04x13_i128.gif,5eda2d7a89d5009566956007b998cc6a,https://www.dropbox.com/s/kpils4nk7fc2x8c/04x13_i128.gif.zip?dl=0
data/input/screenshots/lakeslice/04x14_i173.gif,2f00cf44d021d4095b1594c0c9e2df76,https://www.dropbox.com/s/e92962pedyrg2aq/04x14_i173.gif.zip?dl=0
data/input/screenshots/lakeslice/04x15_i172.gif,4beb7f0260a635fb32f63bf950503c79,https://www.dropbox.com/s/vgcuaklgp3pdog0/04x15_i172.gif.zip?dl=0
data/input/screenshots/lakeslice/04x16_i1292.gif,a750fb61b8c7cbcae03ec5064dc87dae,https://www.dropbox.com/s/zeppz1m59sk5aha/04x16_i1292.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
@ -226,7 +226,7 @@ data/input/screenshots/lakeslice/04x22.gif,d12f4f2da1945a5999d0ae23ebaec6dd,http
data/input/screenshots/lakeslice/04x23_i3.gif,f889befb0298556ec9bedb3b0d130931,https://www.dropbox.com/s/v03keik2ktei5i2/04x23_i3.gif.zip?dl=0
data/input/screenshots/lakeslice/05x01.gif,9edcacb869e5a07491cf1528b56e04a1,https://www.dropbox.com/s/pj58sr18r0ut2fn/05x01.gif.zip?dl=0
data/input/screenshots/lakeslice/05x02_i162.gif,5f2293758703bc936b8eb4731b79e935,https://www.dropbox.com/s/yv6ci5muhrk9dvf/05x02_i162.gif.zip?dl=0
data/input/screenshots/lakeslice/05x03_i868.gif,913fac1a81d5f493b2cfe793c3c93c99,https://www.dropbox.com/s/91wl1ncej0i8pnm/05x03_i868.gif.zip?dl=0
data/input/screenshots/lakeslice/05x03_i868.gif,cfdd9cad73f7e7b450b7fd44aabf85f7,https://www.dropbox.com/s/91wl1ncej0i8pnm/05x03_i868.gif.zip?dl=0
data/input/screenshots/lakeslice/05x04_i640.gif,aec09d68ee76f5c3500f95e292b368d9,https://www.dropbox.com/s/he1u5bnoywnd30r/05x04_i640.gif.zip?dl=0
data/input/screenshots/lakeslice/05x05.gif,620ad0fa5ca035f066981d1ed8bb2810,https://www.dropbox.com/s/hewvrh2k42b21hs/05x05.gif.zip?dl=0
data/input/screenshots/lakeslice/05x06.gif,39fcc3d533707143f51c07013c80ed44,https://www.dropbox.com/s/bh0e7g75e7xyyc4/05x06.gif.zip?dl=0
@ -249,73 +249,73 @@ data/input/screenshots/lakeslice/05x22.gif,8eb32ff700be3a4ded979bb464a47a44,http
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/montlake/01x01_i17.gif,036c8df7e02002c186987ddf3acd60f1,https://www.dropbox.com/s/2j53dspggwi2kd8/01x01_i17.gif.zip?dl=0
data/input/screenshots/montlake/01x02_i1.gif,da3a90dab88651a93570e2d6286a99f8,https://www.dropbox.com/s/5pti44dcywvrrtb/01x02_i1.gif.zip?dl=0
data/input/screenshots/montlake/01x02_i1.gif,c0e8e9504a3ac8156769afcfaac8f91f,https://www.dropbox.com/s/5pti44dcywvrrtb/01x02_i1.gif.zip?dl=0
data/input/screenshots/montlake/01x03_i0.gif,fec8a5ff77552e1eda3bd5a54a487c2e,https://www.dropbox.com/s/wdi31t07l42kidf/01x03_i0.gif.zip?dl=0
data/input/screenshots/montlake/01x04_i31.gif,859df2e27fe3a31c1bb6386ddd115f98,https://www.dropbox.com/s/w80vq51ck4jzyo7/01x04_i31.gif.zip?dl=0
data/input/screenshots/montlake/01x05_i41.gif,2a66ba28ff4d272179e4883fee60c08b,https://www.dropbox.com/s/fv917idzzwzhl3h/01x05_i41.gif.zip?dl=0
data/input/screenshots/montlake/01x06_i25.gif,c629ae8030a2d93583187fc7176165f5,https://www.dropbox.com/s/9ykaz7exciz87j5/01x06_i25.gif.zip?dl=0
data/input/screenshots/montlake/01x05_i41.gif,9e37def6013ba1060ec6929d60b65534,https://www.dropbox.com/s/fv917idzzwzhl3h/01x05_i41.gif.zip?dl=0
data/input/screenshots/montlake/01x06_i25.gif,17717c65724676563100075f84f7f174,https://www.dropbox.com/s/9ykaz7exciz87j5/01x06_i25.gif.zip?dl=0
data/input/screenshots/montlake/02x01_i13.gif,8cf02f4d55e507ba036747db707eefd0,https://www.dropbox.com/s/ft32tu18eudkk9d/02x01_i13.gif.zip?dl=0
data/input/screenshots/montlake/02x02_i4.gif,05387ab096fb91c69056d25e5c742f39,https://www.dropbox.com/s/3rl20i1qgvrqnar/02x02_i4.gif.zip?dl=0
data/input/screenshots/montlake/02x03_i57.gif,8f8dcba66c5a2a74c31bb1822e48d180,https://www.dropbox.com/s/n4eofvg2vou3kwp/02x03_i57.gif.zip?dl=0
data/input/screenshots/montlake/02x04_i24.gif,fa40d2abefdce52292d03b1e97a490fe,https://www.dropbox.com/s/k2qz2zyr1ssgdml/02x04_i24.gif.zip?dl=0
data/input/screenshots/montlake/02x05_i132.gif,7b00f79f10913ef3a60f9b4d90e1d78d,https://www.dropbox.com/s/psstsip2u3dsu4d/02x05_i132.gif.zip?dl=0
data/input/screenshots/montlake/02x03_i57.gif,93826e7742ea6ec8b090a543a636fe8b,https://www.dropbox.com/s/n4eofvg2vou3kwp/02x03_i57.gif.zip?dl=0
data/input/screenshots/montlake/02x04_i24.gif,b0d17644a04d15764a58d59676876d04,https://www.dropbox.com/s/k2qz2zyr1ssgdml/02x04_i24.gif.zip?dl=0
data/input/screenshots/montlake/02x05_i132.gif,64f3cdf0e3208b4cb7ae128240803888,https://www.dropbox.com/s/psstsip2u3dsu4d/02x05_i132.gif.zip?dl=0
data/input/screenshots/montlake/02x06_i91.gif,1238f2435d7f5e5e636e8947a4c9e550,https://www.dropbox.com/s/5zra92ko89j65te/02x06_i91.gif.zip?dl=0
data/input/screenshots/montlake/03x01_i259.gif,14c6e884ae373ccd413b69d59f3fe89f,https://www.dropbox.com/s/updgn6yo6887tj9/03x01_i259.gif.zip?dl=0
data/input/screenshots/montlake/03x02_i3.gif,1c0b33a2b3e214a7150fc011378a964b,https://www.dropbox.com/s/uma107u3axw9hbq/03x02_i3.gif.zip?dl=0
data/input/screenshots/montlake/03x03_i61.gif,71dbcb7bb8e1e6abaf754d8285570780,https://www.dropbox.com/s/ptx2owcjxrmrfod/03x03_i61.gif.zip?dl=0
data/input/screenshots/montlake/03x01_i259.gif,ccc173e3ec5fa2ea6395e72f1e29f5fc,https://www.dropbox.com/s/updgn6yo6887tj9/03x01_i259.gif.zip?dl=0
data/input/screenshots/montlake/03x02_i3.gif,3cabc7e367d3bb9e8ed3f6c0f5baaf62,https://www.dropbox.com/s/uma107u3axw9hbq/03x02_i3.gif.zip?dl=0
data/input/screenshots/montlake/03x03_i61.gif,957678bd1275e74cc65458bc9a52256a,https://www.dropbox.com/s/ptx2owcjxrmrfod/03x03_i61.gif.zip?dl=0
data/input/screenshots/montlake/03x04_i69.gif,92beab3978479e91367e18ab7e407520,https://www.dropbox.com/s/kl6g4owm9lm35oy/03x04_i69.gif.zip?dl=0
data/input/screenshots/montlake/03x05_i263.gif,e1f8e03333c6177b5abd635649602875,https://www.dropbox.com/s/kne0ol6uuvkiym5/03x05_i263.gif.zip?dl=0
data/input/screenshots/montlake/03x06_i199.gif,c459f9af6182de234cc939e7f6e3dbf3,https://www.dropbox.com/s/847zt0jhpra12id/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/udistrict/01x01_i155.gif,1516da5ce0a25ef67edcd854d0c2b592,https://www.dropbox.com/s/llpkvd4x9yho626/01x01_i155.gif.zip?dl=0
data/input/screenshots/udistrict/01x02_i183.gif,23423f44393d6a68dfefab5b04d7399d,https://www.dropbox.com/s/qgqrke1lnwg6qrr/01x02_i183.gif.zip?dl=0
data/input/screenshots/udistrict/01x03_i148.gif,8b1f6f1bdfd38815908586e288675999,https://www.dropbox.com/s/kzpns1qzail598r/01x03_i148.gif.zip?dl=0
data/input/screenshots/udistrict/01x02_i183.gif,4c4ed1bad4e6fa2da33e98b079c94888,https://www.dropbox.com/s/qgqrke1lnwg6qrr/01x02_i183.gif.zip?dl=0
data/input/screenshots/udistrict/01x03_i148.gif,5e65572e6ae56eca23e20da6d173a176,https://www.dropbox.com/s/kzpns1qzail598r/01x03_i148.gif.zip?dl=0
data/input/screenshots/udistrict/01x04_i175.gif,2fa4c6781bfac57454dce8e40c9aa1fc,https://www.dropbox.com/s/tzzoyb50l6zuav3/01x04_i175.gif.zip?dl=0
data/input/screenshots/udistrict/01x05_i275.gif,e919ad8d2437533b99d40859d5c46048,https://www.dropbox.com/s/y2pldcx1n7brxc2/01x05_i275.gif.zip?dl=0
data/input/screenshots/udistrict/01x05_i275.gif,f0902d5c8f926f20898a4cca30d240e7,https://www.dropbox.com/s/y2pldcx1n7brxc2/01x05_i275.gif.zip?dl=0
data/input/screenshots/udistrict/01x06_i0.gif,9f23128d04dab19d3c44e688dd1a0217,https://www.dropbox.com/s/8vcmq5k24g0mnvu/01x06_i0.gif.zip?dl=0
data/input/screenshots/udistrict/01x07_i187.gif,05c4caa1b9aa3388a010dd1287b5662e,https://www.dropbox.com/s/ktzhoyfya060u4i/01x07_i187.gif.zip?dl=0
data/input/screenshots/udistrict/01x08_i66.gif,c03b0fdfffe0539791bc66d380732042,https://www.dropbox.com/s/mq8cj6uxrfj9yzo/01x08_i66.gif.zip?dl=0
data/input/screenshots/udistrict/01x07_i187.gif,af2dae64093e25bb28b32c3d539313af,https://www.dropbox.com/s/ktzhoyfya060u4i/01x07_i187.gif.zip?dl=0
data/input/screenshots/udistrict/01x08_i66.gif,3c5a43237e60b61b15c568bb9b667b75,https://www.dropbox.com/s/mq8cj6uxrfj9yzo/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,1ff9233ddd7887d9a1bfa3c0d77a3c3e,https://www.dropbox.com/s/uizw7lyz3n0xvly/02x01_i1.gif.zip?dl=0
data/input/screenshots/udistrict/02x02_i195.gif,916b7f30b87fb4c4fefc90241d02c7ff,https://www.dropbox.com/s/s5sndl9mlbftumh/02x02_i195.gif.zip?dl=0
data/input/screenshots/udistrict/02x03_i149.gif,64c42a68c18c3e0a19ef1d10ddcc48e6,https://www.dropbox.com/s/x7bmv3i9uxah9h9/02x03_i149.gif.zip?dl=0
data/input/screenshots/udistrict/02x02_i195.gif,285ee71351c4d0ed22551887c06cfca3,https://www.dropbox.com/s/s5sndl9mlbftumh/02x02_i195.gif.zip?dl=0
data/input/screenshots/udistrict/02x03_i149.gif,7ab17362843622622b242087cdaa8005,https://www.dropbox.com/s/x7bmv3i9uxah9h9/02x03_i149.gif.zip?dl=0
data/input/screenshots/udistrict/02x04_i178.gif,6f7a1b27dafcae3084ef7b04af9bafca,https://www.dropbox.com/s/6jewbbow8flrqm7/02x04_i178.gif.zip?dl=0
data/input/screenshots/udistrict/02x05_i60.gif,4ab6162b1054dd08bd7f0933dafc70f0,https://www.dropbox.com/s/83i8khpfbyj91v9/02x05_i60.gif.zip?dl=0
data/input/screenshots/udistrict/02x06_i59.gif,f8c710318acc7d16f6d30f773c0037c4,https://www.dropbox.com/s/f0dyqp29nnmajvx/02x06_i59.gif.zip?dl=0
data/input/screenshots/udistrict/02x07_i187.gif,f29de6054b02afd64034ae61ca2fc881,https://www.dropbox.com/s/deq2tos7znyodxu/02x07_i187.gif.zip?dl=0
data/input/screenshots/udistrict/02x08_i424.gif,dacab9b387531a5900cba5cd7a299694,https://www.dropbox.com/s/sn34b26s1yxehyh/02x08_i424.gif.zip?dl=0
data/input/screenshots/udistrict/02x05_i60.gif,78254d53207d30e6b2edc42b96b090ed,https://www.dropbox.com/s/83i8khpfbyj91v9/02x05_i60.gif.zip?dl=0
data/input/screenshots/udistrict/02x06_i59.gif,5ec12d2d930c5b1bd2c37bf1a29eaf1c,https://www.dropbox.com/s/f0dyqp29nnmajvx/02x06_i59.gif.zip?dl=0
data/input/screenshots/udistrict/02x07_i187.gif,36bb5af4524d782663ab9b7741fc8085,https://www.dropbox.com/s/deq2tos7znyodxu/02x07_i187.gif.zip?dl=0
data/input/screenshots/udistrict/02x08_i424.gif,fc80762f690612df426f4acf033f2a9c,https://www.dropbox.com/s/sn34b26s1yxehyh/02x08_i424.gif.zip?dl=0
data/input/screenshots/udistrict/02x09.gif,56c28c1f06652fc67fd99d334c8b282e,https://www.dropbox.com/s/te4q4tzpcnu8aiw/02x09.gif.zip?dl=0
data/input/screenshots/udistrict/03x01_i4.gif,49d16a61771f186ca9c64f8fda54255e,https://www.dropbox.com/s/x6t124no4oqm4q0/03x01_i4.gif.zip?dl=0
data/input/screenshots/udistrict/03x02_i21.gif,82af601f457625d96b1559689ef61d7e,https://www.dropbox.com/s/czg8hbgr6evpbkt/03x02_i21.gif.zip?dl=0
data/input/screenshots/udistrict/03x03_i25.gif,275694e2cd72f34f4a744e59f1d356c0,https://www.dropbox.com/s/a4kk5wenppes8kt/03x03_i25.gif.zip?dl=0
data/input/screenshots/udistrict/03x04_i14.gif,25d1844bedc86167aeae25e6a89a27f0,https://www.dropbox.com/s/e1vna8fedtbc7xi/03x04_i14.gif.zip?dl=0
data/input/screenshots/udistrict/03x05_i62.gif,19c0b28b9d6780b8ae7eee9207753758,https://www.dropbox.com/s/gjna6n5kaa9hcdg/03x05_i62.gif.zip?dl=0
data/input/screenshots/udistrict/03x06_i436.gif,38d491b50cd09dae89c92b936e9a2408,https://www.dropbox.com/s/n9uiemfr9p7rsih/03x06_i436.gif.zip?dl=0
data/input/screenshots/udistrict/03x07_i236.gif,46584a5e03f59173b6d0a712bbfbf519,https://www.dropbox.com/s/zu2u60wi0iq0hi0/03x07_i236.gif.zip?dl=0
data/input/screenshots/udistrict/03x01_i4.gif,fdb5cc61cd9807f2b0d11f1310286efa,https://www.dropbox.com/s/x6t124no4oqm4q0/03x01_i4.gif.zip?dl=0
data/input/screenshots/udistrict/03x02_i21.gif,d7305e0908c0628e17959a015b9f046c,https://www.dropbox.com/s/czg8hbgr6evpbkt/03x02_i21.gif.zip?dl=0
data/input/screenshots/udistrict/03x03_i25.gif,3ae0107b7340e33d5eecd6f2a6caae57,https://www.dropbox.com/s/a4kk5wenppes8kt/03x03_i25.gif.zip?dl=0
data/input/screenshots/udistrict/03x04_i14.gif,3e8a6b72d08b5d06c99a3cc12d6d238f,https://www.dropbox.com/s/e1vna8fedtbc7xi/03x04_i14.gif.zip?dl=0
data/input/screenshots/udistrict/03x05_i62.gif,7151fefafd1f8ff9eeebb53e2c411d51,https://www.dropbox.com/s/gjna6n5kaa9hcdg/03x05_i62.gif.zip?dl=0
data/input/screenshots/udistrict/03x06_i436.gif,76885f23fe7b6730460410209c1da664,https://www.dropbox.com/s/n9uiemfr9p7rsih/03x06_i436.gif.zip?dl=0
data/input/screenshots/udistrict/03x07_i236.gif,9804f718af2b38cda260652e7f6691b5,https://www.dropbox.com/s/zu2u60wi0iq0hi0/03x07_i236.gif.zip?dl=0
data/input/screenshots/udistrict/03x08_i145.gif,b417dc66126c920a833820daaed745aa,https://www.dropbox.com/s/aiur19thxbe6e4s/03x08_i145.gif.zip?dl=0
data/input/screenshots/udistrict/03x09.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/jycyqycbmav6pr8/03x09.gif.zip?dl=0
data/input/screenshots/udistrict/04x01_i68.gif,2e0caf8acb0ba632af5c902b8c611613,https://www.dropbox.com/s/otyvdrv8peppiqf/04x01_i68.gif.zip?dl=0
data/input/screenshots/udistrict/04x02_i268.gif,f447aae99b34ce3488839278b3db577a,https://www.dropbox.com/s/sx2p2wj4t4qhpqw/04x02_i268.gif.zip?dl=0
data/input/screenshots/udistrict/04x03_i36.gif,c8a72411206d4ee6cba569fc5058f767,https://www.dropbox.com/s/zmioit83xsxfdw0/04x03_i36.gif.zip?dl=0
data/input/screenshots/udistrict/04x04_i69.gif,a880ffb491eb3060d1aecbaa1e5e082f,https://www.dropbox.com/s/8nd58xh4j7alnsy/04x04_i69.gif.zip?dl=0
data/input/screenshots/udistrict/04x05_i41.gif,2f986c385adf727aed7ed454e7c58ba3,https://www.dropbox.com/s/kppoduz4uiicqx1/04x05_i41.gif.zip?dl=0
data/input/screenshots/udistrict/04x06_i57.gif,2d482d00b0dbf08864e1979af34e28f3,https://www.dropbox.com/s/qdx77gfbpje6shb/04x06_i57.gif.zip?dl=0
data/input/screenshots/udistrict/04x07_i596.gif,e49ffaa5746609d351052422c5eb7ee9,https://www.dropbox.com/s/n5tclew8o2lzh1d/04x07_i596.gif.zip?dl=0
data/input/screenshots/udistrict/04x01_i68.gif,a271594d54626da6bc8a39ac45a14127,https://www.dropbox.com/s/otyvdrv8peppiqf/04x01_i68.gif.zip?dl=0
data/input/screenshots/udistrict/04x02_i268.gif,cef55a3e69bbfdb3c501e59e758a5167,https://www.dropbox.com/s/sx2p2wj4t4qhpqw/04x02_i268.gif.zip?dl=0
data/input/screenshots/udistrict/04x03_i36.gif,170b783cd2d182cf60f43f832915b948,https://www.dropbox.com/s/zmioit83xsxfdw0/04x03_i36.gif.zip?dl=0
data/input/screenshots/udistrict/04x04_i69.gif,b68830162ee03243924e5f065c4cbd76,https://www.dropbox.com/s/8nd58xh4j7alnsy/04x04_i69.gif.zip?dl=0
data/input/screenshots/udistrict/04x05_i41.gif,f3ed3ca571f78ae00869ee7a25fbad8b,https://www.dropbox.com/s/kppoduz4uiicqx1/04x05_i41.gif.zip?dl=0
data/input/screenshots/udistrict/04x06_i57.gif,01618d6f5c906b81b43a306cb20cb69b,https://www.dropbox.com/s/qdx77gfbpje6shb/04x06_i57.gif.zip?dl=0
data/input/screenshots/udistrict/04x07_i596.gif,acad275b72a0fea71bd070dd0d95d4ad,https://www.dropbox.com/s/n5tclew8o2lzh1d/04x07_i596.gif.zip?dl=0
data/input/screenshots/udistrict/04x08.gif,83b9d64be3a002d82d6f37bdcf5f8a28,https://www.dropbox.com/s/2eqhafqpjjs4whz/04x08.gif.zip?dl=0
data/input/screenshots/udistrict/04x09.gif,8eb32ff700be3a4ded979bb464a47a44,https://www.dropbox.com/s/sbc7vun4od21kmj/04x09.gif.zip?dl=0
data/input/screenshots/udistrict/05x01_i198.gif,4d441133f7b25d8ca05c2acd234766c3,https://www.dropbox.com/s/3g3p2ldp9tvw7xg/05x01_i198.gif.zip?dl=0
data/input/screenshots/udistrict/05x02_i144.gif,527485b786e7a1a2282c1b679013aadb,https://www.dropbox.com/s/soli7ahgtke63mj/05x02_i144.gif.zip?dl=0
data/input/screenshots/udistrict/05x03_i562.gif,9ece0a5ecea69846e19fae40a5f4aac3,https://www.dropbox.com/s/xe1n4474apcnsve/05x03_i562.gif.zip?dl=0
data/input/screenshots/udistrict/05x04_i6.gif,95479d71d877562dc338dae84d93e2d8,https://www.dropbox.com/s/nq9h1vk8pwzy762/05x04_i6.gif.zip?dl=0
data/input/screenshots/udistrict/05x05_i7.gif,255e6c17bd68e043554846ad642add02,https://www.dropbox.com/s/36b3m1zhodp3d1k/05x05_i7.gif.zip?dl=0
data/input/screenshots/udistrict/05x06_i751.gif,baeb8ca095884a625dc1f5beb2c1e5c5,https://www.dropbox.com/s/d1kbfcbd1pkookv/05x06_i751.gif.zip?dl=0
data/input/screenshots/udistrict/05x07_i5.gif,fb1b8e329b039fdbd6d6ba5347c8e8de,https://www.dropbox.com/s/5a6oea278h4wfpq/05x07_i5.gif.zip?dl=0
data/input/screenshots/udistrict/05x01_i198.gif,b84a4cb1860171a6ac3892fe1abb2da2,https://www.dropbox.com/s/3g3p2ldp9tvw7xg/05x01_i198.gif.zip?dl=0
data/input/screenshots/udistrict/05x02_i144.gif,dd1a9a54c2ffa10d6ca1e9478d272aa4,https://www.dropbox.com/s/soli7ahgtke63mj/05x02_i144.gif.zip?dl=0
data/input/screenshots/udistrict/05x03_i562.gif,c49a29c3a93affa2523e3b9723fa694d,https://www.dropbox.com/s/xe1n4474apcnsve/05x03_i562.gif.zip?dl=0
data/input/screenshots/udistrict/05x04_i6.gif,92bec35242449f4a721fcbb51850b986,https://www.dropbox.com/s/nq9h1vk8pwzy762/05x04_i6.gif.zip?dl=0
data/input/screenshots/udistrict/05x05_i7.gif,6d68cb871944a6319560b26e769d7f9b,https://www.dropbox.com/s/36b3m1zhodp3d1k/05x05_i7.gif.zip?dl=0
data/input/screenshots/udistrict/05x06_i751.gif,e8012c51b082764efdf962f29469a5ee,https://www.dropbox.com/s/d1kbfcbd1pkookv/05x06_i751.gif.zip?dl=0
data/input/screenshots/udistrict/05x07_i5.gif,f348e337015527911171e0b51525c908,https://www.dropbox.com/s/5a6oea278h4wfpq/05x07_i5.gif.zip?dl=0
data/input/screenshots/udistrict/05x08_i610.gif,a7512f679839d6edfe16e622badcc2e8,https://www.dropbox.com/s/k4jp3xfvm32x91r/05x08_i610.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,591b94ac121e2162d623c84b6c4f692d,https://www.dropbox.com/s/ikcut5askvl6jc8/06x01_i218.gif.zip?dl=0
data/input/screenshots/udistrict/06x02_i146.gif,8ed3f6cbde495a423b63fda193cee599,https://www.dropbox.com/s/7ur0eazpaunkr90/06x02_i146.gif.zip?dl=0
data/input/screenshots/udistrict/06x03_i47.gif,3fec54f30f996f9ee7af9e192af17da5,https://www.dropbox.com/s/sjp5d55swladcr9/06x03_i47.gif.zip?dl=0
data/input/screenshots/udistrict/06x04_i135.gif,cfea17810548db3c335df3096de9a7e7,https://www.dropbox.com/s/s02zgrxw07tt32i/06x04_i135.gif.zip?dl=0
data/input/screenshots/udistrict/06x02_i146.gif,4be8f5eea45bc7f31f93a030cb98c801,https://www.dropbox.com/s/7ur0eazpaunkr90/06x02_i146.gif.zip?dl=0
data/input/screenshots/udistrict/06x03_i47.gif,bf4f032f3b514342e475bf31668b8399,https://www.dropbox.com/s/sjp5d55swladcr9/06x03_i47.gif.zip?dl=0
data/input/screenshots/udistrict/06x04_i135.gif,18df06df90fa7405314b83f0bd333d0b,https://www.dropbox.com/s/s02zgrxw07tt32i/06x04_i135.gif.zip?dl=0
data/input/screenshots/udistrict/06x05_i569.gif,c3bc73b38429c9c0cf9a6d66744f840f,https://www.dropbox.com/s/le5czpzdjymdecv/06x05_i569.gif.zip?dl=0
data/input/screenshots/udistrict/06x06.gif,ae86609d7ca233af1ea7d090ed246635,https://www.dropbox.com/s/lzvhekkaofzpefh/06x06.gif.zip?dl=0
data/input/screenshots/udistrict/06x07.gif,649fa67582cc8d983d7d63a519c7c825,https://www.dropbox.com/s/ylh4y2c2n929ybb/06x07.gif.zip?dl=0
@ -323,7 +323,7 @@ data/input/screenshots/udistrict/06x08.gif,4cddcd69d367a8dd6b91ec8e6c0b9495,http
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,3a476662f22e1a6d48454fa7ed164400,https://www.dropbox.com/s/edm2bh5pdob26i4/07x01_i2.gif.zip?dl=0
data/input/screenshots/udistrict/07x02_i153.gif,0a3ffae000cbd9b1f9ea730fac42d2f0,https://www.dropbox.com/s/dc4ae1s7eltaeq6/07x02_i153.gif.zip?dl=0
data/input/screenshots/udistrict/07x03_i93.gif,cff8b13b7ac4e05ee30ac086a29981ab,https://www.dropbox.com/s/vgt4ckdxa5glbov/07x03_i93.gif.zip?dl=0
data/input/screenshots/udistrict/07x03_i93.gif,6063038ae1658f693d3cdfdfcb7e60bb,https://www.dropbox.com/s/vgt4ckdxa5glbov/07x03_i93.gif.zip?dl=0
data/input/screenshots/udistrict/07x04_i250.gif,ffafd2b8e66da5c9ddbeb40f5b8783b2,https://www.dropbox.com/s/06fdval7jpoyjtm/07x04_i250.gif.zip?dl=0
data/input/screenshots/udistrict/07x05.gif,5274abc4196eeff3be32120bf5155f53,https://www.dropbox.com/s/1eilzv2xpdpj2vq/07x05.gif.zip?dl=0
data/input/screenshots/udistrict/07x06.gif,5ec11ca3817cecc6d51bf93b7f0da87e,https://www.dropbox.com/s/s3pwr699tf92win/07x06.gif.zip?dl=0
@ -363,17 +363,17 @@ data/input/seattle/popdat.bin,b1af9c0a3b0d6b6df36972bc2fd64fae,https://www.dropb
data/input/seattle/sidewalks.bin,034dd47ab77902dbc81c0107f13d8965,https://www.dropbox.com/s/ma9bmisijc7v7xa/sidewalks.bin.zip?dl=0
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,54affab540bb23c8a6e0fa6e76f582d8,https://www.dropbox.com/s/eupzog6iw7wtaas/seattle.bin.zip?dl=0
data/system/maps/ballard.bin,8ab0809d6d5f59893b2f557262138cd8,https://www.dropbox.com/s/u4rvz50she3yrk0/ballard.bin.zip?dl=0
data/system/maps/downtown.bin,a4f1a89a2346f170afdb2a465461e61f,https://www.dropbox.com/s/4do5cg4vc17lafo/downtown.bin.zip?dl=0
data/system/cities/seattle.bin,018968486daedf1b69a1b3be5a3749bf,https://www.dropbox.com/s/eupzog6iw7wtaas/seattle.bin.zip?dl=0
data/system/maps/ballard.bin,e1985b1ceac7c42e37cb2da37b887969,https://www.dropbox.com/s/u4rvz50she3yrk0/ballard.bin.zip?dl=0
data/system/maps/downtown.bin,ee9439d0b79265e552b201ed4d497bd1,https://www.dropbox.com/s/4do5cg4vc17lafo/downtown.bin.zip?dl=0
data/system/maps/downtown_atx.bin,0902409dad2c3f933027ae3651936254,https://www.dropbox.com/s/5avnbkd4oxby2hs/downtown_atx.bin.zip?dl=0
data/system/maps/huge_austin.bin,6a891b6a7597fd7f44e0229dd002773a,https://www.dropbox.com/s/khy0m6v9yt0gjnt/huge_austin.bin.zip?dl=0
data/system/maps/huge_seattle.bin,49b36b8a61efe9c7ff674b5f0772e149,https://www.dropbox.com/s/btvr3qajshnivhb/huge_seattle.bin.zip?dl=0
data/system/maps/lakeslice.bin,cb6411f858e010ac05254f4f03c254ac,https://www.dropbox.com/s/99zi0gcbyvqrkud/lakeslice.bin.zip?dl=0
data/system/maps/montlake.bin,e9c7cebc97852a89f9500051d5356114,https://www.dropbox.com/s/zvhm2j5lavixxcr/montlake.bin.zip?dl=0
data/system/maps/mt_baker.bin,d17d287b6ddfeacb2e34a09a104bdd6e,https://www.dropbox.com/s/cetje663p04cbgp/mt_baker.bin.zip?dl=0
data/system/maps/udistrict.bin,acc4d0e32e872c630c1888f098cda0db,https://www.dropbox.com/s/zqt2je8fadssz5j/udistrict.bin.zip?dl=0
data/system/maps/west_seattle.bin,db9d39d86f20696341686fa968e2c5fa,https://www.dropbox.com/s/5pp1ik9l40yj3wh/west_seattle.bin.zip?dl=0
data/system/maps/huge_seattle.bin,ead3af5f2342bacccf3bf60235679791,https://www.dropbox.com/s/btvr3qajshnivhb/huge_seattle.bin.zip?dl=0
data/system/maps/lakeslice.bin,c74a5f7f4d4f686370316e429557d171,https://www.dropbox.com/s/99zi0gcbyvqrkud/lakeslice.bin.zip?dl=0
data/system/maps/montlake.bin,466c30d4ec1944e0b8489ec790bb7e9f,https://www.dropbox.com/s/zvhm2j5lavixxcr/montlake.bin.zip?dl=0
data/system/maps/mt_baker.bin,ddf2b5be51e10b461c82fd74798aa166,https://www.dropbox.com/s/cetje663p04cbgp/mt_baker.bin.zip?dl=0
data/system/maps/udistrict.bin,4017c9d8e02094490f03ac5e3992fb0c,https://www.dropbox.com/s/zqt2je8fadssz5j/udistrict.bin.zip?dl=0
data/system/maps/west_seattle.bin,e468ffc258103d6ba28bf2f039f84fd5,https://www.dropbox.com/s/5pp1ik9l40yj3wh/west_seattle.bin.zip?dl=0
data/system/prebaked_results/lakeslice/weekday.bin,cbd73a7a14a8406a99cafac4e2eedf5b,https://www.dropbox.com/s/1c1sohvy50263wg/weekday.bin.zip?dl=0
data/system/prebaked_results/montlake/car vs bike contention.bin,ac46a6b81a65431209075a7de5ed9227,https://www.dropbox.com/s/jefg0ikjy9dsrdd/car%20vs%20bike%20contention.bin.zip?dl=0
data/system/prebaked_results/montlake/weekday.bin,cd953900d32389809fb2dda206789528,https://www.dropbox.com/s/1aq7n9ow8tfqb5d/weekday.bin.zip?dl=0

View File

@ -163,6 +163,10 @@ impl App {
if layers.show_areas {
g.redraw(&self.primary.draw_map.draw_all_areas);
}
if layers.show_parking_lots {
g.redraw(&self.primary.draw_map.draw_all_parking_lots);
// Not the paths
}
// Render bridges over intersections in the correct order
if layers.show_intersections {
g.redraw(&self.primary.draw_map.draw_all_unzoomed_intersections);
@ -223,6 +227,7 @@ impl App {
);
let mut drawn_all_buildings = false;
let mut drawn_all_parking_lots = false;
let mut drawn_all_areas = false;
for obj in objects {
@ -237,6 +242,13 @@ impl App {
drawn_all_buildings = true;
}
}
ID::ParkingLot(_) => {
if !drawn_all_parking_lots {
g.redraw(&self.primary.draw_map.draw_all_parking_lot_paths);
g.redraw(&self.primary.draw_map.draw_all_parking_lots);
drawn_all_parking_lots = true;
}
}
ID::Area(_) => {
if !drawn_all_areas {
g.redraw(&self.primary.draw_map.draw_all_areas);
@ -359,6 +371,7 @@ impl App {
let draw_map = &self.primary.draw_map;
let mut areas: Vec<&dyn Renderable> = Vec::new();
let mut parking_lots: Vec<&dyn Renderable> = Vec::new();
let mut lanes: Vec<&dyn Renderable> = Vec::new();
let mut roads: Vec<&dyn Renderable> = Vec::new();
let mut intersections: Vec<&dyn Renderable> = Vec::new();
@ -388,10 +401,8 @@ impl App {
agents_on.push(Traversable::Turn(*t));
}
}
// TODO front paths will get drawn over buildings, depending on quadtree order.
// probably just need to make them go around other buildings instead of having
// two passes through buildings.
ID::Building(id) => buildings.push(draw_map.get_b(id)),
ID::ParkingLot(id) => parking_lots.push(draw_map.get_pl(id)),
ID::BusStop(_) | ID::Turn(_) | ID::Car(_) | ID::Pedestrian(_) | ID::PedCrowd(_) => {
panic!("{:?} shouldn't be in the quadtree", id)
@ -402,6 +413,7 @@ impl App {
// From background to foreground Z-order
let mut borrows: Vec<&dyn Renderable> = Vec::new();
borrows.extend(areas);
borrows.extend(parking_lots);
borrows.extend(lanes);
borrows.extend(roads);
borrows.extend(intersections);
@ -430,6 +442,7 @@ impl App {
pub struct ShowLayers {
pub show_buildings: bool,
pub show_parking_lots: bool,
pub show_intersections: bool,
pub show_lanes: bool,
pub show_areas: bool,
@ -440,6 +453,7 @@ impl ShowLayers {
pub fn new() -> ShowLayers {
ShowLayers {
show_buildings: true,
show_parking_lots: true,
show_intersections: true,
show_lanes: true,
show_areas: true,

View File

@ -86,6 +86,7 @@ pub struct ColorScheme {
pub unzoomed_interesting_intersection: Color,
pub building: Color,
pub building_outline: Color,
pub parking_lot: Color,
pub grass: Color,
pub water: Color,
@ -186,6 +187,7 @@ impl ColorScheme {
unzoomed_interesting_intersection: Color::BLACK,
building: Color::rgb(196, 193, 188),
building_outline: Color::hex("#938E85"),
parking_lot: Color::grey(0.7),
grass: hex("#94C84A"),
water: Color::rgb(164, 200, 234),

View File

@ -201,10 +201,11 @@ impl Minimap {
g.enable_clipping(inner_rect);
g.redraw(&app.primary.draw_map.boundary_polygon);
g.redraw(&app.primary.draw_map.draw_all_areas);
g.redraw(&app.primary.draw_map.draw_all_parking_lots);
g.redraw(&app.primary.draw_map.draw_all_unzoomed_intersections);
g.redraw(&app.primary.draw_map.draw_all_thick_roads);
g.redraw(&app.primary.draw_map.draw_all_buildings);
// Not the building paths
// Not the building or parking lot paths
if let Some(ref l) = app.layer {
l.draw_minimap(g);
}

View File

@ -141,6 +141,9 @@ impl CommonState {
let bldg = map.get_b(b);
osd.append(Line(&bldg.address).fg(name_color));
}
ID::ParkingLot(pl) => {
osd.append(Line(pl.to_string()).fg(id_color));
}
ID::Turn(t) => {
// Only selectable in dev mode anyway
osd.append_all(vec![

View File

@ -85,6 +85,9 @@ impl ObjectDebugger {
ID::Building(id) => {
println!("{}", abstutil::to_json(map.get_b(id)));
}
ID::ParkingLot(id) => {
println!("{}", abstutil::to_json(map.get_pl(id)));
}
ID::Car(id) => {
sim.debug_car(id);
if let Some(t) = sim.agent_to_trip(AgentID::Car(id)) {

View File

@ -1,7 +1,9 @@
use crate::app::{App, PerMap};
use ezgui::{hotkey, Btn, Color, EventCtx, Key, Line, Text, TextSpan, Widget};
use geom::{Duration, Pt2D};
use map_model::{AreaID, BuildingID, BusStopID, IntersectionID, LaneID, RoadID, TurnID};
use map_model::{
AreaID, BuildingID, BusStopID, IntersectionID, LaneID, ParkingLotID, RoadID, TurnID,
};
use sim::{AgentID, CarID, PedestrianID, TripMode, TripPhaseType};
use std::collections::BTreeSet;
@ -13,6 +15,7 @@ pub enum ID {
Intersection(IntersectionID),
Turn(TurnID),
Building(BuildingID),
ParkingLot(ParkingLotID),
Car(CarID),
Pedestrian(PedestrianID),
PedCrowd(Vec<PedestrianID>),
@ -49,6 +52,7 @@ impl ID {
.maybe_get_i(id.parent)
.map(|i| i.polygon.center()),
ID::Building(id) => primary.map.maybe_get_b(id).map(|b| b.polygon.center()),
ID::ParkingLot(id) => primary.map.maybe_get_pl(id).map(|pl| pl.polygon.center()),
ID::Car(id) => primary
.sim
.canonical_pt_for_agent(AgentID::Car(id), &primary.map),

View File

@ -3,6 +3,7 @@ mod bus;
mod debug;
mod intersection;
mod lane;
mod parking_lot;
mod person;
mod trip;
@ -17,7 +18,7 @@ use ezgui::{
VerticalAlignment, Widget,
};
use geom::{Circle, Distance, Time};
use map_model::{AreaID, BuildingID, BusStopID, IntersectionID, LaneID};
use map_model::{AreaID, BuildingID, BusStopID, IntersectionID, LaneID, ParkingLotID};
use sim::{
AgentID, Analytics, CarID, ParkingSpot, PedestrianID, PersonID, PersonState, TripID, TripMode,
VehicleType,
@ -61,6 +62,8 @@ pub enum Tab {
BldgInfo(BuildingID),
BldgPeople(BuildingID),
ParkingLot(ParkingLotID),
Crowd(Vec<PedestrianID>),
Area(AreaID),
@ -83,6 +86,7 @@ impl Tab {
ID::Intersection(i) => Tab::IntersectionInfo(i),
ID::Turn(_) => unreachable!(),
ID::Building(b) => Tab::BldgInfo(b),
ID::ParkingLot(b) => Tab::ParkingLot(b),
ID::Car(c) => {
if let Some(p) = app.primary.sim.agent_to_person(AgentID::Car(c)) {
Tab::PersonTrips(
@ -137,6 +141,7 @@ impl Tab {
ParkingSpot::Offstreet(b, _) => Some(ID::Building(b)),
},
Tab::BldgInfo(b) | Tab::BldgPeople(b) => Some(ID::Building(*b)),
Tab::ParkingLot(pl) => Some(ID::ParkingLot(*pl)),
Tab::Crowd(members) => Some(ID::PedCrowd(members.clone())),
Tab::Area(a) => Some(ID::Area(*a)),
Tab::IntersectionInfo(i)
@ -221,6 +226,7 @@ impl InfoPanel {
),
Tab::BldgInfo(b) => (building::info(ctx, app, &mut details, b), true),
Tab::BldgPeople(b) => (building::people(ctx, app, &mut details, b), false),
Tab::ParkingLot(pl) => (parking_lot::info(ctx, app, &mut details, pl), true),
Tab::Crowd(ref members) => (person::crowd(ctx, app, &mut details, members), true),
Tab::Area(a) => (debug::area(ctx, app, &mut details, a), true),
Tab::IntersectionInfo(i) => (intersection::info(ctx, app, &mut details, i), true),

View File

@ -0,0 +1,28 @@
use crate::app::App;
use crate::info::{header_btns, make_tabs, Details, Tab};
use ezgui::{EventCtx, Line, TextExt, Widget};
use map_model::ParkingLotID;
pub fn info(ctx: &mut EventCtx, app: &App, details: &mut Details, id: ParkingLotID) -> Vec<Widget> {
let mut rows = header(ctx, details, id, Tab::ParkingLot(id));
let pl = app.primary.map.get_pl(id);
rows.push(format!("{} spots", pl.capacity).draw_text(ctx));
rows
}
fn header(ctx: &EventCtx, details: &mut Details, id: ParkingLotID, tab: Tab) -> Vec<Widget> {
vec![
Widget::row(vec![
Line(id.to_string()).small_heading().draw(ctx),
header_btns(ctx),
]),
make_tabs(
ctx,
&mut details.hyperlinks,
tab,
vec![("Info", Tab::ParkingLot(id))],
),
]
}

View File

@ -5,6 +5,7 @@ use crate::render::building::DrawBuilding;
use crate::render::bus_stop::DrawBusStop;
use crate::render::intersection::DrawIntersection;
use crate::render::lane::DrawLane;
use crate::render::parking_lot::DrawParkingLot;
use crate::render::road::DrawRoad;
use crate::render::{draw_vehicle, DrawArea, DrawPedCrowd, DrawPedestrian, Renderable};
use aabb_quadtree::QuadTree;
@ -12,8 +13,8 @@ use abstutil::Timer;
use ezgui::{Color, Drawable, EventCtx, GeomBatch, GfxCtx, Prerender};
use geom::{Bounds, Circle, Distance, Pt2D, Time};
use map_model::{
AreaID, BuildingID, BusStopID, Intersection, IntersectionID, LaneID, Map, Road, RoadID,
Traversable, NORMAL_LANE_THICKNESS, SIDEWALK_THICKNESS,
AreaID, BuildingID, BusStopID, Intersection, IntersectionID, LaneID, Map, ParkingLotID, Road,
RoadID, Traversable, NORMAL_LANE_THICKNESS, SIDEWALK_THICKNESS,
};
use sim::{GetDrawAgents, UnzoomedAgent, VehicleType};
use std::borrow::Borrow;
@ -25,6 +26,7 @@ pub struct DrawMap {
pub lanes: Vec<DrawLane>,
pub intersections: Vec<DrawIntersection>,
pub buildings: Vec<DrawBuilding>,
pub parking_lots: Vec<DrawParkingLot>,
pub bus_stops: HashMap<BusStopID, DrawBusStop>,
pub areas: Vec<DrawArea>,
@ -37,6 +39,8 @@ pub struct DrawMap {
pub draw_all_buildings: Drawable,
pub draw_all_building_paths: Drawable,
pub draw_all_building_outlines: Drawable,
pub draw_all_parking_lots: Drawable,
pub draw_all_parking_lot_paths: Drawable,
pub draw_all_areas: Drawable,
quadtree: QuadTree<ID>,
@ -147,6 +151,23 @@ impl DrawMap {
let draw_all_building_outlines = all_building_outlines.upload(ctx);
timer.stop("upload all buildings");
timer.start("make DrawParkingLot");
let mut parking_lots: Vec<DrawParkingLot> = Vec::new();
let mut all_parking_lots = GeomBatch::new();
let mut all_parking_lot_paths = GeomBatch::new();
for pl in map.all_parking_lots() {
parking_lots.push(DrawParkingLot::new(
pl,
cs,
&mut all_parking_lots,
&mut all_parking_lot_paths,
ctx.prerender,
));
}
let draw_all_parking_lots = all_parking_lots.upload(ctx);
let draw_all_parking_lot_paths = all_parking_lot_paths.upload(ctx);
timer.stop("make DrawParkingLot");
timer.start_iter("make DrawBusStop", map.all_bus_stops().len());
let mut bus_stops: HashMap<BusStopID, DrawBusStop> = HashMap::new();
for s in map.all_bus_stops().values() {
@ -185,6 +206,9 @@ impl DrawMap {
for obj in &buildings {
quadtree.insert_with_box(obj.get_id(), obj.get_outline(map).get_bounds().as_bbox());
}
for obj in &parking_lots {
quadtree.insert_with_box(obj.get_id(), obj.get_outline(map).get_bounds().as_bbox());
}
// Don't put BusStops in the quadtree
for obj in &areas {
quadtree.insert_with_box(obj.get_id(), obj.get_outline(map).get_bounds().as_bbox());
@ -201,6 +225,7 @@ impl DrawMap {
lanes,
intersections,
buildings,
parking_lots,
bus_stops,
areas,
boundary_polygon,
@ -209,6 +234,8 @@ impl DrawMap {
draw_all_buildings,
draw_all_building_paths,
draw_all_building_outlines,
draw_all_parking_lots,
draw_all_parking_lot_paths,
draw_all_areas,
agents: RefCell::new(AgentCache {
@ -238,6 +265,10 @@ impl DrawMap {
&self.buildings[id.0]
}
pub fn get_pl(&self, id: ParkingLotID) -> &DrawParkingLot {
&self.parking_lots[id.0]
}
pub fn get_bs(&self, id: BusStopID) -> &DrawBusStop {
&self.bus_stops[&id]
}
@ -267,6 +298,9 @@ impl DrawMap {
ID::Building(id) => {
return Some(self.get_b(id));
}
ID::ParkingLot(id) => {
return Some(self.get_pl(id));
}
ID::Car(id) => {
// Cars might be parked in a garage!
app.primary.sim.get_draw_car(id, &app.primary.map)?.on

View File

@ -6,6 +6,7 @@ mod car;
mod intersection;
mod lane;
mod map;
mod parking_lot;
mod pedestrian;
mod road;
mod traffic_signal;

View File

@ -0,0 +1,76 @@
use crate::app::App;
use crate::colors::ColorScheme;
use crate::helpers::ID;
use crate::render::{DrawOptions, Renderable, OUTLINE_THICKNESS};
use ezgui::{GeomBatch, GfxCtx, Prerender, RewriteColor};
use geom::{Angle, Line, Polygon, Pt2D};
use map_model::{Map, ParkingLot, ParkingLotID, NORMAL_LANE_THICKNESS, SIDEWALK_THICKNESS};
pub struct DrawParkingLot {
pub id: ParkingLotID,
}
impl DrawParkingLot {
pub fn new(
lot: &ParkingLot,
cs: &ColorScheme,
all_lots: &mut GeomBatch,
paths_batch: &mut GeomBatch,
prerender: &Prerender,
) -> DrawParkingLot {
// Trim the front path line away from the sidewalk's center line, so that it doesn't
// overlap. For now, this cleanup is visual; it doesn't belong in the map_model layer.
let mut front_path_line = lot.sidewalk_line.clone();
let len = front_path_line.length();
let trim_back = SIDEWALK_THICKNESS / 2.0;
if len > trim_back && len - trim_back > geom::EPSILON_DIST {
front_path_line = Line::new(
front_path_line.pt1(),
front_path_line.dist_along(len - trim_back),
);
}
all_lots.push(cs.parking_lot, lot.polygon.clone());
all_lots.add_svg(
prerender,
"../data/system/assets/map/parking.svg",
lot.polygon.polylabel(),
0.05,
Angle::ZERO,
RewriteColor::NoOp,
true,
);
paths_batch.push(
cs.sidewalk,
front_path_line.make_polygons(NORMAL_LANE_THICKNESS),
);
DrawParkingLot { id: lot.id }
}
}
impl Renderable for DrawParkingLot {
fn get_id(&self) -> ID {
ID::ParkingLot(self.id)
}
fn draw(&self, _: &mut GfxCtx, _: &App, _: &DrawOptions) {}
fn get_zorder(&self) -> isize {
0
}
fn get_outline(&self, map: &Map) -> Polygon {
let pl = map.get_pl(self.id);
if let Some(p) = pl.polygon.maybe_to_outline(OUTLINE_THICKNESS) {
p
} else {
pl.polygon.clone()
}
}
fn contains_pt(&self, pt: Pt2D, map: &Map) -> bool {
map.get_pl(self.id).polygon.contains_pt(pt)
}
}

View File

@ -1,4 +1,5 @@
use crate::{Angle, Bounds, Distance, HashablePt2D, Pt2D, Ring};
use geo::algorithm::area::Area;
use geo::algorithm::convexhull::ConvexHull;
use geo_booleanop::boolean::BooleanOp;
use serde::{Deserialize, Serialize};
@ -282,6 +283,11 @@ impl Polygon {
pub fn maybe_to_outline(&self, thickness: Distance) -> Option<Polygon> {
Ring::maybe_new(self.points.clone()).map(|r| r.make_polygons(thickness))
}
// Usually m^2, unless the polygon is in screen-space
pub fn area(&self) -> f64 {
to_geo(&self.points()).area()
}
}
impl fmt::Display for Polygon {

View File

@ -9,6 +9,7 @@ mod lane;
mod make;
mod map;
pub mod osm;
mod parking_lot;
mod pathfind;
pub mod raw;
mod road;
@ -26,6 +27,7 @@ pub use crate::intersection::{Intersection, IntersectionID, IntersectionType};
pub use crate::lane::{Lane, LaneID, LaneType, PARKING_SPOT_LENGTH};
pub use crate::make::initial::lane_specs::RoadSpec;
pub use crate::map::Map;
pub use crate::parking_lot::{ParkingLot, ParkingLotID};
pub use crate::pathfind::uber_turns::{IntersectionCluster, UberTurn, UberTurnGroup};
pub use crate::pathfind::{Path, PathConstraints, PathRequest, PathStep};
pub use crate::road::{DirectedRoadID, Road, RoadID};

View File

@ -1,6 +1,9 @@
use crate::make::sidewalk_finder::find_sidewalk_points;
use crate::raw::{OriginalBuilding, RawBuilding};
use crate::{osm, Building, BuildingID, FrontPath, LaneID, LaneType, Map, OffstreetParking};
use crate::raw::{OriginalBuilding, RawBuilding, RawParkingLot};
use crate::{
osm, Building, BuildingID, FrontPath, LaneID, LaneType, Map, OffstreetParking, ParkingLot,
ParkingLotID, Position,
};
use abstutil::Timer;
use geom::{Distance, HashablePt2D, Line, PolyLine, Polygon};
use std::collections::{BTreeMap, HashSet};
@ -108,6 +111,103 @@ pub fn make_all_buildings(
results
}
pub fn make_all_parking_lots(
input: &Vec<RawParkingLot>,
map: &Map,
timer: &mut Timer,
) -> Vec<ParkingLot> {
timer.start("convert parking lots");
let mut center_per_lot: Vec<HashablePt2D> = Vec::new();
let mut query: HashSet<HashablePt2D> = HashSet::new();
for lot in input {
let center = lot.polygon.center().to_hashable();
center_per_lot.push(center);
query.insert(center);
}
let sidewalk_pts = find_sidewalk_points(
map.get_bounds(),
query,
map.all_lanes(),
Distance::meters(500.0),
timer,
);
let mut results = Vec::new();
timer.start_iter("create parking lot driveways", center_per_lot.len());
for (lot_center, orig) in center_per_lot.into_iter().zip(input.iter()) {
timer.next();
// TODO Refactor this
if let Some(sidewalk_pos) = sidewalk_pts.get(&lot_center) {
let sidewalk_pt = sidewalk_pos.pt(map);
if sidewalk_pt == lot_center.to_pt2d() {
timer.warn(format!(
"Skipping parking lot {} because driveway has 0 length",
orig.osm_id
));
continue;
}
let sidewalk_line =
trim_path(&orig.polygon, Line::new(lot_center.to_pt2d(), sidewalk_pt));
// Can this lot have a driveway? If it's not next to a driving lane, then no.
let mut driveway: Option<(PolyLine, Position)> = None;
let sidewalk_lane = sidewalk_pos.lane();
if let Ok(driving_lane) = map
.get_parent(sidewalk_lane)
.find_closest_lane(sidewalk_lane, vec![LaneType::Driving])
{
let driving_pos = sidewalk_pos.equiv_pos(driving_lane, Distance::ZERO, map);
let buffer = Distance::meters(7.0);
if driving_pos.dist_along() > buffer
&& map.get_l(driving_lane).length() - driving_pos.dist_along() > buffer
{
driveway = Some((
PolyLine::new(vec![
sidewalk_line.pt1(),
sidewalk_line.pt2(),
driving_pos.pt(map),
]),
driving_pos,
));
}
}
if let Some((driveway_line, driving_pos)) = driveway {
let id = ParkingLotID(results.len());
results.push(ParkingLot {
id,
polygon: orig.polygon.clone(),
// TODO Rethink this approach. 250 square feet is around 23 square meters
capacity: orig
.capacity
.unwrap_or_else(|| (orig.polygon.area() / 23.0) as usize),
osm_id: orig.osm_id,
driveway_line,
driving_pos,
sidewalk_line,
sidewalk_pos: *sidewalk_pos,
});
} else {
timer.warn(format!(
"Parking lot from OSM way {} can't have a driveway. Forfeiting {:?} parking \
spots",
orig.osm_id, orig.capacity
));
}
}
}
timer.note(format!(
"Discarded {} parking lots that weren't close enough to a sidewalk",
input.len() - results.len()
));
timer.stop("convert parking lots");
results
}
// Adjust the path to start on the building's border, not center
fn trim_path(poly: &Polygon, path: Line) -> Line {
for bldg_line in poly.points().windows(2) {

View File

@ -3,9 +3,9 @@ use crate::raw::{DrivingSide, OriginalIntersection, OriginalRoad, RawMap};
use crate::{
connectivity, make, Area, AreaID, Building, BuildingID, BusRoute, BusRouteID, BusStop,
BusStopID, ControlStopSign, ControlTrafficSignal, EditCmd, EditEffects, EditIntersection,
Intersection, IntersectionID, IntersectionType, Lane, LaneID, LaneType, MapEdits, Path,
PathConstraints, PathRequest, Position, Road, RoadID, Turn, TurnGroupID, TurnID, TurnType,
NORMAL_LANE_THICKNESS, SIDEWALK_THICKNESS,
Intersection, IntersectionID, IntersectionType, Lane, LaneID, LaneType, MapEdits, ParkingLot,
ParkingLotID, Path, PathConstraints, PathRequest, Position, Road, RoadID, Turn, TurnGroupID,
TurnID, TurnType, NORMAL_LANE_THICKNESS, SIDEWALK_THICKNESS,
};
use abstutil::{deserialize_btreemap, serialize_btreemap, Error, Timer, Warn};
use geom::{Angle, Bounds, Distance, GPSBounds, Line, PolyLine, Polygon, Pt2D, Speed};
@ -30,6 +30,7 @@ pub struct Map {
bus_stops: BTreeMap<BusStopID, BusStop>,
bus_routes: Vec<BusRoute>,
areas: Vec<Area>,
parking_lots: Vec<ParkingLot>,
boundary_polygon: Polygon,
// Note that border nodes belong in neither!
@ -84,6 +85,10 @@ impl Map {
"- areas: {} bytes",
prettyprint_usize(serialized_size_bytes(&map.areas))
);
println!(
"- parking lots: {} bytes",
prettyprint_usize(serialized_size_bytes(&map.parking_lots))
);
println!(
"- pathfinder: {} bytes",
prettyprint_usize(serialized_size_bytes(&map.pathfinder))
@ -120,6 +125,7 @@ impl Map {
bus_stops: BTreeMap::new(),
bus_routes: Vec::new(),
areas: Vec::new(),
parking_lots: Vec::new(),
boundary_polygon: Polygon::new(&vec![
Pt2D::new(0.0, 0.0),
Pt2D::new(1.0, 0.0),
@ -274,6 +280,10 @@ impl Map {
&self.areas
}
pub fn all_parking_lots(&self) -> &Vec<ParkingLot> {
&self.parking_lots
}
pub fn maybe_get_r(&self, id: RoadID) -> Option<&Road> {
self.roads.get(id.0)
}
@ -294,6 +304,10 @@ impl Map {
self.buildings.get(id.0)
}
pub fn maybe_get_pl(&self, id: ParkingLotID) -> Option<&ParkingLot> {
self.parking_lots.get(id.0)
}
pub fn maybe_get_a(&self, id: AreaID) -> Option<&Area> {
self.areas.get(id.0)
}
@ -339,6 +353,10 @@ impl Map {
&self.areas[id.0]
}
pub fn get_pl(&self, id: ParkingLotID) -> &ParkingLot {
&self.parking_lots[id.0]
}
pub fn get_stop_sign(&self, id: IntersectionID) -> &ControlStopSign {
&self.stop_signs[&id]
}
@ -891,6 +909,7 @@ fn make_half_map(
bus_stops: BTreeMap::new(),
bus_routes: Vec::new(),
areas: Vec::new(),
parking_lots: Vec::new(),
boundary_polygon: raw.boundary_polygon.clone(),
stop_signs: BTreeMap::new(),
traffic_signals: BTreeMap::new(),
@ -1093,6 +1112,8 @@ fn make_half_map(
map.lanes[lane.0].building_paths = bldgs;
}
map.parking_lots = make::buildings::make_all_parking_lots(&raw.parking_lots, &map, timer);
for (idx, a) in raw.areas.iter().enumerate() {
map.areas.push(Area {
id: AreaID(idx),

View File

@ -0,0 +1,34 @@
use crate::Position;
use geom::{Line, PolyLine, Polygon};
use serde::{Deserialize, Serialize};
use std::fmt;
// TODO For now, ignore the mapped roads linking things and just use the same driveway approach
// that buildings use.
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, PartialOrd, Ord, Serialize, Deserialize)]
pub struct ParkingLotID(pub usize);
impl fmt::Display for ParkingLotID {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "Parking lot #{}", self.0)
}
}
#[derive(Serialize, Deserialize)]
pub struct ParkingLot {
pub id: ParkingLotID,
pub polygon: Polygon,
pub capacity: usize,
pub osm_id: i64,
// Goes from the lot to the driving lane
pub driveway_line: PolyLine,
// Guaranteed to be at least 7m (MAX_CAR_LENGTH + a little buffer) away from both ends of the
// lane, to prevent various headaches
pub driving_pos: Position,
// Lot to sidewalk
pub sidewalk_line: Line,
pub sidewalk_pos: Position,
}

View File

@ -28,6 +28,7 @@ pub struct RawMap {
pub buildings: BTreeMap<OriginalBuilding, RawBuilding>,
pub bus_routes: Vec<Route>,
pub areas: Vec<RawArea>,
pub parking_lots: Vec<RawParkingLot>,
pub boundary_polygon: Polygon,
pub gps_bounds: GPSBounds,
@ -93,6 +94,7 @@ impl RawMap {
buildings: BTreeMap::new(),
bus_routes: Vec::new(),
areas: Vec::new(),
parking_lots: Vec::new(),
// Some nonsense thing
boundary_polygon: Polygon::rectangle(1.0, 1.0),
gps_bounds: GPSBounds::new(),
@ -136,6 +138,7 @@ impl RawMap {
if self.roads.keys().any(|r| r.osm_way_id == osm_way_id)
|| self.buildings.keys().any(|b| b.osm_way_id == osm_way_id)
|| self.areas.iter().any(|a| a.osm_id == osm_way_id)
|| self.parking_lots.iter().any(|a| a.osm_id == osm_way_id)
{
osm_way_id -= 1;
} else {
@ -328,6 +331,13 @@ pub struct RawArea {
pub osm_id: i64,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct RawParkingLot {
pub polygon: Polygon,
pub capacity: Option<usize>,
pub osm_id: i64,
}
#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum RestrictionType {
BanTurns,