ofs | hex dump | ascii |
---|
0000 | 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 00 00 04 00 00 00 04 00 08 06 00 00 00 7f 1d 2b | .PNG........IHDR...............+ |
0020 | 83 00 00 00 09 70 48 59 73 00 00 0b 13 00 00 0b 13 01 00 9a 9c 18 00 00 00 66 74 45 58 74 46 69 | .....pHYs................ftEXtFi |
0040 | 6c 65 00 43 3a 5c 55 73 65 72 73 5c 4d 6f 72 69 74 7a 5c 70 72 6f 67 5c 6d 69 6e 65 74 65 73 74 | le.C:\Users\Moritz\prog\minetest |
0060 | 5c 6d 69 6e 65 74 65 73 74 31 33 5c 6d 6f 64 73 5c 6d 6f 6e 6f 73 5f 6d 6f 64 73 5f 6d 70 5c 61 | \minetest13\mods\monos_mods_mp\a |
0080 | 64 76 74 72 61 69 6e 73 5c 6d 6f 64 65 6c 73 5c 74 72 61 63 6b 76 65 72 74 69 63 61 6c 31 2e 62 | dvtrains\models\trackvertical1.b |
00a0 | 6c 65 6e 64 f6 38 c2 36 00 00 00 18 74 45 58 74 44 61 74 65 00 32 30 31 36 2f 30 35 2f 31 31 20 | lend.8.6....tEXtDate.2016/05/11. |
00c0 | 32 31 3a 32 37 3a 35 31 b7 40 30 52 00 00 00 10 74 45 58 74 54 69 6d 65 00 30 30 3a 30 30 3a 30 | 21:27:51.@0R....tEXtTime.00:00:0 |
00e0 | 30 3a 30 31 ec c3 26 c2 00 00 00 07 74 45 58 74 46 72 61 6d 65 00 31 af 92 b4 26 00 00 00 12 74 | 0:01..&.....tEXtFrame.1...&....t |
0100 | 45 58 74 43 61 6d 65 72 61 00 75 76 5f 74 65 6d 70 5f 63 61 6d 71 4e bb ca 00 00 00 0d 74 45 58 | EXtCamera.uv_temp_camqN......tEX |
0120 | 74 53 63 65 6e 65 00 75 76 5f 74 65 6d 70 d8 0d 1b 8f 00 00 00 13 74 45 58 74 52 65 6e 64 65 72 | tScene.uv_temp........tEXtRender |
0140 | 54 69 6d 65 00 30 30 3a 30 30 2e 36 33 6f 64 a8 7d 00 00 20 00 49 44 41 54 78 01 ec dd 0f 54 95 | Time.00:00.63od.}....IDATx....T. |
0160 | d7 9d ff 7b 04 01 d1 4a 50 42 5c 26 ed 0a 61 bc 68 15 81 8b 10 91 10 45 24 14 14 11 51 21 28 02 | ...{...JPB\&..a.h......E$...Q!(. |
0180 | b6 90 31 0d 60 57 5d 69 d3 19 67 4d bb 7e 5d 99 7b 75 ad 69 d2 4c bc 77 a5 ae da 4c 98 26 bf 60 | ..1.`W]i..gM.~].{u.i.L.w...L.&.` |
01a0 | 42 6d 1c 8b d1 f8 8b 89 1a fb 6b fe 20 1a d2 b1 d5 19 27 77 11 42 fe 78 34 89 20 88 dc cf b6 21 | Bm........k.......'w.B.x4......! |
01c0 | 31 56 94 3f cf 39 e7 39 cf f3 76 ad b3 e2 81 e7 ec 3f af 7d e2 39 7b 3f df ef de 41 41 fc 41 00 | 1V.?.9.9..v......?.}.9{?...AA.A. |
01e0 | 01 04 10 40 00 01 04 bc 23 90 17 1b 1b fb c2 df fe ed df 96 06 07 07 7b a7 06 4a 45 00 01 04 10 | ...@....#..............{..JE.... |
0200 | 40 00 81 21 0b 8c 1d f2 95 5c 88 00 02 08 20 80 00 02 08 0c 4d 20 41 97 6d 5a ba 74 e9 2d 7f f3 | @..!.....\..........M.A.mZ.t.-.. |
0220 | 37 7f d3 7e fc f8 f1 ef f4 f5 f5 3d 3f 66 cc 98 de a1 bd 9c ab 10 40 00 01 04 10 40 00 01 04 10 | 7..~.......=?f........@....@.... |
0240 | 40 00 01 04 10 40 c0 ce 02 71 6a dc 3f 67 64 64 bc fc 7f e9 cf 7f fc c7 7f e4 fe e7 7f fe e7 a2 | @....@...qj.?gdd................ |
0260 | 65 cb 96 fd 7e d5 aa 55 cb ec dc 70 da 86 00 02 08 20 80 80 1b 04 88 00 70 c3 28 d3 47 04 10 40 | e...~..U...p............p.(.G..@ |
0280 | 00 01 04 bc 2b 70 b3 8a af 4a 4d 4d cd d6 9f d3 05 05 05 8f cd 9e 3d bb f3 c2 85 0b c1 e1 e1 e1 | ....+p...JMM..........=......... |
02a0 | 97 a6 4f 9f de da d6 d6 b6 ac bf bf 7f a7 a2 00 bc db 12 4a 47 00 01 04 10 40 00 81 41 05 58 00 | ..O................JG....@..A.X. |
02c0 | 18 94 86 5f 20 80 00 02 08 20 80 c0 10 04 f2 67 cc 98 f1 ed bb ef be bb af b8 b8 b8 21 31 31 b1 | ..._...........g............!11. |
02e0 | 3d 34 34 b4 bf bb bb 3b c4 bc 56 a1 ff 63 16 2e 5c 78 40 69 00 1b ea ea ea 92 f5 a3 96 21 94 c9 | =44....;..V..c..\x@i.........!.. |
0300 | 25 08 20 80 00 02 08 20 e0 05 01 16 00 bc 80 4a 91 08 20 80 00 02 08 b8 40 e0 72 9e bf ee f6 4f | %..............J........@.r....O |
0320 | d1 a3 39 3f 3f ff f5 f1 e3 c7 f7 5e bc 78 31 d8 4c fa 07 fa 6f 9e a7 a7 a7 9f 6e 6c 6c 7c bf bd | ..9??......^.x1.L...o.....nll|.. |
0340 | bd bd 38 2a 2a aa c5 e3 f1 0c fc 9a ff 22 80 00 02 08 20 80 80 0f 05 2e af ce fb b0 3e aa 42 00 | ..8**........"..............>.B. |
0360 | 01 04 10 40 00 81 c0 16 30 79 fe ff a0 3c ff ef 3c f0 c0 03 c7 eb eb eb 1b d2 d2 d2 4e 29 b4 bf | ...@....0y...<..<...........N).. |
0380 | ff d2 a5 4b d7 dc ea 5f 27 00 f4 2b 15 e0 83 83 07 0f 96 24 25 25 ed 57 34 c0 99 c0 26 a0 f5 08 | ...K..._'..+.......$%%.W4...&... |
03a0 | 20 80 00 02 08 04 a6 00 11 00 81 39 6e b4 1a 01 04 10 40 00 01 5f 0b 44 ab c2 75 d7 ca f3 ef e9 | ...........9n.....@.._.D..u..... |
03c0 | e9 b9 ee 0d 85 de de de 10 45 01 9c dc b1 63 c7 f9 ae ae ae fc 90 90 90 c7 15 25 e0 eb f6 53 1f | .........E....c...........%...S. |
03e0 | 02 08 20 80 00 02 ae 17 b8 ee 07 b6 eb 75 00 40 00 01 04 10 40 00 01 23 50 15 1f 1f ff 23 e5 f8 | .............u.@....@..#P....#.. |
0400 | c7 e8 ae 7f a3 76 f5 3f 32 65 ca 94 f3 9a d8 9b 3b fe 5f 84 fb 5f 8f 2a 22 22 a2 4f 9b 00 7a 9a | .....v.?2e......;._.._.*"".O..z. |
0420 | 9b 9b d7 7e f7 bb df fd 9f fb f7 ef ef b9 de f5 fc 0e 01 04 10 40 00 01 04 ac 17 20 02 c0 7a 53 | ...~.................@........zS |
0440 | 4a 44 00 01 04 10 40 c0 29 02 d9 ea 48 4d 59 59 59 64 4e 4e ce 7e 3d 5a ae 95 e7 3f 94 ce ea 44 | JD....@.)...HMYYYdNN.~=Z...?...D |
0460 | 80 90 45 8b 16 1d 7b ee b9 e7 2e 29 15 60 89 5e f3 cc 50 5e c7 35 08 20 80 00 02 08 20 60 9d 00 | ..E...{....).`.^..P^.5.......`.. |
0480 | 0b 00 d6 59 52 12 02 08 20 80 00 02 4e 11 48 54 47 d6 e7 e5 e5 c5 67 65 65 bd 5e 5a 5a ba 37 32 | ...YR.......N.HTG.....gee.^ZZ.72 |
04a0 | 32 b2 c7 dc f1 37 9b fa 8d a4 93 ba fb 1f a4 c5 83 8b f3 e6 cd db bf 67 cf 9e 6f eb f9 73 da 37 | 2....7.................g..o..s.7 |
04c0 | a0 77 24 65 f1 1a 04 10 40 00 01 04 10 18 99 c0 90 c2 f6 46 56 34 af 42 00 01 04 10 40 00 81 00 | .w$e....@..........FV4.B....@... |
04e0 | 13 88 55 7b 57 66 66 66 2e 9e 3f 7f fe 09 85 fc ff 7b 5c 5c 9c 47 39 fe c1 9a b0 8f fa 3b 83 d9 | ..U{Wfff..?......{\\.G9......;.. |
0500 | 0c f0 93 4f 3e 09 db b8 71 e3 4f c3 c2 c2 1e d6 c9 00 3b 03 cc 87 e6 22 80 00 02 08 20 10 d0 02 | ...O>...q.O.......;...."........ |
0520 | 44 00 04 f4 f0 d1 78 04 10 40 00 01 04 2c 11 08 57 29 f7 a6 a4 a4 ac d1 c3 53 5e 5e be 35 39 39 | D.....x..@...,..W).......S^^.599 |
0540 | b9 c3 6c ee 67 42 f7 2d a9 41 85 e8 94 80 31 d1 d1 d1 dd d3 a7 4f 6f 6d 6b 6b 5b a6 45 85 9d 8a | ..l.gB.-.A....1......Oomkk[.E... |
0560 | 02 b0 aa 78 ca 41 00 01 04 10 40 00 81 1b 08 b0 00 70 03 20 7e 8d 00 02 08 20 80 80 c3 05 f2 34 | ...x.A....@......p..~..........4 |
0580 | 29 af cf cd cd ed af ac ac dc 9e 90 90 d0 a1 23 fb fa b4 5b bf 57 be 23 68 f7 ff 31 0b 17 2e 3c | )..............#...[.W.#h..1...< |
05a0 | a0 a3 00 37 d4 d5 d5 25 cb b6 c5 e1 be 74 0f 01 04 10 40 00 01 db 08 78 e5 c3 dd 36 bd a3 21 08 | ...7...%.....t....@....x...6..!. |
05c0 | 20 80 00 02 08 20 30 98 c0 e5 3c ff a5 4b 97 de be 64 c9 92 03 5a 00 78 63 b4 79 fe 83 55 74 e5 | ......0...<..K...d...Z.xc.y..Ut. |
05e0 | cf cd 1e 02 3a 12 f0 b4 c2 ff df 6f 6f 6f 2f 8e 8a 8a 6a f1 78 3c 57 5e c2 df 11 40 00 01 04 10 | ....:......ooo/...j.x<W^...@.... |
0600 | 40 c0 4b 02 96 85 f5 79 a9 7d 14 8b 00 02 08 20 80 00 02 d6 0a c4 aa b8 6a e5 f9 d7 29 d4 ff e3 | @.K....y.}..............j...)... |
0620 | f5 eb d7 3f ad bf ff 29 24 24 a4 5f 77 e7 47 b4 c1 df 70 9b 67 f6 02 50 94 c1 07 3a 0d a0 24 29 | ...?...)$$._w.G...p.g..P...:..$) |
0640 | 29 69 bf a2 01 ce 0c b7 0c ae 47 00 01 04 10 40 00 81 e1 0b 10 01 30 7c 33 5e 81 00 02 08 20 80 | )i........G....@......0|3^...... |
0660 | 40 20 0a 0c 9a e7 6f 72 fd 7d d9 21 9d 26 10 a2 d3 00 4e 36 34 34 04 69 33 c0 ac b1 63 c7 9e 52 | @.....or.}.!.&....N644.i3...c..R |
0680 | 64 80 2f 9b 40 5d 08 20 80 00 02 08 b8 52 80 9d 77 5c 39 ec 74 1a 01 04 10 40 c0 65 02 f9 ca f3 | d./.@].......R..w\9.t....@.e.... |
06a0 | af fb 3c cf bf 61 20 cf 7f a4 47 fa 59 61 37 6e dc b8 be a7 9e 7a 6a 41 53 53 d3 82 15 2b 56 2c | ..<..a....G.Ya7n.....zjASS...+V, |
06c0 | af ad ad fd d4 8a 72 29 03 01 04 10 40 00 01 04 06 17 60 01 60 70 1b 7e 83 00 02 08 20 80 40 a0 | ......r)....@.....`.`p.~......@. |
06e0 | 0b 24 a8 03 9b 0a 0a 0a a6 e8 d1 7c 65 9e bf bf 3b a6 dd ff fb 4d 1b ee bb ef be 2d 8a 40 d8 d2 | .$.........|e...;....M.....-.@.. |
0700 | dc dc dc e8 ef 36 51 3f 02 08 20 80 00 02 4e 17 20 05 c0 e9 23 4c ff 10 40 00 01 04 dc 28 10 a7 | .....6Q?......N.....#L..@....(.. |
0720 | 4e d7 66 64 64 a4 14 16 16 1e 29 2a 2a da 1e 13 13 73 5e a1 f7 c1 e6 61 07 10 1d 01 38 c6 9c 36 | N.fdd.....)**....s^....a....8..6 |
0740 | 30 73 e6 cc b7 8e 1e 3d ba 44 cf 1b 39 12 d0 0e 23 43 1b 10 40 00 01 04 9c 2c 40 04 80 93 47 97 | 0s.....=.D..9...#C..@....,@...G. |
0760 | be 21 80 00 02 08 b8 4d 20 5a 1d 5e 97 9a 9a 9a ad 3f a7 75 d7 7f df ec d9 b3 3b 2f 5c b8 10 6c | .!.....M.Z.^.....?.u......;/\..l |
0780 | 26 dc 76 c3 50 ee ff a5 8f 3f fe 78 dc 83 0f 3e f8 e3 0f 3e f8 e0 a7 af bd f6 da 6e bb b5 91 f6 | &.v.P....?.x...>...>.......n.... |
07a0 | 20 80 00 02 08 20 e0 24 01 22 00 9c 34 9a f4 05 01 04 10 40 c0 cd 02 55 f1 f1 f1 c5 0b 16 2c 38 | .......$."..4......@...U......,8 |
07c0 | 5f 5c 5c dc 90 98 98 d8 1e 1a 1a da df dd dd ed d3 0d fe 86 33 00 66 0f 82 5b 6e b9 a5 6b c6 8c | _\\.................3.f..[n..k.. |
07e0 | 19 6d 97 2e 5d 5a a5 45 8a dd 44 01 0c 47 90 6b 11 40 00 01 04 10 18 9e 00 0b 00 c3 f3 e2 6a 04 | .m..]Z.E..D..G.k.@............j. |
0800 | 10 40 00 01 04 ec 26 90 ad 06 d5 94 95 95 45 e6 e4 e4 ec d7 a3 65 fc f8 f1 bd 66 72 ad 63 fd 6c | .@....&.......E......e....fr.c.l |
0820 | 77 d7 ff 6a 3c d3 c6 85 0b 17 be ac a3 00 37 d4 d5 d5 25 eb f7 2d 57 5f c3 73 04 10 40 00 01 04 | w..j<.........7...%..-W_.s..@... |
0840 | 10 b0 46 80 05 00 6b 1c 29 05 01 04 10 40 00 01 5f 0b 24 aa c2 f5 79 79 79 f1 59 59 59 af 97 96 | ..F...k.)....@.._.$...yyy.YYY... |
0860 | 96 ee 8d 8c 8c ec 31 39 fe fe dc dd 7f b8 08 a6 ad e9 e9 e9 a7 1b 1b 1b df 6f 6f 6f 2f 8e 8a 8a | ......19.................ooo/... |
0880 | 6a f1 78 3c c3 2d 86 eb 11 40 00 01 04 10 40 60 08 02 b6 0d 0b 1c 42 db b9 04 01 04 10 40 00 01 | j.x<.-...@....@`......B......@.. |
08a0 | 37 0a c4 aa d3 d5 99 99 99 75 e5 e5 e5 1f 3f f0 c0 03 4f e9 ae ff b1 e0 e0 e0 7e dd 4d 37 1b fc | 7........u....?...O.......~.M7.. |
08c0 | d9 fe ae ff d5 83 66 da ae 0d 01 3f 38 78 f0 60 49 52 52 d2 7e 45 03 9c b9 fa 1a 9e 23 80 00 02 | ......f....?8x.`IRR.~E......#... |
08e0 | 08 20 80 c0 e8 05 88 00 18 bd 21 25 20 80 00 02 08 20 e0 2b 81 aa 94 94 94 d5 7a 78 34 f9 df 9a | ..........!%.......+......zx4... |
0900 | 9c 9c dc a1 23 f4 42 b4 c9 5f 40 2f e8 2b 6a 21 64 de bc 79 27 1b 1a 1a 82 c2 c2 c2 b2 b4 39 e0 | ....#.B.._@/.+j!d..y'.........9. |
0920 | 29 45 06 f8 ca 94 7a 10 40 00 01 04 10 70 8d 40 40 7f 61 70 cd 28 d1 51 04 10 40 00 01 b7 0b 98 | )E....z.@....p.@@.ap.(.Q..@..... |
0940 | 3c ff 87 95 e7 9f b2 71 e3 c6 7f 2d 29 29 79 79 ea d4 a9 9f 9a c9 bf 1d 77 f7 1f c9 60 8d 1b 37 | <......q...-))yy........w...`..7 |
0960 | ae ef dc b9 73 3d bf ff fd ef 0b be ff fd ef 37 ed de bd bb 67 24 e5 f0 1a 04 10 40 00 01 04 10 | ....s=.........7....g$.....@.... |
0980 | 18 5c 20 e0 c2 04 07 ef 0a bf 41 00 01 04 10 40 c0 71 02 57 e7 f9 ef 9b 38 71 e2 e5 3c 7f a7 f5 | .\........A....@.q.W....8q..<... |
09a0 | 54 bb ff f7 9b 3e dd 77 df 7d 5b b4 b0 b1 a5 b9 b9 b9 d1 69 7d a4 3f 08 20 80 00 02 08 f8 5b 80 | T....>.w.}[........i}.?.......[. |
09c0 | 14 00 7f 8f 00 f5 23 80 00 02 08 20 f0 d7 02 b1 fa d1 4a e5 f9 2f 9e 3f 7f fe 09 1d eb f7 68 5c | ......#...........J../.?......h\ |
09e0 | 5c 9c 47 13 e3 60 b3 c9 df 5f 5f 1e f8 3f 31 91 0c da 07 a0 6f e6 cc 99 6f b6 b6 b6 2e d1 f3 1d | \.G..`...__..?1.....o...o....... |
0a00 | 03 8b 02 81 df 3b 7a 80 00 02 08 20 80 80 3d 04 88 00 b0 c7 38 d0 0a 04 10 40 00 01 04 8c 40 b8 | .....;z.......=.....8....@....@. |
0a20 | 1e f7 2a c7 7f cd e7 79 fe cf 0e e4 f9 07 c2 91 7e a3 1d 42 e5 fe 5f ea ec ec 1c 5f 5f 5f bf e5 | ..*....y........~..B.._....___.. |
0a40 | a6 9b 6e aa 79 fe f9 e7 8f 8c b6 4c 5e 8f 00 02 08 20 80 00 02 5f 0a 10 01 f0 a5 05 7f 43 00 01 | ..n.y......L^........_.......C.. |
0a60 | 04 10 40 c0 9f 02 f9 d1 d1 d1 75 b9 b9 b9 fd 95 95 95 db 13 12 12 3a cc 1d f1 ae ae 2e d7 7c 56 | ..@.......u...........:.......|V |
0a80 | 9b 23 01 b5 b7 c1 67 b3 67 cf 6e 39 71 e2 44 99 a2 00 8e 28 0a c0 9f 63 42 dd 08 20 80 00 02 08 | .#....g.g.n9q.D....(...cB....... |
0aa0 | 38 4a 80 4d 00 1d 35 9c 74 06 01 04 10 40 20 00 05 12 d4 e6 9f 17 14 14 7c eb fe fb ef 7f 49 39 | 8J.M..5.t....@..........|.....I9 |
0ac0 | f0 cf df 71 c7 1d 1e 13 12 7f e9 d2 25 d7 cd 7e 75 24 60 90 36 04 fc e8 f0 e1 c3 f7 9e 3c 79 f2 | ...q........%..~u$`.6........<y. |
0ae0 | d5 03 07 0e 7c 10 80 63 4a 93 11 40 00 01 04 10 b0 a5 80 6b ee 2a d8 52 9f 46 21 80 00 02 08 b8 | ....|..cJ..@.......k.*.R.F!..... |
0b00 | 59 20 4e 9d af cd c8 c8 48 29 2c 2c 3c 52 54 54 b4 3d 26 26 e6 bc c9 f1 77 6a 9e ff 50 06 db 44 | Y.N.....H),,<RTT.=&&....wj..P..D |
0b20 | 01 28 ed e1 dd 9b 6f be f9 cc 7b ef bd 97 1f 19 19 d9 a6 d3 01 86 f2 52 ae 41 00 01 04 10 40 00 | .(....o...{............R.A....@. |
0b40 | 81 1b 08 b8 ee ce c2 0d 3c f8 35 02 08 20 80 00 02 de 16 88 56 05 eb 52 53 53 b3 f5 e7 b4 ee fc | ........<.5.........V..RSS...... |
0b60 | ef 53 c8 7b e7 85 0b 17 82 cd 5d 7f 6f 57 1e 08 e5 9b 23 01 5f 78 e1 85 e4 6d db b6 55 d5 d6 d6 | .S.{......].oW....#._x...m..U... |
0b80 | e6 ea d8 c3 8f 02 a1 dd b4 11 01 04 10 40 00 01 bb 0b 10 01 60 f7 11 a2 7d 08 20 80 00 02 4e 12 | .............@......`...}.....N. |
0ba0 | a8 8a 8f 8f 2f 5e b0 60 c1 79 ed ec df 90 98 98 d8 1e 1a 1a da df dd dd 4d 4a de 15 a3 ac c5 90 | ..../^.`.y..............MJ...... |
0bc0 | 90 9c 9c 9c 63 4d 4d 4d 17 75 1c 60 81 d2 02 9e 54 3a c4 15 57 f0 57 04 10 40 00 01 04 10 18 89 | ....cMMM.u.`....T:..W.W..@...... |
0be0 | 00 5f 38 46 a2 c6 6b 10 40 00 01 04 10 18 9e 40 b6 2e 7f b8 ac ac 2c a5 a2 a2 e2 e5 aa aa aa dd | ._8F..k.@......@......,......... |
0c00 | b7 df 7e fb e5 3c 7f ee fa 5f 1b 32 22 22 a2 4f a1 ff 17 5e 7b ed b5 c2 8d 1b 37 36 ed de bd bb | ..~..<..._.2"".O...^{.....76.... |
0c20 | e7 da 57 f2 53 04 10 40 00 01 04 10 18 aa 00 a1 86 43 95 e2 3a 04 10 40 00 01 04 86 2f 90 a8 97 | ..W.S..@.........C..:..@..../... |
0c40 | ac cf cb cb 8b cf ca ca 7a bd b4 b4 74 af 72 da 7b 4c 8e 3f 13 ff eb 63 6a f7 ff 7e 73 85 36 45 | ........z...t.r.{L.?...cj..~s.6E |
0c60 | dc d2 d3 d3 b3 45 91 00 8d d7 7f 05 bf 45 00 01 04 10 40 00 81 1b 09 90 02 70 23 21 7e 8f 00 02 | .....E.......E....@......p#!~... |
0c80 | 08 20 80 c0 f0 05 62 f5 92 95 99 99 99 8b e7 cf 9f 7f 42 e1 fe 8f c6 c5 c5 79 34 91 0d d6 83 e8 | ......b...........B......y4..... |
0ca0 | bb 21 78 9a 05 12 73 0c e2 cc 99 33 df 6c 6d 6d 5d a2 e7 3b 06 16 05 86 f0 72 2e 41 00 01 04 10 | .!x...s....3.lmm]..;.....r.A.... |
0cc0 | 40 00 81 6b 08 10 01 70 0d 14 7e 84 00 02 08 20 80 c0 28 04 aa 52 52 52 56 eb e1 29 2f 2f 7f 56 | @..k...p..~.......(..RRRV..)//.V |
0ce0 | 3b da 77 98 49 7f 5f 5f 1f 9f b9 c3 44 1d 3b 76 ec a5 ce ce ce f1 f5 f5 f5 5b 26 4d 9a 54 b3 63 | ;.w.I.__....D.;v.........[&M.T.c |
0d00 | c7 8e 23 c3 2c 82 cb 11 40 00 01 04 10 40 e0 0a 01 22 00 ae c0 e0 af 08 20 80 00 02 08 8c 42 c0 | ..#.,...@....@..."............B. |
0d20 | e4 f9 d7 28 cf 3f b2 b2 b2 72 7b 42 42 42 87 b9 83 dd d5 d5 c5 67 ed 08 51 cd 91 80 53 a7 4e fd | ...(.?...r{BBB.......g..Q...S.N. |
0d40 | 4c a7 24 b4 1c 3b 76 ac 44 9b 01 1e 61 33 c0 11 62 f2 32 04 10 40 00 01 04 24 40 18 22 6f 03 04 | L.$..;v.D...a3..b.2..@...$@."o.. |
0d60 | 10 40 00 01 04 46 27 60 f2 fc ff 51 79 fe 45 d5 d5 d5 ef 6c d8 b0 e1 d7 77 dc 71 c7 e5 0d fe 34 | .@...F'`...Qy.E....l....w.q....4 |
0d80 | 59 e5 ae ff e8 6c 83 34 e9 0f d2 b1 80 1f bd fa ea ab a5 77 de 79 e7 be b7 df 7e fb cc 28 8b e4 | Y....l.4...........w.y....~..(.. |
0da0 | e5 08 20 80 00 02 08 b8 56 80 bb 12 ae 1d 7a 3a 8e 00 02 08 20 30 4a 81 58 bd fe 9a 79 fe 66 93 | ........V.....z:.....0J.X...y.f. |
0dc0 | bf 51 96 cd cb 3f 17 30 51 00 4a a3 78 f7 b6 db 6e 3b 17 16 16 56 18 15 15 f5 88 c7 e3 c1 07 01 | .Q...?.0Q.J.x...n;...V.......... |
0de0 | 04 10 40 00 01 04 46 20 c0 9d 89 11 a0 f1 12 04 10 40 00 01 57 0b 84 ab f7 f7 2a c7 7f 0d 79 fe | ..@...F..........@..W.....*...y. |
0e00 | be 79 1f 28 02 a0 ef 85 17 5e 48 de b6 6d 5b 55 6d 6d 6d 6e 49 49 c9 47 be a9 99 5a 10 40 00 01 | .y.(.....^H..m[UmmmnII.G...Z.@.. |
0e20 | 04 10 70 96 00 11 00 ce 1a 4f 7a 83 00 02 08 20 e0 5d 81 fc e8 e8 e8 ba dc dc dc 7e f2 fc bd 0b | ..p......Oz......].........~.... |
0e40 | 7d 65 e9 17 2e 5c 08 c9 c9 c9 39 d6 d4 d4 d4 ab e3 00 0b f4 bb 27 af fc 3d 7f 47 00 01 04 10 40 | }e...\....9..........'..=.G....@ |
0e60 | 00 81 a1 09 b0 00 30 34 27 ae 42 00 01 04 10 70 b7 40 82 ba bf a9 a0 a0 60 8a 1e cd 5a 00 78 23 | ......04'.B....p.@......`...Z.x# |
0e80 | 32 32 b2 c7 84 fa 9b 10 75 77 d3 78 bf f7 3a 02 30 68 fc f8 f1 17 d3 d3 d3 5f da b3 67 cf 1a 3d | 22......uw.x..:.0h......._..g..= |
0ea0 | ff b5 8e 04 ec f5 7e cd d4 80 00 02 08 20 80 80 b3 04 48 01 70 d6 78 d2 1b 04 10 40 00 01 6b 05 | ......~...........H.p.x....@..k. |
0ec0 | e2 54 5c 6d 46 46 46 4a 61 61 e1 91 a2 a2 a2 ff 15 13 13 73 de 4c fc cd 39 f5 d6 56 45 69 d7 13 | .T\mFFFJaa.........s.L..9..VEi.. |
0ee0 | d0 66 80 fd 9f 7c f2 49 d8 c6 8d 1b 7f aa bd 00 1e 6e 6c 6c dc 79 bd eb f9 1d 02 08 20 80 00 02 | .f...|.I.........nll.y.......... |
0f00 | 08 fc b5 00 11 00 7f 6d c2 4f 10 40 00 01 04 10 88 16 c1 ba d4 d4 d4 6c fd 39 ad bb fe 8f e9 28 | .......m.O.@...........l.9.....( |
0f20 | ba 4e 85 a2 07 f7 f4 f4 70 82 8e 1f de 1f e6 44 05 a5 5f 74 4f 9f 3e bd b5 ad ad 6d 99 16 60 76 | .N......p......D.._tO.>....m..`v |
0f40 | 2a 0a c0 0f 2d a1 4a 04 10 40 00 01 04 02 57 80 05 80 c0 1d 3b 5a 8e 00 02 08 20 e0 1d 81 aa f8 | *...-.J..@....W.....;Z.......... |
0f60 | f8 f8 e2 05 0b 16 9c 2f 2e 2e 6e 48 4c 4c 6c 0f 0d 0d ed ef ee ee 66 e2 ef 1d ef 21 97 da d7 d7 | ......./..nHLLl.......f....!.... |
0f80 | 37 26 2b 2b eb c0 f1 e3 c7 37 68 33 c0 64 bd b0 65 c8 2f e6 42 04 10 40 00 01 04 10 08 62 01 80 | 7&++.....7h3.d..e./.B..@.....b.. |
0fa0 | 37 01 02 08 20 80 00 02 7f 11 c8 d6 7f 6a ca ca ca 22 b5 e1 dc 7e 3d 5a 94 77 de 6b 72 fc cd c4 | 7............j..."...~=Z.w.kr... |
0fc0 | 13 24 ff 0b 98 b1 d0 3e 00 a7 5f 7c f1 c5 3f b6 b6 b6 56 2a 2d a0 45 91 01 fe 6f 18 2d 40 00 01 | .$.....>.._|..?...V*-.E...o.-@.. |
0fe0 | 04 10 40 20 40 04 b8 9b 11 20 03 45 33 11 40 00 01 04 bc 26 60 f2 fc ff 3e 2f 2f 6f 55 75 75 f5 | ..@.@......E3.@....&`...>//oUuu. |
1000 | 3b 1b 36 6c f8 b7 a4 a4 a4 ff 56 78 79 bf 26 97 6c f0 e7 35 f6 91 15 ac 49 7f 90 8e 05 fc e8 e0 | ;.6l......Vxy.&.l..5....I....... |
1020 | c1 83 25 73 e7 ce dd a7 68 80 33 23 2b 89 57 21 80 00 02 08 20 e0 3e 01 22 00 dc 37 e6 f4 18 01 | ..%s....h.3#+.W!......>."..7.... |
1040 | 04 10 40 e0 2f 02 5f e4 f9 2f 5a b4 e8 bf 56 ad 5a f5 68 5c 5c 9c 47 39 fe e4 f9 db f8 1d 62 a2 | ..@./._../Z...V.Z.h\\.G9......b. |
1060 | 00 92 93 93 df bd f5 d6 5b cf 75 75 75 e5 87 84 84 3c ae 08 0d 1b b7 98 a6 21 80 00 02 08 20 60 | ........[.uuu....<.......!.....` |
1080 | 1f 01 22 00 ec 33 16 b4 04 01 04 10 40 c0 77 02 26 cf ff 47 ca f1 8f 79 e0 81 07 1a cd 0e ff 93 | .."..3......@.w.&..G...y........ |
10a0 | 27 4f be 60 76 f7 57 13 08 f7 f7 dd 38 8c a8 a6 88 88 88 3e 6d 02 e8 f9 dd ef 7e b7 f6 7b df fb | 'O.`v.W.....8......>m.....~..{.. |
10c0 | de b3 7b f7 ee bd 30 a2 82 78 11 02 08 20 80 00 02 2e 13 20 02 c0 65 03 4e 77 11 40 00 01 97 0b | ..{...0..x............e.Nw.@.... |
10e0 | 90 e7 ef 80 37 80 4e 63 08 51 d4 c6 b1 e7 9f 7f be ff 9d 77 de 59 ae b4 80 27 d9 0b c0 01 03 4b | ....7.Nc.Q.........w.Y...'.....K |
1100 | 17 10 40 00 01 04 bc 2e c0 02 80 d7 89 a9 00 01 04 10 40 c0 06 02 89 6a c3 7a e5 f9 c7 6b 17 f9 | ..@...............@....j.z...k.. |
1120 | d7 4b 4b 4b f7 46 46 46 f6 98 3b fe 26 a4 dc 06 ed a3 09 c3 10 d0 dd ff 20 6d d0 78 51 1b 02 be | .KKK.FFF..;.&............m.xQ... |
1140 | b4 67 cf 9e 35 4a 01 f8 b5 f6 6c e8 1d 46 11 5c 8a 00 02 08 20 80 80 2b 05 08 73 74 e5 b0 d3 69 | .g..5J....l..F.\.......+..st...i |
1160 | 04 10 40 c0 35 02 b1 ea e9 ca cc cc cc c5 f3 e7 cf 3f a1 90 ff 7f 1f c8 f3 d7 24 92 cf c0 00 7e | ..@.5............?........$....~ |
1180 | 1b e8 ae 7f ff 27 9f 7c 12 b6 71 e3 c6 9f 86 85 85 3d dc d8 d8 b8 33 80 bb 43 d3 11 40 00 01 04 | .....'.|..q......=....3..C..@... |
11a0 | 10 f0 89 00 11 00 3e 61 a6 12 04 10 40 00 01 1f 0b 84 ab be 7b 53 52 52 d6 e8 e1 29 2f 2f df aa | ......>a....@.......{SRR...)//.. |
11c0 | 8d e3 3a b4 c1 5f 88 09 1f f7 71 5b a8 ce 0b 02 0a f9 1f 13 1d 1d dd 3d 7d fa f4 d6 b6 b6 b6 65 | ..:.._....q[...........=}......e |
11e0 | 5a d0 d9 a9 28 00 2f d4 44 91 08 20 80 00 02 08 38 47 80 05 00 e7 8c 25 3d 41 00 01 04 10 f8 8b | Z...(./.D.......8G.....%=A...... |
1200 | 40 be 26 86 75 b9 b9 b9 fd 95 95 95 db 13 12 12 3a c2 c3 c3 fb b4 63 3c 9f 79 0e 7b 87 28 f4 7f | @.&.u...........:.....c<.y.{.(.. |
1220 | cc c2 85 0b 0f e8 28 c0 0d 75 75 75 c9 ea 5e 8b c3 ba 48 77 10 40 00 01 04 10 b0 54 80 2f 43 96 | ......(..uuu..^...Hw.@.....T./C. |
1240 | 72 52 18 02 08 20 80 80 1f 05 12 54 f7 a6 82 82 82 29 7a 34 6b 01 e0 0d f2 fc fd 38 1a 3e a8 da | rR.........T.....)z4k......8.>.. |
1260 | ec df a0 7d 00 4e 2b fc ff fd f6 f6 f6 e2 a8 a8 a8 16 8f c7 e3 83 9a a9 02 01 04 10 40 00 81 c0 | ...}.N+.....................@... |
1280 | 14 20 0c 32 30 c7 8d 56 23 80 00 02 08 7c 29 10 a7 bf fe 43 46 46 c6 77 74 a4 df f1 fa fa fa 86 | ...20..V#....|)....CFF.wt....... |
12a0 | b4 b4 b4 53 3a 1f be 5f 77 88 d9 e0 ef 4b 27 47 fe cd ec 05 a0 08 8f 0f 0e 1e 3c 58 92 94 94 b4 | ...S:.._w....K'G..........<X.... |
12c0 | 5f d1 00 67 1c d9 51 3a 85 00 02 08 20 80 80 05 02 44 00 58 80 48 11 08 20 80 00 02 7e 11 88 56 | _..g..Q:.........D.X.H......~..V |
12e0 | ad eb 52 53 53 b3 f5 e7 b4 ee fa 3f 36 7b f6 ec 4e e5 f8 07 9b 5c 7f bf b4 88 4a 7d 2e a0 93 1c | ..RSS......?6{..N....\....J}.... |
1300 | 42 e6 cd 9b 77 b2 a1 a1 21 48 9b 01 66 8d 1d 3b f6 94 22 03 7c de 0e 2a 44 00 01 04 10 40 20 10 | B...w...!H..f..;..".|..*D....@.. |
1320 | 04 d8 2d 27 10 46 89 36 22 80 00 02 08 5c 2d 50 15 1f 1f 5f bc 60 c1 82 f3 da d9 ff b7 89 89 89 | ..-'.F.6"....\-P..._.`.......... |
1340 | ed a1 a1 a1 e6 8e 3f 9f 6b 57 4b b9 e0 f9 b8 71 e3 fa 9e 7a ea a9 05 4d 4d 4d 0b 56 ac 58 b1 bc | ......?.kWK....q...z...MMM.V.X.. |
1360 | b6 b6 f6 53 17 74 9b 2e 22 80 00 02 08 20 30 6c 01 be 28 0d 9b 8c 17 20 80 00 02 08 f8 51 e0 72 | ...S.t..".....0l..(..........Q.r |
1380 | 9e 7f 59 59 d9 c4 9c 9c 9c fd 7a b4 e8 3c f8 5e 93 0b ee c7 36 51 b5 9f 05 b4 fb 7f bf 69 c2 7d | ..YY......z..<.^....6Q.......i.} |
13a0 | f7 dd b7 45 d1 1f 5b 9a 9b 9b 1b fd dc 24 aa 47 00 01 04 10 40 c0 96 02 a4 00 d8 72 58 68 14 02 | ...E..[......$.G....@......rXh.. |
13c0 | 08 20 80 c0 55 02 26 cf bf 56 79 fe 29 85 85 85 47 4a 4b 4b f7 b2 c1 df 55 42 2e 7e aa 23 00 c7 | ....U.&..Vy.)...GJKK....UB.~.#.. |
13e0 | 98 93 1e 66 ce 9c f9 d6 d1 a3 47 97 e8 79 23 47 02 ba f8 0d 41 d7 11 40 00 01 04 06 15 20 02 60 | ...f......G..y#G....A..@.......` |
1400 | 50 1a 7e 81 00 02 08 20 60 03 81 ab f3 fc f7 0d e4 f9 9b 49 9f 0d da 47 13 6c 22 a0 dc ff 4b 1f | P.~.....`..........I...G.l"...K. |
1420 | 7f fc f1 b8 07 1f 7c f0 c7 1f 7c f0 c1 4f 5f 7b ed b5 dd 36 69 1a cd 40 00 01 04 10 40 c0 36 02 | ......|...|..O_{...6i..@....@.6. |
1440 | 44 00 d8 66 28 68 08 02 08 20 80 c0 55 02 57 e6 f9 37 0c e4 f9 77 77 77 b3 c1 df 55 50 3c 0d 0a | D..f(h......U.W..7...www...UP<.. |
1460 | 32 69 20 b7 dc 72 4b d7 8c 19 33 da 2e 5d ba b4 4a 0b 44 bb 89 02 e0 9d 81 00 02 08 20 80 c0 57 | 2i...rK...3..]..J.D............W |
1480 | 05 58 00 f8 aa 07 cf 10 40 00 01 04 fc 2f 90 ad 26 d4 28 cf 3f f2 ea 3c 7f 36 f9 f3 ff e0 d8 b9 | .X......@..../..&.(.?..<.6...... |
14a0 | 05 e6 fd b1 70 e1 c2 97 75 14 e0 86 ba ba ba 64 b5 b5 c5 ce ed a5 6d 08 20 80 00 02 08 f8 5a 80 | ....p...u......d......m.......Z. |
14c0 | 05 00 5f 8b 53 1f 02 08 20 80 c0 60 02 89 fa c5 fa bc bc bc f8 ac ac ac d7 c9 f3 1f 8c 89 9f 0f | .._.S......`.................... |
14e0 | 26 60 a2 00 d2 d3 d3 4f 37 36 36 be df de de 5e 1c 15 15 d5 e2 f1 78 06 bb 9c 9f 23 80 00 02 08 | &`.....O766....^......x....#.... |
1500 | 20 e0 3a 01 c2 28 5d 37 e4 74 18 01 04 10 b0 9d 40 ac 5a 54 9d 99 99 59 57 5e 5e fe f1 03 0f 3c | ..:..(]7.t......@.ZT...YW^^....< |
1520 | f0 94 ee fc 1f 0b 0e 0e 36 c7 fa 99 dd fd c9 f5 b7 dd 90 d9 b7 41 e6 7d a3 0d 01 3f 38 78 f0 60 | ........6............A.}...?8x.` |
1540 | 49 52 52 d2 7e 45 03 9c b1 6f 6b 69 19 02 08 20 80 00 02 be 15 20 02 c0 b7 de d4 86 00 02 08 20 | IRR.~E...oki.................... |
1560 | f0 a5 40 b8 fe 7a 6f 4a 4a ca 1a 3d 3c 9a fc 6f 4d 4e 4e ee d0 31 6e 21 17 2e 5c 60 81 fa 4b 27 | ..@..zoJJ..=<..oMNN..1n!..\`..K' |
1580 | fe 36 0c 81 de de de 90 79 f3 e6 9d 6c 68 68 08 0a 0b 0b cb d2 e6 80 a7 14 19 30 8c 12 b8 14 01 | .6......y...lhh...........0..... |
15a0 | 04 10 40 00 01 e7 0a 70 57 c5 b9 63 4b cf 10 40 00 01 3b 0b e4 47 47 47 d7 e5 e6 e6 f6 57 56 56 | ..@....pW..cK..@..;..GGG.....WVV |
15c0 | 36 24 24 24 74 98 63 dc 4c 08 b7 9d 1b 4d db 02 43 60 dc b8 71 7d 4f 3d f5 d4 82 a6 a6 a6 05 2b | 6$$$t.c.L....M..C`..q}O=.......+ |
15e0 | 56 ac 58 5e 5b 5b fb 69 60 b4 9c 56 22 80 00 02 08 20 e0 5d 01 16 00 bc eb 4b e9 08 20 80 00 02 | V.X^[[.i`..V"......].....K...... |
1600 | 5f 15 48 d0 d3 4d 05 05 05 53 f4 68 d6 02 c0 1b 91 91 91 3d ba 6b cb c4 ff ab 4e 3c 1b 85 80 76 | _.H..M...S.h.......=.k....N<...v |
1620 | ff ef 37 2f bf ef be fb b6 28 a2 64 4b 73 73 73 e3 28 8a e3 a5 08 20 80 00 02 08 38 46 80 14 00 | ..7/.....(.dKsss.(.........8F... |
1640 | c7 0c 25 1d 41 00 01 04 6c 2d 10 a7 d6 d5 66 64 64 a4 14 16 16 1e 29 2a 2a da 1e 13 13 73 de 4c | ..%.A...l-....fdd.....)**....s.L |
1660 | fc 99 fc db 7a dc 02 b2 71 3a 02 70 8c 89 28 99 39 73 e6 9b ad ad ad 4b f4 7c c7 c0 a2 40 40 76 | ....z...q:.p..(.9s.....K.|...@@v |
1680 | 88 46 23 80 00 02 08 20 60 91 00 11 00 16 41 52 0c 02 08 20 80 c0 35 05 a2 f5 d3 75 a9 a9 a9 d9 | .F#.....`.....AR......5....u.... |
16a0 | fa 73 5a 77 fd f7 cd 9e 3d bb 53 39 fe c1 66 92 76 cd 57 f0 43 04 2c 10 50 ee ff a5 ce ce ce f1 | .sZw....=.S9..f.v.W.C.,.P....... |
16c0 | f5 f5 f5 5b 6e ba e9 a6 9a e7 9f 7f fe 88 05 c5 52 04 02 08 20 80 00 02 01 2d 40 04 40 40 0f 1f | ...[n...........R........-@.@@.. |
16e0 | 8d 47 00 01 04 6c 2d 50 15 1f 1f 5f bc 60 c1 82 f3 c5 c5 c5 0d 89 89 89 ed a1 a1 a1 fd dd dd dd | .G...l-P..._.`.................. |
1700 | 6c f0 67 eb 61 73 46 e3 cc 7e 12 53 a7 4e fd 4c 0b 4e 2d 27 4e 9c 28 d3 82 d3 11 45 01 38 a3 73 | l.g.asF..~.S.N.L.N-'N.(....E.8.s |
1720 | f4 02 01 04 10 40 00 81 11 0a f0 25 6c 84 70 bc 0c 01 04 10 40 60 50 01 93 e7 ff f3 b2 b2 b2 ff | .....@.....%l.p.....@`P......... |
1740 | b3 a2 a2 e2 e5 aa aa aa dd b7 df 7e bb c7 dc f1 e7 ae ff a0 66 fc c2 0b 02 3a 12 30 48 1b 02 7e | ...........~........f....:.0H..~ |
1760 | 74 f8 f0 e1 7b 4f 9e 3c f9 ea 81 03 07 3e f0 42 35 14 89 00 02 08 20 80 40 c0 08 10 01 10 30 43 | t...{O.<.....>.B5.......@.....0C |
1780 | 45 43 11 40 00 01 db 0b 7c 25 cf bf b4 b4 74 ef c0 06 7f ec ee 6f fb b1 73 64 03 cd fb 4e 47 4b | EC.@....|%....t......o..sd...NGK |
17a0 | be 7b f3 cd 37 9f 79 ef bd f7 f2 f5 7e 6c 3b 77 ee 9c 23 fb 4a a7 10 40 00 01 04 10 18 8a 00 b1 | .{..7.y.....~l;w..#.J..@........ |
17c0 | 70 43 51 e2 1a 04 10 40 00 81 eb 09 90 e7 7f 3d 1d 7e e7 57 01 73 24 e0 0b 2f bc 90 bc 6d db b6 | pCQ....@.......=.~.W.s$../...m.. |
17e0 | 2a 1d 07 98 5b 52 52 f2 91 5f 1b 44 e5 08 20 80 00 02 08 f8 51 80 08 00 3f e2 53 35 02 08 20 e0 | *...[RR.._.D........Q...?.S5.... |
1800 | 00 01 f2 fc 1d 30 88 4e ee 82 36 9c 0c c9 c9 c9 39 d6 d4 d4 74 51 c7 01 16 28 2d e0 c9 4b 97 2e | .....0.N..6.....9...tQ...(-..K.. |
1820 | 39 b9 cb f4 0d 01 04 10 40 00 81 41 05 d8 03 60 50 1a 7e 81 00 02 08 20 70 1d 81 6c fd ee 61 e5 | 9.......@..A...`P.~.....p..l..a. |
1840 | f9 a7 90 e7 7f 1d 25 7e 65 0b 81 88 88 88 3e 85 fe 5f 78 ed b5 d7 0a 37 6e dc d8 b4 7b f7 ee 1e | ......%~e.....>.._x....7n...{... |
1860 | 5b 34 8c 46 20 80 00 02 08 20 e0 63 01 52 00 7c 0c 4e 75 08 20 80 40 80 0b 24 aa fd eb f3 f2 f2 | [4.F.......c.R.|.Nu...@..$...... |
1880 | e2 b3 b2 b2 5e bf 32 cf 9f 0d fe 02 7c 64 1d dc 7c ed fe df 6f ba 77 df 7d f7 6d e9 e9 e9 d9 a2 | ....^.2.....|d..|...o.w.}.m..... |
18a0 | 48 80 46 07 77 97 ae 21 80 00 02 08 20 30 a8 00 29 00 83 d2 f0 0b 04 10 40 00 81 2b 04 62 f5 f7 | H.F.w..!.....0..).......@..+.b.. |
18c0 | 95 99 99 99 8b e7 cf 9f 7f 42 c7 fa 3d 1a 17 17 e7 d1 64 2a 58 0f a2 c9 ae 80 e2 af f6 13 30 8b | .........B..=.....d*X.........0. |
18e0 | 53 e1 e1 e1 7d 33 67 ce 7c b3 b5 b5 75 89 9e ef 18 58 14 b0 5f 6b 69 11 02 08 20 80 00 02 de 13 | S...}3g.|...u....X.._ki......... |
1900 | 20 02 c0 7b b6 94 8c 00 02 08 38 41 20 5c 9d b8 37 25 25 65 8d 1e 9e f2 f2 f2 67 b5 ab 7a 87 99 | ...{......8A.\..7%%e......g..z.. |
1920 | f4 f7 f5 f5 f1 19 e2 84 11 76 49 1f c6 8e 1d 7b a9 b3 b3 73 7c 7d 7d fd 96 49 93 26 d5 ec d8 b1 | .........vI....{...s|}}..I.&.... |
1940 | e3 88 4b ba 4e 37 11 40 00 01 04 10 f8 42 80 08 80 2f 28 f8 0b 02 08 20 80 c0 55 02 f9 d1 d1 d1 | ..K.N7.@.....B.../(.......U..... |
1960 | 75 b9 b9 b9 fd 95 95 95 db 13 12 12 3a cc 5d d4 ae ae 2e 3e 3b ae 82 e2 a9 fd 05 cc 91 80 53 a7 | u...........:.]....>;.........S. |
1980 | 4e fd 6c f6 ec d9 2d c7 8e 1d 2b d1 66 80 47 d8 0c d0 fe e3 46 0b 11 40 00 01 04 ac 15 20 6c d3 | N.l...-...+.f.G.....F..@......l. |
19a0 | 5a 4f 4a 43 00 01 04 9c 20 90 a0 4e fc bc a0 a0 e0 5b f7 df 7f ff 4b ca 9b 7e fe 8e 3b ee f0 98 | ZOJC.......N.....[....K..~..;... |
19c0 | 30 6a 4d 98 b8 eb ef 84 11 76 69 1f 34 e9 0f d2 b1 80 1f bd fa ea ab a5 77 de 79 e7 be b7 df 7e | 0jM......vi.4...........w.y....~ |
19e0 | fb 8c 4b 29 e8 36 02 08 20 80 80 4b 05 b8 8b e3 d2 81 a7 db 08 20 80 c0 35 04 e2 f4 b3 da 8c 8c | ..K).6.....K............5....... |
1a00 | 8c 94 c2 c2 c2 23 45 45 45 db 63 62 62 ce f7 f6 f6 06 9b c7 35 ae e7 47 08 04 94 80 89 02 50 0a | .....#EEE.cbb.......5..G......P. |
1a20 | cb bb b7 dd 76 db b9 b0 b0 b0 c2 a8 a8 a8 47 3c 1e 4f 40 f5 81 c6 22 80 00 02 08 20 30 1a 01 ee | ....v.........G<.O@...".....0... |
1a40 | e4 8c 46 8f d7 22 80 00 02 ce 10 b8 59 dd a8 4a 4d 4d cd d6 9f d3 ba f3 bf 4f 61 d2 9d 3a 3f 3d | ..F.."......Y..JMM.......Oa..:?= |
1a60 | 98 9d fd 9d 31 c0 f4 e2 4b 01 45 00 f4 bd f0 c2 0b c9 db b6 6d ab aa ad ad cd 2d 29 29 f9 e8 cb | ....1...K.E.........m.....-))... |
1a80 | df f2 37 04 10 40 00 01 04 9c 2d 40 04 80 b3 c7 97 de 21 80 00 02 37 12 c8 9f 31 63 c6 b7 ef be | ..7..@....-@......!...7...1c.... |
1aa0 | fb ee 3e ed ec df 90 98 98 d8 1e 1a 1a da df dd dd 4d 8a d8 8d e4 f8 7d 40 0a 68 61 2b 24 27 27 | ..>..............M.....}@.ha+$'' |
1ac0 | e7 58 53 53 53 af 8e 03 2c 50 27 9e 0c c8 8e d0 68 04 10 40 00 01 04 46 20 c0 02 c0 08 d0 78 09 | .XSSS...,P'.....h..@...F......x. |
1ae0 | 02 08 20 e0 00 01 93 e7 bf 49 77 fb a7 e8 d1 9c 9f 9f ff fa f8 f1 e3 7b 4d 88 34 bb fb 3b 60 74 | .........Iw............{M.4..;`t |
1b00 | e9 c2 a0 02 8a 6a 09 d2 7b fd 62 7a 7a fa 4b 7b f6 ec 59 a3 e7 bf d6 91 80 bd 83 be 80 5f 20 80 | .....j..{.bzz.K{..Y.........._.. |
1b20 | 00 02 08 20 e0 20 01 52 00 1c 34 98 74 05 01 04 10 18 82 c0 d5 79 fe ff 6b 20 cf 9f 70 ff 21 e8 | .......R..4.t........y..k...p.!. |
1b40 | 71 89 23 04 b4 19 60 ff 27 9f 7c 12 b6 71 e3 c6 9f 6a 2f 80 87 1b 1b 1b 77 3a a2 63 74 02 01 04 | q.#...`.'.|..q...j/.....w:.ct... |
1b60 | 10 40 00 81 1b 08 10 01 70 03 20 7e 8d 00 02 08 38 44 20 5a fd 58 77 45 9e ff 63 03 79 fe 3d 3d | .@......p..~....8D.Z.XwE..c.y.== |
1b80 | 3d 84 fb 3b 64 90 e9 c6 d0 04 cc 69 16 93 27 4f ee fe e6 37 bf f9 56 6b 6b eb 72 2d 7e fd 56 51 | =..;d......i..'O...7..Vkk.r-~.VQ |
1ba0 | 00 fd 43 7b 35 57 21 80 00 02 08 20 10 b8 02 44 00 04 ee d8 d1 72 04 10 40 60 a8 02 55 f1 f1 f1 | ..C{5W!........D.....r..@`..U... |
1bc0 | c5 0b 16 2c 38 af 3c ff df 0e e4 f9 13 ea 3f 54 3e ae 73 a2 c0 d8 b1 63 2f 75 76 76 8e af af af | ...,8.<.......?T>.s....c/uvv.... |
1be0 | df 32 69 d2 a4 9a 1d 3b 76 1c 71 62 3f e9 13 02 08 20 80 00 02 57 0a 10 01 70 a5 06 7f 47 00 01 | .2i....;v.qb?........W...p...G.. |
1c00 | 04 9c 25 90 ad ee d4 94 95 95 45 6a d3 b3 fd 7a b4 90 e7 ef ac 01 a6 37 23 17 30 fb 5d 4c 9d 3a | ..%.......Ej...z.......7#.0.]L.: |
1c20 | f5 33 45 c2 b4 1c 3b 76 ac 44 69 01 47 14 19 30 f2 02 79 25 02 08 20 80 00 02 01 20 40 d8 67 00 | .3E...;v.Di.G..0..y%........@.g. |
1c40 | 0c 12 4d 44 00 01 04 86 29 90 a8 eb ff 31 2f 2f af a8 ba ba fa 9d 0d 1b 36 fc 5b 52 52 d2 7f 9b | ..MD....)....1//........6.[RR... |
1c60 | 10 67 4d 70 82 87 59 16 97 23 e0 58 01 4d fa 83 74 2c e0 47 07 0f 1e 2c 9d 3b 77 ee be e3 c7 8f | .gMp..Y..#.X.M..t,.G...,.;w..... |
1c80 | 9f 71 6c 67 e9 18 02 08 20 80 00 02 12 20 02 80 b7 01 02 08 20 e0 1c 81 58 75 65 65 66 66 e6 e2 | .qlg....................Xueeff.. |
1ca0 | f9 f3 e7 9f 50 b8 ff a3 71 71 71 1e e5 f8 07 93 e7 ef 9c 41 a6 27 d6 09 98 28 80 e4 e4 e4 77 6f | ....P...qqq........A.'...(....wo |
1cc0 | bd f5 d6 73 5d 5d 5d f9 21 21 21 8f 2b 35 c6 ba 0a 28 09 01 04 10 40 00 01 9b 09 10 01 60 b3 01 | ...s]]].!!!.+5...(....@......`.. |
1ce0 | a1 39 08 20 80 c0 08 04 c2 f5 9a f2 94 94 94 bf 5f b2 64 49 f4 f7 be f7 bd 5f ad 58 b1 e2 f0 d7 | .9.............._.dI....._.X.... |
1d00 | be f6 b5 5e fd 31 77 fc d9 ef 65 04 a8 bc c4 1d 02 11 11 11 7d da 04 d0 f3 bb df fd 6e ad fe df | ...^.1w...e.........}.......n... |
1d20 | 79 76 ef de bd 17 dc d1 73 7a 89 00 02 08 20 e0 46 01 22 00 dc 38 ea f4 19 01 04 9c 24 90 17 1d | yv......sz......F."..8......$... |
1d40 | 1d 5d 9f 9b 9b db 5f 59 59 b9 3d 21 21 a1 23 3c 3c bc 4f 77 33 f9 f7 dd 49 a3 4c 5f bc 26 70 e1 | .]...._YY.=!!.#<<.Ow3...I.L_.&p. |
1d60 | c2 85 90 45 8b 16 1d 7b fe f9 e7 fb df 79 e7 9d e5 4a 0b 78 92 bd 00 bc c6 4d c1 08 20 80 00 02 | ...E...{.....y...J.x.....M...... |
1d80 | 7e 16 e0 0b a2 9f 07 80 ea 11 40 00 81 11 0a cc d6 eb ee 5f ba 74 e9 ed ba eb 7f 40 0b 00 6f 44 | ~.........@........_.t.....@..oD |
1da0 | 46 46 f6 98 3b fe 26 ac 79 84 65 f2 32 04 5c 27 a0 bb ff 41 da 1c f3 62 7a 7a fa 4b 7b f6 ec 59 | FF..;.&.y.e.2.\'...A...bzz.K{..Y |
1dc0 | a3 14 80 5f 6b bf 8c 5e d7 41 d0 61 04 10 40 00 01 57 08 10 16 ea 8a 61 a6 93 08 20 e0 20 81 bf | ..._k..^.A.a..@..W.....a........ |
1de0 | 51 5f 1e c8 c8 c8 48 c9 ca ca fa e3 f2 e5 cb ff dd e4 f9 9b 89 bf 26 32 fc 9b ee a0 81 a6 2b be | Q_....H...............&2......+. |
1e00 | 13 d0 5d ff fe 4f 3e f9 24 6c e3 c6 8d 3f 0d 0b 0b 7b b8 b1 b1 71 a7 ef 6a a7 26 04 10 40 00 01 | ..]..O>.$l...?...{...q..j.&..@.. |
1e20 | 04 7c 27 40 04 80 ef ac a9 09 01 04 10 18 8d 80 c9 f3 bf 37 35 35 f5 de ec ec ec ff 2a 28 28 78 | .|'@...............755......*((x |
1e40 | 2c 31 31 f1 7d b3 b9 1f 1b fc 8d 86 95 d7 22 10 14 a4 90 ff 31 4a a5 e9 9e 3e 7d 7a 6b 5b 5b db | ,11.}.........".....1J...>}zk[[. |
1e60 | 32 2d a6 ed 54 14 00 34 08 20 80 00 02 08 38 4e 80 05 00 c7 0d 29 1d 42 00 01 07 0a e4 6b 72 52 | 2-..T..4......8N.....).B.....krR |
1e80 | 67 f2 fc 2b 2a 2a 9e d2 c4 bf 3d 34 34 b4 9f 3c 7f 07 8e 34 5d f2 9b 80 42 ff c7 2c 5c b8 f0 80 | g..+**....=44..<...4]...B..,\... |
1ea0 | 8e 02 dc 50 57 57 97 ac 86 b4 f8 ad 31 54 8c 00 02 08 20 80 80 97 04 58 00 f0 12 2c c5 22 80 00 | ...PWW......1T.........X...,.".. |
1ec0 | 02 16 08 24 a8 8c 4d ba db 3f 45 8f e6 2b f3 fc cd 64 c5 82 f2 29 02 01 04 3e 17 30 7b 67 68 1f | ...$..M..?E..+...d...)...>.0{gh. |
1ee0 | 80 d3 0a ff 7f bf bd bd bd 38 2a 2a aa c5 e3 f1 e0 83 00 02 08 20 80 80 a3 04 38 06 d0 51 c3 49 | .........8**..............8..Q.I |
1f00 | 67 10 40 c0 21 02 71 ea c7 3f 28 cf ff 3b 0f 3c f0 c0 f1 fa fa fa 86 b4 b4 b4 53 3a a3 bc 5f 13 | g.@.!.q..?(..;.<..........S:.._. |
1f20 | 7f 36 f8 73 c8 20 d3 0d fb 09 98 bd 00 74 8a c6 07 07 0f 1e 2c 49 4a 4a da af 68 80 33 f6 6b 25 | .6.s.........t......,IJJ..h.3.k% |
1f40 | 2d 42 00 01 04 10 40 60 e4 02 44 00 8c dc 8e 57 22 80 00 02 56 0b 44 ab c0 75 ca f3 57 9a 7f f6 | -B....@`..D....W"...V.D..u..W... |
1f60 | 69 93 e7 3f 7b f6 ec 4e 1d 53 16 4c 9e bf d5 d4 94 87 c0 5f 0b 68 33 cd 10 45 01 9c dc b1 63 c7 | i..?{..N.S.L......._.h3..E....c. |
1f80 | 79 a5 d8 e4 6b d1 ed 71 2d ba fd f5 85 fc 04 01 04 10 40 00 81 00 15 20 02 20 40 07 8e 66 23 80 | y...k..q-.........@.......@..f#. |
1fa0 | 80 e3 04 aa e2 e3 e3 7f 54 5c 5c 1c a3 bb fe 8d cb 96 2d 3b 32 65 ca 94 f3 66 77 7f f5 94 70 7f | ........T\\.......-;2e...fw...p. |
1fc0 | c7 0d 37 1d b2 ab 40 44 44 44 9f 36 01 f4 34 37 37 af fd ee 77 bf fb 3f f7 ef df df 63 d7 b6 d2 | ..7...@DDD.6..477...w..?....c... |
1fe0 | 2e 04 10 40 00 01 04 86 2b 40 04 c0 70 c5 b8 1e 01 04 10 b0 56 20 5b c5 d5 94 95 95 45 e6 e4 e4 | ...@....+@..p.......V.[.....E... |
2000 | ec d7 a3 45 67 92 f7 9a 7c 64 f2 fc ad 85 a6 34 04 86 22 a0 88 9b 90 45 8b 16 1d 7b ee b9 e7 2e | ...Eg...|d.....4.."....E...{.... |
2020 | 29 15 60 89 5e f3 cc 50 5e c7 35 08 20 80 00 02 08 04 82 00 0b 00 81 30 4a b4 11 01 04 9c 28 90 | ).`.^..P^.5............0J.....(. |
2040 | a8 4e ad cf cb cb 8b cf ca ca 7a bd b4 b4 74 6f 64 64 64 8f b9 e3 6f 26 ff 4e ec 30 7d 42 20 10 | .N........z...toddd...o&.N.0}B.. |
2060 | 04 74 f7 3f 48 8b 70 17 e7 cd 9b b7 7f cf 9e 3d df d6 f3 e7 74 24 60 6f 20 b4 9d 36 22 80 00 02 | .t.?H.p........=....t$`o...6"... |
2080 | 08 20 70 23 01 c2 4a 6f 24 c4 ef 11 40 00 01 6b 05 62 55 dc ca cc cc cc c5 f3 e7 cf 3f a1 90 ff | ..p#..Jo$...@..k.bU.........?... |
20a0 | 7f 8f 8b 8b f3 28 c7 3f 58 13 0d fe 4d b6 d6 9a d2 10 18 91 80 d9 0c f0 93 4f 3e 09 db b8 71 e3 | .....(.?X...M............O>...q. |
20c0 | 4f c3 c2 c2 1e d6 c9 00 3b 47 54 10 2f 42 00 01 04 10 40 c0 66 02 44 00 d8 6c 40 68 0e 02 08 38 | O.......;GT./B....@.f.D..l@h...8 |
20e0 | 56 20 5c 3d bb 37 25 25 65 8d 1e 9e f2 f2 f2 ad c9 c9 c9 1d 66 73 3f 13 72 ec d8 5e d3 31 04 02 | V.\=.7%%e...........fs?.r..^.1.. |
2100 | 50 e0 d2 a5 4b 63 a2 a3 a3 bb a7 4f 9f de da d6 d6 b6 4c 8b 73 3b 15 05 10 80 3d a1 c9 08 20 80 | P...Kc.....O......L.s;....=..... |
2120 | 00 02 08 7c 55 80 05 80 af 7a f0 0c 01 04 10 f0 86 40 9e 26 13 f5 b9 b9 b9 fd 95 95 95 db 13 12 | ...|U....z.......@.&............ |
2140 | 12 3a 74 d4 58 9f 76 19 e7 df 60 6f 68 53 26 02 16 08 98 3d 38 16 2e 5c 78 d3 a4 87 37 00 00 20 | .:t.X.v...`ohS&....=8..\x...7... |
2160 | 00 49 44 41 54 40 47 01 6e a8 ab ab 4b 56 91 2d 16 14 4b 11 08 20 80 00 02 08 f8 55 80 2f 9f 7e | .IDAT@G.n...KV.-..K........U./.~ |
2180 | e5 a7 72 04 10 70 b8 c0 e5 3c ff a5 4b 97 de be 64 c9 92 03 5a 00 78 83 3c 7f 87 8f 38 dd 73 8c | ..r..p...<..K...d...Z.x.<...8.s. |
21a0 | 80 d9 8b 43 47 02 9e 56 f8 ff fb ed ed ed c5 51 51 51 2d 1e 8f c7 31 fd a3 23 08 20 80 00 02 ee | ...CG..V.......QQQ-...1..#...... |
21c0 | 14 20 ec d4 9d e3 4e af 11 40 c0 bb 02 b1 2a be 5a 79 fe 75 0a f5 ff 78 fd fa f5 4f eb ef 7f d2 | ......N..@....*.Zy.u...x...O.... |
21e0 | 99 e2 fd ba ab c8 06 7f de b5 a7 74 04 2c 13 30 7b 01 28 5a e7 03 9d 06 50 92 94 94 b4 5f d1 00 | ...........t.,.0{.(Z....P...._.. |
2200 | 67 2c 2b 9c 82 10 40 00 01 04 10 f0 83 00 11 00 7e 40 a7 4a 04 10 70 ac c0 a0 79 fe 26 d7 df b1 | g,+...@.........~@.J..p...y.&... |
2220 | bd a6 63 08 38 54 40 a7 72 84 e8 34 80 93 0d 0d 0d 41 da 0c 30 6b ec d8 b1 a7 14 19 e0 d0 de d2 | ..c.8T@.r..4.....A..0k.......... |
2240 | 2d 04 10 40 00 01 37 08 b0 a3 8d 1b 46 99 3e 22 80 80 2f 04 f2 95 e7 5f f7 79 9e 7f c3 40 9e 3f | -..@..7.....F.>"../...._.y...@.? |
2260 | 47 fa f9 82 9e 3a 10 f0 9e c0 b8 71 e3 fa 9e 7a ea a9 05 4d 4d 4d 0b 56 ac 58 b1 bc b6 b6 f6 53 | G....:.....q...z...MMM.V.X.....S |
2280 | ef d5 46 c9 08 20 80 00 02 08 78 57 80 05 00 ef fa 52 3a 02 08 38 5f 20 41 5d dc 54 50 50 30 45 | ..F.......xW.....R:..8_.A].TPP0E |
22a0 | 8f e6 2b f3 fc 9d df 75 7a 88 80 f3 05 b4 fb 7f bf e9 e5 7d f7 dd b7 45 91 3c 5b 9a 9b 9b 1b 9d | ..+....uz..........}...E.<[..... |
22c0 | df 6b 7a 88 00 02 08 20 e0 54 01 52 00 9c 3a b2 f4 0b 01 04 bc 2d 10 a7 0a 6a 33 32 32 52 0a 0b | .kz......T.R..:......-...j322R.. |
22e0 | 0b 8f 14 15 15 6d 8f 89 89 39 af 90 e1 60 f3 f0 76 e5 94 8f 00 02 be 11 d0 11 80 63 cc a9 1d 33 | .....m...9...`..v..........c...3 |
2300 | 67 ce 7c b3 b5 b5 75 89 9e ef 18 58 14 f0 4d 0b a8 05 01 04 10 40 00 01 eb 04 88 00 b0 ce 92 92 | g.|...u....X..M......@.......... |
2320 | 10 40 c0 1d 02 d1 ea e6 ba d4 d4 d4 6c fd 39 ad bb fe fb 66 cf 9e dd 79 e1 c2 85 60 33 51 70 07 | .@..........l.9....f...y...`3Qp. |
2340 | 01 bd 44 c0 5d 02 ca fd bf d4 d9 d9 39 5e c7 01 6e 8e 8d 8d bd ff 97 bf fc e5 21 77 09 d0 5b 04 | ..D.].......9^..n.........!w..[. |
2360 | 10 40 00 01 a7 08 10 01 e0 94 91 a4 1f 08 20 e0 0b 81 aa f8 f8 f8 e2 05 0b 16 9c 2f 2e 2e 6e 48 | .@........................./..nH |
2380 | 4c 4c 6c 0f 0d 0d ed ef ee ee 66 83 3f 5f e8 53 07 02 7e 12 30 7b 79 4c 9d 3a f5 33 fd 3f 7f 54 | LLl.......f.?_.S..~.0{yL.:.3.?.T |
23a0 | 47 02 ae d1 62 df 61 a2 00 fc 34 18 54 8b 00 02 08 20 30 2a 01 be b4 8e 8a 8f 17 23 80 80 4b 04 | G...b.a...4.T.....0*.......#..K. |
23c0 | b2 d5 cf 87 cb ca ca 52 2a 2a 2a 5e ae aa aa da 7d fb ed b7 7b cc 1d 7f ee fa bb e4 1d 40 37 5d | .......R***^....}...{........@7] |
23e0 | 2f a0 23 01 83 22 22 22 3e d4 91 80 c5 47 8e 1c f9 df fa d3 e1 7a 14 00 10 40 00 01 04 02 4e 80 | /.#..""">....G.......z...@....N. |
2400 | 08 80 80 1b 32 1a 8c 00 02 3e 14 48 54 5d eb f3 f2 f2 e2 b3 b2 b2 5e 2f 2d 2d dd 1b 19 19 d9 63 | ....2....>.HT]........^/--.....c |
2420 | 72 fc d9 dd df 87 a3 40 55 08 d8 40 c0 fc 3f 9f 9e 9e 7e ba b1 b1 f1 7d 45 01 14 47 45 45 b5 78 | r......@U..@..?...~....}E..GEE.x |
2440 | 3c 1e 1b b4 8c 26 20 80 00 02 08 20 30 74 01 22 00 86 6e c5 95 08 20 e0 1e 81 58 75 b5 3a 33 33 | <....&......0t."..n.......Xu.:33 |
2460 | b3 ae bc bc fc e3 07 1e 78 e0 a9 9c 9c 9c 63 ba 03 d8 df d7 d7 67 36 f8 23 d7 df 3d ef 05 7a 8a | ........x.....c......g6.#..=..z. |
2480 | c0 17 02 e6 df 00 6d 08 f8 81 a2 00 4a 92 92 92 f6 1f 3f 7e fc cc 17 bf e4 2f 08 20 80 00 02 08 | ......m.....J.....?~...../...... |
24a0 | 04 80 00 11 00 01 30 48 34 11 01 04 7c 2a 50 95 92 92 b2 5a 0f 8f 26 ff 5b 93 93 93 3b 74 f4 57 | ......0H4...|*P....Z..&.[...;t.W |
24c0 | 88 36 f9 63 c1 d4 a7 c3 40 65 08 d8 4f 40 d1 3f 21 f3 e6 cd 3b d9 d0 d0 10 14 16 16 96 a5 cd 01 | .6.c....@e..O@.?!...;........... |
24e0 | 4f 29 32 c0 7e 0d a5 45 08 20 80 00 02 08 0c 22 c0 17 da 41 60 f8 31 02 08 b8 4e e0 8b 3c ff 8d | O)2.~..E......."...A`.1...N..<.. |
2500 | 1b 37 fe 6b 49 49 c9 cb da f4 eb 53 33 f9 27 cf df 75 ef 05 3a 8c c0 a0 02 e3 c6 8d eb 3b 77 ee | .7.kII.....S3.'..u..:........;w. |
2520 | 5c cf ef 7f ff fb 82 ef 7f ff fb 4d bb 77 ef ee 19 f4 62 7e 81 00 02 08 20 80 80 cd 04 08 63 b5 | \..........M.w....b~..........c. |
2540 | d9 80 d0 1c 04 10 f0 b9 c0 d5 79 fe fb 26 4e 9c 78 39 cf df e7 2d a1 42 04 10 b0 bd c0 c0 ee ff | ..........y..&N.x9...-.B........ |
2560 | f7 dd 77 df 16 2d 10 6e 69 6e 6e 6e b4 7d a3 69 20 02 08 20 80 00 02 9f 0b 90 02 c0 5b 01 01 04 | ..w..-.ninnn.}.i............[... |
2580 | dc 2a 10 ab 8e af 54 9e ff e2 f9 f3 e7 9f d0 b1 7e 8f c6 c5 c5 79 f4 85 3e d8 6c f2 e7 56 14 fa | .*....T.........~....y..>.l..V.. |
25a0 | 8d 00 02 d7 17 30 11 41 da 07 a0 6f e6 cc 99 6f b6 b6 b6 2e d1 f3 1d 03 8b 02 d7 7f 25 bf 45 00 | .....0.A...o...o............%.E. |
25c0 | 01 04 10 40 c0 ff 02 44 00 f8 7f 0c 68 01 02 08 f8 56 20 5c d5 dd ab 1c ff 35 9f e7 f9 3f 3b 90 | ...@...D....h....V.\.....5...?;. |
25e0 | e7 af 0d fe f8 37 d1 b7 63 41 6d 08 04 a4 80 72 ff 2f 75 76 76 8e af af af df 32 69 d2 a4 9a 1d | .....7..cAm....r./uvv.....2i.... |
2600 | 3b 76 1c 09 c8 8e d0 68 04 10 40 00 01 d7 09 10 01 e0 ba 21 a7 c3 08 b8 5a 20 3f 3a 3a ba 2e 37 | ;v.....h..@........!....Z.?::..7 |
2620 | 37 b7 bf b2 b2 72 7b 42 42 42 87 b9 93 d7 d5 d5 c5 bf 85 ae 7e 5b d0 79 04 86 27 60 8e 04 d4 1e | 7....r{BBB..........~[.y..'`.... |
2640 | 21 9f cd 9e 3d bb 45 51 00 25 7a 35 0b 00 c3 23 e4 6a 04 10 40 00 01 3f 09 b0 09 a0 9f e0 a9 16 | !...=.EQ.%z5...#.j..@..?........ |
2660 | 01 04 7c 2a 90 a0 da 7e 5e 50 50 f0 ad fb ef bf ff 25 e5 ee 3e 7f c7 1d 77 78 4c 28 ef a5 4b 97 | ..|*...~^PP......%..>...wxL(..K. |
2680 | b8 eb ef d3 a1 a0 32 04 9c 21 a0 23 01 83 b4 21 e0 47 87 0e 1d ba 57 9b 86 be a2 ff 7e e8 8c 9e | ......2..!.#...!.G....W.....~... |
26a0 | d1 0b 04 10 40 00 01 27 0b 70 d7 cb c9 a3 4b df 10 40 20 4e 04 b5 19 19 19 29 85 85 85 47 8a 8a | ....@..'.p....K..@.N.....)...G.. |
26c0 | 8a b6 c7 c4 c4 9c 37 39 fe e4 f9 f3 e6 40 00 81 d1 08 98 28 00 a5 0f bd ab 48 80 b3 1e 8f 67 49 | ......79.....@.....(.....H....gI |
26e0 | 64 64 e4 1f 75 3a c0 68 8a e4 b5 08 20 80 00 02 08 78 5d 80 3b 5f 5e 27 a6 02 04 10 f0 83 40 b4 | dd..u:.h.........x].;_^'......@. |
2700 | ea 5c 97 9a 9a 9a ad 3f a7 75 e7 7f 9f 42 75 3b 2f 5c b8 10 cc 91 7e 7e 18 0d aa 44 c0 a1 02 e6 | .\.....?.u...Bu;/\....~~...D.... |
2720 | 48 c0 17 5e 78 21 79 db b6 6d 55 b5 b5 b5 b9 8a 04 f8 c8 a1 5d a5 5b 08 20 80 00 02 0e 11 20 02 | H..^x!y..mU.........].[......... |
2740 | c0 21 03 49 37 10 40 e0 0b 81 aa f8 f8 f8 e2 05 0b 16 9c d7 ce fe 0d 89 89 89 ed a1 a1 a1 fd dd | .!.I7.@......................... |
2760 | dd dd a4 3c 7d 41 c4 5f 10 40 c0 0a 01 2d 2a 86 e4 e4 e4 1c 6b 6a 6a ba a8 e3 00 0b 94 16 f0 a4 | ...<}A._.@...-*.....kjj......... |
2780 | d2 8a ac 28 9a 32 10 40 00 01 04 10 f0 8a 00 5f 88 bd c2 4a a1 08 20 e0 07 81 6c d5 f9 70 59 59 | ...(.2.@......._...J......l..pYY |
27a0 | 59 4a 45 45 c5 cb 55 55 55 bb 6f bf fd f6 cb 79 fe dc f5 f7 c3 68 50 25 02 2e 11 88 88 88 e8 53 | YJEE..UUU.o....y.....hP%.......S |
27c0 | e8 ff 85 d7 5e 7b ad 70 e3 c6 8d 4d bb 77 ef ee 71 49 d7 e9 26 02 08 20 80 40 00 0a 90 02 10 80 | ....^{.p...M.w..qI..&....@...... |
27e0 | 83 46 93 11 40 e0 2b 02 89 7a b6 3e 2f 2f 2f 3e 2b 2b eb f5 d2 d2 d2 bd ca c5 ed 31 39 fe 4c fc | .F..@.+..z.>///>++.........19.L. |
2800 | bf e2 c4 13 04 10 f0 82 c0 98 31 63 fa 4d b1 da 5c 74 4b 4f 4f cf 16 45 02 34 7a a1 1a 8a 44 00 | ..........1c.M..\tKOO..E.4z...D. |
2820 | 01 04 10 40 c0 12 01 52 00 2c 61 a4 10 04 10 f0 83 80 c9 f3 af ca cc cc 5c 32 7f fe fc 13 0a f7 | ...@...R.,a.............\2...... |
2840 | 7f 34 2e 2e ce a3 2f e0 c1 7a 10 dd e4 87 01 a1 4a 04 dc 28 60 16 1a cd 71 a2 33 67 ce 7c 53 47 | .4..../..z......J..(`...q.3g.|SG |
2860 | 02 2e d1 f3 1d 03 8b 02 6e f4 a0 cf 08 20 80 00 02 f6 16 20 02 c0 de e3 43 eb 10 40 e0 da 02 03 | ........n...............C..@.... |
2880 | 79 fe 5d 6b d6 ac 69 d4 4e dc 1d 66 d2 df d7 d7 c7 bf 69 d7 f6 e2 a7 08 20 e0 45 81 b1 63 c7 5e | y.]k..i.N..f......i.......E..c.^ |
28a0 | ea ec ec 1c 5f 5f 5f bf 65 d2 a4 49 35 3b 76 ec 38 e2 c5 ea 28 1a 01 04 10 40 00 81 11 0b 10 01 | ....___.e..I5;v.8...(....@...... |
28c0 | 30 62 3a 5e 88 00 02 7e 10 30 79 fe 35 ca f3 8f d4 c6 5b fb f5 68 19 3f 7e 7c 6f 57 57 17 ff 96 | 0b:^...~.0y.5.....[..h.?~|oWW... |
28e0 | f9 61 30 a8 12 01 04 fe 22 60 8e 04 d4 71 80 9f e9 b4 91 96 63 c7 8e 95 68 33 c0 23 6c 06 c8 bb | .a0....."`...q......c...h3.#l... |
2900 | 03 01 04 10 40 c0 8e 02 84 c9 da 71 54 68 13 02 08 5c 2d 60 f2 fc ff 51 79 fe 45 d5 d5 d5 ef 6c | ....@......qTh...\-`...Qy.E....l |
2920 | d8 b0 e1 df 92 92 92 fe db 84 d9 ea 4b 76 f0 d5 17 f3 1c 01 04 10 f0 b5 80 26 fd 41 3a 16 f0 a3 | ............Kv...........&.A:... |
2940 | 57 5f 7d b5 f4 ce 3b ef dc f7 f6 db 6f 9f f1 75 1b a8 0f 01 04 10 40 00 81 1b 09 70 d7 ec 46 42 | W_}...;.....o..u......@....p..FB |
2960 | fc 1e 01 04 fc 29 10 ab ca 57 2a cf 7f 31 79 fe fe 1c 06 ea 46 00 81 1b 09 98 28 00 a5 23 bd 7b | .....)...W*..1y.....F.....(..#.{ |
2980 | db 6d b7 9d 0b 0b 0b 2b 8c 8a 8a 7a c4 e3 f1 dc e8 65 fc 1e 01 04 10 b0 b5 80 8e 52 0e d2 c6 ca | .m.....+...z.....e.........R.... |
29a0 | b6 6e 23 8d 1b 9e 00 11 00 c3 f3 e2 6a 04 10 f0 8d 40 b8 aa 29 4f 49 49 f9 fb 25 4b 96 44 7f ef | .n#.........j....@..)OII..%K.D.. |
29c0 | 7b df fb d5 8a 15 2b 0e 7f ed 6b 5f d3 67 50 af b9 e3 4f ae bf 6f c6 81 5a 10 40 60 18 02 e6 48 | {.....+...k_.gP...O..o..Z.@`...H |
29e0 | 40 45 25 79 5e 7a e9 a5 ca ff f1 3f fe c7 73 8d 8d 8d 5d c3 78 39 97 22 80 00 02 76 12 b8 7d c2 | @E%y^z.....?..s...].x9."...v..}. |
2a00 | 84 09 b5 b9 b9 b9 e1 27 4f 9e 3c 45 5a 93 9d 86 66 74 6d 21 02 60 74 7e bc 1a 01 04 ac 17 c8 8f | .......'O.<EZ...ftm!.`t~........ |
2a20 | 8e 8e ae d3 07 4e 7f 65 65 e5 f6 84 84 84 0e b3 c3 36 79 fe d6 43 53 22 02 08 58 2b 70 e1 c2 85 | .....N.ee........6y..CS"..X+p... |
2a40 | 10 ed 4d 72 ac a9 a9 a9 57 c7 01 16 a8 f4 27 ad ad 81 d2 10 40 00 01 af 0b c4 aa 86 ea 39 73 e6 | ..Mr....W.....'.....@........9s. |
2a60 | 64 df 74 d3 4d b7 fe f6 b7 bf 9d ac e7 fb bc 5e 2b 15 f8 4c 80 05 00 9
light_source_max = f.light_source;
// Check f.solidness because fast-style leaves look better this way
if (f.param_type == CPT_LIGHT && f.solidness != 2) {
u8 light_level_day = n.getLightNoChecks(LIGHTBANK_DAY, &f);
u8 light_level_night = n.getLightNoChecks(LIGHTBANK_NIGHT, &f);
if (light_level_day == LIGHT_SUN)
direct_sunlight = true;
light_day += decode_light(light_level_day);
light_night += decode_light(light_level_night);
light_count++;
} else {
ambient_occlusion++;
}
return f.light_propagates;
};
std::array<bool, 4> obstructed = {{ 1, 1, 1, 1 }};
add_node(0);
bool opaque1 = !add_node(1);
bool opaque2 = !add_node(2);
bool opaque3 = !add_node(3);
obstructed[0] = opaque1 && opaque2;
obstructed[1] = opaque1 && opaque3;
obstructed[2] = opaque2 && opaque3;
for (u8 k = 0; k < 3; ++k)
if (add_node(k + 4, obstructed[k]))
obstructed[3] = false;
if (add_node(7, obstructed[3])) { // wrap light around nodes
ambient_occlusion -= 3;
for (u8 k = 0; k < 3; ++k)
add_node(k + 4, !obstructed[k]);
}
if (light_count == 0) {
light_day = light_night = 0;
} else {
light_day /= light_count;
light_night /= light_count;
}
// boost direct sunlight, if any
if (direct_sunlight)
light_day = 0xFF;
// Boost brightness around light sources
bool skip_ambient_occlusion_day = false;
if (decode_light(light_source_max) >= light_day) {
light_day = decode_light(light_source_max);
skip_ambient_occlusion_day = true;
}
bool skip_ambient_occlusion_night = false;
if(decode_light(light_source_max) >= light_night) {
light_night = decode_light(light_source_max);
skip_ambient_occlusion_night = true;
}
if (ambient_occlusion > 4) {
static thread_local const float ao_gamma = rangelim(
g_settings->getFloat("ambient_occlusion_gamma"), 0.25, 4.0);
// Table of gamma space multiply factors.
static thread_local const float light_amount[3] = {
powf(0.75, 1.0 / ao_gamma),
powf(0.5, 1.0 / ao_gamma),
powf(0.25, 1.0 / ao_gamma)
};
//calculate table index for gamma space multiplier
ambient_occlusion -= 5;
if (!skip_ambient_occlusion_day)
light_day = rangelim(core::round32(
light_day * light_amount[ambient_occlusion]), 0, 255);
if (!skip_ambient_occlusion_night)
light_night = rangelim(core::round32(
light_night * light_amount[ambient_occlusion]), 0, 255);
}
return light_day | (light_night << 8);
}
/*
Calculate smooth lighting at the given corner of p.
Both light banks.
Node at p is solid, and thus the lighting is face-dependent.
*/
u16 getSmoothLightSolid(const v3s16 &p, const v3s16 &face_dir, const v3s16 &corner, MeshMakeData *data)
{
return getSmoothLightTransparent(p + face_dir, corner - 2 * face_dir, data);
}
/*
Calculate smooth lighting at the given corner of p.
Both light banks.
Node at p is not solid, and the lighting is not face-dependent.
*/
u16 getSmoothLightTransparent(const v3s16 &p, const v3s16 &corner, MeshMakeData *data)
{
const std::array<v3s16,8> dirs = {{
// Always shine light
v3s16(0,0,0),
v3s16(corner.X,0,0),
v3s16(0,corner.Y,0),
v3s16(0,0,corner.Z),
// Can be obstructed
v3s16(corner.X,corner.Y,0),
v3s16(corner.X,0,corner.Z),
v3s16(0,corner.Y,corner.Z),
v3s16(corner.X,corner.Y,corner.Z)
}};
return getSmoothLightCombined(p, dirs, data);
}
void get_sunlight_color(video::SColorf *sunlight, u32 daynight_ratio){
f32 rg = daynight_ratio / 1000.0f - 0.04f;
f32 b = (0.98f * daynight_ratio) / 1000.0f + 0.078f;
sunlight->r = rg;
sunlight->g = rg;
sunlight->b = b;
}
void final_color_blend(video::SColor *result,
u16 light, u32 daynight_ratio)
{
video::SColorf dayLight;
get_sunlight_color(&dayLight, daynight_ratio);
final_color_blend(result,
encode_light(light, 0), dayLight);
}
void final_color_blend(video::SColor *result,
const video::SColor &data, const video::SColorf &dayLight)
{
static const video::SColorf artificialColor(1.04f, 1.04f, 1.04f);
video::SColorf c(data);
f32 n = 1 - c.a;
f32 r = c.r * (c.a * dayLight.r + n * artificialColor.r) * 2.0f;
f32 g = c.g * (c.a * dayLight.g + n * artificialColor.g) * 2.0f;
f32 b = c.b * (c.a * dayLight.b + n * artificialColor.b) * 2.0f;
// Emphase blue a bit in darker places
// Each entry of this array represents a range of 8 blue levels
static const u8 emphase_blue_when_dark[32] = {
1, 4, 6, 6, 6, 5, 4, 3, 2, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
b += emphase_blue_when_dark[irr::core::clamp((s32) ((r + g + b) / 3 * 255),
0, 255) / 8] / 255.0f;
result->setRed(core::clamp((s32) (r * 255.0f), 0, 255));
result->setGreen(core::clamp((s32) (g * 255.0f), 0, 255));
result->setBlue(core::clamp((s32) (b * 255.0f), 0, 255));
}
/*
Mesh generation helpers
*/
/*
vertex_dirs: v3s16[4]
*/
static void getNodeVertexDirs(const v3s16 &dir, v3s16 *vertex_dirs)
{
/*
If looked from outside the node towards the face, the corners are:
0: bottom-right
1: bottom-left
2: top-left
3: top-right
*/
if (dir == v3s16(0, 0, 1)) {
// If looking towards z+, this is the face that is behind
// the center point, facing towards z+.
vertex_dirs[0] = v3s16(-1,-1, 1);
vertex_dirs[1] = v3s16( 1,-1, 1);
vertex_dirs[2] = v3s16( 1, 1, 1);
vertex_dirs[3] = v3s16(-1, 1, 1);
} else if (dir == v3s16(0, 0, -1)) {
// faces towards Z-
vertex_dirs[0] = v3s16( 1,-1,-1);
vertex_dirs[1] = v3s16(-1,-1,-1);
vertex_dirs[2] = v3s16(-1, 1,-1);
vertex_dirs[3] = v3s16( 1, 1,-1);
} else if (dir == v3s16(1, 0, 0)) {
// faces towards X+
vertex_dirs[0] = v3s16( 1,-1, 1);
vertex_dirs[1] = v3s16( 1,-1,-1);
vertex_dirs[2] = v3s16( 1, 1,-1);
vertex_dirs[3] = v3s16( 1, 1, 1);
} else if (dir == v3s16(-1, 0, 0)) {
// faces towards X-
vertex_dirs[0] = v3s16(-1,-1,-1);
vertex_dirs[1] = v3s16(-1,-1, 1);
vertex_dirs[2] = v3s16(-1, 1, 1);
vertex_dirs[3] = v3s16(-1, 1,-1);
} else if (dir == v3s16(0, 1, 0)) {
// faces towards Y+ (assume Z- as "down" in texture)
vertex_dirs[0] = v3s16( 1, 1,-1);
vertex_dirs[1] = v3s16(-1, 1,-1);
vertex_dirs[2] = v3s16(-1, 1, 1);
vertex_dirs[3] = v3s16( 1, 1, 1);
} else if (dir == v3s16(0, -1, 0)) {
// faces towards Y- (assume Z+ as "down" in texture)
vertex_dirs[0] = v3s16( 1,-1, 1);
vertex_dirs[1] = v3s16(-1,-1, 1);
vertex_dirs[2] = v3s16(-1,-1,-1);
vertex_dirs[3] = v3s16( 1,-1,-1);
}
}
static void getNodeTextureCoords(v3f base, const v3f &scale, const v3s16 &dir, float *u, float *v)
{
if (dir.X > 0 || dir.Y > 0 || dir.Z < 0)
base -= scale;
if (dir == v3s16(0,0,1)) {
*u = -base.X - 1;
*v = -base.Y - 1;
} else if (dir == v3s16(0,0,-1)) {
*u = base.X + 1;
*v = -base.Y - 2;
} else if (dir == v3s16(1,0,0)) {
*u = base.Z + 1;
*v = -base.Y - 2;
} else if (dir == v3s16(-1,0,0)) {
*u = -base.Z - 1;
*v = -base.Y - 1;
} else if (dir == v3s16(0,1,0)) {
*u = base.X + 1;
*v = -base.Z - 2;
} else if (dir == v3s16(0,-1,0)) {
*u = base.X;
*v = base.Z;
}
}
struct FastFace
{
TileSpec tile;
video::S3DVertex vertices[4]; // Precalculated vertices
/*!
* The face is divided into two triangles. If this is true,
* vertices 0 and 2 are connected, othervise vertices 1 and 3
* are connected.
*/
bool vertex_0_2_connected;
};
static void makeFastFace(const TileSpec &tile, u16 li0, u16 li1, u16 li2, u16 li3,
const v3f &tp, const v3f &p, const v3s16 &dir, const v3f &scale, std::vector<FastFace> &dest)
{
// Position is at the center of the cube.
v3f pos = p * BS;
float x0 = 0.0f;
float y0 = 0.0f;
float w = 1.0f;
float h = 1.0f;
v3f vertex_pos[4];
v3s16 vertex_dirs[4];
getNodeVertexDirs(dir, vertex_dirs);
if (tile.world_aligned)
getNodeTextureCoords(tp, scale, dir, &x0, &y0);
v3s16 t;
u16 t1;
switch (tile.rotation) {
case 0:
break;
case 1: //R90
t = vertex_dirs[0];
vertex_dirs[0] = vertex_dirs[3];
vertex_dirs[3] = vertex_dirs[2];
vertex_dirs[2] = vertex_dirs[1];
vertex_dirs[1] = t;
t1 = li0;
li0 = li3;
li3 = li2;
li2 = li1;
li1 = t1;
break;
case 2: //R180
t = vertex_dirs[0];
vertex_dirs[0] = vertex_dirs[2];
vertex_dirs[2] = t;
t = vertex_dirs[1];
vertex_dirs[1] = vertex_dirs[3];
vertex_dirs[3] = t;
t1 = li0;
li0 = li2;
li2 = t1;
t1 = li1;
li1 = li3;
li3 = t1;
break;
case 3: //R270
t = vertex_dirs[0];
vertex_dirs[0] = vertex_dirs[1];
vertex_dirs[1] = vertex_dirs[2];
vertex_dirs[2] = vertex_dirs[3];
vertex_dirs[3] = t;
t1 = li0;
li0 = li1;
li1 = li2;
li2 = li3;
li3 = t1;
break;
case 4: //FXR90
t = vertex_dirs[0];
vertex_dirs[0] = vertex_dirs[3];
vertex_dirs[3] = vertex_dirs[2];
vertex_dirs[2] = vertex_dirs[1];
vertex_dirs[1] = t;
t1 = li0;
li0 = li3;
li3 = li2;
li2 = li1;
li1 = t1;
y0 += h;
h *= -1;
break;
case 5: //FXR270
t = vertex_dirs[0];
vertex_dirs[0] = vertex_dirs[1];
vertex_dirs[1] = vertex_dirs[2];
vertex_dirs[2] = vertex_dirs[3];
vertex_dirs[3] = t;
t1 = li0;
li0 = li1;
li1 = li2;
li2 = li3;
li3 = t1;
y0 += h;
h *= -1;
break;
case 6: //FYR90
t = vertex_dirs[0];
vertex_dirs[0] = vertex_dirs[3];
vertex_dirs[3] = vertex_dirs[2];
vertex_dirs[2] = vertex_dirs[1];
vertex_dirs[1] = t;
t1 = li0;
li0 = li3;
li3 = li2;
li2 = li1;
li1 = t1;
x0 += w;
w *= -1;
break;
case 7: //FYR270
t = vertex_dirs[0];
vertex_dirs[0] = vertex_dirs[1];
vertex_dirs[1] = vertex_dirs[2];
vertex_dirs[2] = vertex_dirs[3];
vertex_dirs[3] = t;
t1 = li0;
li0 = li1;
li1 = li2;
li2 = li3;
li3 = t1;
x0 += w;
w *= -1;
break;
case 8: //FX
y0 += h;
h *= -1;
break;
case 9: //FY
x0 += w;
w *= -1;
break;
default:
break;
}
for (u16 i = 0; i < 4; i++) {
vertex_pos[i] = v3f(
BS / 2 * vertex_dirs[i].X,
BS / 2 * vertex_dirs[i].Y,
BS / 2 * vertex_dirs[i].Z
);
}
for (v3f &vpos : vertex_pos) {
vpos.X *= scale.X;
vpos.Y *= scale.Y;
vpos.Z *= scale.Z;
vpos += pos;
}
f32 abs_scale = 1.0f;
if (scale.X < 0.999f || scale.X > 1.001f) abs_scale = scale.X;
else if (scale.Y < 0.999f || scale.Y > 1.001f) abs_scale = scale.Y;
else if (scale.Z < 0.999f || scale.Z > 1.001f) abs_scale = scale.Z;
v3f normal(dir.X, dir.Y, dir.Z);
u16 li[4] = { li0, li1, li2, li3 };
u16 day[4];
u16 night[4];
for (u8 i = 0; i < 4; i++) {
day[i] = li[i] >> 8;
night[i] = li[i] & 0xFF;
}
bool vertex_0_2_connected = abs(day[0] - day[2]) + abs(night[0] - night[2])
< abs(day[1] - day[3]) + abs(night[1] - night[3]);
v2f32 f[4] = {
core::vector2d<f32>(x0 + w * abs_scale, y0 + h),
core::vector2d<f32>(x0, y0 + h),
core::vector2d<f32>(x0, y0),
core::vector2d<f32>(x0 + w * abs_scale, y0) };
// equivalent to dest.push_back(FastFace()) but faster
dest.emplace_back();
FastFace& face = *dest.rbegin();
for (u8 i = 0; i < 4; i++) {
video::SColor c = encode_light(li[i], tile.emissive_light);
if (!tile.emissive_light)
applyFacesShading(c, normal);
face.vertices[i] = video::S3DVertex(vertex_pos[i], normal, c, f[i]);
}
/*
Revert triangles for nicer looking gradient if the
brightness of vertices 1 and 3 differ less than
the brightness of vertices 0 and 2.
*/
face.vertex_0_2_connected = vertex_0_2_connected;
face.tile = tile;
}
/*
Nodes make a face if contents differ and solidness differs.
Return value:
0: No face
1: Face uses m1's content
2: Face uses m2's content
equivalent: Whether the blocks share the same face (eg. water and glass)
TODO: Add 3: Both faces drawn with backface culling, remove equivalent
*/
static u8 face_contents(content_t m1, content_t m2, bool *equivalent,
const NodeDefManager *ndef)
{
*equivalent = false;
if (m1 == m2 || m1 == CONTENT_IGNORE || m2 == CONTENT_IGNORE)
return 0;
const ContentFeatures &f1 = ndef->get(m1);
const ContentFeatures &f2 = ndef->get(m2);
// Contents don't differ for different forms of same liquid
if (f1.sameLiquid(f2))
return 0;
u8 c1 = f1.solidness;
u8 c2 = f2.solidness;
if (c1 == c2)
return 0;
if (c1 == 0)
c1 = f1.visual_solidness;
else if (c2 == 0)
c2 = f2.visual_solidness;
if (c1 == c2) {
*equivalent = true;
// If same solidness, liquid takes precense
if (f1.isLiquid())
return 1;
if (f2.isLiquid())
return 2;
}
if (c1 > c2)
return 1;
return 2;
}
/*
Gets nth node tile (0 <= n <= 5).
*/
void getNodeTileN(MapNode mn, const v3s16 &p, u8 tileindex, MeshMakeData *data, TileSpec &tile)
{
const NodeDefManager *ndef = data->m_client->ndef();
const ContentFeatures &f = ndef->get(mn);
tile = f.tiles[tileindex];
bool has_crack = p == data->m_crack_pos_relative;
for (TileLayer &layer : tile.layers) {
if (layer.texture_id == 0)
continue;
if (!layer.has_color)
mn.getColor(f, &(layer.color));
// Apply temporary crack
if (has_crack)
layer.material_flags |= MATERIAL_FLAG_CRACK;
}
}
/*
Gets node tile given a face direction.
*/
void getNodeTile(MapNode mn, const v3s16 &p, const v3s16 &dir, MeshMakeData *data, TileSpec &tile)
{
const NodeDefManager *ndef = data->m_client->ndef();
// Direction must be (1,0,0), (-1,0,0), (0,1,0), (0,-1,0),
// (0,0,1), (0,0,-1) or (0,0,0)
assert(dir.X * dir.X + dir.Y * dir.Y + dir.Z * dir.Z <= 1);
// Convert direction to single integer for table lookup
// 0 = (0,0,0)
// 1 = (1,0,0)
// 2 = (0,1,0)
// 3 = (0,0,1)
// 4 = invalid, treat as (0,0,0)
// 5 = (0,0,-1)
// 6 = (0,-1,0)
// 7 = (-1,0,0)
u8 dir_i = ((dir.X + 2 * dir.Y + 3 * dir.Z) & 7) * 2;
// Get rotation for things like chests
u8 facedir = mn.getFaceDir(ndef);
static const u16 dir_to_tile[24 * 16] =
{
// 0 +X +Y +Z -Z -Y -X -> value=tile,rotation
0,0, 2,0 , 0,0 , 4,0 , 0,0, 5,0 , 1,0 , 3,0 , // rotate around y+ 0 - 3
0,0, 4,0 , 0,3 , 3,0 , 0,0, 2,0 , 1,1 , 5,0 ,
0,0, 3,0 , 0,2 , 5,0 , 0,0, 4,0 , 1,2 , 2,0 ,
0,0, 5,0 , 0,1 , 2,0 , 0,0, 3,0 , 1,3 , 4,0 ,
0,0, 2,3 , 5,0 , 0,2 , 0,0, 1,0 , 4,2 , 3,1 , // rotate around z+ 4 - 7
0,0, 4,3 , 2,0 , 0,1 , 0,0, 1,1 , 3,2 , 5,1 ,
0,0, 3,3 , 4,0 , 0,0 , 0,0, 1,2 , 5,2 , 2,1 ,
0,0, 5,3 , 3,0 , 0,3 , 0,0, 1,3 , 2,2 , 4,1 ,
0,0, 2,1 , 4,2 , 1,2 , 0,0, 0,0 , 5,0 , 3,3 , // rotate around z- 8 - 11
0,0, 4,1 , 3,2 , 1,3 , 0,0, 0,3 , 2,0 , 5,3 ,
0,0, 3,1 , 5,2 , 1,0 , 0,0, 0,2 , 4,0 , 2,3 ,
0,0, 5,1 , 2,2 , 1,1 , 0,0, 0,1 , 3,0 , 4,3 ,
0,0, 0,3 , 3,3 , 4,1 , 0,0, 5,3 , 2,3 , 1,3 , // rotate around x+ 12 - 15
0,0, 0,2 , 5,3 , 3,1 , 0,0, 2,3 , 4,3 , 1,0 ,
0,0, 0,1 , 2,3 , 5,1 , 0,0, 4,3 , 3,3 , 1,1 ,
0,0, 0,0 , 4,3 , 2,1 , 0,0, 3,3 , 5,3 , 1,2 ,
0,0, 1,1 , 2,1 , 4,3 , 0,0, 5,1 , 3,1 , 0,1 , // rotate around x- 16 - 19
0,0, 1,2 , 4,1 , 3,3 , 0,0, 2,1 , 5,1 , 0,0 ,
0,0, 1,3 , 3,1 , 5,3 , 0,0, 4,1 , 2,1 , 0,3 ,
0,0, 1,0 , 5,1 , 2,3 , 0,0, 3,1 , 4,1 , 0,2 ,
0,0, 3,2 , 1,2 , 4,2 , 0,0, 5,2 , 0,2 , 2,2 , // rotate around y- 20 - 23
0,0, 5,2 , 1,3 , 3,2 , 0,0, 2,2 , 0,1 , 4,2 ,
0,0, 2,2 , 1,0 , 5,2 , 0,0, 4,2 , 0,0 , 3,2 ,
0,0, 4,2 , 1,1 , 2,2 , 0,0, 3,2 , 0,3 , 5,2
};
u16 tile_index = facedir * 16 + dir_i;
getNodeTileN(mn, p, dir_to_tile[tile_index], data, tile);
tile.rotation = tile.world_aligned ? 0 : dir_to_tile[tile_index + 1];
}
static void getTileInfo(
// Input:
MeshMakeData *data,
const v3s16 &p,
const v3s16 &face_dir,
// Output:
bool &makes_face,
v3s16 &p_corrected,
v3s16 &face_dir_corrected,
u16 *lights,
TileSpec &tile
)
{
VoxelManipulator &vmanip = data->m_vmanip;
const NodeDefManager *ndef = data->m_client->ndef();
v3s16 blockpos_nodes = data->m_blockpos * MAP_BLOCKSIZE;
const MapNode &n0 = vmanip.getNodeRefUnsafe(blockpos_nodes + p);
// Don't even try to get n1 if n0 is already CONTENT_IGNORE
if (n0.getContent() == CONTENT_IGNORE) {
makes_face = false;
return;
}
const MapNode &n1 = vmanip.getNodeRefUnsafeCheckFlags(blockpos_nodes + p + face_dir);
if (n1.getContent() == CONTENT_IGNORE) {
makes_face = false;
return;
}
// This is hackish
bool equivalent = false;
u8 mf = face_contents(n0.getContent(), n1.getContent(),
&equivalent, ndef);
if (mf == 0) {
makes_face = false;
return;
}
makes_face = true;
MapNode n = n0;
if (mf == 1) {
p_corrected = p;
face_dir_corrected = face_dir;
} else {
n = n1;
p_corrected = p + face_dir;
face_dir_corrected = -face_dir;
}
getNodeTile(n, p_corrected, face_dir_corrected, data, tile);
const ContentFeatures &f = ndef->get(n);
tile.emissive_light = f.light_source;
// eg. water and glass
if (equivalent) {
for (TileLayer &layer : tile.layers)
layer.material_flags |= MATERIAL_FLAG_BACKFACE_CULLING;
}
if (!data->m_smooth_lighting) {
lights[0] = lights[1] = lights[2] = lights[3] =
getFaceLight(n0, n1, face_dir, ndef);
} else {
v3s16 vertex_dirs[4];
getNodeVertexDirs(face_dir_corrected, vertex_dirs);
v3s16 light_p = blockpos_nodes + p_corrected;
for (u16 i = 0; i < 4; i++)
lights[i] = getSmoothLightSolid(light_p, face_dir_corrected, vertex_dirs[i], data);
}
}
/*
startpos:
translate_dir: unit vector with only one of x, y or z
face_dir: unit vector with only one of x, y or z
*/
static void updateFastFaceRow(
MeshMakeData *data,
const v3s16 &&startpos,
v3s16 translate_dir,
const v3f &&translate_dir_f,
const v3s16 &&face_dir,
std::vector<FastFace> &dest)
{
v3s16 p = startpos;
u16 continuous_tiles_count = 1;
bool makes_face = false;
v3s16 p_corrected;
v3s16 face_dir_corrected;
u16 lights[4] = {0, 0, 0, 0};
TileSpec tile;
getTileInfo(data, p, face_dir,
makes_face, p_corrected, face_dir_corrected,
lights, tile);
// Unroll this variable which has a significant build cost
TileSpec next_tile;
for (u16 j = 0; j < MAP_BLOCKSIZE; j++) {
// If tiling can be done, this is set to false in the next step
bool next_is_different = true;
v3s16 p_next;
bool next_makes_face = false;
v3s16 next_p_corrected;
v3s16 next_face_dir_corrected;
u16 next_lights[4] = {0, 0, 0, 0};
// If at last position, there is nothing to compare to and
// the face must be drawn anyway
if (j != MAP_BLOCKSIZE - 1) {
p_next = p + translate_dir;
getTileInfo(data, p_next, face_dir,
next_makes_face, next_p_corrected,
next_face_dir_corrected, next_lights,
next_tile);
if (next_makes_face == makes_face
&& next_p_corrected == p_corrected + translate_dir
&& next_face_dir_corrected == face_dir_corrected
&& memcmp(next_lights, lights, ARRLEN(lights) * sizeof(u16)) == 0
&& next_tile.isTileable(tile)) {
next_is_different = false;
continuous_tiles_count++;
}
}
if (next_is_different) {
/*
Create a face if there should be one
*/
if (makes_face) {
// Floating point conversion of the position vector
v3f pf(p_corrected.X, p_corrected.Y, p_corrected.Z);
// Center point of face (kind of)
v3f sp = pf - ((f32)continuous_tiles_count * 0.5f - 0.5f)
* translate_dir_f;
v3f scale(1, 1, 1);
if (translate_dir.X != 0)
scale.X = continuous_tiles_count;
if (translate_dir.Y != 0)
scale.Y = continuous_tiles_count;
if (translate_dir.Z != 0)
scale.Z = continuous_tiles_count;
makeFastFace(tile, lights[0], lights[1], lights[2], lights[3],
pf, sp, face_dir_corrected, scale, dest);
g_profiler->avg("Meshgen: faces drawn by tiling", 0);
for (int i = 1; i < continuous_tiles_count; i++)
g_profiler->avg("Meshgen: faces drawn by tiling", 1);
}
continuous_tiles_count = 1;
}
makes_face = next_makes_face;
p_corrected = next_p_corrected;
face_dir_corrected = next_face_dir_corrected;
std::memcpy(lights, next_lights, ARRLEN(lights) * sizeof(u16));
if (next_is_different)
tile = next_tile;
p = p_next;
}
}
static void updateAllFastFaceRows(MeshMakeData *data,
std::vector<FastFace> &dest)
{
/*
Go through every y,z and get top(y+) faces in rows of x+
*/
for (s16 y = 0; y < MAP_BLOCKSIZE; y++)
for (s16 z = 0; z < MAP_BLOCKSIZE; z++)
updateFastFaceRow(data,
v3s16(0, y, z),
v3s16(1, 0, 0), //dir
v3f (1, 0, 0),
v3s16(0, 1, 0), //face dir
dest);
/*
Go through every x,y and get right(x+) faces in rows of z+
*/
for (s16 x = 0; x < MAP_BLOCKSIZE; x++)
for (s16 y = 0; y < MAP_BLOCKSIZE; y++)
updateFastFaceRow(data,
v3s16(x, y, 0),
v3s16(0, 0, 1), //dir
v3f (0, 0, 1),
v3s16(1, 0, 0), //face dir
dest);
/*
Go through every y,z and get back(z+) faces in rows of x+
*/
for (s16 z = 0; z < MAP_BLOCKSIZE; z++)
for (s16 y = 0; y < MAP_BLOCKSIZE; y++)
updateFastFaceRow(data,
v3s16(0, y, z),
v3s16(1, 0, 0), //dir
v3f (1, 0, 0),
v3s16(0, 0, 1), //face dir
dest);
}
static void applyTileColor(PreMeshBuffer &pmb)
{
video::SColor tc = pmb.layer.color;
if (tc == video::SColor(0xFFFFFFFF))
return;
for (video::S3DVertex &vertex : pmb.vertices) {
video::SColor *c = &vertex.Color;
c->set(c->getAlpha(),
c->getRed() * tc.getRed() / 255,
c->getGreen() * tc.getGreen() / 255,
c->getBlue() * tc.getBlue() / 255);
}
}
/*
MapBlockMesh
*/
MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
m_minimap_mapblock(NULL),
m_tsrc(data->m_client->getTextureSource()),
m_shdrsrc(data->m_client->getShaderSource()),
m_animation_force_timer(0), // force initial animation
m_last_crack(-1),
m_last_daynight_ratio((u32) -1)
{
for (auto &m : m_mesh)
m = new scene::SMesh();
m_enable_shaders = data->m_use_shaders;
m_use_tangent_vertices = data->m_use_tangent_vertices;
m_enable_vbo = g_settings->getBool("enable_vbo");
if (g_settings->getBool("enable_minimap")) {
m_minimap_mapblock = new MinimapMapblock;
m_minimap_mapblock->getMinimapNodes(
&data->m_vmanip, data->m_blockpos * MAP_BLOCKSIZE);
}
// 4-21ms for MAP_BLOCKSIZE=16 (NOTE: probably outdated)
// 24-155ms for MAP_BLOCKSIZE=32 (NOTE: probably outdated)
//TimeTaker timer1("MapBlockMesh()");
std::vector<FastFace> fastfaces_new;
fastfaces_new.reserve(512);
/*
We are including the faces of the trailing edges of the block.
This means that when something changes, the caller must
also update the meshes of the blocks at the leading edges.
NOTE: This is the slowest part of this method.
*/
{
// 4-23ms for MAP_BLOCKSIZE=16 (NOTE: probably outdated)
//TimeTaker timer2("updateAllFastFaceRows()");
updateAllFastFaceRows(data, fastfaces_new);
}
// End of slow part
/*
Convert FastFaces to MeshCollector
*/
MeshCollector collector;
{
// avg 0ms (100ms spikes when loading textures the first time)
// (NOTE: probably outdated)
//TimeTaker timer2("MeshCollector building");
for (const FastFace &f : fastfaces_new) {
static const u16 indices[] = {0, 1, 2, 2, 3, 0};
static const u16 indices_alternate[] = {0, 1, 3, 2, 3, 1};
const u16 *indices_p =
f.vertex_0_2_connected ? indices : indices_alternate;
collector.append(f.tile, f.vertices, 4, indices_p, 6);
}
}
/*
Add special graphics:
- torches
- flowing water
- fences
- whatever
*/
{
MapblockMeshGenerator generator(data, &collector);
generator.generate();
}
/*
Convert MeshCollector to SMesh
*/
for (int layer = 0; layer < MAX_TILE_LAYERS; layer++) {
for(u32 i = 0; i < collector.prebuffers[layer].size(); i++)
{
PreMeshBuffer &p = collector.prebuffers[layer][i];
applyTileColor(p);
// Generate animation data
// - Cracks
if (p.layer.material_flags & MATERIAL_FLAG_CRACK) {
// Find the texture name plus ^[crack:N:
std::ostringstream os(std::ios::binary);
os << m_tsrc->getTextureName(p.layer.texture_id) << "^[crack";
if (p.layer.material_flags & MATERIAL_FLAG_CRACK_OVERLAY)
os << "o"; // use ^[cracko
u8 tiles = p.layer.scale;
if (tiles > 1)
os << ":" << (u32)tiles;
os << ":" << (u32)p.layer.animation_frame_count << ":";
m_crack_materials.insert(std::make_pair(
std::pair<u8, u32>(layer, i), os.str()));
// Replace tile texture with the cracked one
p.layer.texture = m_tsrc->getTextureForMesh(
os.str() + "0",
&p.layer.texture_id);
}
// - Texture animation
if (p.layer.material_flags & MATERIAL_FLAG_ANIMATION) {
// Add to MapBlockMesh in order to animate these tiles
m_animation_tiles[std::pair<u8, u32>(layer, i)] = p.layer;
m_animation_frames[std::pair<u8, u32>(layer, i)] = 0;
if (g_settings->getBool(
"desynchronize_mapblock_texture_animation")) {
// Get starting position from noise
m_animation_frame_offsets[std::pair<u8, u32>(layer, i)] =
100000 * (2.0 + noise3d(
data->m_blockpos.X, data->m_blockpos.Y,
data->m_blockpos.Z, 0));
} else {
// Play all synchronized
m_animation_frame_offsets[std::pair<u8, u32>(layer, i)] = 0;
}
// Replace tile texture with the first animation frame
p.layer.texture = (*p.layer.frames)[0].texture;
}
if (!m_enable_shaders) {
// Extract colors for day-night animation
// Dummy sunlight to handle non-sunlit areas
video::SColorf sunlight;
get_sunlight_color(&sunlight, 0);
u32 vertex_count = p.vertices.size();
for (u32 j = 0; j < vertex_count; j++) {
video::SColor *vc = &p.vertices[j].Color;
video::SColor copy = *vc;
if (vc->getAlpha() == 0) // No sunlight - no need to animate
final_color_blend(vc, copy, sunlight); // Finalize color
else // Record color to animate
m_daynight_diffs[std::pair<u8, u32>(layer, i)][j] = copy;
// The sunlight ratio has been stored,
// delete alpha (for the final rendering).
vc->setAlpha(255);
}
}
// Create material
video::SMaterial material;
material.setFlag(video::EMF_LIGHTING, false);
material.setFlag(video::EMF_BACK_FACE_CULLING, true);
material.setFlag(video::EMF_BILINEAR_FILTER, false);
material.setFlag(video::EMF_FOG_ENABLE, true);
material.setTexture(0, p.layer.texture);
if (m_enable_shaders) {
material.MaterialType = m_shdrsrc->getShaderInfo(
p.layer.shader_id).material;
p.layer.applyMaterialOptionsWithShaders(material);
if (p.layer.normal_texture)
material.setTexture(1, p.layer.normal_texture);
material.setTexture(2, p.layer.flags_texture);
} else {
p.layer.applyMaterialOptions(material);
}
scene::SMesh *mesh = (scene::SMesh *)m_mesh[layer];
// Create meshbuffer, add to mesh
if (m_use_tangent_vertices) {
scene::SMeshBufferTangents *buf =
new scene::SMeshBufferTangents();
buf->Material = material;
buf->Vertices.reallocate(p.vertices.size());
buf->Indices.reallocate(p.indices.size());
for (const video::S3DVertex &v: p.vertices)
buf->Vertices.push_back(video::S3DVertexTangents(v.Pos, v.Color, v.TCoords));
for (u16 i: p.indices)
buf->Indices.push_back(i);
buf->recalculateBoundingBox();
mesh->addMeshBuffer(buf);
buf->drop();
} else {
scene::SMeshBuffer *buf = new scene::SMeshBuffer();
buf->Material = material;
buf->append(&p.vertices[0], p.vertices.size(),
&p.indices[0], p.indices.size());
mesh->addMeshBuffer(buf);
buf->drop();
}
}
/*
Do some stuff to the mesh
*/
m_camera_offset = camera_offset;
translateMesh(m_mesh[layer],
intToFloat(data->m_blockpos * MAP_BLOCKSIZE - camera_offset, BS));
if (m_use_tangent_vertices) {
scene::IMeshManipulator* meshmanip =
RenderingEngine::get_scene_manager()->getMeshManipulator();
meshmanip->recalculateTangents(m_mesh[layer], true, false, false);
}
if (m_mesh[layer]) {
#if 0
// Usually 1-700 faces and 1-7 materials
std::cout << "Updated MapBlock has " << fastfaces_new.size()
<< " faces and uses " << m_mesh[layer]->getMeshBufferCount()
<< " materials (meshbuffers)" << std::endl;
#endif
// Use VBO for mesh (this just would set this for ever buffer)
if (m_enable_vbo)
m_mesh[layer]->setHardwareMappingHint(scene::EHM_STATIC);
}
}
//std::cout<<"added "<<fastfaces.getSize()<<" faces."<<std::endl;
// Check if animation is required for this mesh
m_has_animation =
!m_crack_materials.empty() ||
!m_daynight_diffs.empty() ||
!m_animation_tiles.empty();
}
MapBlockMesh::~MapBlockMesh()
{
for (scene::IMesh *m : m_mesh) {
if (m_enable_vbo && m)
for (u32 i = 0; i < m->getMeshBufferCount(); i++) {
scene::IMeshBuffer *buf = m->getMeshBuffer(i);
RenderingEngine::get_video_driver()->removeHardwareBuffer(buf);
}
m->drop();
m = NULL;
}
delete m_minimap_mapblock;
}
bool MapBlockMesh::animate(bool faraway, float time, int crack,
u32 daynight_ratio)
{
if (!m_has_animation) {
m_animation_force_timer = 100000;
return false;
}
m_animation_force_timer = myrand_range(5, 100);
// Cracks
if (crack != m_last_crack) {
for (auto &crack_material : m_crack_materials) {
scene::IMeshBuffer *buf = m_mesh[crack_material.first.first]->
getMeshBuffer(crack_material.first.second);
std::string basename = crack_material.second;
// Create new texture name from original
std::ostringstream os;
os << basename << crack;
u32 new_texture_id = 0;
video::ITexture *new_texture =
m_tsrc->getTextureForMesh(os.str(), &new_texture_id);
buf->getMaterial().setTexture(0, new_texture);
// If the current material is also animated,
// update animation info
auto anim_iter = m_animation_tiles.find(crack_material.first);
if (anim_iter != m_animation_tiles.end()) {
TileLayer &tile = anim_iter->second;
tile.texture = new_texture;
tile.texture_id = new_texture_id;
// force animation update
m_animation_frames[crack_material.first] = -1;
}
}
m_last_crack = crack;
}
// Texture animation
for (auto &animation_tile : m_animation_tiles) {
const TileLayer &tile = animation_tile.second;
// Figure out current frame
int frameoffset = m_animation_frame_offsets[animation_tile.first];
int frame = (int)(time * 1000 / tile.animation_frame_length_ms
+ frameoffset) % tile.animation_frame_count;
// If frame doesn't change, skip
if (frame == m_animation_frames[animation_tile.first])
continue;
m_animation_frames[animation_tile.first] = frame;
scene::IMeshBuffer *buf = m_mesh[animation_tile.first.first]->
getMeshBuffer(animation_tile.first.second);
const FrameSpec &animation_frame = (*tile.frames)[frame];
buf->getMaterial().setTexture(0, animation_frame.texture);
if (m_enable_shaders) {
if (animation_frame.normal_texture)
buf->getMaterial().setTexture(1,
animation_frame.normal_texture);
buf->getMaterial().setTexture(2, animation_frame.flags_texture);
}
}
// Day-night transition
if (!m_enable_shaders && (daynight_ratio != m_last_daynight_ratio)) {
// Force reload mesh to VBO
if (m_enable_vbo)
for (scene::IMesh *m : m_mesh)
m->setDirty();
video::SColorf day_color;
get_sunlight_color(&day_color, daynight_ratio);
for (auto &daynight_diff : m_daynight_diffs) {
scene::IMeshBuffer *buf = m_mesh[daynight_diff.first.first]->
getMeshBuffer(daynight_diff.first.second);
video::S3DVertex *vertices = (video::S3DVertex *)buf->getVertices();
for (const auto &j : daynight_diff.second)
final_color_blend(&(vertices[j.first].Color), j.second,
day_color);
}
m_last_daynight_ratio = daynight_ratio;
}
return true;
}
void MapBlockMesh::updateCameraOffset(v3s16 camera_offset)
{
if (camera_offset != m_camera_offset) {
for (scene::IMesh *layer : m_mesh) {
translateMesh(layer,
intToFloat(m_camera_offset - camera_offset, BS));
if (m_enable_vbo)
layer->setDirty();
}
m_camera_offset = camera_offset;
}
}
video::SColor encode_light(u16 light, u8 emissive_light)
{
// Get components
u32 day = (light & 0xff);
u32 night = (light >> 8);
// Add emissive light
night += emissive_light * 2.5f;
if (night > 255)
night = 255;
// Since we don't know if the day light is sunlight or
// artificial light, assume it is artificial when the night
// light bank is also lit.
if (day < night)
day = 0;
else
day = day - night;
u32 sum = day + night;
// Ratio of sunlight:
u32 r;
if (sum > 0)
r = day * 255 / sum;
else
r = 0;
// Average light:
float b = (day + night) / 2;
return video::SColor(r, b, b, b);
}
|