aboutsummaryrefslogtreecommitdiff
path: root/advtrains/textures/advtrains_dtrack_shared_atc.png
blob: 1f83c37be1cc9d26a4960e88728aa014b34aef70 (plain)
ofshex dumpascii
0000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 00 80 00 00 00 80 08 06 00 00 00 c3 3e 61 .PNG........IHDR..............>a
0020 cb 00 00 00 06 62 4b 47 44 00 ff 00 ff 00 ff a0 bd a7 93 00 00 00 09 70 48 59 73 00 00 0b 13 00 .....bKGD..............pHYs.....
0040 00 0b 13 01 00 9a 9c 18 00 00 00 07 74 49 4d 45 07 e1 03 0c 12 1a 35 e5 86 ee 09 00 00 1b bc 49 ............tIME......5........I
0060 44 41 54 78 da ed 9d 4b 6f 23 cb 92 df 7f 99 59 2f 92 22 29 b5 d4 3a dd be 77 ee b9 0b bf 00 2f DATx...Ko#.....Y/.")..:..w...../
0080 bc b4 f7 06 e6 1b 0c 30 c0 ec bc 36 e0 6f e2 95 d7 de 78 ef 0f 60 c0 1f c2 ab 8b c1 18 17 f6 e9 .......0...6.o....x..`..........
00a0 73 fa a9 27 5f f5 cc 4c 2f 22 4b a5 96 28 92 d2 f5 b4 48 a3 12 38 38 ec 64 55 29 8b 99 19 19 f1 s..'_..L/"K..(....H..88.dU).....
00c0 8f f8 47 28 9e 68 7f fb cf 52 5f 5b 85 6f 1a 8c 06 8b 47 03 51 1c 71 bf ff 3f fe d7 ff f1 d4 23 ..G(.h...R_[.o....G.Q.q..?.....#
00e0 f8 4f 7f f7 ef 36 de fb b0 df 55 0d 18 50 de 63 14 58 1d 81 b5 cf 7a c6 ba fe ff f0 5f fe 3b 9b .O...6....U..P.c.X....z....._.;.
0100 da 7f fe f7 7f fd a2 71 fd b7 5f 1a c5 0f 6c ff e6 14 7f 79 4b f5 2f fe 00 91 81 8f b7 50 34 f0 .......q.._...l....yK./......P4.
0120 57 53 f8 9f 1f e0 df fe 53 b0 1e 16 39 fc f9 57 38 3f 81 df 9f c3 cd 0a fe 7c 09 ff fa 3d fc 7a WS......S...9..W8?.......|...=.z
0140 2d f7 fc f3 f7 50 d7 24 fa a9 3f b6 28 c1 3b f9 43 69 0a be 01 eb 1e f7 6f 6a db ee 7d d8 af 34 -....P.$..?.(.;.Ci......oj..}..4
0160 44 0a 1c 32 c8 24 7a fe 33 d6 f5 6f 6b 2f 1d d7 8f 6e e7 c7 30 3d 22 69 1a 12 e5 49 de 8d 49 22 D..2.$z.3..ok/...n..0="i...I..I"
0180 47 62 1b 92 df 4d 49 9c 25 c9 73 92 41 44 f2 f6 84 24 89 49 ca 92 64 92 92 bc 89 49 56 25 c9 30 Gb...MI.%.s.AD...$.I..d....IV%.0
01a0 22 39 1d 92 94 05 49 59 41 f4 d4 1f 4b d1 c4 46 81 d3 94 39 0c 22 50 ca 53 d8 ef fb 37 35 cd e6 "9....IYA...K..F...9."P.S...75..
01c0 7b 1f f6 57 2e dc a7 21 d2 2f 7b c6 ba fe 6d 6d db bb 3e 35 ae 1f dd b2 18 8c 81 b2 96 b1 a4 11 {..W...!./{...mm..>5............
01e0 ac 56 70 e1 61 59 40 55 40 9a c0 bb 37 90 c6 72 cf aa 84 89 01 d7 c0 b7 1b 59 d8 75 0d f3 04 c6 .Vp.aY@U@...7..r.........Y.u....
0200 a3 0d 0b 20 4e 65 d5 5b e7 89 13 8d f2 8e 54 2b 6c f4 7d ff a6 a6 d8 7c ef c3 7e e7 20 49 60 b9 ....Ne.[......T+l.}....|..~..I`.
0220 04 ab a1 28 61 6c 9e f7 8c 75 fd db da b6 77 7d 6a 5c af d1 b4 82 a3 21 0c 62 b0 16 46 03 38 99 ...(al...u....w}j\.....!.b..F.8.
0240 c2 30 83 f1 20 48 b1 04 fc 42 16 c1 74 24 8b 36 8a 60 3a 86 70 9a 31 cc 64 31 3d 3d 83 5e e1 1a .0...H...B..t$.6.`:.p.1.d1==.^..
0260 f0 16 bc f5 38 a7 99 57 ea 51 ff a6 b6 ed de 87 fd b2 db 35 83 c8 30 34 9a 14 fd ec 67 ac eb df ....8..W.Q.........5..04....g...
0280 da 5e 38 ae 1f de 3c 28 25 47 50 9a 80 47 26 71 32 10 a9 b0 2a 41 01 59 d2 49 ac 2c 91 6b 9c 87 .^8...<(%GP..G&q2...*A.Y.I.,.k..
02a0 e3 23 88 4d 90 16 15 4c 86 1b 24 c0 c0 28 ac d1 34 be 21 49 53 ac 89 88 ea 92 48 7d df bf 71 b5 .#.M...L..$..(..4.!IS.....H}..q.
02c0 1a b5 f1 de 87 fd 75 55 3f da 81 ba 79 de 33 d6 f5 6f 6b db de f5 a9 71 bd 46 73 4e 76 b1 56 32 ......uU?...y.3..ok....q.FsNv.V2
02e0 d9 2e e8 28 75 03 d9 51 d8 d5 0a bc 17 71 5f 54 22 01 ac 95 c5 e3 bd fc 17 47 d2 ff a4 04 a8 1a ...(u..Q.....q_T"........G......
0300 85 b2 1e ad 60 10 3b 4c 5e 60 dc e3 fe 6d e2 6a d3 bd 0f fb d7 ed c0 e7 3e 63 5d ff b6 f6 d2 71 ....`.;L^`...m.j........>c]....q
0320 bd 4a 53 f2 bb 9a a0 94 5a 27 93 6f 9d ec f0 a3 81 4c 70 b8 54 16 8a 12 eb a0 5d 3c 69 0c 27 13 .JS.....Z'.o.....Lp.T.....]<i.'.
0340 e9 7f 52 02 18 13 a3 5c 4d e3 a1 2c 0d c6 c8 0d 8e ef fb 37 b5 6d f7 3e ec 5f 27 31 72 fb bc 67 ..R....\M..,.......7.m.>._'1r..g
0360 ac eb df d6 b6 bd eb 53 e3 7a 8d 66 94 28 83 49 0c 8d 83 2c 92 09 37 5a fe 53 4a 16 84 52 72 ee .......S.z.f.(.I...,..7Z.SJ..Rr.
0380 0f 52 99 f8 2c 96 05 41 38 36 22 0d 65 b5 41 02 58 5b e3 11 25 28 4d 2d d6 3a 1a e7 1f f5 6f 34 .R..,..A86".e.A.X[..%(M-.:....o4
03a0 03 b7 dc fb b0 7f dd 0e 7c ee 33 d6 f5 6f 6b 2f 1d d7 6b 35 ad c5 d6 57 1e e2 58 26 7e 98 c9 ce ........|.3..ok/..k5...W..X&~...
03c0 6e 2c 34 8d e8 07 ad c8 5f 95 f2 9d f3 a2 13 0c 53 f9 ae ac 37 2c 00 63 62 d4 77 bb 58 13 69 f5 n,4....._.......S...7,.cb.w.X.i.
03e0 a8 7f 37 09 b0 fe de 5d fa ff 5f 3c 63 27 09 f0 82 71 bd 8a 0e 20 ba 20 65 23 ca dc 32 17 f1 5f ..7....].._<c'...q......e#..2.._
0400 56 32 c1 46 89 74 68 f5 05 eb 21 2f 61 b1 92 09 77 5e fe ef bd 48 87 27 8f 80 bc a9 49 7c c3 70 V2.F.th...!/a...w^...H.'....I|.p
0420 7c 44 e2 1b 4a 26 14 e5 12 ea 05 49 a6 70 b5 63 55 ad 36 0e b6 f0 06 db 34 64 b1 a2 a9 2a 92 ac |D..J&.....I.p.cU.6.....4d...*..
0440 66 55 3a b4 82 ab aa 26 d6 0a e3 2a 0a 1c b1 56 d4 0e 0a 6b 31 d6 83 07 6d ea b5 7d bb 8c ab 20 fU:....&...*...V...k1...m..}....
0460 26 d6 8a 38 de 3e 53 ca 2c 5f 34 ae 57 93 00 c0 f1 08 3e 5f 89 38 37 5a 94 bd 8b 5b d1 ec e3 e8 &..8.>S.,_4.W.....>_.87Z...[....
0480 ce 68 20 8b 64 41 d8 b0 fb 17 39 2c 57 b0 18 6d c1 01 28 56 90 26 d4 8b 25 2e ca f0 6e 89 ad 72 .h..dA....9,W..m..(V.&..%...n..r
04a0 2a 3c 8b b9 27 8e fc 56 28 a4 aa 1d c4 0a 53 5a 0a f7 fd 7d ed 77 1e 7f f7 b9 71 31 cd a2 24 33 *<..'..V(.....SZ...}.w....q1..$3
04c0 9a 38 52 50 14 34 66 f0 a8 6f 97 71 b5 cf 64 55 6c fd 41 af e6 ee 45 e3 82 ea 75 a4 80 87 9b 19 .8RP.4f..o.q..dUl.A...E...u.....
04e0 7c ba 05 93 ca 02 18 a4 30 09 36 ff 7d 25 b0 a8 e1 d3 15 5c 06 f0 48 6b 18 0f 61 90 c9 75 4f 23 |.......0.6.}%.....\..Hk..a..uO#
0500 81 49 4c 96 68 bc 8e 88 bd 27 99 1c a1 16 8e a6 28 88 0c d8 5a 40 91 8d 08 db 40 fe 40 a6 63 aa .IL.h....'......(...Z@....@.@.c.
0520 aa fa ee be f6 bb a6 ea 3e e3 6b a2 a3 14 63 3d ce 83 ce 62 12 65 98 64 60 2b 87 89 a2 60 db 6e ........>.k...c=...b.e.d`+...`.n
0540 1f 57 fb cc b7 27 27 db 91 c0 f8 65 e3 7a ad a6 94 e0 fc 8d 86 5f 6e c2 71 6b 05 a0 ca 4b 01 7f .W...''....e.z......._n.qk...K..
0560 ee 24 40 02 7f 38 87 4f 45 a7 13 d4 35 5c cd e4 bd 9f 5c 00 05 0d cb 65 83 8a 2c 68 c5 d1 2a 67 .$@..8.OE...5\....\....e..,h..*g
0580 be 2a c0 81 35 62 7b 9a 2d 8a 90 b2 22 7a e6 2a e0 eb f7 ee b3 e1 bb e8 de e7 75 3b 2d 57 29 2a .*..5b{.-..."z.*..........u;-W)*
05a0 73 28 65 a9 5c 8d c1 ef 34 ae f6 99 8b 7c b9 5d 09 74 2f 1b d7 ab 34 2f 4a de 72 25 8b 56 95 90 s(e.\...4....|.].t/...4/J.r%.V..
05c0 07 41 74 34 14 71 df c2 d5 ca c3 2a 97 f3 7f 60 05 0a 8e 0c f8 48 4c 46 d4 26 2b a0 01 65 20 55 .At4.q.....*...`.....HLF.&+..e.U
05e0 8e 71 ea 28 96 73 52 fd d8 31 b2 a9 25 51 f8 61 f5 7a 87 8a d2 df 7f 4e 92 88 37 93 94 34 36 c4 .q.(.sR..1..%Q.a.z.....N..7..46.
0600 71 42 9a c4 bc 99 74 ce 19 ec ee e3 6a 9f 39 1e 8c b6 fe a6 2f 1d d7 6b e1 00 ad 22 d7 34 30 8a qB....t.....j.9...../..k...".40.
0620 e5 73 1a c3 20 11 6b 40 eb 4e 02 34 56 8e 81 58 cb f7 b3 95 40 c6 a3 81 f8 12 a2 0d 0b 0d a3 21 .s....k@.N.4V..X....@..........!
0640 b7 0f cf 7c f5 c8 31 b2 7d d0 ee 3b 13 e6 fe 7d e9 3d 25 3d 2f aa c7 bb 7d 9e 30 8c c1 38 58 59 ...|..1.}..;...}.=%=/...}.0..8XY
0660 88 9f 39 ae ab 65 b9 9b 62 f5 82 71 bd 56 8b 0c 9c 8c 41 ad 44 e4 57 8d 4c ec 2f 5f c4 f6 1f 65 ..9..e..b..q.V....A.D.W.L./_...e
0680 dd 62 19 66 70 e2 e1 7a 2e ca e1 ed 52 a6 c3 39 d1 1b f4 26 73 c3 b6 5e a7 b8 db 85 0f 5d a6 bb .b.fp..z....R..9...&s..^.....]..
06a0 b8 59 9b 0d ae d6 fb 9f d7 ed 76 31 c4 05 d2 f7 7e f7 71 dd b9 78 b3 ed 3f e8 8b c7 f5 8a 38 c0 .Y........v1....~.q..x..?.....8.
06c0 30 13 70 c7 23 3b 3a 4b 64 57 1f 65 9d ab 5a 21 38 c1 30 93 7f 44 1a 4e 8e c4 8f 70 34 10 89 a0 0.p.#;:KdW.e..Z!8.0..D.N...p4...
06e0 37 8a 6f d3 bd 78 2b 62 1f 3a 46 b6 b9 59 13 a3 51 6a bd 43 25 31 fa bb cf 57 f3 ee ef 54 4e 5e 7.o..x+b.:F..Y..Qj.C%1...W...TN^
0700 ee fe 8f 9f 26 bb 8f eb ee 6f ef 80 d8 bd 74 5c af a2 02 84 4d 67 74 87 f9 a7 49 80 7c 35 dc ae ....&....o....t\....Mgt...I.|5..
0720 44 19 c4 cb 51 a1 95 5c 4b f8 ad 06 41 75 29 1b b8 5e 6c 38 02 6c 03 16 59 35 46 41 ed 05 62 3c D...Q..\K...Au)..^l8.l..Y5FA..b<
0740 4a be 77 99 ee e2 66 75 ee 69 d7 70 72 ef f3 dd 6e 0f 0e 0b a7 e0 62 06 47 89 1c 01 8d 95 49 df J.w...fu.i.pr...n.....b.G.....I.
0760 65 5c 77 cf df 41 59 8f 13 f5 a2 71 bd 86 f6 9f 85 4d 60 ad 88 fe c8 c8 f8 ac 0d 13 1d 86 1b 19 e\w..AY....q.....M`.............
0780 d9 e1 2a 68 fd 4a 87 43 32 bc 83 0a e6 e4 d3 3a 40 94 90 6a 45 e4 6b 92 4c 91 af 1c 3a 26 b8 41 ..*h.J.C2......:@..jE.k.L...:&.A
07a0 3d 1e cd bc d9 c1 cd 6a 65 35 79 af be bb cf c4 f2 dd dc aa bb cf 6f 26 90 af 64 60 69 02 c6 c3 =......je5y...........o&..d`i...
07c0 48 35 e1 ef 43 aa a1 d0 bb 8d ab 7d e6 c5 2c df be ab ec cb c6 f5 c3 77 bf 87 aa 86 af d7 e2 d6 H5..C......}..,........w........
07e0 cd 12 c5 30 15 d3 d4 21 e2 bf 5d 1c ce 89 05 f0 5b 23 8b 66 32 94 85 e1 bc 2c 8e 37 21 36 20 da ...0...!..].....[#.f2....,.7!6..
0800 06 e2 d4 0f 00 9c c4 e8 ef 1c 23 bb b8 59 0b e7 c9 b4 5e eb 6a 35 11 77 9f bf cc 9a 47 bb bd d1 ..........#..Y....^.j5.w....G...
0820 eb 01 9e 6d e3 6a 9f 59 2d aa 1d 74 80 97 8d eb 35 16 40 5e 81 8e 12 22 e5 38 8d ac 28 72 c1 41 ...m.j.Y-..t....5.@^...".8..(r.A
0840 54 56 82 fb c7 11 d4 16 ca 46 53 f9 04 4f c5 20 11 a4 33 8e 64 b3 2c f3 70 44 6c 02 71 e2 e8 b1 TV.......FS..O....3.d.,.pDl.q...
0860 b2 f5 d0 31 b2 8b 9b d5 37 4f bb 86 ef 7f 7e 93 34 1c 65 1e 85 ec 76 1f 25 8f fe fe ae e3 6a 9f ...1....7O....~.4.e...v.%.....j.
0880 99 0e b6 ff b0 2f 1d d7 eb 1c 01 8a f7 6f 53 d2 c4 f0 f1 c2 e3 9c e8 05 71 04 d7 4b f8 72 2d b0 ...../.......oS.........q..K.r-.
08a0 b0 31 30 39 52 bc 3b cf 98 2d 61 51 84 98 80 a0 1b 7c b9 81 ab f9 06 09 d0 82 38 0f 01 9c 87 2e .109R.;..-aQ.....|........8.....
08c0 d3 5d dc ac 4a 3f ed 1a 8e b4 ba fb fc d0 b4 ab 6a 47 aa d6 03 3c db c6 d5 3e 73 27 25 f0 85 e3 .]..J?..........jG...<...>s'%...
08e0 7a 1d 14 d0 13 f9 25 91 18 24 e4 55 00 db 56 f0 f3 79 70 f0 84 60 11 a3 1c 89 9b a3 94 a7 ac c5 z.....%..$.U..V..yp..`..........
0900 79 34 5b 89 b4 78 77 2a c7 44 b4 c9 0a a8 ad 28 3f f7 95 ad d1 50 71 db 54 77 21 d4 1b cd c0 62 y4[..xw*.D.....(?....Pq.Tw!....b
0920 8e d1 72 3e 2d 2b 0b 51 79 2f fc ba a4 76 5e e2 da 86 0d b5 53 62 8b 3f 80 73 55 f5 f0 ef ef 36 ..r>-+.Qy/...v^.....Sb.?.sU....6
0940 ae da 15 e1 d9 db 83 02 57 fe 65 e3 7a 25 20 10 ef 1c e3 a1 2c 80 65 0e c3 01 98 79 18 a3 13 93 ........W.e.z%......,.e....y....
0960 4f ce 7b 8f 51 96 d3 29 7c be 94 eb f2 4a 62 02 63 03 d5 26 25 70 1b 50 f2 5c bb 75 dd bd 0f fb O.{.Q..)|....Jb.c..&%p.P.\.u....
0980 d7 c1 c5 cf 7d c6 3f c6 78 37 8d eb b5 bc 81 16 f1 73 59 17 26 b3 86 bf ff 00 da c0 3f 79 d3 e1 ....}.?.x7.......sY.&.......?y..
09a0 00 0a 51 f6 f2 4a d0 40 a5 44 89 9c e7 70 3a d9 a0 03 f4 bc 80 fd e3 05 b4 93 af 83 0b 38 36 62 ..Q..J.@.D...p:..............86b
09c0 f3 df 2c 44 07 f8 dd 5b 99 fc 16 c5 34 5a ae 8d 03 66 f0 e5 5a a4 e5 f1 18 fe ea 5c 40 a1 9e 17 ..,D...[....4Z...f..Z......\@...
09e0 c0 e1 f0 02 5a af df 9f 3f 86 b8 be 31 ac 2a 81 7e 67 4b d1 03 e2 28 d8 ff c0 ed 02 ae 6f 65 a7 ....Z...?...1.*.~gK...(......oe.
0a00 67 29 4c 8e 60 be 14 f8 78 b6 82 f3 69 cf 0b d8 e9 5d f7 89 17 a0 94 04 74 0e 93 4e cc 1b 2d 12 g)L.`...x...i....]......t..N..-.
0a20 6b 34 90 dd de ea 00 49 22 81 23 a9 81 cb e0 0b f0 61 21 4f 86 61 41 6f 03 71 9e 02 58 da fe cd k4.....I".#......a!O.aAo.q..X...
0a40 00 cb e6 7b 1f f6 af db ed de ba 67 3d 63 5d ff 76 cd ea a5 e3 7a 9d 05 30 1e ca 02 28 2b 11 e3 ...{.......g=c].v....z..0...(+..
0a60 3a a0 7c b3 a5 80 41 c3 70 34 c7 c1 69 64 1b b9 2e 89 e4 28 a8 6a 91 16 e3 ac e7 05 ec f4 ae fb :.|...A.p4..id.....(.j..........
0a80 c4 0b 80 2e 0e 63 96 4b 18 d8 a9 92 49 3f 3f f9 5e a9 53 21 7c 3c 6f 44 02 34 21 7a f8 64 0c a7 .....c.K....I??.^.S!|<oD.4!z.d..
0aa0 e3 a0 23 6c 03 71 7a 5e c0 9e f2 02 82 6f a2 0e 16 c9 22 87 4f 97 02 ee b4 7d 2a 88 7b 1d 42 c5 ..#l.qz^.....o....".O....}*.{.B.
0ac0 b5 16 8b e0 f2 56 14 c2 45 d1 f3 02 76 7a d7 7d e2 05 78 2f a2 be b1 02 e8 68 15 10 d1 40 fc 68 .....V..E...vz.}..x/.....h...@.h
0ae0 1d 56 20 93 7e 35 13 8b 45 21 2e e0 a2 92 eb 9c df 12 13 68 6d 2d e4 82 10 2b 9f 2f 05 6f b5 fe .V..~5..E!.........hm-...+./.o..
0b00 fb fe 6d 91 36 9b ee 7d d8 df ee c0 7c 59 80 56 54 5e 3d fb 19 eb fa b7 b5 6d ef fa d4 b8 5e 49 ..m.6..}....|Y.VT^=......m....^I
0b20 00 60 c3 ce af ad 68 fc 69 2c 4e aa 9f 7f 92 85 ab 1e 58 0d ce 0b 34 9c c5 1d 2b e8 f7 67 81 34 .`....h.i,N.......X...4...+..g.4
0b40 ba 4f 12 60 5d 7f 55 57 af 2e 01 9e 1a d7 6b 46 04 81 98 72 51 24 4a 5d 13 b8 7f ab 42 b4 7d 45 .O.`].UW......kF...rQ$J]....B.}E
0b60 c7 0e 5a 16 22 fe 8b 4a ac 05 1f e8 64 a5 eb 79 01 b2 ab 0e 88 17 e0 bd 4c a4 d6 a2 c9 83 4c b2 ..Z."..J....d..y........L.....L.
0b80 b5 62 e3 5f cc c4 ee 47 c9 a2 58 15 b2 00 16 ab 10 2c 52 49 70 c8 c5 8d 00 5b 3d 2f 80 c3 e2 05 .b._...G..X......,RIp....[=/....
0ba0 28 05 d3 23 d9 e1 bf 7d 13 db 7f 98 49 ff 30 83 73 23 e6 9e 9f 0b 0e 70 3a 95 49 f7 5e 6c ff ba (..#...}....I.0.s#.....p:.I.^l..
0bc0 b9 17 69 a5 7a 5e 80 8c f3 90 78 01 21 b6 cf 68 38 3b 0e 14 6f 25 a2 fd 72 26 c1 1f ad 0b 5c 29 ..i.z^....x.!..h8;..o%..r&....\)
0be0 c1 02 c6 03 a8 a7 01 2f 50 a2 fd cf 56 f0 ee a4 e7 05 88 12 78 40 bc 00 67 c5 f6 8f b5 04 db 5e ......./P...V.......x@..g......^
0c00 ad e0 e7 90 ed e3 fc b8 f5 16 ca 8e 2f 2b f8 74 21 ef f7 75 09 a7 c7 f2 8c a3 01 bc 9d 86 e3 e3 ............/+.t!..u............
0c20 c9 1f e5 5e fc 7d 92 2a f2 10 7f 5f f1 bd 1b 76 53 6b 5d ca 46 81 d7 eb dd ba 45 d9 7d 4e 4c f4 ...^.}.*..._...vSk].F.....E.}NL.
0c40 68 b7 27 83 2e 1c eb 6e b2 76 18 57 fb cc 5d 79 01 2f 19 17 bf bd 82 33 48 8b d8 cf 22 30 89 b8 h.'....n.v.W..]y./.....3H..."0..
0c60 74 5b cd bf 6a c4 3d 3c 0a 47 42 1c cb 71 e1 1c 5c 95 9d 1f c3 7b f1 06 ea 4d c4 90 16 33 ce ad t[..j.=<.GB..q..\....{...M...3..
0c80 e7 6a ee 68 94 a7 b9 07 fd b6 11 39 bb 89 2d f7 e4 7d 0f e3 ef 4b d7 60 55 4d ee 72 0a 9a b5 11 .j.h.......9..-..}...K.`UM.r....
0ca0 b9 cf 19 d7 73 78 01 cf 1d d7 6b 1d 01 69 2c 8a df f5 2d d4 85 4c ac 42 6c 7e c2 c4 b7 47 c0 20 ....sx....k..i,...-..L.Bl~...G..
0cc0 11 1d 60 b5 94 05 3e 48 60 59 8a 6a d4 f3 02 da c9 3e 24 5e 40 08 ea 34 21 59 54 5e c2 e7 6b 39 ..`...>H`Y.j.....>$^@..4!YT^..k9
0ce0 02 4e 8f 45 d1 6b d1 6f 1d 2c 84 34 91 e8 e8 df 2e c5 72 98 8c c4 52 88 a2 9e 17 00 1c 18 2f 00 .N.E.k.o.,.4......r...R......./.
0d00 b8 5a c8 78 d2 10 97 e0 91 5d 5e 95 9d 34 68 8f 84 eb 85 28 86 0a 21 8d de ae 24 41 54 eb 53 e8 .Z.x.....]^..4h....(..!...$AT.S.
0d20 79 01 1c 0e 2f a0 0d f2 70 c1 a9 d3 66 01 d1 21 38 64 55 09 e1 63 1c a4 80 31 f2 9b 99 80 09 0c y.../...p...f..!8dU..c...1......
0d40 b3 b0 69 94 50 c5 1a d7 f3 02 82 db fa 30 78 01 2d be 5f 95 e2 fc 49 13 c5 e9 04 92 c4 33 5b c9 ..i.P........0x.-._...I......3[.
0d60 04 3b 27 0b c2 05 c0 28 d6 50 a7 70 3a 55 0c 12 cf 68 20 8b 39 4b 45 7a f4 bc 00 0e 87 17 00 32 .;'....(.P.p:U...h..9KEz.......2
0d80 c1 46 81 47 11 19 25 f0 34 9e 26 e8 2d 0a 81 86 bd 97 4d 11 1b 11 13 83 54 b3 2a 2c 83 24 70 0b .F.G..%.4.&.-.....M.....T.*,.$p.
0da0 74 80 88 37 81 38 3d 2f 60 bf 78 01 00 26 32 64 83 14 a5 14 8b 95 a7 aa c3 fb 3b a1 81 47 26 1c t..7.8=/`.x..&2d..........;..G&.
0dc0 b9 0a d2 41 42 9a 24 94 35 14 95 97 89 57 41 89 65 0b 35 ac e7 05 ec 21 2f 40 c1 20 d6 78 9f 70 ...AB.$.5....WA.e.5....!/@...x.p
0de0 bd a8 71 d6 63 b4 27 09 ee e0 c6 76 a4 51 a3 15 e3 34 66 96 83 b7 15 b6 f1 1c 4d c4 0a b0 56 ae ..q.c.'....v.Q...4f.......M...V.
0e00 cf e2 9e 17 00 1c 16 2f 60 48 83 a9 97 ac 1a c7 f1 28 64 02 35 9d c2 f7 f5 5a cc c3 48 79 a6 3e ......./`H.......(d.5....Z..Hy.>
0e20 e7 43 29 d1 42 83 90 40 62 91 8b f4 bc 59 04 33 f1 39 08 54 cf 0b 78 7d 5e 40 81 e7 78 e8 c9 90 .C).B..@b....Y.3.9.T..x}^@..x...
0e40 33 3e 0d d6 c0 c9 11 9c 4d 24 58 a4 8d 19 58 2a c7 fb e3 90 4d d4 8b d6 9f c6 02 03 27 51 f0 2a 3>......M$X...X*....M.......'Q.*
0e60 6e 03 71 7a 5e c0 1e f1 02 02 39 74 55 88 28 ff d3 07 f8 f5 42 26 b2 c5 05 ce a6 82 f5 37 0e 6e n.qz^.....9tU.(.....B&.......7.n
0e80 73 71 9e fe 7a 01 ff eb 33 5c de 84 45 6c 04 0c 3a 3f e9 79 01 3b bd eb 3e f1 02 ca 1a 3e 5e c1 sq..z...3\..El..:?.y.;..>....>^.
0ea0 28 81 3f be 17 4c c4 79 89 05 18 be 0f 56 8a 95 85 7b b3 80 25 e2 0f 98 4e 44 37 58 16 5d be 20 (.?..L.y.....V...{..%...ND7X.]..
0ec0 eb 7a 5e c0 4e ef ba 4f bc 80 2c 81 b3 71 17 fd 63 55 17 eb f7 0f 1f 04 de 3d 3f 96 c5 7a 32 91 .z^.N..O..,..q..cU.......=?..z2.
0ee0 85 52 d6 72 34 9c 1e 03 a5 e8 09 45 05 3f 1d f7 f5 02 76 7a d7 bd a9 17 d0 3a 78 32 81 79 6f 73 .R.r4......E.?....vz.....:x2.yos
0f00 28 5c 17 f3 37 1e 12 4c be ee 08 ce 52 98 17 30 af 83 6e e0 44 29 8c 75 08 29 db 06 e2 f4 bc 80 (\..7..L....R..0..n.D).u.)......
0f20 3d ab 17 10 8e a2 e9 51 84 32 9e b2 b6 8c 42 b6 d0 37 63 c9 13 d8 32 80 24 39 b4 e2 ec 38 c2 df =......Q.2....B..7c...2.$9...8..
0f40 36 8c 32 cf b2 10 76 f0 f9 89 e8 09 3d 2f 80 03 e3 05 78 b1 f1 df bc c9 98 8e 23 aa 2a d4 02 b2 6.2...v.....=/....x.......#.*...
0f60 02 53 4f 8f 44 19 bc 5b dc 59 c4 d9 9b 84 34 d6 7c bd 96 04 93 91 16 53 71 3c e8 79 01 3b bd eb .SO.D..[.Y....4.|......Sq<.y.;..
0f80 3e f1 02 40 14 b9 6f 2b cf 7c 0e d6 46 64 69 43 96 08 12 78 35 eb a8 61 d6 c1 97 1b cf c5 12 e6 >..@..o+.|..FdiC...x5..a........
0fa0 0b c3 d9 c4 12 c7 c2 18 be 9a cb a2 e9 eb 05 70 80 f5 02 94 a4 7a c9 06 29 6f cf 86 a4 49 17 0d ...............p.....z..)o...I..
0fc0 94 c6 62 ea 75 d2 02 8c d6 9c 9d 8e 18 8f 64 c3 2e 73 d1 07 36 3a 83 7a 5e c0 7e f2 02 3c 90 97 ..b.u.........d..s..6:.z^.~..<..
0fe0 1e 6d 6a ce a6 d2 51 58 f1 b4 b6 ae 5e 7c 07 06 e5 85 63 9c 35 24 a9 42 87 ef 5d 60 11 a1 7a 5e .mj...QX....^|....c.5$.B..]`..z^
1000 80 68 d6 07 56 2f a0 b2 10 f9 0a d5 34 ac 4a f1 07 b4 79 01 66 ab 0e a4 92 c0 50 c7 50 17 14 cb .h..V/......4.J...y.f.....P.P...
1020 92 61 ea 30 a1 92 58 5b 54 aa e7 05 70 60 bc 00 60 3a 6c a3 7c 1c 2a 04 85 36 4d e0 07 84 88 20 .a.0..X[T...p`..`:l.|.*..6M.....
1040 8f b8 82 df 4e 41 2b cf cd c2 8b a7 30 54 15 99 8c b6 2c 80 9e 17 b0 bf f5 02 8c 69 ad 97 e0 0a ....NA+.....0T....,........i....
1060 be 67 1e a6 51 17 ab a9 94 48 83 ba ee 38 82 be 5d 1c 91 b8 90 7b 5e 00 07 c4 0b 50 5d 08 d8 e5 .g..Q....H...8..]....{^....P]...
1080 4c 52 c0 58 2f 29 df ee cc d2 10 10 d8 52 c3 1b 0b bf 5e c2 cd 1c e2 a4 ab 37 d8 c1 f5 4f fd 28 LR.X/).......R....^......7...O.(
10a0 7d bd 80 fd ab 17 10 98 ca 6d ba f8 34 54 05 55 aa 8b cd b8 2b 17 13 fa b2 54 82 41 db 20 9a 87 }........m..4T.U....+....T.A....
10c0 ec e1 be 5e c0 5f 30 ae 1f dd 3e 5d c3 d7 2b 41 fb d2 08 a2 18 96 8d 24 7b f8 b6 82 8f d7 a2 0b ...^._0...>]..+A.......${.......
10e0 38 0f 5f ae 84 40 a2 42 40 68 94 0a 46 70 bd 0a 99 c3 ae 42 fc e0 26 c8 b1 e7 05 ec 17 2f a0 ae 8._..@.B@h..Fp.....B..&....../..
1100 e5 cf 0e 53 d9 fd b3 52 28 de a7 e3 10 2e 17 87 62 50 48 90 4c 12 c9 b5 0e b8 cc e5 ba 41 b0 00 ...S...R(.......bPH.L........A..
1120 06 99 10 48 7a 5e 00 87 c3 0b f8 e9 58 a0 de a6 11 20 e8 dd 18 22 27 0b f2 77 53 71 66 e5 c1 9d ...Hz^......X........"'..wSqf...
1140 fd f6 44 24 45 59 c2 24 85 e3 58 48 24 c3 08 4e 87 50 86 02 d2 3d 2f 80 c3 e1 05 a4 b1 9c f9 65 ..D$EY.$..XH$..N.P...=/........e
1160 dd 69 fc ab 15 5c f8 50 11 5c 2c 64 de dd 4b 16 b9 2a 61 12 36 cc b7 9b 10 1d 54 c3 3c d9 52 37 .i...\.P.\,d..K..*a.6.....T.<.R7
1180 b0 e7 05 ec 27 2f 40 07 4a d8 20 16 2b 65 34 80 93 a9 60 00 e3 41 38 0a 13 f0 0b 59 04 d3 50 4b ....'/@.J...+e4...`..A8....Y..PK
11a0 30 8a 60 1a 6a 04 18 e4 7a d3 f3 02 5a 1d e0 40 78 01 01 f4 49 02 df 6f 99 87 f0 ae 01 fc ba 10 0.`.j...z...Z..@x...I..o........
11c0 e5 b8 05 89 5a c5 b6 45 fd 9c 97 52 71 d7 73 89 1e 8a 34 fc 74 da f3 02 64 a1 1e 10 2f a0 2d 01 ....Z..E...Rq.s...4.t...d.../.-.
11e0 5f 54 a1 ec 4b d0 83 ea 46 c2 bc 8d e9 6a 09 59 17 f2 02 85 30 b1 b6 70 a4 f7 f2 1b 6e 4c 12 d5 _T..K...F....j.Y....0..p....nL..
1200 f3 02 f6 b3 5e c0 5d 9e 40 05 4d 00 b1 ea b0 09 8e 8f b8 e3 08 b4 86 b1 0e 78 80 f5 dd e2 69 33 ....^.].@.M..............x....i3
1220 85 29 d5 f3 02 44 51 3a 20 5e 80 09 e5 61 92 58 cc eb 2c 92 09 37 2d e0 16 92 42 b6 19 c2 06 a9 .)...DQ:.^...a.X..,..7-...B.....
1240 4c 7c 16 77 00 90 31 b2 fb cb aa e7 05 ec 34 de 7f 14 5e c0 a9 f7 2f da fe 61 7c 8b 5c c6 12 c7 L|.w..1.......4...^.../..a|.\...
1260 32 f1 c3 4c 76 76 d9 88 99 d8 32 87 bd 17 4b 20 8d db 10 b1 ae 6e 40 59 f7 bc 80 9d de 75 9f ea 2..Lvv....2...K......n@Y.....u..
1280 05 b8 60 95 96 8d 98 7e cb 5c c6 5a 56 9d a7 2f 89 3b 7d c1 7a b1 ff 17 2b 99 f0 b6 ec ac f7 a1 ..`....~.\.ZV../.;}.z...+.......
12a0 bc cc 26 10 a7 e7 05 ec 1f 2f a0 75 e0 1c 8f e0 f3 95 88 73 13 92 40 5e dc 4a 86 90 38 ea e0 fc ..&....../.u.......s..@^.J..8...
12c0 2c 92 05 61 c3 ee 5f e4 12 17 b8 18 09 0e a0 37 82 38 a6 05 70 14 ca 78 d2 48 3d ea df 2c b0 36 ,..a.._........7.8..p..x.H=..,.6
12e0 df fb b0 7f dd 0e 7c ee 33 d6 f5 6f 05 82 5e 38 ae d7 6a ce 4b c2 e7 4f b7 90 87 c4 d1 83 54 7c ......|.3..o..^8..j.K..O......T|
1300 fc 91 f9 5e 09 2c 6a f8 74 05 97 01 3c d2 5a c2 c7 07 d9 96 5c c1 7d bd 80 fd ac 17 d0 7a fa ce ...^.,j.t...<.Z.....\.}......z..
1320 4f a0 d1 f0 cb 8d f4 35 21 b3 59 5e 0a f8 73 27 01 12 f8 c3 39 7c 2a 3a 9d a0 0e c1 a3 69 dc f3 O......5!.Y^..s'....9|*:.....i..
1340 02 76 7a d7 bd aa 17 e0 45 c9 5b ae c4 2a 51 a5 f0 05 41 10 c2 24 ee 8e 29 e5 a5 7a e8 62 05 03 .vz.....E.[..*Q...A..$..)..z.b..
1360 2b 50 70 64 c0 47 62 32 a2 7a 5e c0 4e ef ba 6f f5 02 5a 45 ae 69 60 14 cb e7 34 d0 bf 87 19 77 +Ppd.Gb2.z^.N..o..ZE.i`...4....w
1380 20 95 6f 25 43 dd f1 01 67 2b 81 8c 47 83 e0 52 de 06 e2 f4 bc 80 fd e3 05 b4 01 21 6a 25 22 bf ..o%C...g+..G..R...........!j%".
13a0 6a 64 62 7f f9 22 b6 ff 28 eb 16 cb 30 83 13 2f 10 70 1c c1 ed 52 c2 33 9c db 92 27 b0 e7 05 ec jdb.."..(...0../.p...R.3...'....
13c0 31 2f 20 d8 fd 59 2c bb 7c 3c 90 b3 7e 34 90 9a 41 ad 89 aa 10 9c 60 98 71 97 63 f8 e4 48 fc 08 1/...Y,.|<..~4..A.....`.q.c..H..
13e0 47 03 91 08 3d 2f 80 03 e3 05 84 53 b7 4d 05 e3 83 87 52 2b c1 2b 6e 57 a1 a2 58 70 00 b5 e5 65 G...=/.....S.M....R+.+nW..Xp...e
1400 08 78 c6 20 15 57 7f 8b 23 f4 bc 00 0e 87 17 20 c5 a3 bb 12 f1 55 13 76 bb 97 7f 9b 7b 67 7f 64 .x...W..#............U.v....{g.d
1420 42 fd c0 a0 f5 b7 e1 e2 04 67 90 62 4b 92 a8 9e 17 b0 7f bc 00 ef 25 05 dc d7 6b 89 f9 cf 12 c5 B........g.bK.........%...k.....
1440 30 95 50 75 87 88 ff 76 71 38 27 16 c0 6f 8d 2c 9a c9 b0 63 0c 47 46 98 c4 55 d3 f3 02 ee 22 6d 0.Pu...vq8'..o.,...c.GF..U...."m
1460 5e cc 0b 78 11 a6 ff f2 05 90 57 a0 a3 84 48 39 4e 23 2b 8a 5c 70 10 95 95 e0 fe 71 70 e4 95 8d ^..x......W...H9N#+.\p.....qp...
1480 a6 f2 09 9e 8a 41 22 12 2e 8e 04 ef 58 e6 5b 24 40 cf 0b d8 3f 5e 80 1c 01 8a f7 6f 53 66 b3 8a .....A".....X.[$@...?^.....oSf..
14a0 8f 17 0d 93 23 d1 0b e2 08 ae 97 12 ff 7f 36 15 88 f8 28 53 9c 9c 64 7c fc ad 12 65 71 24 47 82 ....#.........6...(S..d|...eq$G.
14c0 f5 f0 e5 46 8e 8c be 5e 00 87 55 2f 40 29 4f e4 97 44 48 6c 64 5e 85 4d b6 82 9f cf 83 83 27 c4 ...F...^..U/@)O..DHld^.M......'.
14e0 fe 1b e5 48 dc 1c a5 3c 65 2d 4a df 6c 25 d2 e2 dd a9 1c 13 3d 2f e0 2f 18 d7 2b 01 81 78 e7 18 ...H...<e-J.l%......=/./..+..x..
1500 0f 65 01 2c 73 18 0e c0 cc 43 cc 42 60 fd ca 79 ef 31 ca 72 3a 85 cf 97 72 5d 5e 49 4c 60 6c a4 .e.,s....C.B`..y.1.r:...r]^IL`l.
1520 d8 44 cf 0b e0 c0 ea 05 04 6f a0 27 24 89 72 61 32 6b f8 fb 0f f0 cb b7 4e 32 df 4f 1b 9f 57 5d .D.......o.'$.ra2k......N2.O..W]
1540 1c c0 d7 1b b9 76 b6 dc 12 11 e4 d6 84 5e 3d 74 8c ec e2 66 ad 71 68 bf de d5 6a 94 be fb 7c 35 .....v.......^=t...f.qh...j...|5
1560 f7 8f 76 fb ba 88 dc 5d c6 d5 3e 73 77 5e c0 f3 c7 f5 2a 25 63 10 66 0f 61 e2 17 2b 49 07 17 47 ..v....]..>sw^....*%c.f.a..+I..G
1580 f0 bb b7 32 e1 ad f4 32 3a b0 80 02 66 f0 e5 5a 8e b4 e3 b1 64 12 4b a3 2d dc c0 c6 3e 0e 86 78 ...2...2:...f..Z....d.K.-...>..x
15a0 e8 32 dd c5 cd 6a d4 d3 ae d6 fb 9f d7 ed f6 8b 59 37 86 76 f7 ed 32 ae f6 99 3b f3 02 5e 30 ae .2...j..........Y7.v..2...;..^0.
15c0 d7 68 8d 85 3f 7f 94 3a c1 d3 91 48 af 51 08 f1 9e af b8 4b 08 ad 10 f2 e8 9f fe b7 28 b3 59 0a .h..?..:...H.Q.....K........(.Y.
15e0 93 50 41 bc b1 a2 0b 6c 8c 09 ec 79 01 fb c9 0b 50 4a 02 3a 87 49 27 e6 8d 96 a3 60 34 90 dd de .PA....l...y....PJ.:.I'....`4...
1600 ea 00 49 22 81 23 a9 91 ea e1 6d f6 30 ad 05 17 d0 ba e7 05 04 1d e0 f5 78 01 fe 02 d4 d9 ee df ..I".#....m.0...........x.......
1620 2b 25 01 1d c3 44 ec fe 93 a3 c0 fa 45 ce f4 a3 ac 4b 12 15 07 a7 91 6d e4 ba 24 12 e9 50 d5 22 +%...D......E....K.....m..$..P."
1640 2d c6 59 cf 0b 90 85 fa 8a bc 00 75 26 93 fc 9c c5 d1 e2 2f b3 5c c2 c0 f2 90 11 fc fc 44 9c 3c -.Y........u&....../.\.......D.<
1660 f7 17 8b 51 a1 64 fc 5c ca c5 1a 2d 8b e2 74 b2 05 07 e8 79 01 3f 8e 17 d0 2e 82 fb 93 fd a4 64 ...Q.d.\...-..t....y.?.........d
1680 50 9d 83 c7 87 2a e2 20 b1 7e 9f 2e 05 ff 7f 33 ee 8e 07 1d 14 c0 ba e9 0a 48 cf 97 12 4b f0 76 P....*...~.....3.........H...K.v
16a0 da f3 02 80 fd e0 05 dc 5f 04 9b 8e 05 ef 45 d4 37 56 00 1d 1d ea 08 fa 40 fc 68 99 3f 20 bf cb ........_.....E.7V......@.h.?...
16c0 d5 ac 8d 77 ec 72 0a bb 90 5e 76 73 4c e0 16 a0 e4 b9 fe eb 9e 17 f0 32 49 b0 46 00 60 c3 ce af ...w.r...^vsL..........2I.F.`...
16e0 ad ec f8 34 16 e5 f4 e7 9f 1e 67 00 69 73 03 19 23 0b a6 65 05 fd fe 2c d4 1d de 06 e2 f4 bc 80 ...4......g.is..#..e...,........
1700 1f cb 0b d8 34 f9 f7 7f 57 08 29 e1 22 51 ea 1a db 65 10 af 9a 00 02 05 76 50 5b 24 aa a8 e4 bd ....4...W.)."Q...e......vP[$....
1720 7c a0 93 6d 8c 07 e8 79 01 fb c9 0b f0 a1 1c 9c d6 a2 c9 83 4c b2 b5 72 b6 5f cc 44 c1 23 a4 86 |..m...y............L..r._.D.#..
1740 59 15 32 d1 8b 95 04 8b 14 95 80 48 17 37 b2 a0 5f 31 b0 e9 ff 93 f6 03 dd c1 7f 73 a6 f8 70 29 Y.2........H.7.._1.........s..p)
1760 61 de 0a f8 d3 ff 11 db ff ed 09 fc f2 19 fe d5 cf 12 00 9a 44 f0 e1 42 2c 83 77 6f e0 b7 6f e2 a...................D..B,.wo..o.
1780 0b f8 97 7f 94 ec 62 de 4a bf df 14 15 dc b7 1f b4 a3 2f 9e f9 7d 88 ed 4b 22 38 3b 96 78 40 ad ......b.J........./..}..K"8;.x@.
17a0 44 b4 5f ce 42 d6 f0 7b c5 a3 63 23 d7 9c 4e bb 2c 61 ad 57 70 94 f4 0b e0 d5 db 73 71 00 67 c5 D._.B..{..c#..N.,a.Wp......sq.g.
17c0 f6 bf ba 15 27 db d7 45 60 07 1b c1 f7 c7 43 39 e3 25 4d 2c 7c ba 10 9c e0 6b b0 1c 08 d6 c0 db ....'..E`.....C9.%M,|....k......
17e0 69 38 3e fa 29 d8 9f 45 b0 0b 0e a0 b5 88 fd 2c 02 93 88 4b b7 d5 fc db 8c e1 a3 2c ec fe 58 92 i8>.)..E.......,...K.......,..X.
1800 4a 39 07 57 65 a7 bf 78 0f f3 5c 24 47 2f 01 f6 50 12 6c 34 05 83 dd 1f 45 70 7d 0b 75 d1 55 0c J9.We..x..\$G/..P.l4....Ep}.u.U.
1820 bf 9a c9 f7 f1 bd 23 60 90 88 e2 b7 5a 8a e6 3f 48 60 59 8a 72 b8 91 1d dc b7 fd 90 04 8f cf 85 ......#`....Z..?H`Y.r...........
1840 ce c3 7a 34 14 88 f7 f3 b5 1c 01 a7 a1 08 54 8b d0 ea 60 21 a4 89 78 45 7f bb 14 2c 60 32 12 4b ..z4..........T...`!..xE...,`2.K
1860 21 8a 7a 09 b0 97 8b 80 cd f3 cf d5 a2 ab 13 18 19 e9 2b 2a a9 2a de 4a 83 f6 48 b8 5e b4 99 c5 !.z...............+*.*.J..H.^...
1880 c5 7d 7c bb 92 fc 80 20 8b a8 97 00 07 d6 4c 28 0d 6f 74 97 05 44 6b d1 f6 57 95 10 3e c6 c3 e0 .}|...........L(.ot..Dk..W..>...
18a0 08 0a e5 64 4d c0 04 86 19 77 45 25 ae e7 5b 8a 46 f5 6d 3f 5b dd c8 4e 5f e4 90 26 8a d3 89 62 ...dM....wE%..[.F.m?[..N_..&...b
18c0 94 49 fd c0 61 d6 79 4a 5d 00 8c ca 4a 20 e3 d3 a9 62 10 e8 63 68 09 10 89 4c bf 00 0e ae 39 17 .I..a.yJ]...J....b..ch...L....9.
18e0 a2 ac 51 44 46 61 8c 42 21 bb b9 8d d1 ac 42 0a 18 d7 88 64 40 29 06 a9 16 c5 2f 11 29 a1 b5 e0 ..QDFa.B!.....B....d@)..../.)...
1900 01 fd 02 38 b4 23 20 32 64 83 14 a5 14 8b 95 a7 aa 43 3c 84 13 14 30 32 21 77 a0 82 74 90 90 26 ...8.#.2d........C<...02!w..t..&
1920 49 28 26 e9 ef c2 c5 6c 08 66 72 be d7 01 0e 4c 43 84 41 ac f1 3e e1 7a 51 e3 ac d4 0b 6a 73 03 I(&....l.fr....LC.A..>.zQ....js.
1940 36 b6 23 8d 1a ad 18 a7 31 b3 1c bc ad b0 8d e7 68 22 fe 03 6b e5 fa 2c ee 25 c0 c1 b5 21 0d a6 6.#.....1.......h"..k..,.%...!..
1960 5e 52 d7 4e 68 e1 c1 12 68 15 be af d7 e2 fd 8b 94 67 ea 73 ca 32 17 a2 68 48 20 d1 2a 8d 37 0b ^R.Nh...h........g.s.2..hH..*.7.
1980 b8 9e f5 12 e0 e0 5a 81 e7 78 e8 c9 10 a7 4e 1a ac 81 93 23 38 9b 48 b0 48 1b 33 b0 54 8e f7 c7 ......Z..x....N....#8.H.H.3.T...
19a0 21 9b a8 17 3d 21 8d 05 06 4e 22 51 12 fb 05 70 48 2d 90 43 57 05 d4 0e 3e 7c 15 31 7e 7a d6 e1 !...=!...N"Q...pH-.CW...>|.1~z..
19c0 02 67 53 59 00 97 0b 29 2e 3d b1 f0 65 06 f3 05 bc 79 03 c3 a1 30 83 26 a3 90 55 ac ff 55 0f ab .gSY...).=..e....y...0.&..U..U..
19e0 95 35 7c bc 12 4f de 1f df 0b 3d cc 79 89 05 18 be 0f 51 cb 56 1c 42 37 0b 58 22 fe 80 e9 44 74 .5|..O....=.y.....Q.V.B7.X"...Dt
1a00 83 65 d1 e5 0b da 5c 37 b0 6f 7b d9 b2 04 ce c6 5d f4 8f 55 5d ac df 3f 7c 10 78 f7 fc 58 ce f9 .e....\7.o{.....]..U]..?|.x..X..
1a20 93 89 2c 94 b2 96 a3 e1 f4 18 28 45 4f 28 2a a9 40 d2 2b 81 87 66 08 28 49 f2 58 35 22 e2 0b d7 ..,.......(EO(*.@.+..f.(I.X5"...
1a40 c5 fc 8d 87 04 93 4f ae 8d 8c 00 3e f3 02 e6 75 d0 0d 9c 04 8a c4 3a 84 94 f5 3f e9 81 01 41 c8 ......O....>...u......:...?...A.
1a60 ee 9e 1e 45 28 e3 29 6b cb 28 15 f3 ef cd 58 f2 04 b6 0c 20 49 0e ad 38 3b 8e f0 b7 0d a3 cc b3 ...E(.)k.(....X.....I..8;.......
1a80 2c 44 07 38 3f 09 a4 dd fe 27 3d 3c 45 d0 68 c5 64 9a a1 66 35 bf 7e b6 52 0b c8 06 da 5a d4 01 ,D.8?....'=<E.h.d..f5.~.R....Z..
1aa0 3d 00 83 2c 22 ca 12 66 2b c7 d7 6b 2b f1 02 a9 78 12 ad ed 17 c0 41 b6 65 01 df 56 9e f9 1c ac =..,"..f+..k+...x.....A.e..V....
1ac0 8d c8 d2 86 2c 11 24 f0 6a d6 51 c3 ac 83 2f 37 9e 8b 25 cc 17 86 b3 89 95 52 71 06 ae e6 b2 00 ....,.$.j.Q.../7..%......Rq.....
1ae0 7a 1d e0 00 9b 56 92 ea 25 1b a4 bc 3d 1b 92 26 5d 34 50 1a 8b 49 d8 49 0b 30 5a 73 76 3a 62 3c z....V..%...=..&]4P..I.I.0Zsv:b<
1b00 92 78 f2 65 2e fa 40 64 7a 09 70 88 27 00 79 e9 d1 a6 e6 6c 2a 1d 85 15 e6 75 eb ea c5 77 60 50 .x.e..@dz.p.'.y....l*....u...w`P
1b20 5e 38 c6 59 43 92 2a 74 f8 de 05 16 11 7d 48 d8 61 b6 ca 82 6b 2a 54 93 93 af 56 68 e5 89 23 b1 ^8.YC.*t.....}H.a...k*T...Vh..#.
1b40 ed ab ba cb a7 24 81 a1 0e 65 0b 8a e5 02 9c c5 dc ab 24 d6 f4 3a c0 01 9a 81 74 a5 e1 14 0e 15 .....$...e........$..:....t.....
1b60 82 42 9b 46 e2 01 da 84 90 1e 71 05 bf 9d 82 56 9e 9b 85 17 4f 61 a8 2a 32 19 75 a5 e7 fb 76 60 .B.F......q....V....Oa.*2.u...v`
1b80 cd 04 6a 58 15 28 6c fe 9e 79 98 46 5d c6 50 15 2a 8d 5b db 71 04 7d bb 38 a2 50 3a ae ff 39 0f ..jX.(l..y.F].P.*.[.q.}.8.P:..9.
1ba0 6b fb b7 de bc cb 99 a4 80 b1 5e 52 be dd a5 af 0f 01 81 2d 35 bc b1 f0 eb a5 e4 0f 8c 93 2e 7d k.........^R.......-5..........}
1bc0 cc 9d 42 d9 ff aa 87 b7 00 4c c8 fc 91 26 dc e5 35 68 23 81 ef 13 d5 94 12 24 70 3a ea 42 c5 5a ..B......L...&..5h#......$p:.B.Z
1be0 0e 41 7b 59 2f 01 fe d2 76 a9 7e 18 bf f2 53 8c ff 76 45 95 c6 81 a1 9c c0 b2 91 ec 5f df 56 f0 .A{Y/...v.~...S..vE........._.V.
1c00 f1 1a 9a 5a 8e 83 af 37 82 17 b4 e1 62 51 26 18 c1 f5 2a 64 0e bb 02 e7 48 fe 2f 47 98 bc c9 0b ...Z...7....bQ&...*d....H./G....
1c20 33 ec 74 00 00 00 00 49 45 4e 44 ae 42 60 82 3.t....IEND.B`.
">break; } } while (!f.at_end()); if (all_groups_match) return true; } // Didn't match return false; } // Deserialize an itemstring then return the name of the item static std::string craftGetItemName(const std::string &itemstring, IGameDef *gamedef) { ItemStack item; item.deSerialize(itemstring, gamedef->idef()); return item.name; } // (mapcar craftGetItemName itemstrings) static std::vector<std::string> craftGetItemNames( const std::vector<std::string> &itemstrings, IGameDef *gamedef) { std::vector<std::string> result; for (std::vector<std::string>::size_type i = 0; i < itemstrings.size(); i++) { result.push_back(craftGetItemName(itemstrings[i], gamedef)); } return result; } // Get name of each item, and return them as a new list. static std::vector<std::string> craftGetItemNames( const std::vector<ItemStack> &items, IGameDef *gamedef) { std::vector<std::string> result; for (std::vector<ItemStack>::size_type i = 0; i < items.size(); i++) { result.push_back(items[i].name); } return result; } // convert a list of item names, to ItemStacks. static std::vector<ItemStack> craftGetItems( const std::vector<std::string> &items, IGameDef *gamedef) { std::vector<ItemStack> result; for (std::vector<std::string>::size_type i = 0; i < items.size(); i++) { result.push_back(ItemStack(std::string(items[i]), (u16)1, (u16)0, gamedef->getItemDefManager())); } return result; } // Compute bounding rectangle given a matrix of items // Returns false if every item is "" static bool craftGetBounds(const std::vector<std::string> &items, unsigned int width, unsigned int &min_x, unsigned int &max_x, unsigned int &min_y, unsigned int &max_y) { bool success = false; unsigned int x = 0; unsigned int y = 0; for (std::vector<std::string>::size_type i = 0; i < items.size(); i++) { // Is this an actual item? if (items[i] != "") { if (!success) { // This is the first nonempty item min_x = max_x = x; min_y = max_y = y; success = true; } else { if (x < min_x) min_x = x; if (x > max_x) max_x = x; if (y < min_y) min_y = y; if (y > max_y) max_y = y; } } // Step coordinate x++; if (x == width) { x = 0; y++; } } return success; } // Removes 1 from each item stack static void craftDecrementInput(CraftInput &input, IGameDef *gamedef) { for (std::vector<ItemStack>::size_type i = 0; i < input.items.size(); i++) { if (input.items[i].count != 0) input.items[i].remove(1); } } // Removes 1 from each item stack with replacement support // Example: if replacements contains the pair ("bucket:bucket_water", "bucket:bucket_empty"), // a water bucket will not be removed but replaced by an empty bucket. static void craftDecrementOrReplaceInput(CraftInput &input, std::vector<ItemStack> &output_replacements, const CraftReplacements &replacements, IGameDef *gamedef) { if (replacements.pairs.empty()) { craftDecrementInput(input, gamedef); return; } // Make a copy of the replacements pair list std::vector<std::pair<std::string, std::string> > pairs = replacements.pairs; for (std::vector<ItemStack>::size_type i = 0; i < input.items.size(); i++) { ItemStack &item = input.items[i]; // Find an appropriate replacement bool found_replacement = false; for (std::vector<std::pair<std::string, std::string> >::iterator j = pairs.begin(); j != pairs.end(); ++j) { if (inputItemMatchesRecipe(item.name, j->first, gamedef->idef())) { if (item.count == 1) { item.deSerialize(j->second, gamedef->idef()); found_replacement = true; pairs.erase(j); break; } else { ItemStack rep; rep.deSerialize(j->second, gamedef->idef()); item.remove(1); found_replacement = true; output_replacements.push_back(rep); break; } } } // No replacement was found, simply decrement count by one if (!found_replacement && item.count > 0) item.remove(1); } } // Dump an itemstring matrix static std::string craftDumpMatrix(const std::vector<std::string> &items, unsigned int width) { std::ostringstream os(std::ios::binary); os << "{ "; unsigned int x = 0; for(std::vector<std::string>::size_type i = 0; i < items.size(); i++, x++) { if (x == width) { os << "; "; x = 0; } else if (x != 0) { os << ","; } os << '"' << items[i] << '"'; } os << " }"; return os.str(); } // Dump an item matrix std::string craftDumpMatrix(const std::vector<ItemStack> &items, unsigned int width) { std::ostringstream os(std::ios::binary); os << "{ "; unsigned int x = 0; for (std::vector<ItemStack>::size_type i = 0; i < items.size(); i++, x++) { if (x == width) { os << "; "; x = 0; } else if (x != 0) { os << ","; } os << '"' << (items[i].getItemString()) << '"'; } os << " }"; return os.str(); } /* CraftInput */ std::string CraftInput::dump() const { std::ostringstream os(std::ios::binary); os << "(method=" << ((int)method) << ", items=" << craftDumpMatrix(items, width) << ")"; return os.str(); } /* CraftOutput */ std::string CraftOutput::dump() const { std::ostringstream os(std::ios::binary); os << "(item=\"" << item << "\", time=" << time << ")"; return os.str(); } /* CraftReplacements */ std::string CraftReplacements::dump() const { std::ostringstream os(std::ios::binary); os<<"{"; const char *sep = ""; for (std::vector<std::pair<std::string, std::string> >::size_type i = 0; i < pairs.size(); i++) { const std::pair<std::string, std::string> &repl_p = pairs[i]; os << sep << '"' << (repl_p.first) << "\"=>\"" << (repl_p.second) << '"'; sep = ","; } os << "}"; return os.str(); } /* CraftDefinitionShaped */ std::string CraftDefinitionShaped::getName() const { return "shaped"; } bool CraftDefinitionShaped::check(const CraftInput &input, IGameDef *gamedef) const { if (input.method != CRAFT_METHOD_NORMAL) return false; // Get input item matrix std::vector<std::string> inp_names = craftGetItemNames(input.items, gamedef); unsigned int inp_width = input.width; if (inp_width == 0) return false; while (inp_names.size() % inp_width != 0) inp_names.push_back(""); // Get input bounds unsigned int inp_min_x = 0, inp_max_x = 0, inp_min_y = 0, inp_max_y = 0; if (!craftGetBounds(inp_names, inp_width, inp_min_x, inp_max_x, inp_min_y, inp_max_y)) return false; // it was empty std::vector<std::string> rec_names; if (hash_inited) rec_names = recipe_names; else rec_names = craftGetItemNames(recipe, gamedef); // Get recipe item matrix unsigned int rec_width = width; if (rec_width == 0) return false; while (rec_names.size() % rec_width != 0) rec_names.push_back(""); // Get recipe bounds unsigned int rec_min_x=0, rec_max_x=0, rec_min_y=0, rec_max_y=0; if (!craftGetBounds(rec_names, rec_width, rec_min_x, rec_max_x, rec_min_y, rec_max_y)) return false; // it was empty // Different sizes? if (inp_max_x - inp_min_x != rec_max_x - rec_min_x || inp_max_y - inp_min_y != rec_max_y - rec_min_y) return false; // Verify that all item names in the bounding box are equal unsigned int w = inp_max_x - inp_min_x + 1; unsigned int h = inp_max_y - inp_min_y + 1; for (unsigned int y=0; y < h; y++) { unsigned int inp_y = (inp_min_y + y) * inp_width; unsigned int rec_y = (rec_min_y + y) * rec_width; for (unsigned int x=0; x < w; x++) { unsigned int inp_x = inp_min_x + x; unsigned int rec_x = rec_min_x + x; if (!inputItemMatchesRecipe( inp_names[inp_y + inp_x], rec_names[rec_y + rec_x], gamedef->idef())) { return false; } } } return true; } CraftOutput CraftDefinitionShaped::getOutput(const CraftInput &input, IGameDef *gamedef) const { return CraftOutput(output, 0); } CraftInput CraftDefinitionShaped::getInput(const CraftOutput &output, IGameDef *gamedef) const { return CraftInput(CRAFT_METHOD_NORMAL,width,craftGetItems(recipe,gamedef)); } void CraftDefinitionShaped::decrementInput(CraftInput &input, std::vector<ItemStack> &output_replacements, IGameDef *gamedef) const { craftDecrementOrReplaceInput(input, output_replacements, replacements, gamedef); } CraftHashType CraftDefinitionShaped::getHashType() const { assert(hash_inited); // Pre-condition bool has_group = false; for (size_t i = 0; i < recipe_names.size(); i++) { if (isGroupRecipeStr(recipe_names[i])) { has_group = true; break; } } if (has_group) return CRAFT_HASH_TYPE_COUNT; else return CRAFT_HASH_TYPE_ITEM_NAMES; } u64 CraftDefinitionShaped::getHash(CraftHashType type) const { assert(hash_inited); // Pre-condition assert((type == CRAFT_HASH_TYPE_ITEM_NAMES) || (type == CRAFT_HASH_TYPE_COUNT)); // Pre-condition std::vector<std::string> rec_names = recipe_names; std::sort(rec_names.begin(), rec_names.end()); return getHashForGrid(type, rec_names); } void CraftDefinitionShaped::initHash(IGameDef *gamedef) { if (hash_inited) return; hash_inited = true; recipe_names = craftGetItemNames(recipe, gamedef); } std::string CraftDefinitionShaped::dump() const { std::ostringstream os(std::ios::binary); os << "(shaped, output=\"" << output << "\", recipe=" << craftDumpMatrix(recipe, width) << ", replacements=" << replacements.dump() << ")"; return os.str(); } /* CraftDefinitionShapeless */ std::string CraftDefinitionShapeless::getName() const { return "shapeless"; } bool CraftDefinitionShapeless::check(const CraftInput &input, IGameDef *gamedef) const { if (input.method != CRAFT_METHOD_NORMAL) return false; // Filter empty items out of input std::vector<std::string> input_filtered; for (std::vector<ItemStack>::size_type i = 0; i < input.items.size(); i++) { const ItemStack &item = input.items[i]; if (item.name != "") input_filtered.push_back(item.name); } // If there is a wrong number of items in input, no match if (input_filtered.size() != recipe.size()) { /*dstream<<"Number of input items ("<<input_filtered.size() <<") does not match recipe size ("<<recipe.size()<<") " <<"of recipe with output="<<output<<std::endl;*/ return false; } std::vector<std::string> recipe_copy; if (hash_inited) recipe_copy = recipe_names; else { recipe_copy = craftGetItemNames(recipe, gamedef); std::sort(recipe_copy.begin(), recipe_copy.end()); } // Try with all permutations of the recipe, // start from the lexicographically first permutation (=sorted), // recipe_names is pre-sorted do { // If all items match, the recipe matches bool all_match = true; //dstream<<"Testing recipe (output="<<output<<"):"; for (size_t i=0; i<recipe.size(); i++) { //dstream<<" ("<<input_filtered[i]<<" == "<<recipe_copy[i]<<")"; if (!inputItemMatchesRecipe(input_filtered[i], recipe_copy[i], gamedef->idef())) { all_match = false; break; } } //dstream<<" -> match="<<all_match<<std::endl; if (all_match) return true; } while (std::next_permutation(recipe_copy.begin(), recipe_copy.end())); return false; } CraftOutput CraftDefinitionShapeless::getOutput(const CraftInput &input, IGameDef *gamedef) const { return CraftOutput(output, 0); } CraftInput CraftDefinitionShapeless::getInput(const CraftOutput &output, IGameDef *gamedef) const { return CraftInput(CRAFT_METHOD_NORMAL, 0, craftGetItems(recipe, gamedef)); } void CraftDefinitionShapeless::decrementInput(CraftInput &input, std::vector<ItemStack> &output_replacements, IGameDef *gamedef) const { craftDecrementOrReplaceInput(input, output_replacements, replacements, gamedef); } CraftHashType CraftDefinitionShapeless::getHashType() const { assert(hash_inited); // Pre-condition bool has_group = false; for (size_t i = 0; i < recipe_names.size(); i++) { if (isGroupRecipeStr(recipe_names[i])) { has_group = true; break; } } if (has_group) return CRAFT_HASH_TYPE_COUNT; else return CRAFT_HASH_TYPE_ITEM_NAMES; } u64 CraftDefinitionShapeless::getHash(CraftHashType type) const { assert(hash_inited); // Pre-condition assert(type == CRAFT_HASH_TYPE_ITEM_NAMES || type == CRAFT_HASH_TYPE_COUNT); // Pre-condition return getHashForGrid(type, recipe_names); } void CraftDefinitionShapeless::initHash(IGameDef *gamedef) { if (hash_inited) return; hash_inited = true; recipe_names = craftGetItemNames(recipe, gamedef); std::sort(recipe_names.begin(), recipe_names.end()); } std::string CraftDefinitionShapeless::dump() const { std::ostringstream os(std::ios::binary); os << "(shapeless, output=\"" << output << "\", recipe=" << craftDumpMatrix(recipe, recipe.size()) << ", replacements=" << replacements.dump() << ")"; return os.str(); } /* CraftDefinitionToolRepair */ static ItemStack craftToolRepair( const ItemStack &item1, const ItemStack &item2, float additional_wear, IGameDef *gamedef) { IItemDefManager *idef = gamedef->idef(); if (item1.count != 1 || item2.count != 1 || item1.name != item2.name || idef->get(item1.name).type != ITEM_TOOL || idef->get(item2.name).type != ITEM_TOOL) { // Failure return ItemStack(); } s32 item1_uses = 65536 - (u32) item1.wear; s32 item2_uses = 65536 - (u32) item2.wear; s32 new_uses = item1_uses + item2_uses; s32 new_wear = 65536 - new_uses + floor(additional_wear * 65536 + 0.5); if (new_wear >= 65536) return ItemStack(); if (new_wear < 0) new_wear = 0; ItemStack repaired = item1; repaired.wear = new_wear; return repaired; } std::string CraftDefinitionToolRepair::getName() const { return "toolrepair"; } bool CraftDefinitionToolRepair::check(const CraftInput &input, IGameDef *gamedef) const { if (input.method != CRAFT_METHOD_NORMAL) return false; ItemStack item1; ItemStack item2; for (std::vector<ItemStack>::size_type i = 0; i < input.items.size(); i++) { const ItemStack &item = input.items[i]; if (!item.empty()) { if (item1.empty()) item1 = item; else if (item2.empty()) item2 = item; else return false; } } ItemStack repaired = craftToolRepair(item1, item2, additional_wear, gamedef); return !repaired.empty(); } CraftOutput CraftDefinitionToolRepair::getOutput(const CraftInput &input, IGameDef *gamedef) const { ItemStack item1; ItemStack item2; for (std::vector<ItemStack>::size_type i = 0; i < input.items.size(); i++) { const ItemStack &item = input.items[i]; if (!item.empty()) { if (item1.empty()) item1 = item; else if (item2.empty()) item2 = item; } } ItemStack repaired = craftToolRepair(item1, item2, additional_wear, gamedef); return CraftOutput(repaired.getItemString(), 0); } CraftInput CraftDefinitionToolRepair::getInput(const CraftOutput &output, IGameDef *gamedef) const { std::vector<ItemStack> stack; stack.push_back(ItemStack()); return CraftInput(CRAFT_METHOD_COOKING, additional_wear, stack); } void CraftDefinitionToolRepair::decrementInput(CraftInput &input, std::vector<ItemStack> &output_replacements, IGameDef *gamedef) const { craftDecrementInput(input, gamedef); } std::string CraftDefinitionToolRepair::dump() const { std::ostringstream os(std::ios::binary); os << "(toolrepair, additional_wear=" << additional_wear << ")"; return os.str(); } /* CraftDefinitionCooking */ std::string CraftDefinitionCooking::getName() const { return "cooking"; } bool CraftDefinitionCooking::check(const CraftInput &input, IGameDef *gamedef) const { if (input.method != CRAFT_METHOD_COOKING) return false; // Filter empty items out of input std::vector<std::string> input_filtered; for (std::vector<ItemStack>::size_type i = 0; i < input.items.size(); i++) { const std::string &name = input.items[i].name; if (name != "") input_filtered.push_back(name); } // If there is a wrong number of items in input, no match if (input_filtered.size() != 1) { /*dstream<<"Number of input items ("<<input_filtered.size() <<") does not match recipe size (1) " <<"of cooking recipe with output="<<output<<std::endl;*/ return false; } // Check the single input item return inputItemMatchesRecipe(input_filtered[0], recipe, gamedef->idef()); } CraftOutput CraftDefinitionCooking::getOutput(const CraftInput &input, IGameDef *gamedef) const { return CraftOutput(output, cooktime); } CraftInput CraftDefinitionCooking::getInput(const CraftOutput &output, IGameDef *gamedef) const { std::vector<std::string> rec; rec.push_back(recipe); return CraftInput(CRAFT_METHOD_COOKING,cooktime,craftGetItems(rec,gamedef)); } void CraftDefinitionCooking::decrementInput(CraftInput &input, std::vector<ItemStack> &output_replacements, IGameDef *gamedef) const { craftDecrementOrReplaceInput(input, output_replacements, replacements, gamedef); } CraftHashType CraftDefinitionCooking::getHashType() const { if (isGroupRecipeStr(recipe_name)) return CRAFT_HASH_TYPE_COUNT; else return CRAFT_HASH_TYPE_ITEM_NAMES; } u64 CraftDefinitionCooking::getHash(CraftHashType type) const { if (type == CRAFT_HASH_TYPE_ITEM_NAMES) { return getHashForString(recipe_name); } else if (type == CRAFT_HASH_TYPE_COUNT) { return 1; } else { //illegal hash type for this CraftDefinition (pre-condition) assert(false); return 0; } } void CraftDefinitionCooking::initHash(IGameDef *gamedef) { if (hash_inited) return; hash_inited = true; recipe_name = craftGetItemName(recipe, gamedef); } std::string CraftDefinitionCooking::dump() const { std::ostringstream os(std::ios::binary); os << "(cooking, output=\"" << output << "\", recipe=\"" << recipe << "\", cooktime=" << cooktime << ")" << ", replacements=" << replacements.dump() << ")"; return os.str(); } /* CraftDefinitionFuel */ std::string CraftDefinitionFuel::getName() const { return "fuel"; } bool CraftDefinitionFuel::check(const CraftInput &input, IGameDef *gamedef) const { if (input.method != CRAFT_METHOD_FUEL) return false; // Filter empty items out of input std::vector<std::string> input_filtered; for (std::vector<ItemStack>::size_type i = 0; i < input.items.size(); i++) { const std::string &name = input.items[i].name; if (name != "") input_filtered.push_back(name); } // If there is a wrong number of items in input, no match if (input_filtered.size() != 1) { /*dstream<<"Number of input items ("<<input_filtered.size() <<") does not match recipe size (1) " <<"of fuel recipe with burntime="<<burntime<<std::endl;*/ return false; } // Check the single input item return inputItemMatchesRecipe(input_filtered[0], recipe, gamedef->idef()); } CraftOutput CraftDefinitionFuel::getOutput(const CraftInput &input, IGameDef *gamedef) const { return CraftOutput("", burntime); } CraftInput CraftDefinitionFuel::getInput(const CraftOutput &output, IGameDef *gamedef) const { std::vector<std::string> rec; rec.push_back(recipe); return CraftInput(CRAFT_METHOD_COOKING,(int)burntime,craftGetItems(rec,gamedef)); } void CraftDefinitionFuel::decrementInput(CraftInput &input, std::vector<ItemStack> &output_replacements, IGameDef *gamedef) const { craftDecrementOrReplaceInput(input, output_replacements, replacements, gamedef); } CraftHashType CraftDefinitionFuel::getHashType() const { if (isGroupRecipeStr(recipe_name)) return CRAFT_HASH_TYPE_COUNT; else return CRAFT_HASH_TYPE_ITEM_NAMES; } u64 CraftDefinitionFuel::getHash(CraftHashType type) const { if (type == CRAFT_HASH_TYPE_ITEM_NAMES) { return getHashForString(recipe_name); } else if (type == CRAFT_HASH_TYPE_COUNT) { return 1; } else { //illegal hash type for this CraftDefinition (pre-condition) assert(false); return 0; } } void CraftDefinitionFuel::initHash(IGameDef *gamedef) { if (hash_inited) return; hash_inited = true; recipe_name = craftGetItemName(recipe, gamedef); } std::string CraftDefinitionFuel::dump() const { std::ostringstream os(std::ios::binary); os << "(fuel, recipe=\"" << recipe << "\", burntime=" << burntime << ")" << ", replacements=" << replacements.dump() << ")"; return os.str(); } /* Craft definition manager */ class CCraftDefManager: public IWritableCraftDefManager { public: CCraftDefManager() { m_craft_defs.resize(craft_hash_type_max + 1); } virtual ~CCraftDefManager() { clear(); } virtual bool getCraftResult(CraftInput &input, CraftOutput &output, std::vector<ItemStack> &output_replacement, bool decrementInput, IGameDef *gamedef) const { output.item = ""; output.time = 0; // If all input items are empty, abort. bool all_empty = true; for (std::vector<ItemStack>::size_type i = 0; i < input.items.size(); i++) { if (!input.items[i].empty()) { all_empty = false; break; } } if (all_empty) return false; std::vector<std::string> input_names; input_names = craftGetItemNames(input.items, gamedef); std::sort(input_names.begin(), input_names.end()); // Try hash types with increasing collision rate, and return if found. for (int type = 0; type <= craft_hash_type_max; type++) { u64 hash = getHashForGrid((CraftHashType) type, input_names); /*errorstream << "Checking type " << type << " with hash " << hash << std::endl;*/ // We'd like to do "const [...] hash_collisions = m_craft_defs[type][hash];" // but that doesn't compile for some reason. This does. std::map<u64, std::vector<CraftDefinition*> >::const_iterator col_iter = (m_craft_defs[type]).find(hash); if (col_iter == (m_craft_defs[type]).end()) continue; const std::vector<CraftDefinition*> &hash_collisions = col_iter->second; // Walk crafting definitions from back to front, so that later // definitions can override earlier ones. for (std::vector<CraftDefinition*>::size_type i = hash_collisions.size(); i > 0; i--) { CraftDefinition *def = hash_collisions[i - 1]; /*errorstream << "Checking " << input.dump() << std::endl << " against " << def->dump() << std::endl;*/ if (def->check(input, gamedef)) { // Get output, then decrement input (if requested) output = def->getOutput(input, gamedef); if (decrementInput) def->decrementInput(input, output_replacement, gamedef); /*errorstream << "Check RETURNS TRUE" << std::endl;*/ return true; } } } return false; } virtual std::vector<CraftDefinition*> getCraftRecipes(CraftOutput &output, IGameDef *gamedef, unsigned limit=0) const { std::vector<CraftDefinition*> recipes; std::map<std::string, std::vector<CraftDefinition*> >::const_iterator vec_iter = m_output_craft_definitions.find(output.item); if (vec_iter == m_output_craft_definitions.end()) return recipes; const std::vector<CraftDefinition*> &vec = vec_iter->second; recipes.reserve(limit ? MYMIN(limit, vec.size()) : vec.size()); for (std::vector<CraftDefinition*>::size_type i = vec.size(); i > 0; i--) { CraftDefinition *def = vec[i - 1]; if (limit && recipes.size() >= limit) break; recipes.push_back(def); } return recipes; } virtual bool clearCraftRecipesByOutput(const CraftOutput &output, IGameDef *gamedef) { std::map<std::string, std::vector<CraftDefinition*> >::iterator vec_iter = m_output_craft_definitions.find(output.item); if (vec_iter == m_output_craft_definitions.end()) return false; std::vector<CraftDefinition*> &vec = vec_iter->second;