diff options
Diffstat (limited to 'project/src')
| -rw-r--r-- | project/src/addr_port.inc | 2309 | ||||
| -rw-r--r-- | project/src/lib-brres.c | 34 | ||||
| -rw-r--r-- | project/src/lib-file.c | 22 | ||||
| -rw-r--r-- | project/src/lib-lecode.c | 193 | ||||
| -rw-r--r-- | project/src/lib-lecode.h | 72 | ||||
| -rw-r--r-- | project/src/lib-staticr.c | 317 | ||||
| -rw-r--r-- | project/src/lib-staticr.h | 91 | ||||
| -rw-r--r-- | project/src/lib-std.c | 6 | ||||
| -rw-r--r-- | project/src/lib-std.h | 13 | ||||
| -rw-r--r-- | project/src/lib-szs-create.c | 6 | ||||
| -rw-r--r-- | project/src/lib-szs.c | 1 | ||||
| -rw-r--r-- | project/src/ui/tab-wstrt.inc | 52 | ||||
| -rw-r--r-- | project/src/ui/ui-wstrt.c | 263 | ||||
| -rw-r--r-- | project/src/ui/ui-wstrt.h | 21 | ||||
| -rw-r--r-- | project/src/ui/ui.def | 48 | ||||
| -rw-r--r-- | project/src/wbmgt.c | 2 | ||||
| -rw-r--r-- | project/src/wctct.c | 2 | ||||
| -rw-r--r-- | project/src/wimgt.c | 2 | ||||
| -rw-r--r-- | project/src/wkclt.c | 2 | ||||
| -rw-r--r-- | project/src/wkmpt.c | 2 | ||||
| -rw-r--r-- | project/src/wlect.c | 15 | ||||
| -rw-r--r-- | project/src/wmdlt.c | 2 | ||||
| -rw-r--r-- | project/src/wpatt.c | 2 | ||||
| -rw-r--r-- | project/src/wstrt.c | 206 | ||||
| -rw-r--r-- | project/src/wszst.c | 2 | ||||
| -rw-r--r-- | project/src/wtest.c | 815 |
26 files changed, 4229 insertions, 271 deletions
diff --git a/project/src/addr_port.inc b/project/src/addr_port.inc new file mode 100644 index 0000000..41c98ef --- /dev/null +++ b/project/src/addr_port.inc @@ -0,0 +1,2309 @@ + +const static addr_port_t addr_port[2304] = +{ + {{ 0x80000000, 0x80000000, 0x80000000, 0x80000000 }, 0x8040|0, 0x8040|0 }, + {{ 0x80008040, 0x800d2ce8, 0x800d2ca8, 0x800d2de8 }, 0xc|2, 0xc|3 }, + {{ 0x80008054, 0x8001f964, 0x800203e8, 0x8002052c }, 0x4|3, 0x4|3 }, + {{ 0x80008090, 0x80008050, 0x80008024, 0x8000812c }, 0x10|2, 0x10|3 }, + {{ 0x800080ac, 0x8000806c, 0x80008024, 0x8000812c }, 0x10|2, 0x10|3 }, + {{ 0x800080c8, 0x80008088, 0x80008024, 0x8000812c }, 0x10|2, 0x10|3 }, + {{ 0x80008114, 0x800080d4, 0x80008070, 0x80008188 }, 0xbc|2, 0xbc|3 }, + {{ 0x800081e0, 0x800081a0, 0x8000813c, 0x80008250 }, 0x8|2, 0x8|3 }, + {{ 0x80008218, 0x800081d8, 0x80008174, 0x80060894 }, 0x4|3, 0x4|3 }, + {{ 0x80008220, 0x800081e0, 0x8000817c, 0x800082a4 }, 0x68|2, 0x68|3 }, + {{ 0x8000829c, 0x8000825c, 0x800081f8, 0x8000841c }, 0x8f8|2, 0x8f8|3 }, + {{ 0x80008ba0, 0x80008b60, 0x80008afc, 0x800498a8 }, 0x4|3, 0x4|3 }, + {{ 0x80008bfc, 0x80008bbc, 0x80008b58, 0x80008d4c }, 0x7f4|2, 0x7f4|3 }, + {{ 0x800093f8, 0x800093b8, 0x80009354, 0x800d6970 }, 0x4|3, 0x4|3 }, + {{ 0x80009404, 0x800093c4, 0x80009360, 0x80020dac }, 0x4|3, 0x4|3 }, + {{ 0x80009408, 0x800093c8, 0x80009364, 0x8000954c }, 0x24|2, 0x24|3 }, + {{ 0x8000942c, 0x800093ec, 0x80009388, 0x800d07c0 }, 0x4|3, 0x4|3 }, + {{ 0x80009440, 0x80009400, 0x8000939c, 0x800d4228 }, 0x4|3, 0x4|3 }, + {{ 0x80009458, 0x80009418, 0x800093b4, 0x80009560 }, 0xc4|1, 0xc4|1 }, + {{ 0x8000951c, 0x800094dc, 0x80009478, 0x80009624 }, 0x4|0, 0xa8|1 }, + {{ 0x800095c4, 0x80009584, 0x80009520, 0x800096cc }, 0x4|0, 0x1748|1 }, + {{ 0x8000ad44, 0x8000ad04, 0x8000aca0, 0x8000ae4c }, 0x4|3, 0x4|3 }, + {{ 0x8000ad48, 0x8000ad08, 0x8000aca4, 0x8000ae40 }, 0x4|3, 0x4|3 }, + {{ 0x8000ad4c, 0x8000ad0c, 0x8000aca8, 0x8000ae64 }, 0x8|2, 0x8|3 }, + {{ 0x8000ad58, 0x8000ad18, 0x8000acb4, 0x8000ae50 }, 0x4|3, 0x4|3 }, + {{ 0x8000ad5c, 0x8000ad1c, 0x8000acb8, 0x8000ae74 }, 0x8|2, 0x8|3 }, + {{ 0x8000ad64, 0x8000ad24, 0x8000acc0, 0x8000ae5c }, 0x8|2, 0x8|3 }, + {{ 0x8000ad6c, 0x8000ad2c, 0x8000acc8, 0x8000ae84 }, 0x4|3, 0x4|3 }, + {{ 0x8000ad70, 0x8000ad30, 0x8000accc, 0x8000ae68 }, 0x24|2, 0x24|3 }, + {{ 0x8000ad94, 0x8000ad54, 0x8000acf0, 0x800d2f2c }, 0x4|3, 0x4|3 }, + {{ 0x8000ad98, 0x8000ad58, 0x8000acf4, 0x8000ae90 }, 0xc|2, 0xc|3 }, + {{ 0x8000ada4, 0x8000ad64, 0x8000ad00, 0x8000aebc }, 0x14|2, 0x14|3 }, + {{ 0x8000adc0, 0x8000ad8c, 0x8000ad1c, 0x8000aed8 }, 0x14|2, 0x14|3 }, + {{ 0x8000ade0, 0x800519d8, 0x80051998, 0x80051ad8 }, 0x4|3, 0x4|3 }, + {{ 0x8000adf8, 0x8000adbc, 0x8000ad4c, 0x8000af08 }, 0xa0|2, 0xa0|3 }, + {{ 0x8000aeb4, 0x80023810, 0x800237d0, 0x80023910 }, 0x8|2, 0x8|3 }, + {{ 0x8000aedc, 0x8002380c, 0x800237cc, 0x8002390c }, 0xc|2, 0xc|3 }, + {{ 0x8000af20, 0x8000ae80, 0x8000ae44, 0x8000afcc }, 0x6e4|2, 0x6e4|3 }, + {{ 0x8000b654, 0x8000b5b4, 0x8000b578, 0x8000b6bc }, 0x4c|2, 0x4c|3 }, + {{ 0x8000b6b0, 0x80098048, 0x8000b5d4, 0x8000b718 }, 0x4|3, 0x4|3 }, + {{ 0x8000b6b4, 0x80021048, 0x8000b5d8, 0x8000b71c }, 0xa80|2, 0xa80|3 }, + {{ 0x8000c174, 0x8000b614, 0x8000c098, 0x8000c1dc }, 0x27e0|1, 0x27e0|1 }, + {{ 0x8000e954, 0x8000ddf4, 0x8000e878, 0x8000e9bc }, 0x4|0, 0x89c|1 }, + {{ 0x8000f1f0, 0x8000e690, 0x8000f114, 0x8000f258 }, 0x4|0, 0x124|1 }, + {{ 0x8000f314, 0x8000e7b4, 0x8000f238, 0x8000f37c }, 0x4|0, 0x2624|1 }, + {{ 0x80011938, 0x80010dd8, 0x8001185c, 0x800119a0 }, 0x4|0, 0xf4|1 }, + {{ 0x80011a2c, 0x80010ecc, 0x80011950, 0x80011a94 }, 0x4|0, 0xd4|1 }, + {{ 0x80011b00, 0x80010fa0, 0x80011a24, 0x80011b68 }, 0x4|0, 0x170|1 }, + {{ 0x80011c70, 0x80011110, 0x80011b94, 0x80011cd8 }, 0x4|0, 0x20|1 }, + {{ 0x80011c90, 0x80011130, 0x80011bb4, 0x80011cf8 }, 0x4|0, 0x1490|1 }, + {{ 0x80013120, 0x800125c0, 0x80013044, 0x80013188 }, 0x4|0, 0xc0|1 }, + {{ 0x800131e0, 0x80012680, 0x80013104, 0x80013248 }, 0x4|0, 0xbc|1 }, + {{ 0x8001329c, 0x8001273c, 0x800131c0, 0x80013304 }, 0x4|0, 0x11c|1 }, + {{ 0x800133b8, 0x80012858, 0x800132dc, 0x80013420 }, 0x4|0, 0x114|1 }, + {{ 0x800134cc, 0x8001296c, 0x800133f0, 0x80013534 }, 0x4|0, 0x124|1 }, + {{ 0x800135f0, 0x80012a90, 0x80013514, 0x80013658 }, 0x4|0, 0x1cb8|1 }, + {{ 0x800152a8, 0x80014748, 0x800151cc, 0x80015310 }, 0x4|0, 0x194|1 }, + {{ 0x8001543c, 0x800148dc, 0x80015360, 0x800154a4 }, 0x4|0, 0x23d8|1 }, + {{ 0x80017814, 0x80016cb4, 0x80017738, 0x8001787c }, 0x4|0, 0x4b34|1 }, + {{ 0x8001c35c, 0x8001b7fc, 0x8001c280, 0x8001c3c4 }, 0x34|2, 0x60|3 }, + {{ 0x8001c3bc, 0x8001b85c, 0x8001c2e0, 0x8001c424 }, 0xbe8|3, 0xbe8|3 }, + {{ 0x8001cfa4, 0x8001c444, 0x8001cec8, 0x8001d00c }, 0x1f98|1, 0x1f98|1 }, + {{ 0x8001ef3c, 0x8001e3dc, 0x8001ee60, 0x8001efa4 }, 0x4|0, 0xef4|1 }, + {{ 0x8001fe3c, 0x8001f2dc, 0x8001fd60, 0x8001fea4 }, 0x364|3, 0x364|3 }, + {{ 0x800201a0, 0x8001f640, 0x800200c4, 0x80020208 }, 0x142c|1, 0x142c|1 }, + {{ 0x800215cc, 0x80020a6c, 0x800214f0, 0x80021634 }, 0x4|0, 0x10|1 }, + {{ 0x800215dc, 0x80020a7c, 0x80021500, 0x80021644 }, 0x4|0, 0x5c4|1 }, + {{ 0x80021ba8, 0x80021b08, 0x800b2638, 0x800b2778 }, 0x4|3, 0x4|3 }, + {{ 0x80021bac, 0x80021b0c, 0x80021acc, 0x800b277c }, 0x4|3, 0x4|3 }, + {{ 0x80021bb0, 0x80021b10, 0x80021ad0, 0x80021c10 }, 0x1ad0|1, 0x1ad0|1 }, + {{ 0x80023680, 0x800235e0, 0x800235a0, 0x800236e0 }, 0x4|0, 0x2c8|1 }, + {{ 0x80023948, 0x800238a8, 0x80023868, 0x800239a8 }, 0x4|0, 0x1c770|1 }, + {{ 0x800400e0, 0x80040040, 0x80040000, 0x80040140 }, 0x2a10|2, 0x2a38|3 }, + {{ 0x80042b18, 0x80042a78, 0x80042a38, 0x80042b78 }, 0x75400|3, 0x75400|3 }, + {{ 0x800b7f18, 0x800b42d8, 0x800b4298, 0x800b43d8 }, 0x1318|2, 0x1318|3 }, + {{ 0x800b9230, 0x800b9190, 0x800b9150, 0x800b9290 }, 0x6d0c|2, 0x6d0c|3 }, + {{ 0x800bff3c, 0x800bfe9c, 0x800bfe5c, 0x8012e598 }, 0x4|3, 0x4|3 }, + {{ 0x800bff40, 0x800bfea0, 0x800bfe60, 0x800bffa0 }, 0xc8a4|1, 0xc8a4|1 }, + {{ 0x800cc7e4, 0x800cc744, 0x800cc704, 0x800cc844 }, 0x4|0, 0x190|1 }, + {{ 0x800cc974, 0x800cc8d4, 0x800cc894, 0x800cc9d4 }, 0x4|0, 0x3e4|1 }, + {{ 0x800ccd58, 0x800cccb8, 0x800ccc78, 0x800ccdb8 }, 0x4|0, 0x68|1 }, + {{ 0x800ccdc0, 0x800ccd20, 0x800ccce0, 0x800cce20 }, 0x4|0, 0xc0|1 }, + {{ 0x800cce80, 0x800ccde0, 0x800ccda0, 0x800ccee0 }, 0x4|0, 0x1e0|1 }, + {{ 0x800cd060, 0x800ccfc0, 0x800ccf80, 0x800cd0c0 }, 0xc|0, 0xe78|1 }, + {{ 0x800cded8, 0x800cde38, 0x800cddf8, 0x800cdf38 }, 0x4|0, 0x2b8|1 }, + {{ 0x800ce190, 0x800ce0f0, 0x800ce0b0, 0x800ce1f0 }, 0x4|0, 0x614|1 }, + {{ 0x800ce7a4, 0x800ce704, 0x800ce6c4, 0x800ce804 }, 0x4|0, 0x1cb8|1 }, + {{ 0x800d045c, 0x800d03bc, 0x800d037c, 0x800d04bc }, 0x4|0, 0x410|1 }, + {{ 0x800d086c, 0x800d07cc, 0x800d078c, 0x800d08cc }, 0x4|0, 0x4fc|1 }, + {{ 0x800d0d68, 0x800d0cc8, 0x800d0c88, 0x800d0dc8 }, 0x4|0, 0x284|1 }, + {{ 0x800d0fec, 0x800d0f4c, 0x800d0f0c, 0x800d104c }, 0x4|0, 0x40c|1 }, + {{ 0x800d13f8, 0x800d1358, 0x800d1318, 0x800d1458 }, 0x4|0, 0x154|1 }, + {{ 0x800d155c, 0x800d14bc, 0x800d147c, 0x800d15bc }, 0x834|1, 0x834|1 }, + {{ 0x800d1d90, 0x800d1cf0, 0x800d1cb0, 0x800d1df0 }, 0x4|0, 0x270|1 }, + {{ 0x800d2000, 0x800d1f60, 0x800d1f20, 0x800d2060 }, 0x4|0, 0x4b4|1 }, + {{ 0x800d24b4, 0x800d2414, 0x800d23d4, 0x800d2514 }, 0x4|0, 0x234|1 }, + {{ 0x800d26e8, 0x800d2648, 0x800d2608, 0x800d2748 }, 0x4|0, 0x78|1 }, + {{ 0x800d2760, 0x800d26c0, 0x800d2680, 0x800d27c0 }, 0x4|0, 0xa8|1 }, + {{ 0x800d2808, 0x800d2768, 0x800d2728, 0x800d2868 }, 0x4|0, 0x40|1 }, + {{ 0x800d2848, 0x800d27a8, 0x800d2768, 0x800d28a8 }, 0x4|0, 0x3c|1 }, + {{ 0x800d2884, 0x800d27e4, 0x800d27a4, 0x800d28e4 }, 0x4|0, 0x7c|1 }, + {{ 0x800d2900, 0x800d2860, 0x800d2820, 0x800d2960 }, 0x4|0, 0xd0|1 }, + {{ 0x800d29d0, 0x800d2930, 0x800d28f0, 0x800d2a30 }, 0x4|0, 0xa4|1 }, + {{ 0x800d2a74, 0x800d29d4, 0x800d2994, 0x800d2ad4 }, 0x4|0, 0x9c|1 }, + {{ 0x800d2b10, 0x800d2a70, 0x800d2a30, 0x800d2b70 }, 0x4|0, 0x6b4|1 }, + {{ 0x800d31c4, 0x800d3124, 0x800d30e4, 0x800d3224 }, 0x4|0, 0xd58|1 }, + {{ 0x800d3f1c, 0x800d3e7c, 0x800d3e3c, 0x800d3f7c }, 0x4|0, 0x423c|1 }, + {{ 0x800d8158, 0x800d80b8, 0x800d8078, 0x800d81b8 }, 0x4|0, 0x700|1 }, + {{ 0x800d8858, 0x800d87b8, 0x800d8778, 0x800d88b8 }, 0x4|0, 0x620|1 }, + {{ 0x800d8e78, 0x800d8dd8, 0x800d8d98, 0x800d8ed8 }, 0x4|0, 0x70|1 }, + {{ 0x800d8ee8, 0x800d8e48, 0x800d8e08, 0x800d8f48 }, 0x4|0, 0x538|1 }, + {{ 0x800d9420, 0x800d9380, 0x800d9340, 0x800d9480 }, 0x4|0, 0x2c8|1 }, + {{ 0x800d96e8, 0x800d9648, 0x800d9608, 0x800d9748 }, 0x4|0, 0xfd0|1 }, + {{ 0x800da6b8, 0x800da618, 0x800da5d8, 0x800da718 }, 0x4|0, 0x12f0|1 }, + {{ 0x800db9a8, 0x800db908, 0x800db8c8, 0x800dba08 }, 0x4|0, 0x390|1 }, + {{ 0x800dbd38, 0x800dbc98, 0x800dbc58, 0x800dbd98 }, 0x4|0, 0x4fc|1 }, + {{ 0x800dc234, 0x800dc194, 0x800dc154, 0x800dc294 }, 0x4|0, 0xbc8|1 }, + {{ 0x800dcdfc, 0x800dcd5c, 0x800dcd1c, 0x800dce5c }, 0x4|0, 0x3bac|1 }, + {{ 0x800e09a8, 0x800e0908, 0x800e08c8, 0x800e0a08 }, 0x4|0, 0xbe8|1 }, + {{ 0x800e1590, 0x800e14f0, 0x800e14b0, 0x800e15f0 }, 0x4|0, 0x3b4|1 }, + {{ 0x800e1944, 0x800e18a4, 0x800e1864, 0x800e19a4 }, 0x4|0, 0x3dc4|1 }, + {{ 0x800e5708, 0x800e5668, 0x800e5628, 0x800e5768 }, 0x4|0, 0x128|1 }, + {{ 0x800e5830, 0x800e5790, 0x800e5750, 0x800e5890 }, 0x4|0, 0x170|1 }, + {{ 0x800e59a0, 0x800e5900, 0x800e58c0, 0x800e5a00 }, 0x4|0, 0x1d0|1 }, + {{ 0x800e5b70, 0x800e5ad0, 0x800e5a90, 0x800e5bd0 }, 0x4|0, 0x1430|1 }, + {{ 0x800e6fa0, 0x800e6f00, 0x800e6ec0, 0x800e7000 }, 0x4|0, 0x7f8|1 }, + {{ 0x800e7798, 0x800e76f8, 0x800e76b8, 0x800e77f8 }, 0x4|0, 0x378|1 }, + {{ 0x800e7b10, 0x800e7a70, 0x800e7a30, 0x800e7b70 }, 0x4|0, 0x35c|1 }, + {{ 0x800e7e6c, 0x800e7dcc, 0x800e7d8c, 0x800e7ecc }, 0x4|0, 0x28|1 }, + {{ 0x800e7e94, 0x800e7df4, 0x800e7db4, 0x800e7ef4 }, 0x4|0, 0x4c|1 }, + {{ 0x800e7ee0, 0x800e7e40, 0x800e7e00, 0x800e7f40 }, 0x4|0, 0xb8|1 }, + {{ 0x800e7f98, 0x800e7ef8, 0x800e7eb8, 0x800e7ff8 }, 0x4|0, 0x1a0|1 }, + {{ 0x800e8138, 0x800e8098, 0x800e8058, 0x800e8198 }, 0x4|0, 0xc3c|1 }, + {{ 0x800e8d74, 0x800e8cd4, 0x800e8c94, 0x800e8dd4 }, 0x4|0, 0x40|1 }, + {{ 0x800e8db4, 0x800e8d14, 0x800e8cd4, 0x800e8e14 }, 0x4|0, 0x418|1 }, + {{ 0x800e91cc, 0x800e912c, 0x800e90ec, 0x800e922c }, 0x4|0, 0x128|1 }, + {{ 0x800e92f4, 0x800e9254, 0x800e9214, 0x800e9354 }, 0x4|0, 0xaf4|1 }, + {{ 0x800e9de8, 0x800e9d48, 0x800e9d08, 0x800e9e48 }, 0x4|0, 0x648|1 }, + {{ 0x800ea474, 0x800ea3d4, 0x800ea394, 0x800ea4ec }, 0xa74|2, 0xa74|3 }, + {{ 0x800eaee8, 0x800eae48, 0x800eae08, 0x800ed580 }, 0x4|3, 0x4|3 }, + {{ 0x800eaeec, 0x800eae4c, 0x800eae0c, 0x800eaf64 }, 0x1ba0|1, 0x1ba0|1 }, + {{ 0x800eca8c, 0x800ec9ec, 0x800ec9ac, 0x800ecb04 }, 0x4|0, 0x20|1 }, + {{ 0x800ecaac, 0x800eca0c, 0x800ec9cc, 0x800ecb24 }, 0x4|0, 0xc3c|1 }, + {{ 0x800ed6e8, 0x800ed648, 0x800ed608, 0x800ed760 }, 0x4|0, 0x9c|1 }, + {{ 0x800ed784, 0x800ed6e4, 0x800ed6a4, 0x800ed7fc }, 0x4|0, 0xe4|1 }, + {{ 0x800ed868, 0x800ed7c8, 0x800ed788, 0x800ed8e0 }, 0x4|0, 0x9c4|1 }, + {{ 0x800ee22c, 0x800ee18c, 0x800ee14c, 0x800ee2a4 }, 0x4|0, 0x174|1 }, + {{ 0x800ee3a0, 0x800ee300, 0x800ee2c0, 0x800ee418 }, 0x4|0, 0x2dec|1 }, + {{ 0x800f118c, 0x800f10ec, 0x800f10ac, 0x800f1204 }, 0x4|0, 0x118|1 }, + {{ 0x800f12a4, 0x800f1204, 0x800f11c4, 0x800f131c }, 0x4|0, 0x9c|1 }, + {{ 0x800f1340, 0x800f12a0, 0x800f1260, 0x800f13b8 }, 0x4|0, 0x94|1 }, + {{ 0x800f13d4, 0x800f1334, 0x800f12f4, 0x800f144c }, 0x4|0, 0x148|1 }, + {{ 0x800f151c, 0x800f147c, 0x800f143c, 0x800f1594 }, 0x4|0, 0x130|1 }, + {{ 0x800f164c, 0x800f15ac, 0x800f156c, 0x800f16c4 }, 0x4|0, 0x650|1 }, + {{ 0x800f1c9c, 0x800f1bfc, 0x800f1bbc, 0x800f1d14 }, 0x4|0, 0x82c|1 }, + {{ 0x800f24c8, 0x800f2428, 0x800f23e8, 0x800f2540 }, 0x4|0, 0x48|1 }, + {{ 0x800f2510, 0x800f2470, 0x800f2430, 0x800f2588 }, 0x4|0, 0x9344|1 }, + {{ 0x800fb854, 0x800fb7b4, 0x800fb774, 0x800fb8cc }, 0x4|0, 0x1f8|1 }, + {{ 0x800fba4c, 0x800fb9ac, 0x800fb96c, 0x800fbac4 }, 0x4|0, 0x1218|1 }, + {{ 0x800fcc64, 0x800fcbc4, 0x800fcb84, 0x800fccdc }, 0x4|0, 0x23b0|1 }, + {{ 0x800ff014, 0x800fef74, 0x800fef34, 0x800ff08c }, 0x4|0, 0x8b0|1 }, + {{ 0x800ff8c4, 0x800ff824, 0x800ff7e4, 0x800ff93c }, 0x4|0, 0xf14|1 }, + {{ 0x801007d8, 0x80100738, 0x801006f8, 0x80100850 }, 0x4|0, 0x8b58|1 }, + {{ 0x80109330, 0x80109290, 0x80109250, 0x801093a8 }, 0x4|0, 0x1680|1 }, + {{ 0x8010a9b0, 0x8010a910, 0x8010a8d0, 0x8010aa28 }, 0x10|0, 0x344|1 }, + {{ 0x8010acf4, 0x8010ac54, 0x8010ac14, 0x8010ad6c }, 0x4|0, 0x3ccc|1 }, + {{ 0x8010e9c0, 0x8010e920, 0x8010e8e0, 0x8010ea38 }, 0x4|0, 0xb694|1 }, + {{ 0x8011a054, 0x80119fb4, 0x80119f74, 0x8011a0cc }, 0x4|0, 0x4b0|1 }, + {{ 0x8011a504, 0x8011a464, 0x8011a424, 0x8011a57c }, 0x4|0, 0x390|1 }, + {{ 0x8011a894, 0x8011a7f4, 0x8011a7b4, 0x8011a90c }, 0x4|0, 0x1f4|1 }, + {{ 0x8011aa88, 0x8011a9e8, 0x8011a9a8, 0x8011ab00 }, 0x4|0, 0x2b0|1 }, + {{ 0x8011ad38, 0x8011ac98, 0x8011ac58, 0x8011adb0 }, 0x4|0, 0x104|1 }, + {{ 0x8011ae3c, 0x8011ad9c, 0x8011ad5c, 0x8011aeb4 }, 0x4|0, 0x31c|1 }, + {{ 0x8011b158, 0x8011b0b8, 0x8011b078, 0x8011b1d0 }, 0x4|0, 0xac|1 }, + {{ 0x8011b204, 0x8011b164, 0x8011b124, 0x8011b27c }, 0x4|0, 0xd50|1 }, + {{ 0x8011bf54, 0x8011beb4, 0x8011be74, 0x8011bfcc }, 0x4|0, 0x1e53c|1 }, + {{ 0x8013a520, 0x8013a480, 0x8013a440, 0x8013a598 }, 0x228|2, 0x2b8|3 }, + {{ 0x8013a7d8, 0x8013a738, 0x8013a6f8, 0x8013a850 }, 0x23ae4|1, 0x23ae4|1 }, + {{ 0x8015e2bc, 0x8015e21c, 0x8015e1dc, 0x8015e334 }, 0x4|0, 0x2ac|1 }, + {{ 0x8015e568, 0x8015e4c8, 0x8015e488, 0x8015e5e0 }, 0x4|0, 0x2cc|1 }, + {{ 0x8015e834, 0x8015e794, 0x8015e754, 0x8015e8ac }, 0x4|0, 0x4928|1 }, + {{ 0x80163168, 0x801630c8, 0x80163088, 0x801631e0 }, 0x3a0|2, 0x3b8|3 }, + {{ 0x80163520, 0x80163480, 0x80163440, 0x80163598 }, 0xdc8|3, 0xdc8|3 }, + {{ 0x80164300, 0x80164260, 0x80164220, 0x801646a4 }, 0xc|2, 0xc|3 }, + {{ 0x8016430c, 0x8016426c, 0x8016422c, 0x801643a8 }, 0xa7a4|1, 0xa7a4|1 }, + {{ 0x8016eab0, 0x8016ea10, 0x8016e9d0, 0x8016eb4c }, 0x4|0, 0x5c38|1 }, + {{ 0x801746f8, 0x80174658, 0x80174618, 0x80174834 }, 0x54c|2, 0x54c|3 }, + {{ 0x80174c44, 0x80174ba4, 0x80174b64, 0x80186884 }, 0x4|3, 0x4|3 }, + {{ 0x80174c4c, 0x80174bac, 0x80174b6c, 0x80174da0 }, 0x29c|2, 0x29c|3 }, + {{ 0x80174ef0, 0x80174e50, 0x80174e10, 0x80175178 }, 0xa74|2, 0xa74|3 }, + {{ 0x80175970, 0x801758d0, 0x80175890, 0x800e4bd4 }, 0x8|2, 0x8|3 }, + {{ 0x80175978, 0x801758d8, 0x80175898, 0x80175bf0 }, 0x11c0|2, 0x11c0|3 }, + {{ 0x80176b38, 0x80176a98, 0x80176a58, 0x800fc840 }, 0x1c|2, 0x1c|3 }, + {{ 0x80176b54, 0x80176ab4, 0x80176a74, 0x80176dcc }, 0x64|2, 0x64|3 }, + {{ 0x80176bc8, 0x80176b28, 0x80176ae8, 0x80176e4c }, 0xb0|2, 0xb0|3 }, + {{ 0x80176c78, 0x80176bd8, 0x80176b98, 0x802435f0 }, 0x4|3, 0x4|3 }, + {{ 0x80176c7c, 0x80176bdc, 0x80176b9c, 0x80176f00 }, 0x18|2, 0x18|3 }, + {{ 0x80176ca8, 0x80176c08, 0x80176bc8, 0x80176f38 }, 0xb0|2, 0xb0|3 }, + {{ 0x80176d58, 0x80176cb8, 0x80176c78, 0x802435f0 }, 0x4|3, 0x4|3 }, + {{ 0x80176d5c, 0x80176cbc, 0x80176c7c, 0x80176fec }, 0x764|2, 0x764|3 }, + {{ 0x801774dc, 0x8017743c, 0x801773fc, 0x80177c54 }, 0xc|2, 0xc|3 }, + {{ 0x80177504, 0x80177464, 0x80177424, 0x8017776c }, 0x10|2, 0x10|3 }, + {{ 0x80177570, 0x801774d0, 0x80177490, 0x80113380 }, 0x4|3, 0x4|3 }, + {{ 0x80177578, 0x801774d8, 0x80177498, 0x8017f594 }, 0x8|2, 0x8|3 }, + {{ 0x801775a0, 0x80177500, 0x801774c0, 0x8017b1a8 }, 0xc|2, 0xc|3 }, + {{ 0x801775c4, 0x80177524, 0x801774e4, 0x8017af68 }, 0x2c|2, 0x2c|3 }, + {{ 0x80177614, 0x80177574, 0x80177534, 0x80112700 }, 0x4|3, 0x4|3 }, + {{ 0x80177618, 0x80177578, 0x80177538, 0x8017afbc }, 0x38|2, 0x38|3 }, + {{ 0x80177650, 0x801775b0, 0x80177570, 0x8021d674 }, 0x8|2, 0x8|3 }, + {{ 0x80177658, 0x801775b8, 0x80177578, 0x8017affc }, 0x74|2, 0x74|3 }, + {{ 0x80177708, 0x80177668, 0x80177628, 0x8017f594 }, 0x8|2, 0x8|3 }, + {{ 0x80177750, 0x801776b0, 0x80177670, 0x801bafac }, 0x8|2, 0x8|3 }, + {{ 0x80177760, 0x801776c0, 0x80177680, 0x8017f9a4 }, 0x18|2, 0x18|3 }, + {{ 0x80177788, 0x801776e8, 0x801776a8, 0x80177ab4 }, 0x28|2, 0x28|3 }, + {{ 0x801777bc, 0x8017771c, 0x801776dc, 0x80177aec }, 0x8|2, 0x8|3 }, + {{ 0x801777c4, 0x80177724, 0x801776e4, 0x800fcaec }, 0x4|3, 0x4|3 }, + {{ 0x801777cc, 0x8017772c, 0x801776ec, 0x80177afc }, 0x54|2, 0x54|3 }, + {{ 0x80177828, 0x80177788, 0x80177748, 0x80177b54 }, 0xc|2, 0xc|3 }, + {{ 0x80177834, 0x80177794, 0x80177754, 0x80177b68 }, 0x90|2, 0x90|3 }, + {{ 0x80177904, 0x80177864, 0x80177824, 0x80177c90 }, 0x3c|2, 0x3c|3 }, + {{ 0x80177954, 0x801778b4, 0x80177874, 0x801ad274 }, 0x4|3, 0x4|3 }, + {{ 0x80177958, 0x801778b8, 0x80177878, 0x80177ce0 }, 0x3c|2, 0x3c|3 }, + {{ 0x801779a0, 0x80177900, 0x801778c0, 0x801ad270 }, 0x8|2, 0x8|3 }, + {{ 0x801779a8, 0x80177908, 0x801778c8, 0x80177d2c }, 0x64|2, 0x64|3 }, + {{ 0x80177a14, 0x80177974, 0x80177934, 0x801ad274 }, 0x4|3, 0x4|3 }, + {{ 0x80177a18, 0x80177978, 0x80177938, 0x80177d98 }, 0xe0|2, 0xe0|3 }, + {{ 0x80177b20, 0x80177a80, 0x80177a40, 0x801ad274 }, 0x4|3, 0x4|3 }, + {{ 0x80177b24, 0x80177a84, 0x80177a44, 0x80177ea0 }, 0xf8|2, 0xf8|3 }, + {{ 0x80177c1c, 0x80177b7c, 0x80177b3c, 0x800a0ec4 }, 0x4|3, 0x4|3 }, + {{ 0x80177c20, 0x80177b80, 0x80177b40, 0x80177f9c }, 0x2c|2, 0x2c|3 }, + {{ 0x80177c74, 0x80177bd4, 0x80177b94, 0x801ad274 }, 0x4|3, 0x4|3 }, + {{ 0x80177c78, 0x80177bd8, 0x80177b98, 0x80177ff0 }, 0x134|2, 0x134|3 }, + {{ 0x80177db8, 0x80177d18, 0x80177cd8, 0x801ad274 }, 0x4|3, 0x4|3 }, + {{ 0x80177dbc, 0x80177d1c, 0x80177cdc, 0x80178130 }, 0xe0|2, 0xe0|3 }, + {{ 0x80177ea8, 0x80177e08, 0x80177dc8, 0x80178218 }, 0x1c|2, 0x1c|3 }, + {{ 0x80177ed4, 0x80177e34, 0x80177df4, 0x80178240 }, 0x4|3, 0x4|3 }, + {{ 0x80177eec, 0x80177e4c, 0x80177e0c, 0x8017825c }, 0x64|2, 0x64|3 }, + {{ 0x80177f60, 0x80177ec0, 0x80177e80, 0x80178810 }, 0x60|2, 0x60|3 }, + {{ 0x80177fe0, 0x80177f40, 0x80177f00, 0x800f5b88 }, 0x4|3, 0x4|3 }, + {{ 0x80177ff8, 0x80177f58, 0x80177f18, 0x801782e0 }, 0x28|2, 0x28|3 }, + {{ 0x80178020, 0x80177f80, 0x80177f40, 0x801ad270 }, 0x4|3, 0x4|3 }, + {{ 0x80178028, 0x80177f88, 0x80177f48, 0x8017830c }, 0x22c|2, 0x22c|3 }, + {{ 0x80178260, 0x801781c0, 0x80178180, 0x801ad138 }, 0x4|3, 0x4|3 }, + {{ 0x80178274, 0x801781d4, 0x80178194, 0x80178550 }, 0x40|2, 0x40|3 }, + {{ 0x801782c0, 0x80178220, 0x801781e0, 0x801ad138 }, 0x4|3, 0x4|3 }, + {{ 0x801782d0, 0x80178230, 0x801781f0, 0x8017854c }, 0x8|2, 0x8|3 }, + {{ 0x801782d8, 0x80178238, 0x801781f8, 0x801785ac }, 0x158|2, 0x158|3 }, + {{ 0x80178454, 0x801783b4, 0x80178374, 0x8017a304 }, 0x4|3, 0x4|3 }, + {{ 0x8017845c, 0x801783bc, 0x8017837c, 0x80178730 }, 0x48|2, 0x48|3 }, + {{ 0x801784b4, 0x80178414, 0x801783d4, 0x801787c0 }, 0x8|2, 0x8|3 }, + {{ 0x801784c0, 0x80178420, 0x801783e0, 0x801787c8 }, 0x30|2, 0x30|3 }, + {{ 0x801784f0, 0x80178450, 0x80178410, 0x801787fc }, 0x8|2, 0x8|3 }, + {{ 0x80178514, 0x80178474, 0x80178434, 0x801788a4 }, 0x2b0|2, 0x2b0|3 }, + {{ 0x801787c4, 0x80178724, 0x801786e4, 0x800f3954 }, 0x4|3, 0x4|3 }, + {{ 0x801787c8, 0x80178728, 0x801786e8, 0x80178b58 }, 0x14|2, 0x14|3 }, + {{ 0x801787dc, 0x8017873c, 0x801786fc, 0x80186414 }, 0x4|3, 0x4|3 }, + {{ 0x801787e0, 0x80178740, 0x80178700, 0x80178b70 }, 0x48|2, 0x48|3 }, + {{ 0x80178828, 0x80178788, 0x80178748, 0x80186414 }, 0x4|3, 0x4|3 }, + {{ 0x8017882c, 0x8017878c, 0x8017874c, 0x80178bbc }, 0x360|2, 0x360|3 }, + {{ 0x80178b8c, 0x80178aec, 0x80178aac, 0x8009b0bc }, 0x4|3, 0x4|3 }, + {{ 0x80178b90, 0x80178af0, 0x80178ab0, 0x80178f20 }, 0x730|2, 0x730|3 }, + {{ 0x8017931c, 0x8017927c, 0x8017923c, 0x80238b80 }, 0x4|3, 0x4|3 }, + {{ 0x80179320, 0x80179280, 0x80179240, 0x80238b9c }, 0x4|3, 0x4|3 }, + {{ 0x80179328, 0x80179288, 0x80179248, 0x801e6a08 }, 0x4|3, 0x4|3 }, + {{ 0x8017932c, 0x8017928c, 0x8017924c, 0x801796ec }, 0x4|3, 0x4|3 }, + {{ 0x80179330, 0x80179290, 0x80179250, 0x80179518 }, 0x10|2, 0x10|3 }, + {{ 0x80179340, 0x801792a0, 0x80179260, 0x8016d520 }, 0x4|3, 0x4|3 }, + {{ 0x80179378, 0x801792d8, 0x80179298, 0x80238b80 }, 0x4|3, 0x4|3 }, + {{ 0x80179384, 0x801792e4, 0x801792a4, 0x80179660 }, 0x240|2, 0x240|3 }, + {{ 0x801795c4, 0x80179524, 0x801794e4, 0x80221dd4 }, 0x4|3, 0x4|3 }, + {{ 0x801795c8, 0x80179528, 0x801794e8, 0x801798a4 }, 0x4|3, 0x4|3 }, + {{ 0x801795cc, 0x8017952c, 0x801794ec, 0x802222fc }, 0x4|3, 0x4|3 }, + {{ 0x801795d0, 0x80179530, 0x801794f0, 0x801798ac }, 0x14|2, 0x14|3 }, + {{ 0x801795e4, 0x80179544, 0x80179504, 0x80102bd8 }, 0x4|3, 0x4|3 }, + {{ 0x801795e8, 0x80179548, 0x80179508, 0x801798c4 }, 0x584|2, 0x584|3 }, + {{ 0x80179b6c, 0x80179acc, 0x80179a8c, 0x80179e44 }, 0x4|3, 0x4|3 }, + {{ 0x80179b70, 0x80179ad0, 0x80179a90, 0x80179e4c }, 0xd4|2, 0xd4|3 }, + {{ 0x80179c44, 0x80179ba4, 0x80179b64, 0x8009ab24 }, 0x4|3, 0x4|3 }, + {{ 0x80179c48, 0x80179ba8, 0x80179b68, 0x80179f24 }, 0x2fc|2, 0x2fc|3 }, + {{ 0x80179f44, 0x80179ea4, 0x80179e64, 0x8009ab24 }, 0x4|3, 0x4|3 }, + {{ 0x80179f48, 0x80179ea8, 0x80179e68, 0x8017a224 }, 0x4c|2, 0x4c|3 }, + {{ 0x80179f94, 0x80179ef4, 0x80179eb4, 0x8017a1ec }, 0x24|2, 0x24|3 }, + {{ 0x80179fb8, 0x80179f18, 0x80179ed8, 0x80179e14 }, 0x4|3, 0x4|3 }, + {{ 0x80179fbc, 0x80179f1c, 0x80179edc, 0x8017a2a4 }, 0x30|2, 0x30|3 }, + {{ 0x80179fec, 0x80179f4c, 0x80179f0c, 0x801799bc }, 0x4|3, 0x4|3 }, + {{ 0x80179ff0, 0x80179f50, 0x80179f10, 0x8017a2d8 }, 0x18|2, 0x18|3 }, + {{ 0x8017a008, 0x80179f68, 0x80179f28, 0x80085c7c }, 0x4|3, 0x4|3 }, + {{ 0x8017a00c, 0x80179f6c, 0x80179f2c, 0x8017a2f4 }, 0x20|2, 0x20|3 }, + {{ 0x8017a02c, 0x80179f8c, 0x80179f4c, 0x801799bc }, 0x4|3, 0x4|3 }, + {{ 0x8017a030, 0x80179f90, 0x80179f50, 0x8017a318 }, 0x48|2, 0x48|3 }, + {{ 0x8017a078, 0x80179fd8, 0x80179f98, 0x801799bc }, 0x4|3, 0x4|3 }, + {{ 0x8017a07c, 0x80179fdc, 0x80179f9c, 0x8017a364 }, 0x8|2, 0x8|3 }, + {{ 0x8017a0bc, 0x8017a01c, 0x80179fdc, 0x80128c34 }, 0x4|3, 0x4|3 }, + {{ 0x8017a0c0, 0x8017a020, 0x80179fe0, 0x8017a3b0 }, 0x214|2, 0x214|3 }, + {{ 0x8017a2d4, 0x8017a234, 0x8017a1f4, 0x8017987c }, 0x8|2, 0x8|3 }, + {{ 0x8017a2dc, 0x8017a23c, 0x8017a1fc, 0x8017a5cc }, 0x18|2, 0x18|3 }, + {{ 0x8017a2f4, 0x8017a254, 0x8017a214, 0x8017982c }, 0x4|3, 0x4|3 }, + {{ 0x8017a2f8, 0x8017a258, 0x8017a218, 0x8017a5e8 }, 0x284|2, 0x284|3 }, + {{ 0x8017a57c, 0x8017a4dc, 0x8017a49c, 0x8017a5b0 }, 0x8|2, 0x8|3 }, + {{ 0x8017a584, 0x8017a4e4, 0x8017a4a4, 0x8017a5c8 }, 0x4|3, 0x4|3 }, + {{ 0x8017a588, 0x8017a4e8, 0x8017a4a8, 0x8017a878 }, 0xd0|2, 0xd0|3 }, + {{ 0x8017a658, 0x8017a5b8, 0x8017a578, 0x801799bc }, 0x4|3, 0x4|3 }, + {{ 0x8017a65c, 0x8017a5bc, 0x8017a57c, 0x8017a94c }, 0x50|2, 0x50|3 }, + {{ 0x8017a6ac, 0x8017a60c, 0x8017a5cc, 0x801799bc }, 0x4|3, 0x4|3 }, + {{ 0x8017a6b0, 0x8017a610, 0x8017a5d0, 0x8017a9a0 }, 0xb4|2, 0xb4|3 }, + {{ 0x8017a764, 0x8017a6c4, 0x8017a684, 0x8012bef0 }, 0x4|3, 0x4|3 }, + {{ 0x8017a768, 0x8017a6c8, 0x8017a688, 0x8017aa58 }, 0xc|2, 0xc|3 }, + {{ 0x8017a774, 0x8017a6d4, 0x8017a694, 0x80102bd8 }, 0x4|3, 0x4|3 }, + {{ 0x8017a778, 0x8017a6d8, 0x8017a698, 0x8017aa68 }, 0x5c|2, 0x5c|3 }, + {{ 0x8017a7d4, 0x8017a734, 0x8017a6f4, 0x80102bd8 }, 0x4|3, 0x4|3 }, + {{ 0x8017a7d8, 0x8017a738, 0x8017a6f8, 0x8017aac8 }, 0x58|2, 0x58|3 }, + {{ 0x8017a830, 0x8017a790, 0x8017a750, 0x80102bd8 }, 0x4|3, 0x4|3 }, + {{ 0x8017a834, 0x8017a794, 0x8017a754, 0x8017ab24 }, 0x12c|2, 0x12c|3 }, + {{ 0x8017a960, 0x8017a8c0, 0x8017a880, 0x8017aa18 }, 0x4|3, 0x4|3 }, + {{ 0x8017a964, 0x8017a8c4, 0x8017a884, 0x8017ac54 }, 0x14|2, 0x14|3 }, + {{ 0x8017a97c, 0x8017a8dc, 0x8017a89c, 0x8017aa34 }, 0x18|2, 0x18|3 }, + {{ 0x8017a994, 0x8017a8f4, 0x8017a8b4, 0x8017ac84 }, 0x298|2, 0x298|3 }, + {{ 0x8017ac2c, 0x8017ab8c, 0x8017ab4c, 0x8021ee90 }, 0x4|3, 0x4|3 }, + {{ 0x8017ac30, 0x8017ab90, 0x8017ab50, 0x8017af20 }, 0xc|2, 0xc|3 }, + {{ 0x8017ac44, 0x8017aba4, 0x8017ab64, 0x801cc084 }, 0x8|2, 0x8|3 }, + {{ 0x8017ac4c, 0x8017abac, 0x8017ab6c, 0x8017b094 }, 0x34c|2, 0x34c|3 }, + {{ 0x8017afa4, 0x8017af04, 0x8017aec4, 0x8017b3f4 }, 0x390|2, 0x390|3 }, + {{ 0x8017b338, 0x8017b298, 0x8017b258, 0x8017b790 }, 0x10a0|2, 0x10a0|3 }, + {{ 0x8017c3d8, 0x8017c338, 0x8017c2f8, 0x800a2668 }, 0x4|3, 0x4|3 }, + {{ 0x8017c3dc, 0x8017c33c, 0x8017c2fc, 0x8017c834 }, 0x1a0|2, 0x1a0|3 }, + {{ 0x8017c57c, 0x8017c4dc, 0x8017c49c, 0x80102bd8 }, 0x4|3, 0x4|3 }, + {{ 0x8017c580, 0x8017c4e0, 0x8017c4a0, 0x8017c9d8 }, 0x5c|2, 0x5c|3 }, + {{ 0x8017c5dc, 0x8017c53c, 0x8017c4fc, 0x80102bd8 }, 0x4|3, 0x4|3 }, + {{ 0x8017c5e0, 0x8017c540, 0x8017c500, 0x8017ca38 }, 0x58|2, 0x58|3 }, + {{ 0x8017c638, 0x8017c598, 0x8017c558, 0x80102bd8 }, 0x4|3, 0x4|3 }, + {{ 0x8017c63c, 0x8017c59c, 0x8017c55c, 0x8017ca94 }, 0x14c|2, 0x14c|3 }, + {{ 0x8017c788, 0x8017c6e8, 0x8017c6a8, 0x8017c910 }, 0x8|2, 0x8|3 }, + {{ 0x8017c790, 0x8017c6f0, 0x8017c6b0, 0x8017cbe8 }, 0xb8|2, 0xb8|3 }, + {{ 0x8017c848, 0x8017c7a8, 0x8017c768, 0x80102bd8 }, 0x4|3, 0x4|3 }, + {{ 0x8017c84c, 0x8017c7ac, 0x8017c76c, 0x8017cca4 }, 0x5c|2, 0x5c|3 }, + {{ 0x8017c8a8, 0x8017c808, 0x8017c7c8, 0x80102bd8 }, 0x4|3, 0x4|3 }, + {{ 0x8017c8ac, 0x8017c80c, 0x8017c7cc, 0x8017cd04 }, 0x58|2, 0x58|3 }, + {{ 0x8017c904, 0x8017c864, 0x8017c824, 0x80102bd8 }, 0x4|3, 0x4|3 }, + {{ 0x8017c908, 0x8017c868, 0x8017c828, 0x8017cd60 }, 0x14c|2, 0x14c|3 }, + {{ 0x8017ca54, 0x8017c9b4, 0x8017c974, 0x8017c910 }, 0x8|2, 0x8|3 }, + {{ 0x8017ca5c, 0x8017c9bc, 0x8017c97c, 0x8017ceb4 }, 0x750|2, 0x750|3 }, + {{ 0x8017d1ac, 0x8017d10c, 0x8017d0cc, 0x801f5920 }, 0x4|3, 0x4|3 }, + {{ 0x8017d1b0, 0x8017d110, 0x8017d0d0, 0x8017d608 }, 0x1c|2, 0x1c|3 }, + {{ 0x8017d1cc, 0x8017d12c, 0x8017d0ec, 0x801fa410 }, 0x4|3, 0x4|3 }, + {{ 0x8017d1d0, 0x8017d130, 0x8017d0f0, 0x8009844c }, 0x4|3, 0x4|3 }, + {{ 0x8017d1d4, 0x8017d134, 0x8017d0f4, 0x8017d62c }, 0xa58|2, 0xa58|3 }, + {{ 0x8017dc2c, 0x8017db8c, 0x8017db4c, 0x80089d3c }, 0x8|2, 0x8|3 }, + {{ 0x8017dc34, 0x8017db94, 0x8017db54, 0x8017e08c }, 0x4a4|2, 0x4a4|3 }, + {{ 0x8017e0d8, 0x8017e038, 0x8017dff8, 0x800f3a18 }, 0x4|3, 0x4|3 }, + {{ 0x8017e0dc, 0x8017e03c, 0x8017dffc, 0x8017e534 }, 0x4|3, 0x4|3 }, + {{ 0x8017e0e0, 0x8017e040, 0x8017e000, 0x80102bd8 }, 0x4|3, 0x4|3 }, + {{ 0x8017e0e4, 0x8017e044, 0x8017e004, 0x8017e53c }, 0xe8|2, 0xe8|3 }, + {{ 0x8017e1cc, 0x8017e12c, 0x8017e0ec, 0x80186414 }, 0x4|3, 0x4|3 }, + {{ 0x8017e1d0, 0x8017e130, 0x8017e0f0, 0x8017e628 }, 0x4c|2, 0x4c|3 }, + {{ 0x8017e21c, 0x8017e17c, 0x8017e13c, 0x80186414 }, 0x4|3, 0x4|3 }, + {{ 0x8017e220, 0x8017e180, 0x8017e140, 0x8017e678 }, 0x80|2, 0x80|3 }, + {{ 0x8017e2a0, 0x8017e200, 0x8017e1c0, 0x80186414 }, 0x4|3, 0x4|3 }, + {{ 0x8017e2a4, 0x8017e204, 0x8017e1c4, 0x8017e6fc }, 0x100|2, 0x100|3 }, + {{ 0x8017e3a4, 0x8017e304, 0x8017e2c4, 0x80102bd8 }, 0x4|3, 0x4|3 }, + {{ 0x8017e3a8, 0x8017e308, 0x8017e2c8, 0x8017e800 }, 0x140|2, 0x140|3 }, + {{ 0x8017e4e8, 0x8017e448, 0x8017e408, 0x80186414 }, 0x4|3, 0x4|3 }, + {{ 0x8017e4ec, 0x8017e44c, 0x8017e40c, 0x8017e944 }, 0x80|2, 0x80|3 }, + {{ 0x8017e56c, 0x8017e4cc, 0x8017e48c, 0x80186414 }, 0x4|3, 0x4|3 }, + {{ 0x8017e570, 0x8017e4d0, 0x8017e490, 0x8017e9c8 }, 0x650|2, 0x650|3 }, + {{ 0x8017ebc0, 0x8017eb20, 0x8017eae0, 0x801a4be8 }, 0x4|3, 0x4|3 }, + {{ 0x8017ebc4, 0x8017eb24, 0x8017eae4, 0x8017f01c }, 0xec|2, 0xec|3 }, + {{ 0x8017ecb4, 0x8017ec14, 0x8017ebd4, 0x8017eff4 }, 0x8|2, 0x8|3 }, + {{ 0x8017ece8, 0x8017ec48, 0x8017ec08, 0x8017f190 }, 0x33c|2, 0x33c|3 }, + {{ 0x8017f05c, 0x8017efbc, 0x8017ef7c, 0x801fade4 }, 0x4|3, 0x4|3 }, + {{ 0x8017f068, 0x8017efc8, 0x8017ef88, 0x8017f510 }, 0x4|3, 0x4|3 }, + {{ 0x8017f06c, 0x8017efcc, 0x8017ef8c, 0x80096e38 }, 0x4|3, 0x4|3 }, + {{ 0x8017f080, 0x8017efe0, 0x8017efa0, 0x8013cd50 }, 0x4|3, 0x4|3 }, + {{ 0x8017f084, 0x8017efe4, 0x8017efa4, 0x8017f52c }, 0x4|3, 0x4|3 }, + {{ 0x8017f0a4, 0x8017f004, 0x8017efc4, 0x80096e38 }, 0x4|3, 0x4|3 }, + {{ 0x8017f0cc, 0x8017f02c, 0x8017efec, 0x8017f574 }, 0x4|3, 0x4|3 }, + {{ 0x8017f0e8, 0x8017f048, 0x8017f008, 0x8017f5ac }, 0x150|2, 0x150|3 }, + {{ 0x8017f238, 0x8017f198, 0x8017f158, 0x8008f338 }, 0x8|2, 0x8|3 }, + {{ 0x8017f240, 0x8017f1a0, 0x8017f160, 0x8017f704 }, 0xe0|2, 0xe0|3 }, + {{ 0x8017f320, 0x8017f280, 0x8017f240, 0x802420dc }, 0x4|3, 0x4|3 }, + {{ 0x8017f324, 0x8017f284, 0x8017f244, 0x8017f7e8 }, 0x64|2, 0x64|3 }, + {{ 0x8017f388, 0x8017f2e8, 0x8017f2a8, 0x802421f4 }, 0x4|3, 0x4|3 }, + {{ 0x8017f38c, 0x8017f2ec, 0x8017f2ac, 0x8017f850 }, 0xac|2, 0xac|3 }, + {{ 0x8017f438, 0x8017f398, 0x8017f358, 0x8017f830 }, 0x8|2, 0x8|3 }, + {{ 0x8017f440, 0x8017f3a0, 0x8017f360, 0x8017f904 }, 0x64|2, 0x64|3 }, + {{ 0x8017f4ac, 0x8017f40c, 0x8017f3cc, 0x8014a090 }, 0xc|2, 0xc|3 }, + {{ 0x8017f4b8, 0x8017f418, 0x8017f3d8, 0x801778fc }, 0x1b4|2, 0x1b4|3 }, + {{ 0x8017f670, 0x8017f5d0, 0x8017f590, 0x8017f9cc }, 0x14170|1, 0x14170|1 }, + {{ 0x801937e0, 0x80193740, 0x80193700, 0x80193b3c }, 0x4|0, 0x118|1 }, + {{ 0x801938f8, 0x80193858, 0x80193818, 0x80193c54 }, 0x4|0, 0xce8|1 }, + {{ 0x801945e0, 0x80194540, 0x80194500, 0x8019493c }, 0x4|0, 0xd07c|1 }, + {{ 0x801a165c, 0x801a15bc, 0x801a157c, 0x801a19b8 }, 0x4|0, 0xf74|1 }, + {{ 0x801a25d0, 0x801a2530, 0x801a24f0, 0x801a292c }, 0x4|0, 0xbf0|1 }, + {{ 0x801a31d0, 0x801a3130, 0x801a30f0, 0x801a352c }, 0x1cf4|1, 0x1cf4|1 }, + {{ 0x801a4ec4, 0x801a4e24, 0x801a4de4, 0x801a5220 }, 0x4|0, 0xaf0|1 }, + {{ 0x801a59e0, 0x802070d4, 0x801a5900, 0x801a5d3c }, 0x4|3, 0x4|3 }, + {{ 0x801a59e8, 0x801a5948, 0x801a5908, 0x801a5d44 }, 0x368|2, 0x368|3 }, + {{ 0x801a5d7c, 0x802070d4, 0x801a5c9c, 0x801a60d8 }, 0x4|3, 0x4|3 }, + {{ 0x801a5d84, 0x801a5ce4, 0x801a5ca4, 0x801a60e0 }, 0x3bc|2, 0x3bc|3 }, + {{ 0x801a6164, 0x802070d4, 0x801a6084, 0x801a64c0 }, 0x4|3, 0x4|3 }, + {{ 0x801a616c, 0x801a60cc, 0x801a608c, 0x801a64c8 }, 0x264|2, 0x264|3 }, + {{ 0x801a63fc, 0x802070d4, 0x801a631c, 0x801a6758 }, 0x4|3, 0x4|3 }, + {{ 0x801a6404, 0x801a6364, 0x801a6324, 0x801a6760 }, 0x104|2, 0x104|3 }, + {{ 0x801a6534, 0x802070d4, 0x801a6454, 0x801a6890 }, 0x4|3, 0x4|3 }, + {{ 0x801a653c, 0x801a649c, 0x801a645c, 0x801a6898 }, 0x70|1, 0x70|1 }, + {{ 0x801a65ac, 0x801a650c, 0x801a64cc, 0x801a6908 }, 0x4|0, 0x28|1 }, + {{ 0x801a65d4, 0x801a6534, 0x801a64f4, 0x801a6930 }, 0x4|0, 0x16ec|1 }, + {{ 0x801a7cd4, 0x801a7c34, 0x801a7bf4, 0x801a8030 }, 0x2d9c|2, 0x2d9c|3 }, + {{ 0x801aaa70, 0x801aa2d8, 0x801aa990, 0x801aa6d4 }, 0xc|2, 0xc|3 }, + {{ 0x801aaa94, 0x8014149c, 0x801aa9b4, 0x801415b4 }, 0xc|2, 0xc|3 }, + {{ 0x801aaaa4, 0x801aaa04, 0x801aa9c4, 0x801aae00 }, 0x2b8|1, 0x2b8|1 }, + {{ 0x801aad5c, 0x801aacbc, 0x801aac7c, 0x801ab0b8 }, 0x4|0, 0x7000|1 }, + {{ 0x801b1d5c, 0x801b1dd4, 0x801b1c7c, 0x801b21d0 }, 0x4|3, 0x4|3 }, + {{ 0x801b1d60, 0x801b1c48, 0x801b1c80, 0x801b2044 }, 0xc|2, 0xc|3 }, + {{ 0x801b1d6c, 0x801b1ccc, 0x801b1c8c, 0x801b20c8 }, 0x6b8|1, 0x6b8|1 }, + {{ 0x801b2424, 0x801b2384, 0x801b2344, 0x801b2780 }, 0x4|0, 0x3c|1 }, + {{ 0x801b2460, 0x801b23c0, 0x801b2380, 0x801b27bc }, 0x4|0, 0x758c|1 }, + {{ 0x801b99ec, 0x801b994c, 0x801b990c, 0x801b9d48 }, 0x4|0, 0x1114|1 }, + {{ 0x801bab00, 0x801aa9e0, 0x801baa20, 0x801aaddc }, 0x8|2, 0x8|3 }, + {{ 0x801bab08, 0x801baa68, 0x801baa28, 0x801bae64 }, 0x4|0, 0x4|0 }, + {{ 0x801bab20, 0x8015bc4c, 0x801baa40, 0x8015bd64 }, 0x4|3, 0x4|3 }, + {{ 0x801bab24, 0x801baa84, 0x801baa44, 0x801bae80 }, 0x11464|2, 0x11464|3 }, + {{ 0x801cbf88, 0x80233680, 0x80233924, 0x80233d78 }, 0x4|3, 0x4|3 }, + {{ 0x801cbf8c, 0x801cbeec, 0x801cbeac, 0x801cc2e8 }, 0x5668|1, 0x5668|1 }, + {{ 0x801d15f4, 0x801d1554, 0x801d1514, 0x801d1950 }, 0x4|0, 0x200|1 }, + {{ 0x801d17f4, 0x801d1754, 0x801d1714, 0x801d1b50 }, 0x4|0, 0x4ac|1 }, + {{ 0x801d1ca0, 0x801d1c00, 0x801d1bc0, 0x801d1ffc }, 0x4|0, 0x854|1 }, + {{ 0x801d24f4, 0x801d2454, 0x801d2414, 0x801d2850 }, 0x4|0, 0x50|1 }, + {{ 0x801d2544, 0x801d24a4, 0x801d2464, 0x801d28a0 }, 0x4|0, 0xb4|1 }, + {{ 0x801d25f8, 0x801d2558, 0x801d2518, 0x801d2954 }, 0x4|0, 0x2904|1 }, + {{ 0x801d4efc, 0x801d4e5c, 0x801d4e1c, 0x801d5258 }, 0x4|0, 0x14|1 }, + {{ 0x801d4f10, 0x801d4e70, 0x801d4e30, 0x801d526c }, 0x4|0, 0x3e20|1 }, + {{ 0x801d8d30, 0x801d8c90, 0x801d8c50, 0x801d908c }, 0x4|0, 0x2c8|1 }, + {{ 0x801d8ff8, 0x801d8f58, 0x801d8f18, 0x801d9354 }, 0x4|0, 0xdc|1 }, + {{ 0x801d90d4, 0x801d9034, 0x801d8ff4, 0x801d9430 }, 0x4|0, 0xc4|1 }, + {{ 0x801d9198, 0x801d90f8, 0x801d90b8, 0x801d94f4 }, 0x4|0, 0xc4|1 }, + {{ 0x801d925c, 0x801d91bc, 0x801d917c, 0x801d95b8 }, 0x4|0, 0x1e8|1 }, + {{ 0x801d9444, 0x801d93a4, 0x801d9364, 0x801d97a0 }, 0x4|0, 0x638|1 }, + {{ 0x801d9a7c, 0x801d99dc, 0x801d999c, 0x801d9dd8 }, 0x4|0, 0x418|1 }, + {{ 0x801d9e94, 0x801d9df4, 0x801d9db4, 0x801da1f0 }, 0x4|0, 0x84|1 }, + {{ 0x801d9f18, 0x801d9e78, 0x801d9e38, 0x801da274 }, 0x4|0, 0xe4d8|1 }, + {{ 0x801e83f8, 0x801e8358, 0x801e8318, 0x801e8820 }, 0x3ac8|1, 0x3ac8|1 }, + {{ 0x801ebec0, 0x801ebe20, 0x801ebde0, 0x801ec2e8 }, 0x4|0, 0x2c4|1 }, + {{ 0x801ec184, 0x801ec0e4, 0x801ec0a4, 0x801ec5ac }, 0x4|0, 0xe70|1 }, + {{ 0x801ecff4, 0x801ecf54, 0x801ecf14, 0x801ed41c }, 0x4|0, 0x27c|1 }, + {{ 0x801ed270, 0x801ed1d0, 0x801ed190, 0x801ed698 }, 0x4|0, 0x734|1 }, + {{ 0x801ed9a4, 0x801ed904, 0x801ed8c4, 0x801eddcc }, 0x4|0, 0x2b8|1 }, + {{ 0x801edc5c, 0x801edbbc, 0x801edb7c, 0x801ee084 }, 0x4|0, 0x1314|1 }, + {{ 0x801eef70, 0x801eeed0, 0x801eee90, 0x801ef398 }, 0x4|0, 0x16c|1 }, + {{ 0x801ef0dc, 0x801ef03c, 0x801eeffc, 0x801ef504 }, 0x4|0, 0x148|1 }, + {{ 0x801ef224, 0x801ef184, 0x801ef144, 0x801ef64c }, 0x4|0, 0x20ad8|1 }, + {{ 0x8020fd14, 0x8020fc74, 0x8020fc34, 0x8023eab8 }, 0x4|3, 0x4|3 }, + {{ 0x8020fd18, 0x8020fc78, 0x8020fc38, 0x80210138 }, 0x50|2, 0x50|3 }, + {{ 0x8020fdbc, 0x8020fd1c, 0x8020fcdc, 0x8011bc98 }, 0x4|3, 0x4|3 }, + {{ 0x8020fde4, 0x8020fd44, 0x8020fd04, 0x80238838 }, 0xc|2, 0xc|3 }, + {{ 0x8020fe10, 0x8020fd70, 0x8020fd30, 0x80210198 }, 0x264|2, 0x264|3 }, + {{ 0x80210074, 0x8020ffd4, 0x8020ff94, 0x801565d8 }, 0x18|2, 0x18|3 }, + {{ 0x802100a0, 0x80210000, 0x8020ffc0, 0x80210414 }, 0x12448|1, 0x12448|1 }, + {{ 0x802224e8, 0x80222448, 0x80222408, 0x8022285c }, 0x4|0, 0x3a24|1 }, + {{ 0x80225f14, 0x80243f18, 0x80225e34, 0x80226288 }, 0x2dc|2, 0x2dc|3 }, + {{ 0x802261f8, 0x80225e74, 0x80226118, 0x8022656c }, 0x2ec|1, 0x2ec|1 }, + {{ 0x802264e4, 0x80226160, 0x80226404, 0x80226858 }, 0x4|0, 0x3330|1 }, + {{ 0x80229814, 0x80229490, 0x80229734, 0x80229b88 }, 0x4|0, 0x370|1 }, + {{ 0x80229b84, 0x80229800, 0x80229aa4, 0x80229ef8 }, 0x4|0, 0x248|1 }, + {{ 0x80229dcc, 0x80229a48, 0x80229cec, 0x8022a140 }, 0x4|0, 0x164fc|1 }, + {{ 0x802402dc, 0x802441f8, 0x802401fc, 0x80240650 }, 0xb30|2, 0xb30|3 }, + {{ 0x80240e14, 0x8023ff58, 0x80240d34, 0x80241188 }, 0x1e04|1, 0x1e04|1 }, + {{ 0x80242c18, 0x80241d5c, 0x80242b38, 0x80242f8c }, 0x4|0, 0x2148|1 }, + {{ 0x80244dd4, 0x80244d34, 0x80244cf4, 0x80245154 }, 0xec|0, 0xec|0 }, + {{ 0x80244fd0, 0x80244f50, 0x80244ef0, 0x80245380 }, 0x58|2, 0x58|3 }, + {{ 0x8024503c, 0x80244fbc, 0x80244f5c, 0x8024542c }, 0x4|3, 0x4|3 }, + {{ 0x80245040, 0x80244fc0, 0x80244f60, 0x802453bc }, 0x4|3, 0x4|3 }, + {{ 0x80245044, 0x80244fc4, 0x80244f64, 0x802453f4 }, 0x48|2, 0x6c|3 }, + {{ 0x802450b0, 0x80245030, 0x80244fd0, 0x80245460 }, 0x4|3, 0x4|3 }, + {{ 0x80245448, 0x80245138, 0x80244fd0, 0x80245460 }, 0x4|3, 0x4|3 }, + {{ 0x80245580, 0x80245258, 0x80244fd0, 0x80245460 }, 0x4|3, 0x4|3 }, + {{ 0x802456b4, 0x8024539c, 0x80245064, 0x80245504 }, 0x2ac|2, 0x2c8|3 }, + {{ 0x8024597c, 0x80245664, 0x8024532c, 0x802457cc }, 0x8|3, 0x8|3 }, + {{ 0x80245a18, 0x80245700, 0x802453c8, 0x802457f8 }, 0x3c8|2, 0x3c8|3 }, + {{ 0x80245de0, 0x80245aa0, 0x80245768, 0x80245b98 }, 0x8|2, 0x8|3 }, + {{ 0x80245de8, 0x80245ad0, 0x80245798, 0x80245bc8 }, 0x1a8|2, 0x1a8|3 }, + {{ 0x80246028, 0x80245d10, 0x802459d8, 0x80245e00 }, 0x6dc4|2, 0x6dc4|3 }, + {{ 0x8024cdec, 0x8024cad4, 0x8024c79c, 0x80248ce0 }, 0x4|3, 0x4|3 }, + {{ 0x8024cdf0, 0x8024cad8, 0x8024c7a0, 0x8024cbc8 }, 0x598c|2, 0x598c|3 }, + {{ 0x8025278c, 0x80252474, 0x8025213c, 0x8025255c }, 0x328|2, 0x328|3 }, + {{ 0x80252ab8, 0x802527a0, 0x80252468, 0x80252890 }, 0x498c|2, 0x498c|3 }, + {{ 0x80257480, 0x80257160, 0x80256e20, 0x80257240 }, 0x10ec|2, 0x1100|3 }, + {{ 0x80258580, 0x80258260, 0x80257f20, 0x80258340 }, 0x4|3, 0x4|3 }, + {{ 0x80258584, 0x80258264, 0x80257f24, 0x8025834c }, 0xd8|2, 0xd8|3 }, + {{ 0x80258698, 0x80258378, 0x80258038, 0x80258478 }, 0x1c|2, 0x38|3 }, + {{ 0x802586d0, 0x802583b0, 0x80258070, 0x802584b0 }, 0x4|3, 0x4|3 }, + {{ 0x80270860, 0x8026c520, 0x80270200, 0x8025e628 }, 0x448|2, 0x458|3 }, + {{ 0x80270cb8, 0x8026c978, 0x80270658, 0x8025ea80 }, 0x1c|3, 0x1c|3 }, + {{ 0x80270cd8, 0x8026c998, 0x80270678, 0x8025eac8 }, 0x70|2, 0xa0|3 }, + {{ 0x80270d78, 0x8026ca38, 0x80270718, 0x8025eb68 }, 0x18c4|3, 0x18c4|3 }, + {{ 0x8027263c, 0x8026e2fc, 0x80271fdc, 0x8026274c }, 0x4|3, 0x4|3 }, + {{ 0x80272650, 0x8026e310, 0x80271ff0, 0x80260440 }, 0x24|3, 0x24|3 }, + {{ 0x8027269c, 0x8026e35c, 0x8027203c, 0x8026047c }, 0x904|2, 0x904|3 }, + {{ 0x80272fa0, 0x8026ec64, 0x80272940, 0x80260d80 }, 0x4|3, 0x4|3 }, + {{ 0x80272fa4, 0x8026ec64, 0x80272944, 0x80260d84 }, 0x1520|2, 0x1520|3 }, + {{ 0x802744c4, 0x80270184, 0x80273e64, 0x80262270 }, 0x4|3, 0x4|3 }, + {{ 0x802744c8, 0x80270188, 0x80273e68, 0x802622a8 }, 0x32c|2, 0x32c|3 }, + {{ 0x802747f4, 0x802704b4, 0x80274194, 0x80262270 }, 0x4|3, 0x4|3 }, + {{ 0x802747f8, 0x802704b8, 0x80274198, 0x802625d8 }, 0x458|2, 0x458|3 }, + {{ 0x80274c50, 0x80270910, 0x802745f8, 0x80262a30 }, 0x4|3, 0x4|3 }, + {{ 0x80274c54, 0x80270914, 0x802745f4, 0x80262a34 }, 0x108|2, 0x108|3 }, + {{ 0x80274d5c, 0x80270a1c, 0x802746fc, 0x80262270 }, 0x4|3, 0x4|3 }, + {{ 0x80274d60, 0x80270a20, 0x80274700, 0x80262b40 }, 0x12f4|1, 0x12f4|1 }, + {{ 0x80276054, 0x80271d14, 0x802759f4, 0x80263e34 }, 0x4|0, 0x3d04|1 }, + {{ 0x80279d58, 0x80275a18, 0x802796f8, 0x80267b38 }, 0x4|0, 0xcc|1 }, + {{ 0x80279e28, 0x80275ae8, 0x802797c8, 0x80267cdc }, 0x5c|2, 0x5c|3 }, + {{ 0x80279e8c, 0x80275b4c, 0x8027982c, 0x80268a8c }, 0xc|2, 0xc|3 }, + {{ 0x80279ea0, 0x80275b60, 0x80279840, 0x80267d50 }, 0x5d4|1, 0x5d4|1 }, + {{ 0x8027a474, 0x80276134, 0x80279e14, 0x80268324 }, 0x4|0, 0x34|1 }, + {{ 0x8027a4a8, 0x80276168, 0x80279e48, 0x80268358 }, 0x4|0, 0x8b0|1 }, + {{ 0x8027ad58, 0x80276a18, 0x8027a6f8, 0x80268c08 }, 0x4|0, 0x778|1 }, + {{ 0x8027b4d0, 0x80277190, 0x8027ae70, 0x80269380 }, 0x4|0, 0xa18|1 }, + {{ 0x8027bee8, 0x80277ba8, 0x8027b888, 0x80269d98 }, 0x4|0, 0x598|1 }, + {{ 0x8027d080, 0x80278d40, 0x8027ca20, 0x8026af30 }, 0x4|1, 0x4|1 }, + {{ 0x8027d084, 0x80278d44, 0x8027ca24, 0x8026af34 }, 0x4|0, 0x280|1 }, + {{ 0x8027d4a0, 0x80279160, 0x8027ce40, 0x8026b350 }, 0x800|1, 0x800|1 }, + {{ 0x8027dca0, 0x80279960, 0x8027d640, 0x8026bb50 }, 0x4|0, 0x1c|1 }, + {{ 0x8027dcbc, 0x8027997c, 0x8027d65c, 0x8026bb6c }, 0x4|0, 0x1c|1 }, + {{ 0x8027dcd8, 0x80279998, 0x8027d678, 0x8026bb88 }, 0x4|0, 0x150|1 }, + {{ 0x8027de28, 0x80279ae8, 0x8027d7c8, 0x8026bcd8 }, 0x4|0, 0x8c|1 }, + {{ 0x8027deb4, 0x80279b74, 0x8027d854, 0x8026bd64 }, 0x4|0, 0x1ec|1 }, + {{ 0x8027e0a0, 0x80279d60, 0x8027da40, 0x8026bf50 }, 0x4|0, 0x7ac|1 }, + {{ 0x8027e860, 0x8027a520, 0x8027e200, 0x8026c700 }, 0x9b38|2, 0x9b38|3 }, + {{ 0x802883b8, 0x80284078, 0x80287d58, 0x80262850 }, 0x4|3, 0x4|3 }, + {{ 0x802883bc, 0x8028407c, 0x80287d5c, 0x80277cb4 }, 0x4|3, 0x4|3 }, + {{ 0x802883c0, 0x80284080, 0x80287d60, 0x80276260 }, 0x808|2, 0x808|3 }, + {{ 0x80288c38, 0x802848f8, 0x802885d8, 0x80276c28 }, 0x1108|2, 0x1108|3 }, + {{ 0x80289d50, 0x80285a10, 0x802896f0, 0x80277d30 }, 0xaf8|2, 0xb10|3 }, + {{ 0x8028a860, 0x80286520, 0x8028a200, 0x80278840 }, 0x4|3, 0x4|3 }, + {{ 0x8028a868, 0x80286528, 0x8028a208, 0x80278858 }, 0x70|2, 0x88|3 }, + {{ 0x8028a8f0, 0x802865b0, 0x8028a290, 0x802788e0 }, 0x4|3, 0x4|3 }, + {{ 0x8028a8f8, 0x802865b8, 0x8028a298, 0x802788ec }, 0x4c|2, 0x4c|3 }, + {{ 0x8028a944, 0x80286604, 0x8028a2e4, 0x80278824 }, 0x4|3, 0x4|3 }, + {{ 0x8028a950, 0x80286610, 0x8028a2f0, 0x80278940 }, 0x458|2, 0x458|3 }, + {{ 0x8028ada8, 0x80286a68, 0x8028a748, 0x80290568 }, 0x14|2, 0x14|3 }, + {{ 0x8028adbc, 0x80286a7c, 0x8028a75c, 0x8027624c }, 0x4|3, 0x4|3 }, + {{ 0x8028adcc, 0x80286a8c, 0x8028a76c, 0x80275f34 }, 0x4|3, 0x4|3 }, + {{ 0x8028add0, 0x80286a90, 0x8028a770, 0x80278dc0 }, 0x12c8|2, 0x1338|3 }, + {{ 0x8028c108, 0x80287dc8, 0x8028baa8, 0x8027a0f8 }, 0x2910|3, 0x2910|3 }, + {{ 0x8028ea20, 0x8028a6e0, 0x8028e3c0, 0x8027ca20 }, 0x48|2, 0x78|3 }, + {{ 0x8028ea98, 0x8028a758, 0x8028e438, 0x8027ca98 }, 0x11d8|3, 0x11d8|3 }, + {{ 0x8028fc70, 0x8028fc70, 0x8028f610, 0x8027dc70 }, 0x4|3, 0x4|3 }, + {{ 0x8028fc74, 0x8028b934, 0x8028f614, 0x8027dc74 }, 0xd074|2, 0xd098|3 }, + {{ 0x8029cd0c, 0x802989cc, 0x8029c6ac, 0x8028ad0c }, 0x1f4|3, 0x1f4|3 }, + {{ 0x8029cf04, 0x80298bc4, 0x8029c8a4, 0x8028af0c }, 0x48|2, 0x48|3 }, + {{ 0x8029cf54, 0x80298c38, 0x8029c918, 0x8028af5c }, 0x4|3, 0x4|3 }, + {{ 0x8029cf68, 0x80298c28, 0x8029c908, 0x8028af70 }, 0x4504|1, 0x4504|1 }, + {{ 0x802a146c, 0x8029d12c, 0x802a0e0c, 0x8028f474 }, 0x4|0, 0x1200|1 }, + {{ 0x802a2680, 0x8029e340, 0x802a2020, 0x80290688 }, 0x4|3, 0x4|3 }, + {{ 0x802a2694, 0x8029e354, 0x802a2034, 0x80290694 }, 0x8e0|2, 0x8e0|3 }, + {{ 0x802a2f78, 0x8029ea50, 0x802a2918, 0x80290f78 }, 0x10|2, 0x10|3 }, + {{ 0x802a2f88, 0x8029fcd8, 0x802a2928, 0x80290f88 }, 0x4|3, 0x4|3 }, + {{ 0x802a2f8c, 0x8029ea64, 0x802a292c, 0x80290f8c }, 0x4|3, 0x4|3 }, + {{ 0x802a2fb0, 0x8029ec48, 0x802a2950, 0x80290fb0 }, 0x102c|2, 0x1058|3 }, + {{ 0x802a4008, 0x8029fca0, 0x802a39a8, 0x80292008 }, 0x4|3, 0x4|3 }, + {{ 0x802a4080, 0x8029fd00, 0x802a3a00, 0x80292080 }, 0x58|2, 0x70|3 }, + {{ 0x802a40f0, 0x8029fd70, 0x802a3a70, 0x802920f0 }, 0x4fb74|0, 0x4fb74|0 }, + {{ 0x803457e0, 0x80341460, 0x80345160, 0x803337e0 }, 0x14e0|0, 0x14e0|0 }, + {{ 0x80350580, 0x8034c200, 0x8034ff00, 0x8033e580 }, 0x20|0, 0x20|0 }, + {{ 0x80384c00, 0x80380880, 0x80384580, 0x80372c00 }, 0xae0|0, 0xc04|1 }, + {{ 0x80385818, 0x80381498, 0x80385198, 0x80373818 }, 0xc4|2, 0xc4|3 }, + {{ 0x803858e0, 0x80381560, 0x80385260, 0x803738e8 }, 0x28|1, 0x28|1 }, + {{ 0x80385908, 0x80381588, 0x80385288, 0x80373910 }, 0x4|0, 0x374|1 }, + {{ 0x80385c94, 0x80381914, 0x80385614, 0x80373c9c }, 0x2c0|2, 0x2d0|3 }, + {{ 0x80385f64, 0x80381be4, 0x803858e4, 0x80373f6c }, 0x38|3, 0x38|3 }, + {{ 0x80385fbc, 0x80381b64, 0x8038593c, 0x80373eec }, 0x4|3, 0x4|3 }, + {{ 0x80385fc0, 0x80381c40, 0x80385940, 0x80373fe0 }, 0x28|2, 0x38|3 }, + {{ 0x80385ff8, 0x80381c78, 0x80385978, 0x80374018 }, 0x4|3, 0x4|3 }, + {{ 0x80386000, 0x80381c80, 0x80385980, 0x80374020 }, 0x4|0, 0xd4|1 }, + {{ 0x80386124, 0x80381da4, 0x80385aa4, 0x8037252c }, 0x4|3, 0x4|3 }, + {{ 0x80386128, 0x80381da8, 0x80385aa8, 0x80374148 }, 0x10|2, 0x10|3 }, + {{ 0x8038613c, 0x80382444, 0x80385abc, 0x803747e4 }, 0x4|3, 0x4|3 }, + {{ 0x80386160, 0x80381de0, 0x80385ae0, 0x80374180 }, 0x34|2, 0x58|3 }, + {{ 0x803861b8, 0x80381e38, 0x80385b38, 0x803741d8 }, 0x24|3, 0x24|3 }, + {{ 0x803861ec, 0x80381e6c, 0x80385b6c, 0x803741ac }, 0x8|2, 0x8|3 }, + {{ 0x80386204, 0x80381e84, 0x80385b84, 0x80374224 }, 0xc|2, 0x18|3 }, + {{ 0x8038621c, 0x80381e9c, 0x80385b9c, 0x8037423c }, 0xd4|1, 0xd4|1 }, + {{ 0x803862f0, 0x80381f70, 0x80385c70, 0x80374310 }, 0x4|0, 0x1c|1 }, + {{ 0x8038630c, 0x80381f8c, 0x80385c8c, 0x8037432c }, 0x4|0, 0x2c|1 }, + {{ 0x80386338, 0x80381fb8, 0x80385cb8, 0x80374358 }, 0x4|0, 0x20|1 }, + {{ 0x80386358, 0x80381fd8, 0x80385cd8, 0x80374378 }, 0x4|0, 0xac|1 }, + {{ 0x80386404, 0x80382084, 0x80385d84, 0x80374424 }, 0x1c|0, 0x1c|0 }, + {{ 0x80386448, 0x803820c8, 0x80385dc8, 0x80374468 }, 0x38|2, 0x5c|3 }, + {{ 0x803864a4, 0x80382124, 0x80385e24, 0x803744c4 }, 0x374|3, 0x374|3 }, + {{ 0x80386834, 0x80382c04, 0x803861b4, 0x80374854 }, 0x4|3, 0x4|3 }, + {{ 0x80386844, 0x803824c4, 0x803861c4, 0x80374864 }, 0x8|2, 0x2c|3 }, + {{ 0x80386870, 0x803824f0, 0x803861f0, 0x80374890 }, 0x16c|3, 0x16c|3 }, + {{ 0x803869e0, 0x80352a94, 0x80386360, 0x80374a00 }, 0x4|3, 0x4|3 }, + {{ 0x803869e4, 0x80382664, 0x80386364, 0x80374a04 }, 0x20|2, 0x80|3 }, + {{ 0x80386a64, 0x803826e4, 0x803863e4, 0x80374a84 }, 0xf0|3, 0xf0|3 }, + {{ 0x80386b58, 0x803827e8, 0x803864d8, 0x80374b88 }, 0x1c|2, 0x1c|3 }, + {{ 0x80386bac, 0x8038282c, 0x8038652c, 0x80374bcc }, 0x1c|2, 0x64|3 }, + {{ 0x80386c10, 0x80382890, 0x80386590, 0x80374c30 }, 0x10|3, 0x10|3 }, + {{ 0x80386c20, 0x803828a0, 0x803865a0, 0x80374e30 }, 0x4|3, 0x4|3 }, + {{ 0x80386c5c, 0x803828dc, 0x803865dc, 0x80374c7c }, 0x20|2, 0x20|3 }, + {{ 0x80386c80, 0x803823e8, 0x803860e8, 0x80374ca0 }, 0x8|2, 0x8|3 }, + {{ 0x80386ca8, 0x80382928, 0x80386628, 0x80374cc8 }, 0x8|2, 0xa4|3 }, + {{ 0x80386d4c, 0x803829cc, 0x803866cc, 0x80374d6c }, 0x128|3, 0x128|3 }, + {{ 0x80386e80, 0x80382b00, 0x80386800, 0x80348428 }, 0x4|3, 0x4|3 }, + {{ 0x80386e8c, 0x80382b0c, 0x8038680c, 0x80374eac }, 0x8|2, 0x14|3 }, + {{ 0x80386ea0, 0x80382b20, 0x80386820, 0x80374ec0 }, 0x88|3, 0x88|3 }, + {{ 0x80386f44, 0x80382bbc, 0x803868c4, 0x80374f64 }, 0x34|2, 0x34|3 }, + {{ 0x80386fa0, 0x80382c20, 0x80386920, 0x80374fc8 }, 0x24|2, 0x24|3 }, + {{ 0x80386fcc, 0x80382c4c, 0x8038694c, 0x80375e84 }, 0x4|3, 0x4|3 }, + {{ 0x80386fdc, 0x80382c5c, 0x8038695c, 0x8037500c }, 0x18|2, 0x30|3 }, + {{ 0x8038700c, 0x80382c8c, 0x8038698c, 0x8037503c }, 0x1b10|3, 0x1b10|3 }, + {{ 0x80388b34, 0x803847b4, 0x803884b4, 0x80376b54 }, 0x1b8|2, 0x1b8|3 }, + {{ 0x80388cf8, 0x80384970, 0x80388678, 0x80376d18 }, 0x3b4|2, 0x3b4|3 }, + {{ 0x803890ac, 0x80384d84, 0x80388a2c, 0x803770cc }, 0x20|2, 0x20|3 }, + {{ 0x803890d8, 0x80383338, 0x80388a58, 0x803770f8 }, 0xc|2, 0xc|3 }, + {{ 0x803890e4, 0x80384d2c, 0x80388a64, 0x80377104 }, 0x44|2, 0x44|3 }, + {{ 0x80389130, 0x80383260, 0x80388ab0, 0x80377150 }, 0x4|3, 0x4|3 }, + {{ 0x8038913c, 0x80384dbc, 0x80388abc, 0x8037715c }, 0x30|2, 0x30|3 }, + {{ 0x8038916c, 0x802d2190, 0x802d5e90, 0x802c4510 }, 0xc|2, 0xc|3 }, + {{ 0x80389178, 0x802a3094, 0x802a6d94, 0x80295414 }, 0x4|3, 0x4|3 }, + {{ 0x8038cc00, 0x80388880, 0x8038c580, 0x8037ac00 }, 0x4|0, 0x4|0 }, + {{ 0x80429454, 0x804250d4, 0x80428dd4, 0x80417474 }, 0x4|0, 0x4|0 }, + {{ 0x805102e0, 0x8050bf60, 0x8050fc60, 0x804fe300 }, 0x76c|3, 0x76c|3 }, + {{ 0x80510a88, 0x8054f704, 0x80510408, 0x804feaa8 }, 0xe8|2, 0xe8|3 }, + {{ 0x80510b70, 0x8050c6fc, 0x805104f0, 0x804feb90 }, 0x1c7c|1, 0x1c7c|1 }, + {{ 0x805127ec, 0x8050e378, 0x8051216c, 0x8050080c }, 0x8ec0|0, 0xb038|1 }, + {{ 0x8051d824, 0x805193b0, 0x8051d1a4, 0x8050b848 }, 0x1854|2, 0x1860|3 }, + {{ 0x8051f084, 0x8051ac10, 0x8051ea04, 0x8050d0a8 }, 0xb210|3, 0xb210|3 }, + {{ 0x8052a294, 0x80525e20, 0x80529c14, 0x805183b0 }, 0xa4|2, 0xa4|3 }, + {{ 0x8052a338, 0x80525ec4, 0x80529cb8, 0x80518390 }, 0x2f54|2, 0x2f54|3 }, + {{ 0x8052d294, 0x8054f7fc, 0x8052cc14, 0x8051b2ec }, 0x6b8|2, 0x6b8|3 }, + {{ 0x8052d94c, 0x805c4d48, 0x8052d2cc, 0x8051b9a4 }, 0x14|2, 0x14|3 }, + {{ 0x8052d968, 0x80528e20, 0x8052d2e8, 0x8051b9c0 }, 0x1040|1, 0x1040|1 }, + {{ 0x8052e9a8, 0x80529e60, 0x8052e328, 0x8051ca00 }, 0x72d4|0, 0xefc4|1 }, + {{ 0x8053d978, 0x8054fed0, 0x8053d2f8, 0x8052b9d0 }, 0x934|2, 0x934|3 }, + {{ 0x8053e2dc, 0x805830ac, 0x8053dc5c, 0x8052c334 }, 0x4|3, 0x4|3 }, + {{ 0x8053e36c, 0x80538e30, 0x8053dcec, 0x8052c3c4 }, 0x104c|1, 0x104c|1 }, + {{ 0x8053f3b8, 0x80539e7c, 0x8053ed38, 0x8052d410 }, 0xebd4|0, 0x1076c|1 }, + {{ 0x8054fb28, 0x805508c4, 0x8054f4a8, 0x8053db80 }, 0x398|1, 0x398|1 }, + {{ 0x8054fec0, 0x80550c5c, 0x8054f840, 0x8053df18 }, 0x1c|0, 0x674|1 }, + {{ 0x80550544, 0x8054a5ec, 0x8054fec4, 0x8053e59c }, 0x3240|2, 0x3240|3 }, + {{ 0x80553784, 0x805512e0, 0x80553104, 0x805417dc }, 0xa4|2, 0xa4|3 }, + {{ 0x8055382c, 0x805a8b50, 0x805531ac, 0x80541884 }, 0x1c|2, 0x1c|3 }, + {{ 0x80553850, 0x8054d830, 0x805531d0, 0x805418a8 }, 0x2e4|1, 0x2e4|1 }, + {{ 0x80553b34, 0x8054db14, 0x805534b4, 0x80541b8c }, 0x1a9c|0, 0x1bec|1 }, + {{ 0x8055572c, 0x805513ac, 0x805550ac, 0x80543784 }, 0xd3a4|1, 0xd3a4|1 }, + {{ 0x80562ad0, 0x8055e750, 0x80562450, 0x80550b28 }, 0x4|0, 0x804c|1 }, + {{ 0x8056ab68, 0x805ae0e4, 0x8056a4e8, 0x80558bc0 }, 0xab8|2, 0xab8|3 }, + {{ 0x8056b620, 0x80652b60, 0x8056afa0, 0x80559678 }, 0xc|2, 0xc|3 }, + {{ 0x8056b62c, 0x805d3b9c, 0x8056afac, 0x80559684 }, 0xc|2, 0xc|3 }, + {{ 0x8056b638, 0x805667e8, 0x8056afb8, 0x80559690 }, 0x623c|1, 0x623c|1 }, + {{ 0x80571874, 0x8056ca24, 0x805711f4, 0x8055f8cc }, 0x4|0, 0x2768|1 }, + {{ 0x8057402c, 0x805aebb4, 0x805739ac, 0x80562084 }, 0x1858|2, 0x1858|3 }, + {{ 0x80575890, 0x80583f3c, 0x80575210, 0x805638e8 }, 0x10|2, 0x10|3 }, + {{ 0x805758d4, 0x805b041c, 0x80575254, 0x8056392c }, 0x158|2, 0x158|3 }, + {{ 0x80575a30, 0x8056f1cc, 0x805753b0, 0x80563a88 }, 0x2b28|1, 0x2b28|1 }, + {{ 0x80578558, 0x80571cf4, 0x80577ed8, 0x805665b0 }, 0xa410|0, 0xb9b8|1 }, + {{ 0x80583f1c, 0x8057d6f8, 0x8058389c, 0x80571f74 }, 0x6bc|1, 0x6bc|1 }, + {{ 0x805845d8, 0x8057ddb4, 0x80583f58, 0x80572630 }, 0x105c4|0, 0x16f48|1 }, + {{ 0x8059b590, 0x805b0578, 0x8059af10, 0x805895e8 }, 0x34f8|2, 0x34f8|3 }, + {{ 0x8059ea98, 0x80594d74, 0x8059e418, 0x8058caf0 }, 0x1a98|2, 0x1a98|3 }, + {{ 0x805a054c, 0x805b3a88, 0x8059fecc, 0x8058e5a4 }, 0x3c|2, 0x3c|3 }, + {{ 0x805a05d0, 0x80588c78, 0x8059ff50, 0x8058e628 }, 0x40|2, 0x40|3 }, + {{ 0x805a068c, 0x805b3ac8, 0x805a000c, 0x8058e6e4 }, 0xde0|2, 0xde0|3 }, + {{ 0x805a147c, 0x805a0d1c, 0x805a0dfc, 0x8058f4d4 }, 0x8|2, 0x8|3 }, + {{ 0x805a1484, 0x805b48b0, 0x805a0e04, 0x8058f4dc }, 0x38c|2, 0x38c|3 }, + {{ 0x805a1860, 0x80596828, 0x805a11e0, 0x8058f8b8 }, 0x8660|2, 0x8660|3 }, + {{ 0x805a9ed8, 0x8059eea8, 0x805a9858, 0x80597f30 }, 0x1690|2, 0x1690|3 }, + {{ 0x805ab568, 0x805a05f8, 0x805aaee8, 0x805995c0 }, 0x70c|2, 0x70c|3 }, + {{ 0x805abc78, 0x8059fb9c, 0x805ab5f8, 0x80599cd0 }, 0x14|2, 0x14|3 }, + {{ 0x805abc8c, 0x805a0d24, 0x805ab60c, 0x80599ce4 }, 0x20fc|2, 0x20fc|3 }, + {{ 0x805add88, 0x805a2e60, 0x805ad708, 0x8059bde0 }, 0xb270|2, 0xb270|3 }, + {{ 0x805b9000, 0x805b4cdc, 0x805b8980, 0x805a7058 }, 0xc|2, 0xc|3 }, + {{ 0x805b900c, 0x805b4c8c, 0x805b898c, 0x805a7064 }, 0x2e8|2, 0x2e8|3 }, + {{ 0x805b92f8, 0x805a3800, 0x805b8c78, 0x805a7350 }, 0x8|2, 0x8|3 }, + {{ 0x805b9300, 0x8061f7f4, 0x805b8c80, 0x805a7358 }, 0x1820|2, 0x1820|3 }, + {{ 0x805bab28, 0x805ef59c, 0x805ba4a8, 0x805a8b80 }, 0xc|2, 0xc|3 }, + {{ 0x805bab34, 0x805ca844, 0x805ba4b4, 0x805a8b8c }, 0x8|2, 0x8|3 }, + {{ 0x805bab40, 0x805b4f80, 0x805ba4c0, 0x805a8b98 }, 0x750|2, 0x750|3 }, + {{ 0x805bb2b4, 0x80621030, 0x805bac34, 0x805a930c }, 0x1728|1, 0x1728|1 }, + {{ 0x805bc9dc, 0x80622758, 0x805bc35c, 0x805aaa34 }, 0x7f8|0, 0x8e4|1 }, + {{ 0x805bd2d4, 0x805b695c, 0x805bcc54, 0x805ab32c }, 0x4|3, 0x4|3 }, + {{ 0x805bd2e0, 0x80623050, 0x805bcc60, 0x805ab338 }, 0xb4|2, 0xb4|3 }, + {{ 0x805bd394, 0x805b56f0, 0x805bcd14, 0x805ab3ec }, 0x1268|2, 0x1268|3 }, + {{ 0x805be5fc, 0x805d9524, 0x805bdf7c, 0x805ac654 }, 0x4|3, 0x4|3 }, + {{ 0x805be600, 0x805b6968, 0x805bdf80, 0x805ac658 }, 0x58|2, 0x58|3 }, + {{ 0x805be658, 0x8058be40, 0x805bdfd8, 0x805ac6b0 }, 0x4|3, 0x4|3 }, + {{ 0x805be65c, 0x806284dc, 0x805bdfdc, 0x805ac6b4 }, 0x4|3, 0x4|3 }, + {{ 0x805be660, 0x80623100, 0x805bdfe0, 0x805ac6b8 }, 0x180|2, 0x180|3 }, + {{ 0x805be83c, 0x80623284, 0x805be1bc, 0x805ac894 }, 0x514|2, 0x514|3 }, + {{ 0x805bed6c, 0x806237a8, 0x805be6ec, 0x805acdc4 }, 0x548|2, 0x548|3 }, + {{ 0x805bf2b8, 0x80617818, 0x805bec38, 0x805ad310 }, 0x20|2, 0x20|3 }, + {{ 0x805bf2dc, 0x80623d14, 0x805bec5c, 0x805ad334 }, 0x8c|2, 0x8c|3 }, + {{ 0x805bf368, 0x80609184, 0x805bece8, 0x805ad3c0 }, 0x5c|2, 0x5c|3 }, + {{ 0x805bf3c4, 0x805b69c8, 0x805bed44, 0x805ad41c }, 0xa3c|2, 0xa3c|3 }, + {{ 0x805bfe14, 0x805b7424, 0x805bf794, 0x805ade6c }, 0x29c|2, 0x29c|3 }, + {{ 0x805c00b0, 0x805b7718, 0x805bfa30, 0x805ae108 }, 0x808|2, 0x808|3 }, + {{ 0x805c08d4, 0x805b7f3c, 0x805c0254, 0x805ae938 }, 0x124c|2, 0x124c|3 }, + {{ 0x805c1b24, 0x8062144c, 0x805c14a4, 0x805afb88 }, 0x8|2, 0x8|3 }, + {{ 0x805c1b34, 0x805b91a0, 0x805c14b4, 0x805afb98 }, 0x1aa4|2, 0x1aa4|3 }, + {{ 0x805c35e8, 0x8061c6b4, 0x805c2f68, 0x805b164c }, 0x4|3, 0x4|3 }, + {{ 0x805c35ec, 0x805ca844, 0x805c2f6c, 0x805b1650 }, 0x8|2, 0x8|3 }, + {{ 0x805c35f4, 0x80623e04, 0x805c2f74, 0x805b1658 }, 0x57c|2, 0x57c|3 }, + {{ 0x805c3b78, 0x80609198, 0x805c34f8, 0x805b1bdc }, 0x1c|2, 0x1c|3 }, + {{ 0x805c3bc8, 0x805bac60, 0x805c3548, 0x805b1c2c }, 0x7b8|1, 0x7b8|1 }, + {{ 0x805c4380, 0x805bb418, 0x805c3d00, 0x805b23e4 }, 0x4|0, 0x3bc|1 }, + {{ 0x805c4744, 0x8063be90, 0x805c40c4, 0x805b27a8 }, 0x1c|2, 0x1c|3 }, + {{ 0x805c4760, 0x806243d4, 0x805c40e0, 0x805b27c4 }, 0xff0|2, 0xff0|3 }, + {{ 0x805c5764, 0x8061e8a0, 0x805c50e4, 0x805b37c8 }, 0x34|2, 0x34|3 }, + {{ 0x805c5798, 0x805bb7e8, 0x805c5118, 0x805b37fc }, 0x55d0|2, 0x55d0|3 }, + {{ 0x805cad68, 0x805e27f8, 0x805ca6e8, 0x805b8dcc }, 0x3c|2, 0x3c|3 }, + {{ 0x805cada4, 0x806091b4, 0x805ca724, 0x805b8e08 }, 0x30|2, 0x30|3 }, + {{ 0x805cadd4, 0x8062541c, 0x805ca754, 0x805b8e38 }, 0x12b8|2, 0x12b8|3 }, + {{ 0x805cc098, 0x805a7444, 0x805b1cec, 0x805a03c4 }, 0x18|2, 0x18|3 }, + {{ 0x805cc0c0, 0x80576b5c, 0x8057cd40, 0x8056b418 }, 0xc|2, 0xc|3 }, + {{ 0x805cc0d8, 0x80626700, 0x805cba38, 0x805ba11c }, 0x14|2, 0x14|3 }, + {{ 0x805cc0f8, 0x8058e09c, 0x80594240, 0x80582918 }, 0xc|2, 0xc|3 }, + {{ 0x805cc14c, 0x8058e09c, 0x80594240, 0x80582918 }, 0xc|2, 0xc|3 }, + {{ 0x805cc184, 0x8053f5dc, 0x80544498, 0x80532b70 }, 0x4|3, 0x4|3 }, + {{ 0x805cc194, 0x8060aa04, 0x8063b490, 0x8062a13c }, 0x4|3, 0x4|3 }, + {{ 0x805cc198, 0x805b6468, 0x805bda8c, 0x805ac164 }, 0x4|3, 0x4|3 }, + {{ 0x805cc1b4, 0x80626758, 0x805cba90, 0x805ba174 }, 0x4c|2, 0x4c|3 }, + {{ 0x805cc204, 0x806267a8, 0x805cbae0, 0x805ba1b0 }, 0x8|2, 0x8|3 }, + {{ 0x805cc20c, 0x806267b0, 0x805cbae8, 0x805ba1cc }, 0x8|2, 0x14|3 }, + {{ 0x805cc220, 0x806267c4, 0x805cbafc, 0x805ba1e0 }, 0x1728|3, 0x1728|3 }, + {{ 0x805cd948, 0x805c0e28, 0x805cd224, 0x805bb908 }, 0x3b8|1, 0x3b8|1 }, + {{ 0x805cdd00, 0x805c11e0, 0x805cd5dc, 0x805bbcc0 }, 0x10c|0, 0xde0|1 }, + {{ 0x805ceae0, 0x805c1fc0, 0x805ce3bc, 0x805bcab0 }, 0x8|2, 0x8|3 }, + {{ 0x805ceafc, 0x805c1fdc, 0x805ce3d8, 0x805bcabc }, 0x5e8|2, 0x5e8|3 }, + {{ 0x805cf0ec, 0x805c25cc, 0x805ce9c8, 0x805bd0b0 }, 0xf0|2, 0xf0|3 }, + {{ 0x805cf1e0, 0x805c26c0, 0x805ceabc, 0x805bd1a8 }, 0x1b0|2, 0x1b0|3 }, + {{ 0x805cf390, 0x805c2870, 0x805cec6c, 0x805bd368 }, 0x78|2, 0x78|3 }, + {{ 0x805cf410, 0x805c28f0, 0x805cecec, 0x805eac80 }, 0x8|2, 0x8|3 }, + {{ 0x805cf468, 0x805c2948, 0x805ced44, 0x805bd410 }, 0x8|2, 0x8|3 }, + {{ 0x805cf47c, 0x805c295c, 0x805ced58, 0x805bd83c }, 0x20|2, 0x20|3 }, + {{ 0x805cf4e4, 0x805c29c4, 0x805cedc0, 0x805bd438 }, 0x340|2, 0x340|3 }, + {{ 0x805cf824, 0x805c2d04, 0x805cf100, 0x80605650 }, 0x8|2, 0x8|3 }, + {{ 0x805cf82c, 0x805c2d0c, 0x805cf108, 0x805bd788 }, 0x8|2, 0x8|3 }, + {{ 0x805cf840, 0x805c2d20, 0x805cf11c, 0x805bd7d4 }, 0x28|2, 0x28|3 }, + {{ 0x805cf878, 0x805c2d58, 0x805cf154, 0x805bd9fc }, 0x34|2, 0x40|3 }, + {{ 0x805cf8b8, 0x805c2d98, 0x805cf194, 0x805bda3c }, 0x814|3, 0x814|3 }, + {{ 0x805d00cc, 0x805c35ac, 0x805cf9a8, 0x8069e478 }, 0x4|3, 0x4|3 }, + {{ 0x805d00d4, 0x805c35b4, 0x805cf9b0, 0x805be258 }, 0xe8|2, 0xe8|3 }, + {{ 0x805d01c4, 0x805c36a4, 0x805cfaa0, 0x805be34c }, 0x1084|2, 0x1084|3 }, + {{ 0x805d124c, 0x805c472c, 0x805d0b28, 0x805d39dc }, 0x8|2, 0x8|3 }, + {{ 0x805d1258, 0x805c4738, 0x805d0b34, 0x805bf3f4 }, 0x4|3, 0x4|3 }, + {{ 0x805d125c, 0x805c473c, 0x805d0b38, 0x805bf3ec }, 0x4|3, 0x4|3 }, + {{ 0x805d1260, 0x805c4740, 0x805d0b3c, 0x805bf3fc }, 0x604|2, 0x604|3 }, + {{ 0x805d1874, 0x8064c778, 0x805d1150, 0x805bfa10 }, 0x10|2, 0x10|3 }, + {{ 0x805d1884, 0x80627eec, 0x805d1160, 0x805bfa20 }, 0x5c0|2, 0x5c0|3 }, + {{ 0x805d1e74, 0x8058be44, 0x805d1750, 0x805c0010 }, 0x4|3, 0x4|3 }, + {{ 0x805d1e80, 0x805c4d64, 0x805d175c, 0x805c001c }, 0xec4|1, 0xec4|1 }, + {{ 0x805d2d44, 0x805c5c28, 0x805d2620, 0x805c0ee0 }, 0x4|0, 0x522c|1 }, + {{ 0x805d7f70, 0x806284e4, 0x805d784c, 0x805c610c }, 0x4058|2, 0x4058|3 }, + {{ 0x805dc024, 0x8062c540, 0x805db900, 0x805ca1c0 }, 0xe10|1, 0xe10|1 }, + {{ 0x805dce34, 0x8062d350, 0x805dc710, 0x805cafd0 }, 0x4|0, 0x19e8|1 }, + {{ 0x805de820, 0x80624358, 0x805de0fc, 0x805cc9bc }, 0x8|2, 0x8|3 }, + {{ 0x805de83c, 0x8062ed4c, 0x805de118, 0x805cc9d8 }, 0x23f8|2, 0x23f8|3 }, + {{ 0x805e0c34, 0x805cae58, 0x805e0510, 0x805cedd0 }, 0x1260|1, 0x1260|1 }, + {{ 0x805e1e94, 0x805cc0b8, 0x805e1770, 0x805d0030 }, 0x2168|0, 0x4c70|1 }, + {{ 0x805e6b10, 0x805bf784, 0x805e63ec, 0x805d4cac }, 0x14|2, 0x14|3 }, + {{ 0x805e6b44, 0x8063113c, 0x805e6420, 0x805d4ce0 }, 0x8f8|2, 0x8f8|3 }, + {{ 0x805e7458, 0x805d0d6c, 0x805e6d34, 0x805d55f4 }, 0x3314|2, 0x3314|3 }, + {{ 0x805ea774, 0x8061f7e8, 0x805ea050, 0x805d8910 }, 0x4|3, 0x4|3 }, + {{ 0x805ea778, 0x80631a50, 0x805ea054, 0x805d8914 }, 0x435c|2, 0x435c|3 }, + {{ 0x805eeb38, 0x80635e10, 0x805ee414, 0x805dcf58 }, 0x1c|2, 0x1c|3 }, + {{ 0x805eeb58, 0x8052d930, 0x805ee434, 0x805dcf78 }, 0x4|3, 0x4|3 }, + {{ 0x805eeb64, 0x805d4090, 0x805ee440, 0x805dcf84 }, 0x5a0|1, 0x5a0|1 }, + {{ 0x805ef104, 0x805d4630, 0x805ee9e0, 0x805dd524 }, 0x2804|0, 0x3c10|1 }, + {{ 0x805f2d14, 0x8063fc3c, 0x805f25f0, 0x805e1134 }, 0x8|2, 0x8|3 }, + {{ 0x805f2d1c, 0x8060d52c, 0x805f25f8, 0x805e113c }, 0x4|3, 0x4|3 }, + {{ 0x805f2d20, 0x80635e3c, 0x805f25fc, 0x805e1140 }, 0x4a24|2, 0x4a24|3 }, + {{ 0x805f7744, 0x80639348, 0x805f5b08, 0x805e464c }, 0x18|2, 0x18|3 }, + {{ 0x805f775c, 0x8063934c, 0x805f5b0c, 0x805e4650 }, 0x14|2, 0x14|3 }, + {{ 0x805f7770, 0x8063934c, 0x805f5b0c, 0x805e4650 }, 0x14|2, 0x14|3 }, + {{ 0x805f7784, 0x8063934c, 0x805f5b0c, 0x805e4650 }, 0x14|2, 0x14|3 }, + {{ 0x805f7798, 0x8063a8b4, 0x805f7074, 0x805e5bb8 }, 0x1388|2, 0x1388|3 }, + {{ 0x805f8b24, 0x806e4bd4, 0x805f8400, 0x805e6f44 }, 0xc|2, 0xc|3 }, + {{ 0x805f8b30, 0x805d824c, 0x805f840c, 0x805e6f50 }, 0x180c|2, 0x180c|3 }, + {{ 0x805fa33c, 0x805d9a58, 0x805f97bc, 0x805e8300 }, 0x4|3, 0x4|3 }, + {{ 0x805fa340, 0x805d9a5c, 0x805f9c1c, 0x805e8760 }, 0x1270|2, 0x1270|3 }, + {{ 0x805fb5b0, 0x8061aa1c, 0x805fae8c, 0x805e99d0 }, 0x4|3, 0x4|3 }, + {{ 0x805fb5b8, 0x8063bc4c, 0x805fae94, 0x805e99d8 }, 0x244|2, 0x244|3 }, + {{ 0x805fb80c, 0x8058c0d4, 0x805fb0e8, 0x805e9c2c }, 0x8|2, 0x8|3 }, + {{ 0x805fb814, 0x805aebac, 0x805fb0f0, 0x805e9c34 }, 0x4|3, 0x4|3 }, + {{ 0x805fb81c, 0x805dacd4, 0x805fb0f8, 0x805e9c3c }, 0x1cf4|2, 0x1cf4|3 }, + {{ 0x805fd514, 0x8063beb0, 0x805fcdf0, 0x805eb934 }, 0x241c|2, 0x241c|3 }, + {{ 0x805ff930, 0x8063e2cc, 0x805bf164, 0x805edd50 }, 0x4|3, 0x4|3 }, + {{ 0x805ff934, 0x8063e2d0, 0x806b27bc, 0x805edd54 }, 0x4|3, 0x4|3 }, + {{ 0x805ff958, 0x8063e2f4, 0x8062f5a8, 0x805edd78 }, 0x4|3, 0x4|3 }, + {{ 0x805ff970, 0x8063e30c, 0x805ff230, 0x805edd90 }, 0x2d4|2, 0x2d4|3 }, + {{ 0x805ffc4c, 0x8063e5e8, 0x805da18c, 0x805ee06c }, 0x4|3, 0x4|3 }, + {{ 0x805ffc64, 0x8063e600, 0x805ff51c, 0x805ee084 }, 0xf0|2, 0xf0|3 }, + {{ 0x805ffd64, 0x8063e700, 0x805ff51c, 0x805ee184 }, 0x658|2, 0x658|3 }, + {{ 0x806003c8, 0x8063ed64, 0x8053cbc8, 0x805ee7e8 }, 0x8|2, 0x8|3 }, + {{ 0x806003d0, 0x8063ed6c, 0x8065415c, 0x805ee7f0 }, 0xc|2, 0xc|3 }, + {{ 0x806003fc, 0x8063ed98, 0x805dee38, 0x805ee81c }, 0x4|3, 0x4|3 }, + {{ 0x8060045c, 0x8063edf8, 0x805ff94c, 0x805ee87c }, 0x2c|2, 0x2c|3 }, + {{ 0x80600488, 0x8063ee24, 0x805ffc30, 0x805ee8a8 }, 0x174|2, 0x174|3 }, + {{ 0x8060063c, 0x8063efd8, 0x805ffdcc, 0x805eea5c }, 0x120|2, 0x120|3 }, + {{ 0x80600780, 0x8063f11c, 0x806dea44, 0x805eeba0 }, 0x4|3, 0x4|3 }, + {{ 0x8060078c, 0x8063f128, 0x805fff28, 0x805eebac }, 0x354|2, 0x354|3 }, + {{ 0x80600c40, 0x8063f5dc, 0x806d9d40, 0x805ef060 }, 0x4|3, 0x4|3 }, + {{ 0x80600c44, 0x8063f5e0, 0x805be608, 0x805ef064 }, 0x4|3, 0x4|3 }, + {{ 0x80600c68, 0x8063f604, 0x806003dc, 0x805ef088 }, 0xa8|1, 0xa8|1 }, + {{ 0x80600d10, 0x8063f6ac, 0x80600484, 0x805ef130 }, 0x6c|0, 0x59c|1 }, + {{ 0x806012ac, 0x805dc9cc, 0x80600a20, 0x805ef6cc }, 0x11b0|1, 0x11b0|1 }, + {{ 0x8060245c, 0x805ddb7c, 0x80601bd0, 0x805f087c }, 0x158|0, 0x6898|1 }, + {{ 0x80608d10, 0x805e443c, 0x80608484, 0x805f7130 }, 0x1290|1, 0x1290|1 }, + {{ 0x80609fa0, 0x805e56cc, 0x80609714, 0x805f83c0 }, 0x98|0, 0x788|1 }, + {{ 0x8060a728, 0x8063fc48, 0x80609e9c, 0x805f8b48 }, 0x70ac|2, 0x70ac|3 }, + {{ 0x806117d4, 0x80609154, 0x80610f48, 0x805ffbf4 }, 0x8c|2, 0x8c|3 }, + {{ 0x80611860, 0x805e5e4c, 0x80610fd4, 0x805ffc80 }, 0x4784|1, 0x4784|1 }, + {{ 0x80615fe4, 0x805ea5d0, 0x80615758, 0x80604404 }, 0x4|0, 0x858|1 }, + {{ 0x8061683c, 0x80646d84, 0x80615fb0, 0x80604c5c }, 0x45f4|2, 0x45f4|3 }, + {{ 0x8061ae60, 0x806dc7dc, 0x8061a5d4, 0x80609280 }, 0x4|3, 0x4|3 }, + {{ 0x8061ae68, 0x805eae2c, 0x8061a5dc, 0x80609288 }, 0x3a24|2, 0x3a24|3 }, + {{ 0x8061e88c, 0x8061c8bc, 0x8061e000, 0x8060ccac }, 0x8|2, 0x8|3 }, + {{ 0x8061e894, 0x8064b3b0, 0x8061e008, 0x8060ccb4 }, 0xe00|2, 0xe00|3 }, + {{ 0x8061f694, 0x8061e898, 0x8061ee08, 0x8060dab4 }, 0x3c|2, 0x3c|3 }, + {{ 0x8061f6d0, 0x80617bcc, 0x8061ee44, 0x8060daf0 }, 0x10|2, 0x10|3 }, + {{ 0x8061f6e0, 0x805ee854, 0x8061ee54, 0x8060db00 }, 0x15e4|2, 0x15e4|3 }, + {{ 0x80620cc4, 0x8069cdec, 0x806a08e0, 0x8068f61c }, 0x4|3, 0x4|3 }, + {{ 0x80620cc8, 0x805efe3c, 0x8062043c, 0x8060f0e8 }, 0x64|2, 0x64|3 }, + {{ 0x80620d44, 0x805c1d74, 0x805ce170, 0x805bc854 }, 0x4|3, 0x4|3 }, + {{ 0x80620d7c, 0x805efec8, 0x806204c8, 0x8060f174 }, 0x17f4|1, 0x17f4|1 }, + {{ 0x80622570, 0x805f16bc, 0x80621cbc, 0x80610968 }, 0x54d0|0, 0x129d4|1 }, + {{ 0x80634f44, 0x806040ac, 0x80634690, 0x8062333c }, 0x2544|2, 0x2544|3 }, + {{ 0x80637488, 0x805e0d14, 0x80636bd4, 0x80625880 }, 0x8|2, 0x8|3 }, + {{ 0x80637490, 0x806066a0, 0x80636bdc, 0x80625888 }, 0x7c|2, 0x7c|3 }, + {{ 0x80637510, 0x8064c200, 0x80636c5c, 0x80625908 }, 0x4dc|2, 0x4dc|3 }, + {{ 0x80637a04, 0x8064c6f4, 0x80592240, 0x80580918 }, 0x4|3, 0x4|3 }, + {{ 0x80637a18, 0x8064c708, 0x80701fa4, 0x806f0ce0 }, 0x8|2, 0x8|3 }, + {{ 0x80637a30, 0x805c5a8c, 0x805d2484, 0x805c0d44 }, 0x4|3, 0x4|3 }, + {{ 0x80637a80, 0x8064c748, 0x8063716c, 0x80625e18 }, 0x40|2, 0x40|3 }, + {{ 0x80637ac0, 0x80606720, 0x806371ac, 0x80625e58 }, 0x3740|1, 0x3740|1 }, + {{ 0x8063b200, 0x80609e60, 0x8063a8ec, 0x80629598 }, 0x4|0, 0xad8|1 }, + {{ 0x8063bcdc, 0x806d56d0, 0x806e5d80, 0x806d4abc }, 0x4|3, 0x4|3 }, + {{ 0x8063bce0, 0x805e2e38, 0x80606e8c, 0x805f5b38 }, 0x14|2, 0x14|3 }, + {{ 0x8063bcf4, 0x806d56e8, 0x806e5d98, 0x806d4ad4 }, 0x18|2, 0x18|3 }, + {{ 0x8063bd18, 0x805ece08, 0x8061c5b8, 0x8060b264 }, 0x8|2, 0x8|3 }, + {{ 0x8063bd48, 0x80724cb8, 0x8072b510, 0x8071a24c }, 0x8|2, 0x8|3 }, + {{ 0x8063bd50, 0x8070599c, 0x8070b9ac, 0x806fa6e8 }, 0x8|2, 0x8|3 }, + {{ 0x8063bd6c, 0x80655050, 0x80658b44, 0x806477f0 }, 0x4|3, 0x4|3 }, + {{ 0x8063bd98, 0x80655050, 0x80658b44, 0x806477f0 }, 0x4|3, 0x4|3 }, + {{ 0x8063bda8, 0x8060a9c8, 0x8063b454, 0x8062a100 }, 0x4|3, 0x4|3 }, + {{ 0x8063bdc0, 0x807059a0, 0x8070b9b0, 0x806fa6ec }, 0x4|3, 0x4|3 }, + {{ 0x8063bdd8, 0x8060a9bc, 0x8063b448, 0x8062a0f4 }, 0x4|3, 0x4|3 }, + {{ 0x8063be04, 0x80655050, 0x80658b44, 0x806477f0 }, 0x4|3, 0x4|3 }, + {{ 0x8063be10, 0x8055be04, 0x8055fb04, 0x8054e1dc }, 0x4|3, 0x4|3 }, + {{ 0x8063be14, 0x8060a9f8, 0x8063b484, 0x8062a130 }, 0x8|2, 0x8|3 }, + {{ 0x8063be1c, 0x806d0118, 0x806e0434, 0x806cf170 }, 0x8|2, 0x8|3 }, + {{ 0x8063be2c, 0x8060aa0c, 0x8063b498, 0x8062a144 }, 0x1f88|1, 0x1f88|1 }, + {{ 0x8063ddb4, 0x8060c994, 0x8063d420, 0x8062c0cc }, 0x6588|0, 0x75a4|1 }, + {{ 0x80645360, 0x80609168, 0x806449cc, 0x80633678 }, 0x80|2, 0x80|3 }, + {{ 0x806453e0, 0x8064c788, 0x80644a4c, 0x806336f8 }, 0xcd8|1, 0xcd8|1 }, + {{ 0x806460b8, 0x8064d460, 0x80645724, 0x806343d0 }, 0x4|0, 0x6f8|1 }, + {{ 0x806467bc, 0x80631130, 0x80645e28, 0x80634ad4 }, 0x8|2, 0x8|3 }, + {{ 0x806467c4, 0x8061c8b8, 0x80645e30, 0x80634adc }, 0x4|3, 0x4|3 }, + {{ 0x806467c8, 0x80613fb8, 0x80645e34, 0x80634ae0 }, 0x3c0c|2, 0x3c0c|3 }, + {{ 0x8064a3d4, 0x8063be94, 0x80649a40, 0x806386ec }, 0x14|2, 0x14|3 }, + {{ 0x8064a3e8, 0x80725270, 0x80649a54, 0x80638700 }, 0x4|3, 0x4|3 }, + {{ 0x8064a3ec, 0x8064db74, 0x80649a58, 0x80638704 }, 0x70c|1, 0x70c|1 }, + {{ 0x8064aaf8, 0x8064e280, 0x8064a164, 0x80638e10 }, 0x4|0, 0x3b4|1 }, + {{ 0x8064aec8, 0x8061e8bc, 0x8064a534, 0x806391e0 }, 0x18|2, 0x18|3 }, + {{ 0x8064aee0, 0x80617bcc, 0x8064a54c, 0x806391f8 }, 0xa30|1, 0xa30|1 }, + {{ 0x8064b910, 0x806185fc, 0x8064af7c, 0x80639c28 }, 0x5a68|0, 0x629c|1 }, + {{ 0x80651bb4, 0x806253d8, 0x80651220, 0x8063fecc }, 0x1c|2, 0x1c|3 }, + {{ 0x80651bd0, 0x8064e650, 0x8065123c, 0x8063fee8 }, 0x6f0|2, 0x6f0|3 }, + {{ 0x806522c0, 0x805bf784, 0x8065192c, 0x806405d8 }, 0x14|2, 0x14|3 }, + {{ 0x806522f4, 0x806380e0, 0x80651960, 0x8064060c }, 0x4|3, 0x4|3 }, + {{ 0x806522f8, 0x8061e8e4, 0x80651964, 0x80640610 }, 0xf0c|2, 0xf0c|3 }, + {{ 0x80653204, 0x8064ed7c, 0x80652870, 0x8064151c }, 0x1cbc|1, 0x1cbc|1 }, + {{ 0x80654ec0, 0x80650a38, 0x8065452c, 0x806431d8 }, 0x5fb4|0, 0x6488|1 }, + {{ 0x8065b34c, 0x8065cbd8, 0x8065a9b8, 0x80649664 }, 0x16c|2, 0x16c|3 }, + {{ 0x8065b4b8, 0x805d3504, 0x8065ab24, 0x806497d0 }, 0x24|2, 0x24|3 }, + {{ 0x8065b4e0, 0x80656ec4, 0x8065ab4c, 0x806497f8 }, 0xc08|2, 0xc08|3 }, + {{ 0x8065c0ec, 0x8065cd74, 0x8065b758, 0x8064a404 }, 0x38d0|2, 0x38d0|3 }, + {{ 0x8065f9bc, 0x8073ca70, 0x8065f028, 0x8064dcd4 }, 0xc|2, 0xc|3 }, + {{ 0x8065fa4c, 0x80657ad0, 0x8065f0b8, 0x8064dd64 }, 0x3f4|2, 0x3f4|3 }, + {{ 0x8065fe40, 0x80657f04, 0x8065f4ac, 0x8064e158 }, 0x4c|1, 0x4c|1 }, + {{ 0x8065fe8c, 0x80657f50, 0x8065f4f8, 0x8064e1a4 }, 0x1f98|0, 0x28e0|1 }, + {{ 0x8066276c, 0x8071413c, 0x80661dd8, 0x80650a84 }, 0x8|2, 0x8|3 }, + {{ 0x80662774, 0x80660690, 0x80661de0, 0x80650a8c }, 0xa04|2, 0xa04|3 }, + {{ 0x80663178, 0x8065a820, 0x806627e4, 0x80651490 }, 0xc|2, 0x18|3 }, + {{ 0x80663190, 0x8065a838, 0x806627fc, 0x806514a8 }, 0xc44|1, 0xc44|1 }, + {{ 0x80663dd4, 0x8065b47c, 0x80663440, 0x806520ec }, 0x14e0|0, 0x16d8|1 }, + {{ 0x806654ac, 0x8065ca9c, 0x80664b18, 0x806537c4 }, 0x78|2, 0x78|3 }, + {{ 0x8066552c, 0x8067317c, 0x80664b98, 0x80653844 }, 0x2cb8|2, 0x2cb8|3 }, + {{ 0x806681e4, 0x80675e34, 0x80667850, 0x805af934 }, 0x4|3, 0x4|3 }, + {{ 0x806681e8, 0x80675e38, 0x80667854, 0x80656500 }, 0x8|2, 0x8|3 }, + {{ 0x80668274, 0x80675ec4, 0x806678e0, 0x8065ee28 }, 0x4|3, 0x4|3 }, + {{ 0x80668310, 0x80675f60, 0x8066797c, 0x8063e918 }, 0x8|2, 0x8|3 }, + {{ 0x8066832c, 0x80675f7c, 0x80667998, 0x80656678 }, 0x4|3, 0x4|3 }, + {{ 0x80668330, 0x80675f80, 0x8066799c, 0x80656688 }, 0x4dc|2, 0x4dc|3 }, + {{ 0x80668810, 0x806610ac, 0x80667e7c, 0x80656b68 }, 0x167c|1, 0x167c|1 }, + {{ 0x80669e8c, 0x80662728, 0x806694f8, 0x806581e4 }, 0x2460|0, 0xb5c4|1 }, + {{ 0x8067549c, 0x8066dd38, 0x80674b08, 0x806637fc }, 0x4|3, 0x4|3 }, + {{ 0x806754a0, 0x8066dd3c, 0x80674b0c, 0x806637e0 }, 0xc|2, 0xc|3 }, + {{ 0x806754ac, 0x8066dd48, 0x80674b18, 0x8066380c }, 0x4|3, 0x4|3 }, + {{ 0x806754b0, 0x8066dd4c, 0x80674b1c, 0x806637f0 }, 0xc|2, 0xc|3 }, + {{ 0x806754bc, 0x8066dd58, 0x80674b28, 0x8066381c }, 0x24|2, 0x24|3 }, + {{ 0x806754e0, 0x8066dd7c, 0x80674b4c, 0x80663820 }, 0xc|2, 0xc|3 }, + {{ 0x806754ec, 0x8066dd88, 0x80674b58, 0x8066384c }, 0x4|3, 0x4|3 }, + {{ 0x806754f0, 0x8066dd8c, 0x80674b5c, 0x80663830 }, 0xc|2, 0xc|3 }, + {{ 0x806754fc, 0x8066dd98, 0x80674b68, 0x8066385c }, 0x4|3, 0x4|3 }, + {{ 0x80675500, 0x8066dd9c, 0x80674b6c, 0x80663840 }, 0xc|2, 0xc|3 }, + {{ 0x8067550c, 0x8066dda8, 0x80674b78, 0x8066386c }, 0x2a0|2, 0x2a0|3 }, + {{ 0x806757ac, 0x8066e048, 0x80674e18, 0x80663aec }, 0xc|2, 0xc|3 }, + {{ 0x806757b8, 0x8066e054, 0x80674e24, 0x80663b18 }, 0x4|3, 0x4|3 }, + {{ 0x806757bc, 0x8066e058, 0x80674e28, 0x80663afc }, 0x8|2, 0x8|3 }, + {{ 0x806757c4, 0x8066e060, 0x80674e30, 0x80663b24 }, 0x8|2, 0x8|3 }, + {{ 0x806757cc, 0x8066e068, 0x80674e38, 0x80663b0c }, 0xc|2, 0xc|3 }, + {{ 0x806757d8, 0x8066e074, 0x80674e44, 0x80663b38 }, 0x4|3, 0x4|3 }, + {{ 0x806757dc, 0x8066e078, 0x80674e48, 0x80663b1c }, 0xc|2, 0xc|3 }, + {{ 0x806757e8, 0x8066e084, 0x80674e54, 0x80663b48 }, 0x4|3, 0x4|3 }, + {{ 0x806757ec, 0x8066e088, 0x80674e58, 0x80663b2c }, 0xc|2, 0xc|3 }, + {{ 0x806757f8, 0x8066e094, 0x80674e64, 0x80663b58 }, 0x4|3, 0x4|3 }, + {{ 0x806757fc, 0x8066e098, 0x80674e68, 0x80663b3c }, 0xc|2, 0xc|3 }, + {{ 0x80675808, 0x8066e0a4, 0x80674e74, 0x80663b68 }, 0x6a8|2, 0x6a8|3 }, + {{ 0x80675eb0, 0x8066e74c, 0x8067551c, 0x80663b4c }, 0xc|2, 0xc|3 }, + {{ 0x80675ebc, 0x8066e758, 0x80675528, 0x8066421c }, 0x4|3, 0x4|3 }, + {{ 0x80675ec0, 0x8066e75c, 0x8067552c, 0x80663b5c }, 0xc|2, 0xc|3 }, + {{ 0x80675ecc, 0x8066e768, 0x80675538, 0x8066422c }, 0x4|3, 0x4|3 }, + {{ 0x80675ed0, 0x8066e76c, 0x8067553c, 0x80664210 }, 0xc|2, 0xc|3 }, + {{ 0x80675edc, 0x8066e778, 0x80675548, 0x8066423c }, 0x4|3, 0x4|3 }, + {{ 0x80675ee0, 0x8066e77c, 0x8067554c, 0x80664220 }, 0xc|2, 0xc|3 }, + {{ 0x80675eec, 0x8066e788, 0x80675558, 0x8066424c }, 0x4|3, 0x4|3 }, + {{ 0x80675ef0, 0x8066e78c, 0x8067555c, 0x80664230 }, 0xc|2, 0xc|3 }, + {{ 0x80675efc, 0x8066e798, 0x80675568, 0x8066425c }, 0x4|3, 0x4|3 }, + {{ 0x80675f00, 0x8066e79c, 0x8067556c, 0x80664240 }, 0xc|2, 0xc|3 }, + {{ 0x80675f0c, 0x8066e7a8, 0x80675578, 0x8066426c }, 0x4|3, 0x4|3 }, + {{ 0x80675f10, 0x8066e7ac, 0x8067557c, 0x80664250 }, 0xc|2, 0xc|3 }, + {{ 0x80675f1c, 0x8066e7b8, 0x80675588, 0x8066427c }, 0x4|3, 0x4|3 }, + {{ 0x80675f20, 0x8066e7bc, 0x8067558c, 0x80664260 }, 0xc|2, 0xc|3 }, + {{ 0x80675f2c, 0x8066e7c8, 0x80675598, 0x8066428c }, 0x12c0|2, 0x12c0|3 }, + {{ 0x806771ec, 0x8066fa88, 0x80676858, 0x806482a8 }, 0x4|3, 0x4|3 }, + {{ 0x806771f4, 0x8066fa90, 0x80676860, 0x8066559c }, 0x1e2c|2, 0x1e2c|3 }, + {{ 0x80679068, 0x80676460, 0x806786d4, 0x80667410 }, 0x300|2, 0x300|3 }, + {{ 0x80679380, 0x80671908, 0x806789ec, 0x80667728 }, 0x186c|2, 0x186c|3 }, + {{ 0x8067abf0, 0x805812fc, 0x8067a25c, 0x80668f98 }, 0xc|2, 0xc|3 }, + {{ 0x8067abfc, 0x805ca84c, 0x8067a268, 0x80668fa4 }, 0x4|3, 0x4|3 }, + {{ 0x8067ac00, 0x80676778, 0x8067a26c, 0x80668fa8 }, 0x8bb8|2, 0x8bb8|3 }, + {{ 0x806837b8, 0x8067e554, 0x80682048, 0x80670d84 }, 0xddc|2, 0xddc|3 }, + {{ 0x80684594, 0x8067e554, 0x80682048, 0x80670d84 }, 0x8cc|2, 0x8cc|3 }, + {{ 0x80684e60, 0x806809d8, 0x806844cc, 0x80673208 }, 0x3a664|2, 0x3a664|3 }, + {{ 0x806bf4c8, 0x806e20a8, 0x806beb34, 0x806ad870 }, 0x5f0|2, 0x5f0|3 }, + {{ 0x806bfac0, 0x80761dc8, 0x806bf12c, 0x806ade68 }, 0xc|2, 0xc|3 }, + {{ 0x806bfb00, 0x80762de4, 0x806bf16c, 0x806adea8 }, 0x14|2, 0x14|3 }, + {{ 0x806bfb14, 0x806bb040, 0x806bf180, 0x806adebc }, 0x9ec|2, 0x9ec|3 }, + {{ 0x806c0504, 0x806e26ec, 0x806bfb70, 0x806ae8ac }, 0x3098|2, 0x3098|3 }, + {{ 0x806c359c, 0x8073cc4c, 0x806c2c08, 0x806b1944 }, 0x4|3, 0x4|3 }, + {{ 0x806c35a8, 0x806bba38, 0x806c2c14, 0x806b1950 }, 0x4e0|2, 0x4e0|3 }, + {{ 0x806c3a8c, 0x806bbdbc, 0x806c30f8, 0x806b1e34 }, 0x8|2, 0x8|3 }, + {{ 0x806c3a98, 0x806d1b48, 0x806c3104, 0x806b1e40 }, 0x8|2, 0x8|3 }, + {{ 0x806c3aa4, 0x806e5790, 0x806c3110, 0x806b1e4c }, 0x13dc|2, 0x13dc|3 }, + {{ 0x806c4ecc, 0x806bbf2c, 0x806c4538, 0x806b3274 }, 0x1c|2, 0x1c|3 }, + {{ 0x806c4eec, 0x806e6bbc, 0x806c4558, 0x806b3294 }, 0x1484|2, 0x1484|3 }, + {{ 0x806c63a4, 0x806d92dc, 0x806c5a10, 0x806b474c }, 0x4|3, 0x4|3 }, + {{ 0x806c63ac, 0x806e8074, 0x806c5a18, 0x806b4754 }, 0x76c|2, 0x76c|3 }, + {{ 0x806c6b18, 0x806e4c48, 0x806c6184, 0x806b4ec0 }, 0x8|2, 0x8|3 }, + {{ 0x806c6b20, 0x8075a86c, 0x806c618c, 0x806b4ec8 }, 0x14|2, 0x14|3 }, + {{ 0x806c6b40, 0x806bbf4c, 0x806c61ac, 0x806b4ee8 }, 0x6348|2, 0x6348|3 }, + {{ 0x806cce88, 0x806e658c, 0x806cc4f4, 0x806bb230 }, 0x4|3, 0x4|3 }, + {{ 0x806cce90, 0x806e880c, 0x806cc4fc, 0x806bb238 }, 0x9b8|2, 0x9b8|3 }, + {{ 0x806cd848, 0x806e91c4, 0x806ec9f8, 0x806bbbf0 }, 0x4|3, 0x4|3 }, + {{ 0x806cd84c, 0x806e91c8, 0x806cceb8, 0x806bbbf4 }, 0xda8|2, 0xda8|3 }, + {{ 0x806ce5f4, 0x806e9f70, 0x806ef0b4, 0x806bc99c }, 0x4|3, 0x4|3 }, + {{ 0x806ce5f8, 0x806e9f74, 0x806cdc64, 0x806bc9a0 }, 0x21c|2, 0x21c|3 }, + {{ 0x806ce814, 0x806ede54, 0x806cde80, 0x806bcbbc }, 0x8|2, 0x8|3 }, + {{ 0x806ce81c, 0x806b327c, 0x806cde88, 0x806bcbc4 }, 0x4|3, 0x4|3 }, + {{ 0x806ce820, 0x806c2294, 0x806cde8c, 0x806bcbc8 }, 0xccc|2, 0xccc|3 }, + {{ 0x806cf4ec, 0x807774ac, 0x806ceb58, 0x806bd894 }, 0x4|3, 0x4|3 }, + {{ 0x806cf4f0, 0x806c2f64, 0x806ceb5c, 0x806bd898 }, 0x258|2, 0x258|3 }, + {{ 0x806cf748, 0x807774ac, 0x806cedb4, 0x806bdaf0 }, 0x4|3, 0x4|3 }, + {{ 0x806cf74c, 0x806c31c0, 0x806cedb8, 0x806bdaf4 }, 0x680|2, 0x680|3 }, + {{ 0x806cfdcc, 0x807774ac, 0x806cf438, 0x806be174 }, 0x4|3, 0x4|3 }, + {{ 0x806cfdd0, 0x806c3844, 0x806cf43c, 0x806be178 }, 0x4e0|2, 0x4e0|3 }, + {{ 0x806d02b0, 0x806ea190, 0x806cf91c, 0x806be658 }, 0x60c|2, 0x60c|3 }, + {{ 0x806d08bc, 0x80777d3c, 0x806cff28, 0x806bec64 }, 0x4|3, 0x4|3 }, + {{ 0x806d08c0, 0x806ea7a0, 0x806cff2c, 0x806bec68 }, 0x2020|2, 0x2020|3 }, + {{ 0x806d28fc, 0x806c1e14, 0x806d1f68, 0x806c0ca4 }, 0x4|3, 0x4|3 }, + {{ 0x806d2900, 0x807c3790, 0x806d1f6c, 0x806c0ca8 }, 0x4|3, 0x4|3 }, + {{ 0x806d2908, 0x806c3d38, 0x806d1f74, 0x806c0cb0 }, 0x84|2, 0x84|3 }, + {{ 0x806d298c, 0x80658b30, 0x806600d8, 0x8064ed84 }, 0x4|3, 0x4|3 }, + {{ 0x806d2990, 0x806c3dc0, 0x806d1ffc, 0x806c0d38 }, 0x32c8|2, 0x32c8|3 }, + {{ 0x806d5c58, 0x806ec7cc, 0x806d52c4, 0x806c4000 }, 0x26c|2, 0x26c|3 }, + {{ 0x806d5ed4, 0x806c7094, 0x806d5540, 0x806c427c }, 0x934|2, 0x934|3 }, + {{ 0x806d6808, 0x805f7c90, 0x80628290, 0x80616f3c }, 0x4|3, 0x4|3 }, + {{ 0x806d680c, 0x806c79cc, 0x806d5e78, 0x806c4bb4 }, 0x20|2, 0x20|3 }, + {{ 0x806d682c, 0x805f7c90, 0x80628290, 0x80616f3c }, 0x4|3, 0x4|3 }, + {{ 0x806d6830, 0x806c79f0, 0x806d5e9c, 0x806c4bd8 }, 0x20|2, 0x20|3 }, + {{ 0x806d6850, 0x805f7c90, 0x80628290, 0x80616f3c }, 0x4|3, 0x4|3 }, + {{ 0x806d6854, 0x806c7a14, 0x806d5ec0, 0x806c4bfc }, 0x192c|2, 0x192c|3 }, + {{ 0x806d8180, 0x806f6748, 0x806fad1c, 0x806e9a58 }, 0x4|3, 0x4|3 }, + {{ 0x806d8184, 0x806c9344, 0x806d77f0, 0x806c652c }, 0xac4|2, 0xac4|3 }, + {{ 0x806d8c48, 0x806ccbc8, 0x806db8e4, 0x806ca620 }, 0x4|3, 0x4|3 }, + {{ 0x806d8c4c, 0x806c9e0c, 0x806d82b8, 0x806c6ff4 }, 0xa0|2, 0xa0|3 }, + {{ 0x806d8cec, 0x806f6748, 0x806fad1c, 0x806e9a58 }, 0x4|3, 0x4|3 }, + {{ 0x806d8cf0, 0x806c9eb0, 0x806d835c, 0x806c7098 }, 0xf24|2, 0xf24|3 }, + {{ 0x806d9c14, 0x806f6748, 0x806fad1c, 0x806e9a58 }, 0x4|3, 0x4|3 }, + {{ 0x806d9c18, 0x806cadd8, 0x806d9284, 0x806c7fc0 }, 0xd0|2, 0xd0|3 }, + {{ 0x806d9ce8, 0x806f6748, 0x806fad1c, 0x806e9a58 }, 0x4|3, 0x4|3 }, + {{ 0x806d9cec, 0x806caeac, 0x806d9358, 0x806c8094 }, 0xbc8|2, 0xbc8|3 }, + {{ 0x806da8b4, 0x806d850c, 0x806d9f20, 0x806c8c5c }, 0x54|2, 0x54|3 }, + {{ 0x806da908, 0x806cdc1c, 0x806d9f74, 0x806c8cb0 }, 0x8|2, 0x8|3 }, + {{ 0x806da910, 0x806e4d54, 0x806d9f7c, 0x806c8cb8 }, 0x4|3, 0x4|3 }, + {{ 0x806da914, 0x806eca58, 0x806d9f80, 0x806c8cbc }, 0x85c|2, 0x85c|3 }, + {{ 0x806db174, 0x806d5b28, 0x806da7e0, 0x806c951c }, 0xc|2, 0xc|3 }, + {{ 0x806db184, 0x806cbad4, 0x806da7f0, 0x806c952c }, 0x1858|0, 0x28e8|1 }, + {{ 0x806dda7c, 0x806e4434, 0x806dd0e8, 0x806cbe24 }, 0x4|3, 0x4|3 }, + {{ 0x806dda80, 0x806ed2c4, 0x806dd0ec, 0x806cbe28 }, 0x10a4|2, 0x10a4|3 }, + {{ 0x806deb3c, 0x806ce3d0, 0x806de1a8, 0x806ccee4 }, 0xc70|2, 0xc70|3 }, + {{ 0x806df7bc, 0x8076308c, 0x806dee28, 0x806cdb64 }, 0x4|3, 0x4|3 }, + {{ 0x806df7c4, 0x806ec7dc, 0x806dee30, 0x806cdb6c }, 0x8|2, 0x8|3 }, + {{ 0x806df7cc, 0x806ee380, 0x806dee38, 0x806cdb74 }, 0x53c|2, 0x53c|3 }, + {{ 0x806dfd08, 0x806cf058, 0x806df374, 0x806ce0b0 }, 0x3d70|2, 0x3d70|3 }, + {{ 0x806e3a78, 0x806e6580, 0x806e30e4, 0x806d1e20 }, 0x10|2, 0x10|3 }, + {{ 0x806e3a8c, 0x806ee8c8, 0x806e30f8, 0x806d1e34 }, 0x348|2, 0x348|3 }, + {{ 0x806e3e20, 0x806d2ddc, 0x806e348c, 0x806d21c8 }, 0x5784|2, 0x5784|3 }, + {{ 0x806e95a4, 0x806cdc1c, 0x806e8c10, 0x806d794c }, 0x8|2, 0x8|3 }, + {{ 0x806e95b0, 0x806eec5c, 0x806e8c1c, 0x806d7958 }, 0x31f8|2, 0x31f8|3 }, + {{ 0x806ec7a8, 0x806e6574, 0x806ebe14, 0x806dab50 }, 0x14|2, 0x14|3 }, + {{ 0x806ec7bc, 0x806d8560, 0x806ebe28, 0x806dab64 }, 0xd70|2, 0xd70|3 }, + {{ 0x806ed538, 0x806d92e4, 0x806ecba4, 0x806db8e0 }, 0x8d94|2, 0x8d94|3 }, + {{ 0x806f62fc, 0x806f1e74, 0x806f5968, 0x806e46a4 }, 0x138c|2, 0x138c|3 }, + {{ 0x806f7694, 0x8071399c, 0x806f6d00, 0x806e5a3c }, 0xa8|2, 0xa8|3 }, + {{ 0x806f773c, 0x806f38e0, 0x806f6da8, 0x806e5ae4 }, 0x40|2, 0x40|3 }, + {{ 0x806f77c0, 0x80713a74, 0x806f6e2c, 0x806e5b68 }, 0x260|2, 0x260|3 }, + {{ 0x806f7a20, 0x80713f0c, 0x806f708c, 0x806e5dc8 }, 0x8|2, 0x8|3 }, + {{ 0x806f7a3c, 0x806f5428, 0x806f70a8, 0x806e5de4 }, 0x4|3, 0x4|3 }, + {{ 0x806f7a40, 0x806f5768, 0x806f70ac, 0x806e5de8 }, 0x8|2, 0x8|3 }, + {{ 0x806f7a74, 0x806d8a30, 0x806f70e0, 0x806e5e1c }, 0x4|3, 0x4|3 }, + {{ 0x806f7a90, 0x80713cf0, 0x806f70fc, 0x806e5e38 }, 0x8|2, 0x8|3 }, + {{ 0x806f7a98, 0x80713acc, 0x806f7104, 0x806e5e40 }, 0xc|2, 0xc|3 }, + {{ 0x806f7aa4, 0x80713d04, 0x806f7110, 0x806e5e4c }, 0x774|2, 0x774|3 }, + {{ 0x806f8218, 0x806f3208, 0x806f7884, 0x806e65c0 }, 0x600|2, 0x600|3 }, + {{ 0x806f8818, 0x806f9628, 0x806f7e84, 0x806e6bc0 }, 0x8|2, 0x8|3 }, + {{ 0x806f8820, 0x806f3810, 0x806f7e8c, 0x806e6bc8 }, 0xcc|2, 0xcc|3 }, + {{ 0x806f8920, 0x806f3964, 0x806f7f8c, 0x806e6cc8 }, 0x1ab8|2, 0x1ab8|3 }, + {{ 0x806fa3d8, 0x80648488, 0x806f9a44, 0x806e8780 }, 0x4|3, 0x4|3 }, + {{ 0x806fa3e4, 0x806f547c, 0x806f9a50, 0x806e878c }, 0x3e2c|2, 0x3e2c|3 }, + {{ 0x806fe214, 0x8074d468, 0x806fd880, 0x806ec5bc }, 0x8|2, 0x8|3 }, + {{ 0x806fe228, 0x806f9318, 0x806fd894, 0x806ec5d0 }, 0x790|2, 0x790|3 }, + {{ 0x806fe9dc, 0x8071447c, 0x806fe048, 0x806ecd84 }, 0x1b0|2, 0x1bc|3 }, + {{ 0x806feb98, 0x80714638, 0x806fe204, 0x806ecf40 }, 0x1604|3, 0x1604|3 }, + {{ 0x8070019c, 0x8070ff18, 0x806ff808, 0x806ee544 }, 0x64|2, 0x64|3 }, + {{ 0x8070022c, 0x806dc7f4, 0x806ff898, 0x806ee5d4 }, 0x4|3, 0x4|3 }, + {{ 0x80700230, 0x80715c44, 0x806ff89c, 0x806ee5d8 }, 0x24|2, 0x30|3 }, + {{ 0x80700260, 0x80715c74, 0x806ff8cc, 0x806ee608 }, 0x20c|3, 0x20c|3 }, + {{ 0x8070046c, 0x806f9ac8, 0x806ffad8, 0x806ee814 }, 0xe300|2, 0xe300|3 }, + {{ 0x8070e7b8, 0x80715e88, 0x8070de24, 0x806fcb60 }, 0x10ec|2, 0x10ec|3 }, + {{ 0x8070f8b8, 0x80707e14, 0x8070ef24, 0x806fdc60 }, 0x940|1, 0x940|1 }, + {{ 0x807101f8, 0x80708754, 0x8070f864, 0x806fe5a0 }, 0x834|0, 0x77b0|1 }, + {{ 0x807179c4, 0x8070ffac, 0x80717030, 0x80705d6c }, 0x46c|2, 0x46c|3 }, + {{ 0x80717e30, 0x80716f84, 0x8071749c, 0x807061d8 }, 0x4b0|2, 0x4b0|3 }, + {{ 0x807182e0, 0x80716590, 0x8071794c, 0x80706688 }, 0x4|3, 0x4|3 }, + {{ 0x807182e8, 0x8071041c, 0x80717954, 0x80706690 }, 0x3558|2, 0x3558|3 }, + {{ 0x8071b85c, 0x806ed60c, 0x8071aec8, 0x80709c04 }, 0x4|3, 0x4|3 }, + {{ 0x8071b86c, 0x8071743c, 0x8071aed8, 0x80709c14 }, 0x84e4|1, 0x84e4|1 }, + {{ 0x80723d50, 0x8071f920, 0x807233bc, 0x807120f8 }, 0x4|0, 0x2820|1 }, + {{ 0x80726570, 0x8073c5d8, 0x80725bdc, 0x80714918 }, 0x1c8c|2, 0x1c8c|3 }, + {{ 0x80728218, 0x8073e270, 0x80727884, 0x807165c0 }, 0x398|2, 0x398|3 }, + {{ 0x807285b4, 0x80745450, 0x80727c20, 0x8071695c }, 0x4|3, 0x4|3 }, + {{ 0x807285c4, 0x80721178, 0x80727c30, 0x8071696c }, 0x4|3, 0x4|3 }, + {{ 0x807285c8, 0x8073e61c, 0x80727c34, 0x80716970 }, 0xd54|2, 0xd54|3 }, + {{ 0x8072931c, 0x808227a8, 0x80728988, 0x807176c4 }, 0x4|3, 0x4|3 }, + {{ 0x8072932c, 0x80724754, 0x80728998, 0x807176d4 }, 0x8|2, 0x8|3 }, + {{ 0x8072933c, 0x8073f388, 0x807289a8, 0x807176e4 }, 0x8|2, 0x8|3 }, + {{ 0x8072934c, 0x80722140, 0x807289b8, 0x807176f4 }, 0x820|2, 0x820|3 }, + {{ 0x80729b84, 0x80722980, 0x807291f0, 0x80717f2c }, 0xcfc|2, 0xcfc|3 }, + {{ 0x8072a890, 0x80723694, 0x80729efc, 0x80718c38 }, 0x10b8|2, 0x10b8|3 }, + {{ 0x8072b954, 0x80724768, 0x8072afc0, 0x80719cfc }, 0x2508|2, 0x2508|3 }, + {{ 0x8072de64, 0x80726c7c, 0x8072d4d0, 0x8071c20c }, 0xa8|2, 0xa8|3 }, + {{ 0x8072df0c, 0x8073d72c, 0x8072d578, 0x8071c2b4 }, 0xb0|2, 0xb0|3 }, + {{ 0x8072dfcc, 0x8073f390, 0x8072d638, 0x8071c374 }, 0x1f78|2, 0x1f78|3 }, + {{ 0x8072ff5c, 0x807276cc, 0x8072f5c8, 0x8071e304 }, 0x10|2, 0x10|3 }, + {{ 0x8072ff74, 0x80741320, 0x8072f5e0, 0x8071e31c }, 0x1fc|2, 0x1fc|3 }, + {{ 0x80730178, 0x8071dd74, 0x8072f7e4, 0x8071e520 }, 0x4|3, 0x4|3 }, + {{ 0x8073017c, 0x807f8418, 0x8072f7e8, 0x8071e524 }, 0x8|2, 0x8|3 }, + {{ 0x80730184, 0x80726dd4, 0x8072f7f0, 0x8071e52c }, 0x8e0|2, 0x8e0|3 }, + {{ 0x80730a68, 0x80721168, 0x807300d4, 0x8071ee10 }, 0x14|2, 0x14|3 }, + {{ 0x80730a7c, 0x8073385c, 0x807300e8, 0x8071ee24 }, 0xb8|2, 0xb8|3 }, + {{ 0x80730b34, 0x80741538, 0x807301a0, 0x8071eedc }, 0xe08|2, 0xe08|3 }, + {{ 0x80731944, 0x807e78e0, 0x80730fb0, 0x8071fcec }, 0x4|3, 0x4|3 }, + {{ 0x8073194c, 0x80727794, 0x80730fb8, 0x8071fcf4 }, 0x3fe0|2, 0x3fe0|3 }, + {{ 0x80735934, 0x80742350, 0x80734fa0, 0x80723cdc }, 0x33b8|2, 0x33b8|3 }, + {{ 0x80738cec, 0x80741328, 0x80738358, 0x80727094 }, 0x8|2, 0x8|3 }, + {{ 0x80738da4, 0x8072b77c, 0x80738410, 0x8072714c }, 0x37a4|2, 0x37a4|3 }, + {{ 0x8073c548, 0x807457d0, 0x8073bbb4, 0x8072a8f0 }, 0x2898|2, 0x2898|3 }, + {{ 0x8073edec, 0x8072ef20, 0x8073e458, 0x8072d194 }, 0x3d8c|2, 0x3d8c|3 }, + {{ 0x80742b78, 0x80732cac, 0x807421e4, 0x80730f18 }, 0x4|3, 0x4|3 }, + {{ 0x80742b88, 0x80732cbc, 0x807421f4, 0x807289f8 }, 0x4|3, 0x4|3 }, + {{ 0x80742b94, 0x80732cc8, 0x80742200, 0x80730f54 }, 0x28c|2, 0x28c|3 }, + {{ 0x80742e20, 0x80732f54, 0x8074248c, 0x807311cc }, 0x4|3, 0x4|3 }, + {{ 0x80742e24, 0x80732f58, 0x80742490, 0x807311e4 }, 0x10|2, 0x10|3 }, + {{ 0x80742e34, 0x80732f68, 0x807424a0, 0x807311e0 }, 0x4|3, 0x4|3 }, + {{ 0x80742e38, 0x80732f6c, 0x807424a4, 0x807311f8 }, 0x304|2, 0x304|3 }, + {{ 0x8074313c, 0x80733270, 0x807427a8, 0x80731510 }, 0x4|3, 0x4|3 }, + {{ 0x80743140, 0x80733274, 0x807427ac, 0x80731500 }, 0x10|2, 0x10|3 }, + {{ 0x80743150, 0x80733284, 0x807427bc, 0x807314d4 }, 0x4|3, 0x4|3 }, + {{ 0x80743154, 0x80733288, 0x807427c0, 0x80731514 }, 0x9310|2, 0x9310|3 }, + {{ 0x8074c4a4, 0x80769350, 0x8074bb10, 0x8073a864 }, 0x4|3, 0x4|3 }, + {{ 0x8074c4a8, 0x8076ceac, 0x8074bb14, 0x8073a868 }, 0x454|1, 0x454|1 }, + {{ 0x8074c8fc, 0x8076d300, 0x8074bf68, 0x8073acbc }, 0x4|0, 0xc90|1 }, + {{ 0x8074d5b8, 0x80748078, 0x8074cc24, 0x8073b978 }, 0x440c|2, 0x440c|3 }, + {{ 0x807519c4, 0x80759e3c, 0x80751030, 0x8073fd84 }, 0x4|3, 0x4|3 }, + {{ 0x807519c8, 0x8076dfbc, 0x80751034, 0x8073fd88 }, 0x2568|2, 0x2568|3 }, + {{ 0x80753f30, 0x8077ac78, 0x8075359c, 0x807422f0 }, 0x38|2, 0x38|3 }, + {{ 0x80753f68, 0x8075c35c, 0x807535d4, 0x80742328 }, 0x198|2, 0x198|3 }, + {{ 0x80754100, 0x8074c484, 0x8075376c, 0x807424c0 }, 0x4ab4|2, 0x4ab4|3 }, + {{ 0x80758bc4, 0x807cacf4, 0x80758230, 0x80746f84 }, 0x14|2, 0x14|3 }, + {{ 0x80758bd8, 0x80683998, 0x80758244, 0x80746f98 }, 0x4|3, 0x4|3 }, + {{ 0x80758bdc, 0x807706f8, 0x80758248, 0x80746f9c }, 0x4f48|2, 0x4f48|3 }, + {{ 0x8075db24, 0x80750f48, 0x8075d190, 0x8074bee4 }, 0xc0c|2, 0xc0c|3 }, + {{ 0x8075e730, 0x8077d4f0, 0x8075dd9c, 0x8074caf0 }, 0x10|2, 0x10|3 }, + {{ 0x8075e744, 0x80759df8, 0x8075ddb0, 0x8074cb04 }, 0x3c|2, 0x3c|3 }, + {{ 0x8075e78c, 0x80775658, 0x8075ddf8, 0x8074cb4c }, 0x350|2, 0x350|3 }, + {{ 0x8075eaf0, 0x8075a168, 0x8075e15c, 0x8074ceb0 }, 0x8|2, 0x8|3 }, + {{ 0x8075eaf8, 0x80751bac, 0x8075e164, 0x8074ceb8 }, 0x1e94|1, 0x1e94|1 }, + {{ 0x8076098c, 0x80753a40, 0x8075fff8, 0x8074ed4c }, 0x471c|0, 0x5230|1 }, + {{ 0x80765bc4, 0x8075c428, 0x80765230, 0x80753f84 }, 0xc0|2, 0xc0|3 }, + {{ 0x80765c90, 0x807759c4, 0x807652fc, 0x80754050 }, 0x1bb8|2, 0x1bb8|3 }, + {{ 0x80767848, 0x8067c250, 0x80766eb4, 0x80755c08 }, 0x54|2, 0x54|3 }, + {{ 0x807678f0, 0x80758d44, 0x80766f5c, 0x80755cb0 }, 0x140c|2, 0x140c|3 }, + {{ 0x80768cfc, 0x80816614, 0x80768368, 0x807570bc }, 0x8|2, 0x8|3 }, + {{ 0x80768d04, 0x8075a158, 0x80768370, 0x807570c4 }, 0x8|2, 0x8|3 }, + {{ 0x80768d0c, 0x8077e048, 0x80768378, 0x807570cc }, 0x8|2, 0x8|3 }, + {{ 0x80768d14, 0x8077db5c, 0x80768380, 0x807570d4 }, 0x8|2, 0x8|3 }, + {{ 0x80768d1c, 0x80777624, 0x80768388, 0x807570dc }, 0x648|2, 0x648|3 }, + {{ 0x80769364, 0x8076687c, 0x807689d0, 0x80757724 }, 0x14|2, 0x14|3 }, + {{ 0x80769398, 0x80817a94, 0x80768a04, 0x80757758 }, 0x3c|2, 0x3c|3 }, + {{ 0x807693d4, 0x80777674, 0x80768a40, 0x80757794 }, 0x4|3, 0x4|3 }, + {{ 0x807693d8, 0x80777ca0, 0x80768a44, 0x80757798 }, 0x1a8|2, 0x1a8|3 }, + {{ 0x80769580, 0x806e87e8, 0x80768bec, 0x80757940 }, 0x14|2, 0x14|3 }, + {{ 0x80769594, 0x80763090, 0x80768c00, 0x80757954 }, 0x4|3, 0x4|3 }, + {{ 0x807695f0, 0x807768c8, 0x80768c5c, 0x807579b0 }, 0x4|3, 0x4|3 }, + {{ 0x807695f4, 0x806e6550, 0x80768c60, 0x807579b4 }, 0x18|2, 0x18|3 }, + {{ 0x8076960c, 0x80777e68, 0x80768c78, 0x807579cc }, 0x3228|2, 0x3228|3 }, + {{ 0x8076c854, 0x80688548, 0x8076bec0, 0x8075ac14 }, 0x4|3, 0x4|3 }, + {{ 0x8076c858, 0x8075a170, 0x8076bec4, 0x8075ac18 }, 0x2378|2, 0x2378|3 }, + {{ 0x8076ebd0, 0x8077b0a8, 0x8076e23c, 0x8075cf90 }, 0x708|2, 0x708|3 }, + {{ 0x8076f2d8, 0x8075c4f0, 0x8076e944, 0x8075d698 }, 0x3374|2, 0x3374|3 }, + {{ 0x8077264c, 0x80760058, 0x80771cb8, 0x80760a0c }, 0x6c|2, 0x6c|3 }, + {{ 0x80772700, 0x8077b7b4, 0x80771d6c, 0x80760ac0 }, 0x1510|2, 0x1510|3 }, + {{ 0x80773c10, 0x8075f8d0, 0x8077327c, 0x80761fd0 }, 0x764|2, 0x764|3 }, + {{ 0x8077437c, 0x80850320, 0x807739e8, 0x8076273c }, 0x4|3, 0x4|3 }, + {{ 0x80774388, 0x80764540, 0x807739f4, 0x80762748 }, 0x8|2, 0x8|3 }, + {{ 0x80774390, 0x80849284, 0x807739fc, 0x80762750 }, 0x8|2, 0x8|3 }, + {{ 0x80774398, 0x80764550, 0x80773a04, 0x80762758 }, 0x4|3, 0x4|3 }, + {{ 0x8077439c, 0x80760108, 0x80773a08, 0x8076275c }, 0x131c|1, 0x131c|1 }, + {{ 0x807756b8, 0x80761424, 0x80774d24, 0x80763a78 }, 0x65c|0, 0x312c|1 }, + {{ 0x807787e4, 0x8076e214, 0x80777e50, 0x80766ba4 }, 0x8|2, 0x8|3 }, + {{ 0x807787ec, 0x8077cd0c, 0x80777e58, 0x80766bac }, 0x7f4|2, 0x7f4|3 }, + {{ 0x80779018, 0x80776838, 0x80778684, 0x807673d8 }, 0x10|2, 0x10|3 }, + {{ 0x80779028, 0x80764558, 0x80778694, 0x807673e8 }, 0x3df4|2, 0x3df4|3 }, + {{ 0x8077ce1c, 0x8070f9d0, 0x8077c488, 0x8076b1dc }, 0x28|2, 0x28|3 }, + {{ 0x8077ce84, 0x8077d508, 0x8077c4f0, 0x8076b244 }, 0xfe0|2, 0xfe0|3 }, + {{ 0x8077de64, 0x8076e160, 0x8077d4d0, 0x8076c224 }, 0xa0|2, 0xa0|3 }, + {{ 0x8077df18, 0x8075a168, 0x8077d584, 0x8076c2d8 }, 0x8|2, 0x8|3 }, + {{ 0x8077df20, 0x807683f4, 0x8077d58c, 0x8076c2e0 }, 0x6c4|1, 0x6c4|1 }, + {{ 0x8077e5e4, 0x80768ab8, 0x8077dc50, 0x8076c9a4 }, 0x1a0|0, 0x43c0|1 }, + {{ 0x807829d8, 0x8077e5a8, 0x80782044, 0x80770d98 }, 0x53a4|2, 0x53a4|3 }, + {{ 0x80787d7c, 0x806f93a0, 0x807873e8, 0x8077613c }, 0x4|3, 0x4|3 }, + {{ 0x80787d80, 0x807d0318, 0x807873ec, 0x80776140 }, 0x4bc4|2, 0x4bc4|3 }, + {{ 0x8078c95c, 0x80783950, 0x8078bfc8, 0x8077ad1c }, 0xd660|1, 0xd660|1 }, + {{ 0x80799fbc, 0x80790fb0, 0x80799628, 0x8078837c }, 0x7944|0, 0xe17c|1 }, + {{ 0x807a8138, 0x807d4ef8, 0x807a77a4, 0x807964f8 }, 0x1b88|2, 0x1b88|3 }, + {{ 0x807a9cc0, 0x8079f12c, 0x807a932c, 0x80798080 }, 0xe4|2, 0xe4|3 }, + {{ 0x807a9dac, 0x807d6a58, 0x807a9418, 0x8079816c }, 0x10c|2, 0x10c|3 }, + {{ 0x807a9eb8, 0x8079f210, 0x807a9524, 0x80798278 }, 0x5178|2, 0x5178|3 }, + {{ 0x807af0ec, 0x8079c9c0, 0x807ae758, 0x8079d4ac }, 0x28|2, 0x28|3 }, + {{ 0x807af114, 0x807a4184, 0x807ae780, 0x8079d4d4 }, 0x14|2, 0x14|3 }, + {{ 0x807af12c, 0x807d4ee4, 0x807ae798, 0x8079d4ec }, 0xc|2, 0xc|3 }, + {{ 0x807af138, 0x807a9098, 0x807ae7a4, 0x8079d4f8 }, 0x4|3, 0x4|3 }, + {{ 0x807af13c, 0x807d6b90, 0x807ae7a8, 0x8079d4fc }, 0x3d90|2, 0x3d90|3 }, + {{ 0x807b2ee8, 0x8077f8d4, 0x807b2554, 0x807a12a8 }, 0x8|2, 0x8|3 }, + {{ 0x807b2ef4, 0x807a4494, 0x807b2560, 0x807a12b4 }, 0x7540|1, 0x7540|1 }, + {{ 0x807ba434, 0x807ab9d4, 0x807b9aa0, 0x807a87f4 }, 0x2638|0, 0x1f314|1 }, + {{ 0x807d976c, 0x807da94c, 0x807d8dd8, 0x807c7b2c }, 0x404|2, 0x404|3 }, + {{ 0x807d9b80, 0x807cacf4, 0x807d91ec, 0x807c7f40 }, 0xa28|2, 0xa28|3 }, + {{ 0x807da5ac, 0x8084b558, 0x807d9c18, 0x807c896c }, 0x4|3, 0x4|3 }, + {{ 0x807da5c0, 0x807dad78, 0x807d9c2c, 0x807c8980 }, 0x16ac|2, 0x16ac|3 }, + {{ 0x807dbc6c, 0x8079a9b8, 0x807db2d8, 0x807ca02c }, 0x4c|2, 0x4c|3 }, + {{ 0x807dbcc8, 0x807cba20, 0x807db334, 0x807ca088 }, 0x4|3, 0x4|3 }, + {{ 0x807dbccc, 0x807cb734, 0x807db338, 0x807ca08c }, 0xbf0|2, 0xbf0|3 }, + {{ 0x807dc8c8, 0x807dc484, 0x807dbf34, 0x807cac88 }, 0x68|2, 0x68|3 }, + {{ 0x807dc94c, 0x807cc32c, 0x807dbfb8, 0x807cad0c }, 0x3fe8|2, 0x3fe8|3 }, + {{ 0x807e0938, 0x8083c6ec, 0x807dffa4, 0x807cecf8 }, 0x1bc4|2, 0x1bc4|3 }, + {{ 0x807e24fc, 0x807df55c, 0x807e1b68, 0x807d08bc }, 0x70|2, 0x70|3 }, + {{ 0x807e2594, 0x807ebee0, 0x807e1c00, 0x807d0954 }, 0x8|2, 0x8|3 }, + {{ 0x807e259c, 0x807dc50c, 0x807e1c08, 0x807d095c }, 0x48|1, 0x48|1 }, + {{ 0x807e25e4, 0x807dc554, 0x807e1c50, 0x807d09a4 }, 0x2b68|0, 0x2fe0|1 }, + {{ 0x807e55c4, 0x8083f8ac, 0x807e4c30, 0x807d3984 }, 0x30|2, 0x30|3 }, + {{ 0x807e55f4, 0x8083e2b8, 0x807e4c60, 0x807d39b4 }, 0x60|2, 0x60|3 }, + {{ 0x807e5654, 0x807df5e4, 0x807e4cc0, 0x807d3a14 }, 0x384|1, 0x384|1 }, + {{ 0x807e59d8, 0x807df968, 0x807e5044, 0x807d3d98 }, 0x738|0, 0x9d8|1 }, + {{ 0x807e63b0, 0x8083cfd8, 0x807e5a1c, 0x807d4770 }, 0x20|2, 0x20|3 }, + {{ 0x807e63fc, 0x807de374, 0x807e5a68, 0x807d47bc }, 0x8|2, 0x8|3 }, + {{ 0x807e6404, 0x8083c6ec, 0x807e5a70, 0x807d47c4 }, 0x4|3, 0x4|3 }, + {{ 0x807e6408, 0x8083e330, 0x807e5a74, 0x807d47c8 }, 0x3630|1, 0x3630|1 }, + {{ 0x807e9a38, 0x80841960, 0x807e90a4, 0x807d7df8 }, 0x4|0, 0x208|1 }, + {{ 0x807e9c40, 0x807e0394, 0x807e92ac, 0x807d8000 }, 0x674|1, 0x674|1 }, + {{ 0x807ea2b4, 0x807e0a08, 0x807e9920, 0x807d8674 }, 0x2548|0, 0x3ae0|1 }, + {{ 0x807edd94, 0x80841b68, 0x807ed400, 0x807dc154 }, 0x468|2, 0x468|3 }, + {{ 0x807ee248, 0x80841b64, 0x807ed8b4, 0x807dc608 }, 0x4|3, 0x4|3 }, + {{ 0x807ee24c, 0x807e44e8, 0x807ed8b8, 0x807dc60c }, 0x1b4|2, 0x1b4|3 }, + {{ 0x807ee430, 0x80841fcc, 0x807eda9c, 0x807dc7f0 }, 0x5b0|2, 0x5b0|3 }, + {{ 0x807ee9e0, 0x807e46d0, 0x807ee04c, 0x807dcda0 }, 0x5cc|1, 0x5cc|1 }, + {{ 0x807eefac, 0x807e4c9c, 0x807ee618, 0x807dd36c }, 0x144|0, 0xa38|1 }, + {{ 0x807ef9e4, 0x808425c0, 0x807ef050, 0x807ddda4 }, 0x2fc|2, 0x2fc|3 }, + {{ 0x807efd00, 0x807e09b8, 0x807ef36c, 0x807de0c0 }, 0x4|3, 0x4|3 }, + {{ 0x807efd04, 0x807e56dc, 0x807ef370, 0x807de0c4 }, 0x503c|1, 0x503c|1 }, + {{ 0x807f4d40, 0x807ea718, 0x807f43ac, 0x807e3100 }, 0x4|0, 0x2998|1 }, + {{ 0x807f76e0, 0x808428dc, 0x807f6d4c, 0x807e5aa0 }, 0x464|2, 0x464|3 }, + {{ 0x807f7bbc, 0x807ed0bc, 0x807f7228, 0x807e5f7c }, 0xd4c|2, 0xd4c|3 }, + {{ 0x807f8908, 0x80842d40, 0x807f7f74, 0x807e6cc8 }, 0x250|1, 0x250|1 }, + {{ 0x807f8b58, 0x80842f90, 0x807f81c4, 0x807e6f18 }, 0x4|0, 0x6f8|1 }, + {{ 0x807f9274, 0x807ede84, 0x807f88e0, 0x807e7634 }, 0x38|1, 0x38|1 }, + {{ 0x807f92ac, 0x807edebc, 0x807f8918, 0x807e766c }, 0x4|0, 0x88|1 }, + {{ 0x807f9334, 0x80747b60, 0x807f89a0, 0x807e76f4 }, 0xc|2, 0xc|3 }, + {{ 0x807f9384, 0x808436ac, 0x807f89f0, 0x807e7744 }, 0x1d4|2, 0x1d4|3 }, + {{ 0x807f9568, 0x80734848, 0x807f8bd4, 0x807e7928 }, 0x4|3, 0x4|3 }, + {{ 0x807f9580, 0x808438a0, 0x807f8bec, 0x807e7940 }, 0x15ac|2, 0x15ac|3 }, + {{ 0x807fab3c, 0x80800e0c, 0x807fa1a8, 0x807e8efc }, 0xc|2, 0xc|3 }, + {{ 0x807fab48, 0x807edf88, 0x807fa1b4, 0x807e8f08 }, 0x3fd0|2, 0x3fd0|3 }, + {{ 0x807feb64, 0x80844e74, 0x807fe1d0, 0x807ecf24 }, 0xf2c|2, 0xf2c|3 }, + {{ 0x807ffadc, 0x807f1f64, 0x807ff148, 0x807ede9c }, 0x5f1c|2, 0x5f1c|3 }, + {{ 0x808059f8, 0x80845ddc, 0x80805064, 0x807f3db8 }, 0x1c08|2, 0x1c08|3 }, + {{ 0x80807600, 0x807f3bf8, 0x80806c6c, 0x807f59c0 }, 0xc|2, 0xc|3 }, + {{ 0x8080760c, 0x807f7ec4, 0x80806c78, 0x807f59cc }, 0x1db4|2, 0x1db4|3 }, + {{ 0x8080942c, 0x808479e4, 0x80808a98, 0x807f77ec }, 0x18a8|2, 0x18a8|3 }, + {{ 0x8080acd4, 0x80751b64, 0x8080a340, 0x807f9094 }, 0x4|3, 0x4|3 }, + {{ 0x8080ad10, 0x807f9cf0, 0x8080a37c, 0x807f90d0 }, 0x711c|2, 0x711c|3 }, + {{ 0x80811e38, 0x808492c8, 0x808114a4, 0x808001f8 }, 0x1d44|2, 0x1d44|3 }, + {{ 0x80813b88, 0x807f873c, 0x808131f4, 0x80801f48 }, 0x4|3, 0x4|3 }, + {{ 0x80813b8c, 0x807edf50, 0x808131f8, 0x80801f4c }, 0x38|2, 0x38|3 }, + {{ 0x80813bc4, 0x80800e18, 0x80813230, 0x80801f84 }, 0x93f0|1, 0x93f0|1 }, + {{ 0x8081cfb4, 0x8080a208, 0x8081c620, 0x8080b374 }, 0x70|0, 0x12b8|1 }, + {{ 0x8081e270, 0x8072fc98, 0x8081d8dc, 0x8080c630 }, 0x4|3, 0x4|3 }, + {{ 0x8081e278, 0x8072c704, 0x8081d8e4, 0x8080c638 }, 0x8|2, 0x8|3 }, + {{ 0x8081e280, 0x8084b060, 0x8081d8ec, 0x8080c640 }, 0xd68|2, 0xd68|3 }, + {{ 0x8081efec, 0x8080b4d8, 0x8081e658, 0x8080d3ac }, 0x2e8c|1, 0x2e8c|1 }, + {{ 0x80821e78, 0x8080e364, 0x808214e4, 0x80810238 }, 0xa2cc|0, 0xc670|1 }, + {{ 0x8082e4e8, 0x80814a44, 0x8082db54, 0x8081c8a8 }, 0x8|2, 0x8|3 }, + {{ 0x8082e4f0, 0x80750e38, 0x8082db5c, 0x8081c8b0 }, 0x4|3, 0x4|3 }, + {{ 0x8082e4f4, 0x80814a50, 0x8082db60, 0x8081c8b4 }, 0x4|3, 0x4|3 }, + {{ 0x8082e52c, 0x80762de4, 0x8082db98, 0x8081c8ec }, 0x14|2, 0x14|3 }, + {{ 0x8082e540, 0x8084bdcc, 0x8082dbac, 0x8081c900 }, 0x2ec|2, 0x2ec|3 }, + {{ 0x8082e834, 0x8077b798, 0x8082dea0, 0x8081cbf4 }, 0x14|2, 0x14|3 }, + {{ 0x8082e850, 0x8081aa28, 0x8082debc, 0x8081cc10 }, 0xb6c|2, 0xb6c|3 }, + {{ 0x8082f3bc, 0x80878070, 0x8082ea28, 0x8081d77c }, 0x4|3, 0x4|3 }, + {{ 0x8082f404, 0x8084c0dc, 0x8082ea70, 0x8081d7c4 }, 0x4090|2, 0x4090|3 }, + {{ 0x80833494, 0x8081b594, 0x80832b00, 0x80821854 }, 0x1a4|1, 0x1a4|1 }, + {{ 0x80833638, 0x8081b738, 0x80832ca4, 0x808219f8 }, 0x34|0, 0x498|1 }, + {{ 0x80833af0, 0x8076e4c8, 0x8083315c, 0x80821eb0 }, 0xc|2, 0xc|3 }, + {{ 0x80833afc, 0x8081bc04, 0x80833168, 0x80821ebc }, 0x430c|2, 0x430c|3 }, + {{ 0x80837e08, 0x8081ff0c, 0x80837470, 0x808261c8 }, 0x4|0, 0x4|0 }, + {{ 0x80838e5c, 0x808501b4, 0x808384c8, 0x8082721c }, 0x21f8|2, 0x21f8|3 }, + {{ 0x8083b054, 0x808540f4, 0x8083a6c0, 0x80829414 }, 0xc|2, 0xc|3 }, + {{ 0x8083b060, 0x80857c34, 0x8083a6cc, 0x80829420 }, 0xc|2, 0xc|3 }, + {{ 0x8083b06c, 0x80820ef4, 0x8083a6d8, 0x8082942c }, 0x19ac|2, 0x19ac|3 }, + {{ 0x8083ca18, 0x80833630, 0x8083c084, 0x8082add8 }, 0x94|2, 0x94|3 }, + {{ 0x8083caac, 0x8082da30, 0x8083c118, 0x8082ae6c }, 0x94|2, 0x94|3 }, + {{ 0x8083cb40, 0x80852420, 0x8083c1ac, 0x8082af00 }, 0x5a8|1, 0x5a8|1 }, + {{ 0x8083d0e8, 0x808529c8, 0x8083c754, 0x8082b4a8 }, 0x4|0, 0x2c4|1 }, + {{ 0x8083d408, 0x807e46ec, 0x8083ca74, 0x8082b7c8 }, 0x1c|2, 0x1c|3 }, + {{ 0x8083d424, 0x808229c4, 0x8083ca90, 0x8082b7e4 }, 0x654|1, 0x654|1 }, + {{ 0x8083da78, 0x80823018, 0x8083d0e4, 0x8082be38 }, 0x44f4|0, 0x480c|1 }, + {{ 0x808422a0, 0x80851378, 0x8084190c, 0x80830660 }, 0x10|2, 0x10|3 }, + {{ 0x808422b0, 0x80852c7c, 0x8084191c, 0x80830670 }, 0x2474|2, 0x2474|3 }, + {{ 0x80844728, 0x80827850, 0x80843d94, 0x80832ae8 }, 0xe7c|1, 0xe7c|1 }, + {{ 0x808455a4, 0x808286cc, 0x80844c10, 0x80833964 }, 0x4eb4|0, 0x53f8|1 }, + {{ 0x8084a99c, 0x80855180, 0x8084a008, 0x80838d5c }, 0x26b0|2, 0x26b0|3 }, + {{ 0x8084d04c, 0x8082f754, 0x8084c6b8, 0x8083b40c }, 0x4|3, 0x4|3 }, + {{ 0x8084d050, 0x80820ec8, 0x8084c6bc, 0x8083b410 }, 0x28|2, 0x28|3 }, + {{ 0x8084d0d4, 0x8082dac0, 0x8084c740, 0x8083b494 }, 0x14f8|1, 0x14f8|1 }, + {{ 0x8084e5cc, 0x8082efb8, 0x8084dc38, 0x8083c98c }, 0x4|0, 0x36fc|1 }, + {{ 0x80851cc8, 0x80854c00, 0x80851334, 0x80840088 }, 0x8|2, 0x8|3 }, + {{ 0x80851cd0, 0x80857858, 0x8085133c, 0x80840090 }, 0xe00|2, 0xe00|3 }, + {{ 0x80852ad0, 0x80821824, 0x8085213c, 0x80840e90 }, 0x138|2, 0x138|3 }, + {{ 0x80852c08, 0x808326c0, 0x80852274, 0x80840fc8 }, 0x1004|2, 0x1004|3 }, + {{ 0x80853c0c, 0x8082da30, 0x80853278, 0x80841fcc }, 0x94|2, 0x94|3 }, + {{ 0x80853ca0, 0x808587f0, 0x8085330c, 0x80842060 }, 0x14c8|2, 0x14c8|3 }, + {{ 0x808551e4, 0x80833754, 0x80854850, 0x808435a4 }, 0xcc|1, 0xcc|1 }, + {{ 0x808552b0, 0x80833820, 0x8085491c, 0x80843670 }, 0x6e88|0, 0x70dc|1 }, + {{ 0x8085c3c4, 0x80859d34, 0x8085ba30, 0x8084a784 }, 0x22a0|2, 0x22a0|3 }, + {{ 0x8085e664, 0x808436a0, 0x8085dcd0, 0x8084ca24 }, 0x4|3, 0x4|3 }, + {{ 0x8085e66c, 0x8083a948, 0x8085dcd8, 0x8084ca2c }, 0xa30|2, 0xa30|3 }, + {{ 0x8085f09c, 0x8085bfd4, 0x8085e708, 0x8084d45c }, 0xe24|2, 0xe24|3 }, + {{ 0x8085fec0, 0x8082e5c4, 0x8085f52c, 0x8084e280 }, 0x68|2, 0x68|3 }, + {{ 0x8085ffcc, 0x8083b380, 0x8085f638, 0x8084e38c }, 0xb00|1, 0xb00|1 }, + {{ 0x80860acc, 0x8083be80, 0x80860138, 0x8084ee8c }, 0x4|0, 0x454|1 }, + {{ 0x80860f28, 0x8085cf08, 0x80860594, 0x8084f2e8 }, 0x1ee8|2, 0x1ee8|3 }, + {{ 0x80862e14, 0x8083c2d0, 0x80862480, 0x808511d4 }, 0x40c|2, 0x40c|3 }, + {{ 0x8086322c, 0x8085edfc, 0x80862898, 0x808515ec }, 0x1c64|2, 0x1c64|3 }, + {{ 0x80864e90, 0x80860a60, 0x808644fc, 0x80794d0c }, 0x4|3, 0x4|3 }, + {{ 0x80864e94, 0x80860a64, 0x80864500, 0x80853254 }, 0x25c|2, 0x25c|3 }, + {{ 0x808650f0, 0x8077cc20, 0x8086475c, 0x808534b0 }, 0x4|3, 0x4|3 }, + {{ 0x808650f4, 0x80860cc4, 0x80864760, 0x808534b4 }, 0xdd4|2, 0xdd4|3 }, + {{ 0x80865ec8, 0x80853420, 0x80865534, 0x80854288 }, 0x8|2, 0x8|3 }, + {{ 0x80865ed0, 0x80861aa0, 0x8086553c, 0x80854290 }, 0x6fc|2, 0x6fc|3 }, + {{ 0x808665cc, 0x8086219c, 0x80865c38, 0x80794d0c }, 0x4|3, 0x4|3 }, + {{ 0x808665d0, 0x808621a0, 0x80865c3c, 0x80854990 }, 0xaa8|2, 0xaa8|3 }, + {{ 0x80867084, 0x80864d30, 0x808666f0, 0x80855444 }, 0x650|2, 0x650|3 }, + {{ 0x808676e0, 0x80862c5c, 0x80866d4c, 0x80855aa0 }, 0x20d0|2, 0x20d0|3 }, + {{ 0x808697b8, 0x8086e680, 0x80868e24, 0x80857b78 }, 0x4|3, 0x4|3 }, + {{ 0x808697bc, 0x8086538c, 0x80868e28, 0x80857b7c }, 0xa84|2, 0xa84|3 }, + {{ 0x8086a250, 0x808766f0, 0x808698bc, 0x80858610 }, 0x1e34|2, 0x1e34|3 }, + {{ 0x8086c088, 0x8086867c, 0x8086b6f4, 0x8085a448 }, 0x74|2, 0x74|3 }, + {{ 0x8086c0fc, 0x8087852c, 0x8086b768, 0x8085a4bc }, 0x850|2, 0x850|3 }, + {{ 0x8086c958, 0x80866b00, 0x8086bfc4, 0x8085ad18 }, 0xb0|2, 0xb0|3 }, + {{ 0x8086ca30, 0x80878da8, 0x8086c09c, 0x8085adf0 }, 0x624c|2, 0x624c|3 }, + {{ 0x80872c94, 0x80865e14, 0x80872300, 0x80861054 }, 0xcec|2, 0xcec|3 }, + {{ 0x80873990, 0x8082d8c0, 0x80872ffc, 0x80861d50 }, 0x4|3, 0x4|3 }, + {{ 0x80873998, 0x80866bd0, 0x80873004, 0x80861d58 }, 0x1aac|2, 0x1aac|3 }, + {{ 0x80875450, 0x808686f8, 0x80874abc, 0x80863810 }, 0xdfe8|2, 0xdfe8|3 }, + {{ 0x80883444, 0x8087f014, 0x80882ab0, 0x80871804 }, 0xc260|2, 0xc2c0|3 }, + {{ 0x8088f704, 0x8088b2d4, 0x8088ed70, 0x8087dac4 }, 0x4|3, 0x4|3 }, + {{ 0x8088f728, 0x8088b2e8, 0x8088ed88, 0x8087dae8 }, 0x18c|2, 0x18c|3 }, + {{ 0x8088f8b8, 0x8088cc78, 0x8088ef18, 0x8087dc78 }, 0x14|2, 0x14|3 }, + {{ 0x8088f8cc, 0x8088cf34, 0x8088ef2c, 0x8087dc8c }, 0x4|3, 0x4|3 }, + {{ 0x8088f8d0, 0x8088b478, 0x8088ef30, 0x8087dc90 }, 0x324|2, 0x324|3 }, + {{ 0x8088fbf4, 0x8088b79c, 0x8088f254, 0x8087dffc }, 0x174|2, 0x174|3 }, + {{ 0x8088fd68, 0x8088fd68, 0x8088f3c8, 0x8087fd68 }, 0x4|3, 0x4|3 }, + {{ 0x8088fd6c, 0x8088b914, 0x8088f3cc, 0x8087e174 }, 0x48|2, 0x48|3 }, + {{ 0x8088fdf4, 0x8088b990, 0x8088f440, 0x8087e1f0 }, 0x4|3, 0x4|3 }, + {{ 0x8088fe00, 0x8088b9a0, 0x8088f450, 0x8087e200 }, 0x160|2, 0x160|3 }, + {{ 0x8088ff60, 0x8088bb00, 0x8088f5b0, 0x8087ff60 }, 0x4|3, 0x4|3 }, + {{ 0x8088ff64, 0x8088bb04, 0x8088f5b4, 0x8087e364 }, 0x2c|2, 0x2c|3 }, + {{ 0x8088ff98, 0x8088cc90, 0x8088f5e8, 0x8087e398 }, 0x8|2, 0x8|3 }, + {{ 0x8088ffa8, 0x8088bb38, 0x8088f5f8, 0x8087e3a8 }, 0x8|2, 0x8|3 }, + {{ 0x8088ffb0, 0x8088ffb0, 0x8088ffb0, 0x8087e3b0 }, 0x4|3, 0x4|3 }, + {{ 0x8088ffb4, 0x8088bb44, 0x8088f604, 0x8087e3b4 }, 0x2dc|2, 0x2dc|3 }, + {{ 0x80890294, 0x8088cc9c, 0x8088f8e4, 0x8087e694 }, 0x104|2, 0x104|3 }, + {{ 0x8089039c, 0x8088be24, 0x8088f9ec, 0x8087e79c }, 0x10c|2, 0x10c|3 }, + {{ 0x808904b8, 0x8088bf40, 0x8088fb08, 0x8087e8bc }, 0xa8|2, 0xa8|3 }, + {{ 0x80890568, 0x8088bff0, 0x8088fbb8, 0x8087e970 }, 0xa04|2, 0xa04|3 }, + {{ 0x80890f74, 0x8088cda4, 0x808905c4, 0x8087f37c }, 0x17c|2, 0x17c|3 }, + {{ 0x808910f0, 0x8088ca00, 0x80890740, 0x8087f4f8 }, 0x168|2, 0x168|3 }, + {{ 0x80891270, 0x8088cb68, 0x808908c0, 0x8087f678 }, 0x10c|2, 0x10c|3 }, + {{ 0x8089137c, 0x8088cf34, 0x808909cc, 0x8087f784 }, 0x2a4|2, 0x2a4|3 }, + {{ 0x80891634, 0x8088e07c, 0x80890c84, 0x8087fa3c }, 0x84|2, 0x84|3 }, + {{ 0x808916bc, 0x8088d1ec, 0x80890d0c, 0x8087fac4 }, 0xec|2, 0xec|3 }, + {{ 0x808917ac, 0x8088e104, 0x80890dfc, 0x8087fbb4 }, 0x44|2, 0x44|3 }, + {{ 0x808917f4, 0x8088d2dc, 0x80890e44, 0x8087fbfc }, 0x7ac|2, 0x7ac|3 }, + {{ 0x80891fa8, 0x8088e150, 0x808915f8, 0x808803b0 }, 0x44|2, 0x44|3 }, + {{ 0x80891ff8, 0x8088da90, 0x80891648, 0x80880400 }, 0x28|2, 0x28|3 }, + {{ 0x80892024, 0x8088e19c, 0x80891674, 0x8088042c }, 0x1d8|2, 0x1d8|3 }, + {{ 0x808921fc, 0x8088dabc, 0x8089184c, 0x80880604 }, 0x5b8|2, 0x5b8|3 }, + {{ 0x808927c4, 0x8089280c, 0x80891e14, 0x80880bcc }, 0x44|2, 0x44|3 }, + {{ 0x8089280c, 0x8088e37c, 0x80891e5c, 0x80880c14 }, 0xfc|2, 0xfc|3 }, + {{ 0x80892910, 0x80892858, 0x80891f60, 0x80880d18 }, 0x490|2, 0x490|3 }, + {{ 0x80892da8, 0x8088e480, 0x808923f8, 0x808811b0 }, 0xf0|2, 0xf0|3 }, + {{ 0x80892e98, 0x80891f00, 0x808924e8, 0x808812a0 }, 0x4|3, 0x4|3 }, + {{ 0x80892e9c, 0x80892cec, 0x808924ec, 0x808812a4 }, 0xf0|2, 0xf0|3 }, + {{ 0x80892fa4, 0x8088e574, 0x808925f4, 0x808813ac }, 0x38|2, 0x38|3 }, + {{ 0x80892ff8, 0x8088e5c8, 0x80892648, 0x80881404 }, 0x1e4|2, 0x1e4|3 }, + {{ 0x808931e0, 0x8088e7b0, 0x80892830, 0x808815f0 }, 0x8c|2, 0x8c|3 }, + {{ 0x80893270, 0x80892df8, 0x808928c0, 0x80881680 }, 0x68|2, 0x68|3 }, + {{ 0x80893318, 0x8088e840, 0x80892968, 0x80881728 }, 0x194|2, 0x194|3 }, + {{ 0x808934b4, 0x8088e9d4, 0x80892b04, 0x808818c4 }, 0x4f4|2, 0x4f4|3 }, + {{ 0x808939ac, 0x80892ea4, 0x80892ffc, 0x80881dbc }, 0x174|2, 0x174|3 }, + {{ 0x80893b20, 0x80893018, 0x80893170, 0x80881f3c }, 0x4|3, 0x4|3 }, + {{ 0x80893b28, 0x80893020, 0x80893178, 0x80881f48 }, 0x18|2, 0x18|3 }, + {{ 0x80893b50, 0x80893048, 0x808931a0, 0x80881f60 }, 0x318|2, 0x318|3 }, + {{ 0x80893e6c, 0x8088eecc, 0x808934bc, 0x8088227c }, 0x4|1, 0x4|1 }, + {{ 0x80893e70, 0x8088eed0, 0x808934c0, 0x80882280 }, 0x4|0, 0x1f8|1 }, + {{ 0x80894078, 0x8088f0d8, 0x808936c8, 0x80882488 }, 0x5c|2, 0x5c|3 }, + {{ 0x808940f4, 0x80893364, 0x80893744, 0x80882504 }, 0x148|2, 0x148|3 }, + {{ 0x80894240, 0x8088f158, 0x80893890, 0x80882650 }, 0x59c|2, 0x59c|3 }, + {{ 0x808947e0, 0x808934b0, 0x80893e30, 0x80882bf0 }, 0x7f8|2, 0x7f8|3 }, + {{ 0x80894fec, 0x808c902c, 0x8089463c, 0x808833fc }, 0x4|3, 0x4|3 }, + {{ 0x80894ff0, 0x8088f6f8, 0x80894640, 0x80883400 }, 0x5c8|2, 0x5c8|3 }, + {{ 0x808955b8, 0x80894c14, 0x80894c08, 0x808839c8 }, 0xc|2, 0xc|3 }, + {{ 0x808955cc, 0x8088fccc, 0x80894c1c, 0x808839dc }, 0x28|2, 0x28|3 }, + {{ 0x808955f4, 0x80893cc4, 0x80894c44, 0x80883a04 }, 0x68c|2, 0x68c|3 }, + {{ 0x80895c9c, 0x8088fcf4, 0x808952ec, 0x808845c4 }, 0xe0|2, 0xe0|3 }, + {{ 0x80895d84, 0x8089436c, 0x808953d4, 0x808846ac }, 0x3bc|2, 0x3bc|3 }, + {{ 0x80896144, 0x8088fddc, 0x80895794, 0x80884a6c }, 0x244|2, 0x244|3 }, + {{ 0x8089638c, 0x8089472c, 0x808959dc, 0x80884cb4 }, 0x38|2, 0x38|3 }, + {{ 0x808963c4, 0x80890024, 0x80895a14, 0x80884cec }, 0x3c|2, 0x3c|3 }, + {{ 0x80896404, 0x80894764, 0x80895a54, 0x80884d2c }, 0x2c4|2, 0x2c4|3 }, + {{ 0x808966e0, 0x80890068, 0x80895d30, 0x80885008 }, 0x974|2, 0x974|3 }, + {{ 0x80897070, 0x80894a40, 0x808966c0, 0x80885998 }, 0x26c|2, 0x26c|3 }, + {{ 0x808972f0, 0x808909f8, 0x80896940, 0x80885c18 }, 0x3a4|2, 0x3a4|3 }, + {{ 0x80897698, 0x80894cc0, 0x80896ce8, 0x80885fc0 }, 0x4a0|2, 0x4a0|3 }, + {{ 0x80897b40, 0x80890da0, 0x80897190, 0x80886468 }, 0x170|2, 0x170|3 }, + {{ 0x80897cb8, 0x80891f00, 0x80897308, 0x808865e0 }, 0x4|3, 0x4|3 }, + {{ 0x80897cbc, 0x80890f14, 0x8089730c, 0x808865e4 }, 0x468|2, 0x468|3 }, + {{ 0x80898124, 0x8089516c, 0x80897774, 0x80886a4c }, 0x28|2, 0x7c|3 }, + {{ 0x808981a0, 0x808951e8, 0x808977f0, 0x80886ac8 }, 0x14|3, 0x14|3 }, + {{ 0x808981c8, 0x80895210, 0x8088edcc, 0x8088410c }, 0x8|2, 0x8|3 }, + {{ 0x8089822c, 0x8089526c, 0x8088edcc, 0x8087db2c }, 0x14|2, 0x14|3 }, + {{ 0x80898244, 0x8089528c, 0x80897874, 0x80886b4c }, 0x2c|2, 0x2c|3 }, + {{ 0x80898270, 0x808952b8, 0x8089779c, 0x80886a74 }, 0x30|2, 0x30|3 }, + {{ 0x808982b8, 0x80895300, 0x808c87e0, 0x808b7b28 }, 0x4|3, 0x4|3 }, + {{ 0x80898344, 0x8089538c, 0x8088edd4, 0x8087db34 }, 0x4|3, 0x4|3 }, + {{ 0x80898368, 0x808953b0, 0x80897874, 0x80886b4c }, 0x2c|2, 0x2c|3 }, + {{ 0x80898394, 0x808953dc, 0x8089779c, 0x80886a74 }, 0x30|2, 0x30|3 }, + {{ 0x808983e8, 0x808951e8, 0x808977f0, 0x80886ac8 }, 0x14|2, 0x14|3 }, + {{ 0x80898410, 0x80895210, 0x8088edcc, 0x8088410c }, 0x8|2, 0x8|3 }, + {{ 0x80898484, 0x80895284, 0x8089786c, 0x80886b44 }, 0x8|2, 0x8|3 }, + {{ 0x80898500, 0x808c4ee4, 0x808c878c, 0x808b7ad4 }, 0x4|3, 0x4|3 }, + {{ 0x808985a8, 0x80895284, 0x8089786c, 0x80886b44 }, 0x8|2, 0x8|3 }, + {{ 0x808985b0, 0x808953b0, 0x80897874, 0x80886b4c }, 0x2c|2, 0x2c|3 }, + {{ 0x808985dc, 0x808953dc, 0x8089779c, 0x80886a74 }, 0x30|2, 0x54|3 }, + {{ 0x80898630, 0x80895430, 0x808977f0, 0x80886ac8 }, 0x14|3, 0x14|3 }, + {{ 0x80898658, 0x80895458, 0x8088edcc, 0x8088410c }, 0x8|2, 0x8|3 }, + {{ 0x808986cc, 0x808954cc, 0x8089786c, 0x80886b44 }, 0x34|2, 0x34|3 }, + {{ 0x80898704, 0x8089137c, 0x808978a4, 0x80886b7c }, 0x314|2, 0x314|3 }, + {{ 0x80898a20, 0x80893190, 0x808932e8, 0x808820a8 }, 0x4|3, 0x4|3 }, + {{ 0x80898a28, 0x8089169c, 0x80897bc4, 0x80886e9c }, 0x4|3, 0x4|3 }, + {{ 0x80898a2c, 0x80891684, 0x80897bac, 0x80886e84 }, 0x1c|2, 0x1c|3 }, + {{ 0x80898a48, 0x80891684, 0x80897bac, 0x80886e84 }, 0x2c|2, 0x2c|3 }, + {{ 0x80898a80, 0x808916b8, 0x80897be0, 0x80886eb8 }, 0x844|2, 0x844|3 }, + {{ 0x808992c8, 0x80895500, 0x80898428, 0x80887700 }, 0x368|2, 0x368|3 }, + {{ 0x80899638, 0x80891f08, 0x80898798, 0x80887a70 }, 0x1e0|2, 0x1e0|3 }, + {{ 0x80899820, 0x80895870, 0x80898980, 0x80887c58 }, 0x154|2, 0x154|3 }, + {{ 0x80899978, 0x8088f1a4, 0x80898ad8, 0x80887db0 }, 0x4|3, 0x4|3 }, + {{ 0x8089997c, 0x808920ec, 0x80898adc, 0x80887db4 }, 0x574|2, 0x574|3 }, + {{ 0x80899ef8, 0x808959d0, 0x80899058, 0x80888330 }, 0xdc|2, 0xdc|3 }, + {{ 0x80899fd8, 0x80892668, 0x80899138, 0x80888410 }, 0x1a0|2, 0x1a0|3 }, + {{ 0x8089a180, 0x80895ab0, 0x808992e0, 0x808885b8 }, 0x124|2, 0x124|3 }, + {{ 0x8089a2bc, 0x80896d44, 0x8089941c, 0x808886f4 }, 0x324|2, 0x324|3 }, + {{ 0x8089a5e8, 0x80895bf0, 0x80899748, 0x80888a20 }, 0xd0|1, 0xd0|1 }, + {{ 0x8089a6b8, 0x80895cc0, 0x80899818, 0x80888af0 }, 0x4|0, 0x64|1 }, + {{ 0x8089a720, 0x80895d28, 0x80899880, 0x80888ba8 }, 0x14|2, 0x14|3 }, + {{ 0x8089a738, 0x80895d40, 0x80899898, 0x80888b58 }, 0x50|2, 0x50|3 }, + {{ 0x8089a788, 0x80895d90, 0x808998e8, 0x80888bc0 }, 0x2d0|2, 0x2e4|3 }, + {{ 0x8089aa6c, 0x80896074, 0x80899bcc, 0x80888ea4 }, 0xd4|3, 0xd4|3 }, + {{ 0x8089ab44, 0x8089614c, 0x80899ca4, 0x80888f4c }, 0x18|2, 0x18|3 }, + {{ 0x8089ab5c, 0x80896164, 0x80899cbc, 0x80888f4c }, 0x10|2, 0x10|3 }, + {{ 0x8089ab74, 0x8089617c, 0x80899cd4, 0x80888fb4 }, 0x5c|1, 0x5c|1 }, + {{ 0x8089abd0, 0x808961d8, 0x80899d30, 0x80889010 }, 0x4|0, 0x54|1 }, + {{ 0x8089ac24, 0x8089622c, 0x80899d84, 0x8088965c }, 0x4|3, 0x4|3 }, + {{ 0x8089ac2c, 0x80896234, 0x80899d8c, 0x80889018 }, 0x14|2, 0x14|3 }, + {{ 0x8089acc8, 0x808962d0, 0x80899e28, 0x80888b38 }, 0x8|2, 0x8|3 }, + {{ 0x8089ad30, 0x80896338, 0x80899e90, 0x808891d4 }, 0x18|2, 0x18|3 }, + {{ 0x8089ad78, 0x80896380, 0x80899ed8, 0x808891fc }, 0x4|3, 0x4|3 }, + {{ 0x8089ad84, 0x8089638c, 0x80899ee4, 0x808891a4 }, 0x1c|2, 0x1c|3 }, + {{ 0x8089adbc, 0x808963c4, 0x80899f1c, 0x8088906c }, 0xc|2, 0xc|3 }, + {{ 0x8089ade4, 0x808963ec, 0x80899f44, 0x80889150 }, 0x8|2, 0x8|3 }, + {{ 0x8089ae38, 0x80896440, 0x80899f98, 0x80889298 }, 0x84|2, 0x84|3 }, + {{ 0x8089aec0, 0x80897070, 0x8089a020, 0x80889320 }, 0x1c|2, 0x1c|3 }, + {{ 0x8089aee0, 0x808964c8, 0x8089a040, 0x80889340 }, 0x878|2, 0x878|3 }, + {{ 0x8089b760, 0x80897090, 0x8089a8c0, 0x80889bc0 }, 0x3ca4|2, 0x3ca4|3 }, + {{ 0x8089f404, 0x808adf7c, 0x8089e564, 0x8088d864 }, 0x4|3, 0x4|3 }, + {{ 0x8089f408, 0x8089bb68, 0x8089e568, 0x8088d868 }, 0x98|2, 0x98|3 }, + {{ 0x8089f4a4, 0x8089ad34, 0x8089e604, 0x8088d904 }, 0xfc|2, 0xfc|3 }, + {{ 0x8089f5a0, 0x8089bc08, 0x8089e700, 0x8088da00 }, 0x1a0|2, 0x1a0|3 }, + {{ 0x8089f740, 0x808a49a0, 0x8089e8a0, 0x8088dba0 }, 0x10|2, 0x10|3 }, + {{ 0x8089f758, 0x8089ae30, 0x8089e8b8, 0x8088dbb8 }, 0x5c|2, 0x5c|3 }, + {{ 0x8089f7b4, 0x8089bdbc, 0x8089e914, 0x8088dc14 }, 0x1c4|2, 0x1c4|3 }, + {{ 0x8089f984, 0x8089bf84, 0x8089eae4, 0x8088dde4 }, 0x5c|2, 0x5c|3 }, + {{ 0x8089f9e8, 0x8089ae98, 0x8089eb48, 0x8088de48 }, 0x244|2, 0x244|3 }, + {{ 0x8089fc34, 0x80895124, 0x8089ed94, 0x8088e094 }, 0x4|3, 0x4|3 }, + {{ 0x8089fc3c, 0x8089bfec, 0x8089ed9c, 0x8088e09c }, 0x14|2, 0x14|3 }, + {{ 0x8089fc50, 0x8089c000, 0x8089fc50, 0x8088e0b0 }, 0x4|3, 0x4|3 }, + {{ 0x8089fc54, 0x8089c004, 0x8089edb4, 0x8088e0b4 }, 0x84|2, 0x84|3 }, + {{ 0x8089fcd8, 0x8089b0e8, 0x8089ee38, 0x8088e138 }, 0x8c|2, 0x8c|3 }, + {{ 0x8089fd68, 0x8089c088, 0x8089eec8, 0x8088e1c8 }, 0x18|2, 0x18|3 }, + {{ 0x8089fd80, 0x8089c0a0, 0x8089fd80, 0x8088e1e0 }, 0x4|3, 0x4|3 }, + {{ 0x8089fd84, 0x8089c0a4, 0x8089eee4, 0x8088e1e4 }, 0x16c|2, 0x16c|3 }, + {{ 0x8089fef0, 0x8089b178, 0x8089f050, 0x8088e350 }, 0xe4|2, 0xe4|3 }, + {{ 0x8089ffd4, 0x8089ffa4, 0x8089f134, 0x8088e434 }, 0x4|3, 0x4|3 }, + {{ 0x8089ffd8, 0x8089b260, 0x8089f138, 0x8088e438 }, 0x90|2, 0x90|3 }, + {{ 0x808a0068, 0x808a0020, 0x8089f1c8, 0x8088e4c8 }, 0x4|3, 0x4|3 }, + {{ 0x808a006c, 0x8089c314, 0x8089f1cc, 0x8088e4cc }, 0x4|3, 0x4|3 }, + {{ 0x808a0070, 0x8089c210, 0x8089f1d0, 0x8088e4d0 }, 0x1c|2, 0x1c|3 }, + {{ 0x808a0098, 0x8089b2f8, 0x8089f1f8, 0x8088e4f8 }, 0x38|2, 0x38|3 }, + {{ 0x808a00d0, 0x8089b330, 0x8089f230, 0x808900d0 }, 0x4|3, 0x4|3 }, + {{ 0x808a00d4, 0x8089b334, 0x8089f234, 0x8088e534 }, 0x4|3, 0x4|3 }, + {{ 0x808a00d8, 0x808a00d8, 0x808a00d8, 0x808900d8 }, 0x4|3, 0x4|3 }, + {{ 0x808a00dc, 0x8089b33c, 0x8089f23c, 0x8088e53c }, 0x220|2, 0x220|3 }, + {{ 0x808a02fc, 0x8089f078, 0x8089f45c, 0x8088e75c }, 0x40|2, 0x40|3 }, + {{ 0x808a0340, 0x8089c238, 0x8089f4a0, 0x8088e7a0 }, 0x34|2, 0x34|3 }, + {{ 0x808a0378, 0x8089b5a0, 0x8089f4d8, 0x8088e7d8 }, 0xe4|2, 0xe4|3 }, + {{ 0x808a0468, 0x8089c270, 0x8089f5c8, 0x8088e8c8 }, 0xd4|2, 0xd4|3 }, + {{ 0x808a0540, 0x8089b690, 0x8089f6a0, 0x8088e9a0 }, 0xb0|2, 0xb0|3 }, + {{ 0x808a05f0, 0x8089c348, 0x8089f750, 0x8088ea50 }, 0x7c|2, 0x7c|3 }, + {{ 0x808a0670, 0x8089b740, 0x8089f7d0, 0x8088ead0 }, 0x1c4|2, 0x1c4|3 }, + {{ 0x808a0834, 0x8089c3c4, 0x8089f994, 0x8088ec94 }, 0x38|2, 0x38|3 }, + {{ 0x808a086c, 0x8089b904, 0x8089f9cc, 0x8088eccc }, 0x158|2, 0x158|3 }, + {{ 0x808a09c4, 0x8089c4c0, 0x8089fb24, 0x8088ee24 }, 0x8|2, 0x8|3 }, + {{ 0x808a09d0, 0x8089c400, 0x8089fb30, 0x8088ee30 }, 0xc8|2, 0xc8|3 }, + {{ 0x808a0aa0, 0x8089ba68, 0x8089fc00, 0x8088ef00 }, 0xfc|2, 0xfc|3 }, + {{ 0x808a0ba0, 0x8089c4d0, 0x8089fd00, 0x8088f000 }, 0x2f0|2, 0x2f0|3 }, + {{ 0x808a0e94, 0x8089d63c, 0x8089fff4, 0x8088f2f4 }, 0x20|2, 0x20|3 }, + {{ 0x808a0ed0, 0x8089c7c8, 0x808a0030, 0x8088f330 }, 0x208|1, 0x208|1 }, + {{ 0x808a10d8, 0x8089c9d0, 0x808a0238, 0x8088f538 }, 0x4|0, 0x2ec|1 }, + {{ 0x808a13d8, 0x8089d678, 0x808a0538, 0x8088f838 }, 0x2b0|2, 0x2b0|3 }, + {{ 0x808a168c, 0x8089cccc, 0x808a07ec, 0x8088faec }, 0x6a0|2, 0x6a0|3 }, + {{ 0x808a1d38, 0x8089d930, 0x808a0e98, 0x80890198 }, 0x14|2, 0x3c|3 }, + {{ 0x808a1d74, 0x8089d96c, 0x808a0ed4, 0x808901d4 }, 0xc|3, 0xc|3 }, + {{ 0x808a1d80, 0x8089d378, 0x808a0ee0, 0x808901e0 }, 0x274|2, 0x274|3 }, + {{ 0x808a1ff4, 0x8089c8ac, 0x808a1154, 0x80890454 }, 0x8|2, 0x8|3 }, + {{ 0x808a1ffc, 0x8089d5ec, 0x808a115c, 0x8089045c }, 0x8|2, 0x8|3 }, + {{ 0x808a2050, 0x8089d980, 0x808a11b0, 0x808904b0 }, 0x368|2, 0x368|3 }, + {{ 0x808a23c0, 0x8089e3f8, 0x808a1520, 0x80890820 }, 0x17c|2, 0x17c|3 }, + {{ 0x808a253c, 0x8089dcec, 0x808a169c, 0x8089099c }, 0xf4|2, 0xf4|3 }, + {{ 0x808a2630, 0x8089e578, 0x808a1790, 0x80890a90 }, 0x3c|2, 0x3c|3 }, + {{ 0x808a266c, 0x808a5d04, 0x808a17cc, 0x80890acc }, 0x4|3, 0x4|3 }, + {{ 0x808a2670, 0x8089dde0, 0x808a17d0, 0x80890ad0 }, 0x14|2, 0x14|3 }, + {{ 0x808a2684, 0x8089e5b4, 0x808a17e4, 0x80890ae4 }, 0x1c|2, 0x1c|3 }, + {{ 0x808a26a8, 0x8089ddf8, 0x808a1808, 0x80890b08 }, 0x3c|2, 0x3c|3 }, + {{ 0x808a26e8, 0x8089e5d8, 0x808a1848, 0x80890b48 }, 0x20|2, 0x20|3 }, + {{ 0x808a2710, 0x8089de38, 0x808a1870, 0x80890b70 }, 0x188|2, 0x188|3 }, + {{ 0x808a289c, 0x8089e5fc, 0x808a19fc, 0x80890cfc }, 0x24|2, 0x24|3 }, + {{ 0x808a28c4, 0x8089dfc4, 0x808a1a24, 0x80890d24 }, 0x424|2, 0x424|3 }, + {{ 0x808a2ce8, 0x8089e2a0, 0x808a1e48, 0x80891148 }, 0x8|2, 0x8|3 }, + {{ 0x808a2cf8, 0x8089f6c0, 0x808a1e58, 0x80891158 }, 0x1e0|2, 0x1e0|3 }, + {{ 0x808a2edc, 0x8089e624, 0x808a203c, 0x8089133c }, 0x3f8|2, 0x3f8|3 }, + {{ 0x808a32d4, 0x808a2d34, 0x808a2434, 0x80891734 }, 0x4|3, 0x4|3 }, + {{ 0x808a32d8, 0x8089f8a8, 0x808a2438, 0x80891738 }, 0xfc|2, 0xfc|3 }, + {{ 0x808a33e0, 0x8089ea20, 0x808a2540, 0x80891840 }, 0x1d4|2, 0x1d4|3 }, + {{ 0x808a35b4, 0x8089f9ac, 0x808a2714, 0x80891a14 }, 0x248|2, 0x248|3 }, + {{ 0x808a37fc, 0x8089ebf4, 0x808a295c, 0x80891c5c }, 0x64|2, 0x64|3 }, + {{ 0x808a3860, 0x808a0020, 0x808a29c0, 0x80891cc0 }, 0x4|3, 0x4|3 }, + {{ 0x808a3864, 0x8089fbf4, 0x808a29c4, 0x80891cc4 }, 0x40|2, 0x40|3 }, + {{ 0x808a38a8, 0x8089ec60, 0x808a2a08, 0x80891d08 }, 0x1e8|1, 0x1e8|1 }, + {{ 0x808a3a90, 0x8089ee48, 0x808a2bf0, 0x80891ef0 }, 0x4|0, 0x30|1 }, + {{ 0x808a3ac8, 0x8089fc38, 0x808a2c28, 0x80891f28 }, 0xfc|2, 0xfc|3 }, + {{ 0x808a3bc8, 0x8089ee80, 0x808a2d28, 0x80892028 }, 0x74|2, 0x74|3 }, + {{ 0x808a3c3c, 0x8089f114, 0x808a2d9c, 0x8089209c }, 0x4|3, 0x4|3 }, + {{ 0x808a3c40, 0x8089fd38, 0x808a2da0, 0x808920a0 }, 0x150|2, 0x150|3 }, + {{ 0x808a3d94, 0x8089eef4, 0x808a2ef4, 0x808921f4 }, 0x94|2, 0x94|3 }, + {{ 0x808a3e28, 0x8089fe90, 0x808a2f88, 0x80892288 }, 0x18|2, 0x18|3 }, + {{ 0x808a3e48, 0x8089ef88, 0x808a2fa8, 0x808922a8 }, 0x18c|2, 0x18c|3 }, + {{ 0x808a3fd8, 0x8089feb0, 0x808a3138, 0x80892438 }, 0xdc|2, 0xdc|3 }, + {{ 0x808a40b8, 0x8089f118, 0x808a3218, 0x80892518 }, 0x248|2, 0x248|3 }, + {{ 0x808a4308, 0x8089ff90, 0x808a3468, 0x80892768 }, 0x2c|2, 0x2c|3 }, + {{ 0x808a4340, 0x8089f368, 0x808a34a0, 0x808927a0 }, 0x150|2, 0x150|3 }, + {{ 0x808a4490, 0x8089ffc8, 0x808a35f0, 0x808928f0 }, 0x108|2, 0x108|3 }, + {{ 0x808a45a0, 0x8089f4b8, 0x808a3700, 0x80892a00 }, 0x200|2, 0x200|3 }, + {{ 0x808a47a4, 0x808a00d4, 0x808a3904, 0x80892c04 }, 0x74|2, 0x74|3 }, + {{ 0x808a4820, 0x808a2a48, 0x808a3980, 0x80892c80 }, 0x2ec|2, 0x2ec|3 }, + {{ 0x808a4b10, 0x808a0150, 0x808a3c70, 0x80892f70 }, 0xd44|2, 0xd44|3 }, + {{ 0x808a5858, 0x808a2d38, 0x808a49b8, 0x80893cb8 }, 0xdc|2, 0xdc|3 }, + {{ 0x808a5938, 0x808a0e98, 0x808a4a98, 0x80893d98 }, 0x4c|2, 0x4c|3 }, + {{ 0x808a5984, 0x808a2e14, 0x808a4ae4, 0x80893de4 }, 0x28|2, 0x28|3 }, + {{ 0x808a59ac, 0x808a0ed4, 0x808a4b0c, 0x80893e0c }, 0x104|1, 0x104|1 }, + {{ 0x808a5ab0, 0x808a0fd8, 0x808a4c10, 0x80893f10 }, 0x314|0, 0x338|1 }, + {{ 0x808a5dec, 0x808a0a9c, 0x808a4f4c, 0x8089424c }, 0x4|3, 0x4|3 }, + {{ 0x808a5df0, 0x808a2e50, 0x808a4f50, 0x80894250 }, 0x254|2, 0x254|3 }, + {{ 0x808a6044, 0x8088e00c, 0x808a51a4, 0x808944a4 }, 0x4|3, 0x4|3 }, + {{ 0x808a6048, 0x808a1318, 0x808a51a8, 0x808944a8 }, 0x1544|2, 0x1544|3 }, + {{ 0x808a759c, 0x808a2864, 0x808a66fc, 0x808959fc }, 0x34|2, 0x34|3 }, + {{ 0x808a75d8, 0x808a30b0, 0x808a6738, 0x80895a38 }, 0x4c|2, 0x4c|3 }, + {{ 0x808a7624, 0x808a289c, 0x808a6784, 0x80895a84 }, 0x54|2, 0x54|3 }, + {{ 0x808a7678, 0x8089aa14, 0x808a67d8, 0x80895ad8 }, 0x4|3, 0x4|3 }, + {{ 0x808a7688, 0x808a28f8, 0x808a67e8, 0x80895ae8 }, 0x150|2, 0x150|3 }, + {{ 0x808a77d8, 0x808a9090, 0x808a6938, 0x80895c38 }, 0x600|2, 0x600|3 }, + {{ 0x808a7de0, 0x808a3108, 0x808a6f40, 0x80896240 }, 0x78|1, 0x78|1 }, + {{ 0x808a7e58, 0x808a3180, 0x808a6fb8, 0x808962b8 }, 0x4|0, 0x894|1 }, + {{ 0x808a86f0, 0x808a9698, 0x808a7850, 0x80896b50 }, 0xa44|2, 0xa44|3 }, + {{ 0x808a9140, 0x808a3a18, 0x808a82a0, 0x808975a0 }, 0x7d0|2, 0x7d0|3 }, + {{ 0x808a9918, 0x808aa0e8, 0x808a8a78, 0x80897d78 }, 0x114|2, 0x114|3 }, + {{ 0x808a9a38, 0x808a41f0, 0x808a8b98, 0x80897e98 }, 0x4c|2, 0x4c|3 }, + {{ 0x808a9a84, 0x808aa204, 0x808a8be4, 0x80897ee4 }, 0x7c|2, 0x7c|3 }, + {{ 0x808a9b00, 0x8089fe88, 0x808a8c60, 0x80897f60 }, 0x4|3, 0x4|3 }, + {{ 0x808a9b04, 0x808a423c, 0x808a8c64, 0x80897f64 }, 0x1c8|2, 0x1c8|3 }, + {{ 0x808a9cd4, 0x808aa284, 0x808a8e34, 0x80898134 }, 0x58|2, 0x58|3 }, + {{ 0x808a9d34, 0x808a440c, 0x808a8e94, 0x80898194 }, 0xa38|2, 0xa38|3 }, + {{ 0x808aa770, 0x808aa2e8, 0x808a98d0, 0x80898bd0 }, 0x4c|2, 0x4c|3 }, + {{ 0x808aa7c4, 0x808ceb9c, 0x808a9924, 0x80898c24 }, 0x4|3, 0x4|3 }, + {{ 0x808aa7c8, 0x808a4e48, 0x808a9928, 0x80898c28 }, 0x240|2, 0x240|3 }, + {{ 0x808aaa10, 0x808aa340, 0x808a9b70, 0x80898e70 }, 0x13c|2, 0x13c|3 }, + {{ 0x808aab58, 0x808a5090, 0x808a9cb8, 0x80898fb8 }, 0x1e0|2, 0x1e0|3 }, + {{ 0x808aad3c, 0x808aa484, 0x808a9e9c, 0x8089919c }, 0x8c|2, 0x8c|3 }, + {{ 0x808aadc8, 0x8089f0b8, 0x808a9f28, 0x80899228 }, 0x4|3, 0x4|3 }, + {{ 0x808aadcc, 0x808a5274, 0x808a9f2c, 0x8089922c }, 0x174|2, 0x174|3 }, + {{ 0x808aaf40, 0x808aa518, 0x808aa0a0, 0x808993a0 }, 0x84|2, 0x84|3 }, + {{ 0x808aafc8, 0x808a53e8, 0x808aa128, 0x80899428 }, 0xa0|2, 0xa0|3 }, + {{ 0x808ab068, 0x808aa5a0, 0x808aa1c8, 0x808994c8 }, 0x54|2, 0x54|3 }, + {{ 0x808ab0c0, 0x808a54a0, 0x808aa220, 0x80899520 }, 0x288|2, 0x288|3 }, + {{ 0x808ab348, 0x808aa5f8, 0x808aa4a8, 0x808997a8 }, 0x8c|2, 0x8c|3 }, + {{ 0x808ab3d8, 0x808a5728, 0x808aa538, 0x80899838 }, 0x5d8|2, 0x5d8|3 }, + {{ 0x808ab9b4, 0x808aa684, 0x808aab14, 0x80899e14 }, 0xcc|2, 0xcc|3 }, + {{ 0x808aba84, 0x808a5d04, 0x808aabe4, 0x80899ee4 }, 0xe6c|2, 0xe6c|3 }, + {{ 0x808ac8f8, 0x808aa758, 0x808aba58, 0x8089ad58 }, 0x24|2, 0x24|3 }, + {{ 0x808ac91c, 0x8089f6b8, 0x808aba7c, 0x8089ad7c }, 0x4|3, 0x4|3 }, + {{ 0x808ac920, 0x808a6b78, 0x808aba80, 0x8089ad80 }, 0x4c|2, 0x4c|3 }, + {{ 0x808ac978, 0x808aa780, 0x808abad8, 0x8089add8 }, 0x160|2, 0x160|3 }, + {{ 0x808acae0, 0x808a6bd0, 0x808abc40, 0x8089af40 }, 0xe0|2, 0xe0|3 }, + {{ 0x808acbc0, 0x808aa8e8, 0x808abd20, 0x8089b020 }, 0x134|2, 0x134|3 }, + {{ 0x808acd2c, 0x808a7a44, 0x808abe8c, 0x8089b18c }, 0x4|3, 0x4|3 }, + {{ 0x808acd30, 0x808a6cb0, 0x808abe90, 0x8089b190 }, 0x220|2, 0x220|3 }, + {{ 0x808acf68, 0x808aaa58, 0x808ac0c8, 0x8089b3c8 }, 0x38|2, 0x38|3 }, + {{ 0x808acfa4, 0x808a13d0, 0x808ac104, 0x8089b404 }, 0x4|3, 0x4|3 }, + {{ 0x808acfa8, 0x808a6ee8, 0x808ac108, 0x8089b408 }, 0x468|2, 0x468|3 }, + {{ 0x808ad414, 0x808aaab8, 0x808ac574, 0x8089b874 }, 0x4|3, 0x4|3 }, + {{ 0x808ad418, 0x808aaa98, 0x808ac578, 0x8089b878 }, 0x25c|2, 0x25c|3 }, + {{ 0x808ad674, 0x808a7354, 0x808ac7d4, 0x8089bad4 }, 0x62c|2, 0x62c|3 }, + {{ 0x808adca0, 0x808aacf8, 0x808ace00, 0x8089c100 }, 0xf0|2, 0xf0|3 }, + {{ 0x808add94, 0x808a7d3c, 0x808acef4, 0x8089c1f4 }, 0x4|3, 0x4|3 }, + {{ 0x808add98, 0x808a7980, 0x808acef8, 0x8089c1f8 }, 0x784|2, 0x784|3 }, + {{ 0x808ae520, 0x808aadf0, 0x808ad680, 0x8089c980 }, 0x254|2, 0x254|3 }, + {{ 0x808ae774, 0x808a6ce0, 0x808ad8d4, 0x8089cbd4 }, 0x4|3, 0x4|3 }, + {{ 0x808ae778, 0x808ab048, 0x808ad8d8, 0x8089cbd8 }, 0xc|2, 0xc|3 }, + {{ 0x808ae784, 0x808a6cf0, 0x808ad8e4, 0x8089cbe4 }, 0x4|3, 0x4|3 }, + {{ 0x808ae788, 0x808ab058, 0x808ad8e8, 0x8089cbe8 }, 0x54|2, 0x54|3 }, + {{ 0x808ae7e8, 0x808a8108, 0x808ad948, 0x8089cc48 }, 0x178|2, 0x178|3 }, + {{ 0x808ae978, 0x808ab0b8, 0x808adad8, 0x8089cdd8 }, 0x1c0|2, 0x1c0|3 }, + {{ 0x808aeb40, 0x808a8298, 0x808adca0, 0x8089cfa0 }, 0x6b4|2, 0x6b4|3 }, + {{ 0x808af200, 0x808ab280, 0x808ae360, 0x8089d660 }, 0x184|2, 0x184|3 }, + {{ 0x808af384, 0x808a8954, 0x808ae4e4, 0x8089d7e4 }, 0x18|2, 0x18|3 }, + {{ 0x808af3a0, 0x808ab408, 0x808ae500, 0x8089d800 }, 0x88|2, 0x88|3 }, + {{ 0x808af430, 0x808a8970, 0x808ae590, 0x8089d890 }, 0x71c|2, 0x71c|3 }, + {{ 0x808afb50, 0x808ab498, 0x808aecb0, 0x8089dfb0 }, 0x424|2, 0x424|3 }, + {{ 0x808aff74, 0x808aff74, 0x808af0d4, 0x8089e3d4 }, 0x4|3, 0x4|3 }, + {{ 0x808aff78, 0x808ab8c0, 0x808af0d8, 0x8089e3d8 }, 0x3c|2, 0x3c|3 }, + {{ 0x808affb8, 0x808ad2f0, 0x808af118, 0x8089e418 }, 0x628|2, 0x628|3 }, + {{ 0x808b05f0, 0x808ab900, 0x808af750, 0x8089ea50 }, 0x19e8|2, 0x19e8|3 }, + {{ 0x808b1fe0, 0x808ad928, 0x808b1140, 0x808a0440 }, 0x40|2, 0x40|3 }, + {{ 0x808b2028, 0x808adc60, 0x808b1188, 0x808a0488 }, 0x284|2, 0x284|3 }, + {{ 0x808b22b4, 0x808ad974, 0x808b1414, 0x808a0714 }, 0x2e0|2, 0x2e0|3 }, + {{ 0x808b25a0, 0x808adef0, 0x808b1700, 0x808a0a00 }, 0x674|2, 0x680|3 }, + {{ 0x808b2c20, 0x808ae570, 0x808b1d80, 0x808a1080 }, 0x4|3, 0x4|3 }, + {{ 0x808b2c24, 0x808ae574, 0x808b1d84, 0x8087dde8 }, 0x4|3, 0x4|3 }, + {{ 0x808b2c28, 0x808ae578, 0x808b1d88, 0x808a1088 }, 0xf0|2, 0xf0|3 }, + {{ 0x808b2d34, 0x808ae684, 0x808b1e94, 0x808ab6d0 }, 0x4|3, 0x4|3 }, + {{ 0x808b2d38, 0x808ae688, 0x808b1e98, 0x808a1198 }, 0x4|3, 0x4|3 }, + {{ 0x808b2d3c, 0x808ae68c, 0x808b1e9c, 0x808ab6d8 }, 0x4|3, 0x4|3 }, + {{ 0x808b2d44, 0x808ae694, 0x808b1ea4, 0x808a11a4 }, 0x4|3, 0x4|3 }, + {{ 0x808b2d4c, 0x808ae69c, 0x808b2ae4, 0x808a11bc }, 0x30|2, 0x30|3 }, + {{ 0x808b2d7c, 0x808ae6cc, 0x808b1edc, 0x808a11ec }, 0x400|2, 0x40c|3 }, + {{ 0x808b3188, 0x808aead8, 0x808b22e8, 0x808a15f8 }, 0x4|3, 0x4|3 }, + {{ 0x808b318c, 0x808aeadc, 0x808b22ec, 0x808a1604 }, 0x8|2, 0x8|3 }, + {{ 0x808b3194, 0x808aeae4, 0x808b2b7c, 0x808a160c }, 0x4|3, 0x4|3 }, + {{ 0x808b3198, 0x808aeae8, 0x808b22f8, 0x808a1610 }, 0xa0|2, 0xa0|3 }, + {{ 0x808b3238, 0x808aeb88, 0x808b2c00, 0x808a16b0 }, 0x4|3, 0x4|3 }, + {{ 0x808b323c, 0x808aeb8c, 0x808b239c, 0x808a16b4 }, 0x4|3, 0x4|3 }, + {{ 0x808b3240, 0x808aeb90, 0x808b2c10, 0x808a16b8 }, 0x4|3, 0x4|3 }, + {{ 0x808b3244, 0x808aeb94, 0x808b23a4, 0x808a16bc }, 0x47c|2, 0x4a0|3 }, + {{ 0x808b36e4, 0x808af034, 0x808b2844, 0x808a1b5c }, 0x4|3, 0x4|3 }, + {{ 0x808b3778, 0x808af9a8, 0x808b28d8, 0x808a1bf0 }, 0x48|2, 0x48|3 }, + {{ 0x808b37c0, 0x808902f4, 0x808b2920, 0x808a1c38 }, 0x4|3, 0x4|3 }, + {{ 0x808b37c4, 0x808af9f4, 0x808b2924, 0x808a1c3c }, 0x4|3, 0x4|3 }, + {{ 0x808b37c8, 0x80890300, 0x808b2928, 0x808a1c40 }, 0x8|2, 0x8|3 }, + {{ 0x808b37d0, 0x808afa00, 0x808b2930, 0x808a1c48 }, 0x18|2, 0x18|3 }, + {{ 0x808b37e8, 0x80890340, 0x808b2948, 0x808a1c60 }, 0x8|2, 0x8|3 }, + {{ 0x808b37f0, 0x808afa20, 0x808b2950, 0x808a1c68 }, 0xb4|2, 0xf0|3 }, + {{ 0x808b38e0, 0x808afb10, 0x808b2a40, 0x808a1d58 }, 0x4|3, 0x4|3 }, + {{ 0x808b38e8, 0x808af098, 0x808b2a48, 0x808a1d60 }, 0x470|2, 0x48c|3 }, + {{ 0x808b3d74, 0x808af524, 0x808b2ed4, 0x808a21ec }, 0x1b8|3, 0x1b8|3 }, + {{ 0x808b3f30, 0x808afb50, 0x808b3090, 0x808a23a8 }, 0x4|3, 0x4|3 }, + {{ 0x808b3f90, 0x808b8a1c, 0x808b30f0, 0x808a2408 }, 0x30|2, 0x30|3 }, + {{ 0x808b3fc0, 0x808af6e0, 0x808b3120, 0x808a2438 }, 0x1a0|2, 0x1a0|3 }, + {{ 0x808b4160, 0x808afbe0, 0x808b32c0, 0x808a25d8 }, 0x4|3, 0x4|3 }, + {{ 0x808b4164, 0x808af884, 0x808b32c4, 0x808a25dc }, 0x4|3, 0x4|3 }, + {{ 0x808b4168, 0x808af828, 0x808b32c8, 0x808a25e0 }, 0x11c|2, 0x11c|3 }, + {{ 0x808b42ac, 0x808ae69c, 0x808b340c, 0x808a2724 }, 0xc|2, 0xc|3 }, + {{ 0x808b42e0, 0x808af9a0, 0x808b3440, 0x808a2758 }, 0x4|3, 0x4|3 }, + {{ 0x808b42f0, 0x808afc40, 0x808b3450, 0x808a2768 }, 0xd9c|2, 0xd9c|3 }, + {{ 0x808b5090, 0x808ce3e8, 0x808b41f0, 0x808a3508 }, 0x4|3, 0x4|3 }, + {{ 0x808b5094, 0x808c6e50, 0x808b41f4, 0x808a350c }, 0x4|3, 0x4|3 }, + {{ 0x808b5098, 0x808b28a8, 0x808b41f8, 0x808a3510 }, 0x6c|2, 0x6c|3 }, + {{ 0x808b5104, 0x808b0114, 0x808b4264, 0x808a357c }, 0x10|2, 0x10|3 }, + {{ 0x808b5118, 0x808b09e0, 0x808b4278, 0x808a3590 }, 0x5ac|2, 0x5ac|3 }, + {{ 0x808b5704, 0x808b292c, 0x808b4864, 0x808a3b7c }, 0x94|2, 0x94|3 }, + {{ 0x808b5798, 0x808b1770, 0x808b48f8, 0x808a3c10 }, 0x8|2, 0x8|3 }, + {{ 0x808b57a0, 0x808b215c, 0x808b4900, 0x808a3c18 }, 0x48|2, 0x48|3 }, + {{ 0x808b5818, 0x808b177c, 0x808b4978, 0x808a3c90 }, 0x70|2, 0x70|3 }, + {{ 0x808b5888, 0x808b0fc8, 0x808b49e8, 0x808a3d00 }, 0xe80|2, 0xf10|3 }, + {{ 0x808b6798, 0x808b1ed8, 0x808b58f8, 0x808a4c10 }, 0x4c|3, 0x4c|3 }, + {{ 0x808b6828, 0x808b29d0, 0x808b5988, 0x808a4ca0 }, 0xfc|2, 0xfc|3 }, + {{ 0x808b6924, 0x808b1edc, 0x808b5a84, 0x808a4d9c }, 0x44|2, 0x44|3 }, + {{ 0x808b6968, 0x808b2b10, 0x808b5ac8, 0x808a4de0 }, 0x4|3, 0x4|3 }, + {{ 0x808b696c, 0x808b1f24, 0x808b5acc, 0x808a4de4 }, 0x88|2, 0x9c|3 }, + {{ 0x808b6a08, 0x808b1fc0, 0x808b5b68, 0x808a4e80 }, 0x4|3, 0x4|3 }, + {{ 0x808b6a0c, 0x808b1f88, 0x808b5b6c, 0x808a4e84 }, 0x4|3, 0x4|3 }, + {{ 0x808b6a10, 0x808b2b58, 0x808b5b70, 0x808a4e88 }, 0xe8|2, 0xe8|3 }, + {{ 0x808b6b00, 0x808b1fc8, 0x808b5c60, 0x808a4f78 }, 0x144|2, 0x144|3 }, + {{ 0x808b6c78, 0x808d54a0, 0x808b5dd8, 0x808a50f0 }, 0x1c|2, 0x1c|3 }, + {{ 0x808b6c94, 0x8088bf0c, 0x808b5df4, 0x808a510c }, 0x4|3, 0x4|3 }, + {{ 0x808b6c98, 0x808b21d8, 0x808b5df8, 0x808a5110 }, 0x684|2, 0x690|3 }, + {{ 0x808b7328, 0x808b2868, 0x808b6488, 0x808a57a0 }, 0x4|3, 0x4|3 }, + {{ 0x808b732c, 0x808b2c34, 0x808b648c, 0x808a57a4 }, 0x8|2, 0x8|3 }, + {{ 0x808b7334, 0x808b2874, 0x808b6494, 0x808a57ac }, 0x4|3, 0x4|3 }, + {{ 0x808b7338, 0x808b2c40, 0x808b6498, 0x808a57b0 }, 0x4|3, 0x4|3 }, + {{ 0x808b733c, 0x808ae9ec, 0x808b649c, 0x808a57b4 }, 0x4|3, 0x4|3 }, + {{ 0x808b7340, 0x808b2880, 0x808b64a0, 0x808a57b8 }, 0x4|3, 0x4|3 }, + {{ 0x808b7344, 0x808ae9f4, 0x808b64a4, 0x808a57bc }, 0x14|2, 0x14|3 }, + {{ 0x808b7368, 0x808b2c48, 0x808b64c8, 0x808a57e0 }, 0x4|3, 0x4|3 }, + {{ 0x808b7370, 0x808ba1e0, 0x808b64d0, 0x808a57e8 }, 0x34|2, 0x34|3 }, + {{ 0x808b73a8, 0x808b2c80, 0x808b6508, 0x808a5820 }, 0x74|2, 0x74|3 }, + {{ 0x808b743c, 0x808b9ca8, 0x808b659c, 0x808a58b4 }, 0x44|2, 0x44|3 }, + {{ 0x808b7480, 0x808b2d58, 0x808b65e0, 0x808a58f8 }, 0x4|3, 0x4|3 }, + {{ 0x808b7484, 0x808b9cf0, 0x808b65e4, 0x808a58fc }, 0x4|3, 0x4|3 }, + {{ 0x808b7488, 0x808bcc7c, 0x808b65e8, 0x808a5900 }, 0x58|2, 0x58|3 }, + {{ 0x808b74f0, 0x808ba218, 0x808b6650, 0x808a5968 }, 0xe0|2, 0xe0|3 }, + {{ 0x808b75d0, 0x808b49b4, 0x808b6730, 0x808a5a48 }, 0x4|3, 0x4|3 }, + {{ 0x808b75d4, 0x808ba2fc, 0x808b6734, 0x808a5a4c }, 0x4|3, 0x4|3 }, + {{ 0x808b75d8, 0x808b49bc, 0x808b6738, 0x808a5a50 }, 0x4|3, 0x4|3 }, + {{ 0x808b760c, 0x808b5584, 0x808b676c, 0x808a5a84 }, 0x4|3, 0x4|3 }, + {{ 0x808b7610, 0x808ba338, 0x808b6770, 0x808a5a88 }, 0x4|3, 0x4|3 }, + {{ 0x808b7614, 0x808b558c, 0x808b6774, 0x808a5a8c }, 0x2c|2, 0x2c|3 }, + {{ 0x808b7640, 0x808b8570, 0x808b67a0, 0x808a5ab8 }, 0x34|2, 0x34|3 }, + {{ 0x808b7674, 0x808ba39c, 0x808b67d4, 0x808a5aec }, 0x4|3, 0x4|3 }, + {{ 0x808b7678, 0x808b85a8, 0x808b67d8, 0x808a5af0 }, 0xc|2, 0xc|3 }, + {{ 0x808b7684, 0x808b2dbc, 0x808b67e4, 0x808a5afc }, 0xf0|2, 0x134|3 }, + {{ 0x808b77b8, 0x808b2ef0, 0x808b6918, 0x808a5c30 }, 0x4|3, 0x4|3 }, + {{ 0x808b77bc, 0x808cd44c, 0x808b691c, 0x808a5c34 }, 0x4|3, 0x4|3 }, + {{ 0x808b77c0, 0x808b0dd4, 0x808b6920, 0x808a5c38 }, 0x4|3, 0x4|3 }, + {{ 0x808b77c8, 0x808b2e08, 0x808b6928, 0x808a5c40 }, 0x8|2, 0x8|3 }, + {{ 0x808b77d0, 0x808ba3a8, 0x808b6930, 0x808a5c48 }, 0x4c|2, 0xac|3 }, + {{ 0x808b787c, 0x808ba454, 0x808b69dc, 0x808a5cf4 }, 0x1c|3, 0x1c|3 }, + {{ 0x808b78e8, 0x808b1990, 0x808b6a48, 0x808a5d60 }, 0x18|2, 0x18|3 }, + {{ 0x808b7904, 0x808b50ac, 0x808b6a64, 0x808a5d7c }, 0x4|3, 0x4|3 }, + {{ 0x808b7910, 0x808b2ef0, 0x808b6a70, 0x808a5d88 }, 0x78|2, 0x78|3 }, + {{ 0x808b7988, 0x808b2f68, 0x808b6ae8, 0x808a6cb8 }, 0x4|3, 0x4|3 }, + {{ 0x808b798c, 0x808b2f6c, 0x808b6aec, 0x808a5e04 }, 0x10|2, 0x10|3 }, + {{ 0x808b799c, 0x808b2f7c, 0x808b6afc, 0x808a6cd4 }, 0x4|3, 0x4|3 }, + {{ 0x808b79a0, 0x808b2f80, 0x808b6b00, 0x808a5e18 }, 0x2b4|2, 0x2b4|3 }, + {{ 0x808b7c54, 0x808ba474, 0x808b6db4, 0x808a60cc }, 0x5c|2, 0x5c|3 }, + {{ 0x808b7cb0, 0x808b3290, 0x808b6e10, 0x808a6128 }, 0x4|3, 0x4|3 }, + {{ 0x808b7cb4, 0x808ba4d4, 0x808b6e14, 0x808a612c }, 0x14|2, 0x14|3 }, + {{ 0x808b7cc8, 0x808b32a8, 0x808b6e28, 0x808a6140 }, 0x4|3, 0x4|3 }, + {{ 0x808b7ccc, 0x808ba4ec, 0x808b6e2c, 0x808a6144 }, 0x8|2, 0x8|3 }, + {{ 0x808b7cd4, 0x808b957c, 0x808b6e34, 0x808a614c }, 0xc|2, 0xc|3 }, + {{ 0x808b7cec, 0x808ba50c, 0x808b6e4c, 0x808a6164 }, 0x74|3, 0x74|3 }, + {{ 0x808b7d64, 0x808d390c, 0x808b6ec4, 0x808a61dc }, 0x58|2, 0x58|3 }, + {{ 0x808b7dc0, 0x808b32c0, 0x808b6f20, 0x808a6238 }, 0x4|3, 0x4|3 }, + {{ 0x808b7df8, 0x808cd4c8, 0x808b6f58, 0x808a6270 }, 0x4|3, 0x4|3 }, + {{ 0x808b7dfc, 0x808b4cbc, 0x808b6f5c, 0x808a6274 }, 0x4|3, 0x4|3 }, + {{ 0x808b7e18, 0x808ba5f8, 0x808b6f78, 0x808a6290 }, 0x68|3, 0x68|3 }, + {{ 0x808b7e94, 0x808ba668, 0x808b6ff4, 0x808a630c }, 0x4|3, 0x4|3 }, + {{ 0x808b7e9c, 0x808b9d4c, 0x808b6ffc, 0x808a6314 }, 0x10|2, 0x10|3 }, + {{ 0x808b7eac, 0x808b32fc, 0x808b700c, 0x808a6324 }, 0x414|2, 0x44c|3 }, + {{ 0x808b82f8, 0x808b3748, 0x808b7458, 0x808a6770 }, 0x40|3, 0x40|3 }, + {{ 0x808b8354, 0x808ba674, 0x808b74b4, 0x808a67cc }, 0x34|2, 0x34|3 }, + {{ 0x808b8388, 0x808b9b88, 0x808b74e8, 0x808a6800 }, 0x4|3, 0x4|3 }, + {{ 0x808b838c, 0x808ba6ac, 0x808b74ec, 0x808a6804 }, 0x4|3, 0x4|3 }, + {{ 0x808b8390, 0x808b9b90, 0x808b74f0, 0x808a6808 }, 0x24|2, 0x24|3 }, + {{ 0x808b83b4, 0x808ba6d4, 0x808b7514, 0x808a682c }, 0x4|3, 0x4|3 }, + {{ 0x808b83b8, 0x808b9bb8, 0x808b7518, 0x808a6830 }, 0x60|2, 0x60|3 }, + {{ 0x808b8418, 0x808ba738, 0x808b7578, 0x808a6890 }, 0x4|3, 0x4|3 }, + {{ 0x808b841c, 0x808b9c1c, 0x808b757c, 0x808a6894 }, 0x4|3, 0x4|3 }, + {{ 0x808b8420, 0x808b49f0, 0x808b7580, 0x808a6898 }, 0x4|3, 0x4|3 }, + {{ 0x808b8424, 0x808ba744, 0x808b7584, 0x808a689c }, 0x4|3, 0x4|3 }, + {{ 0x808b8428, 0x808b49f8, 0x808b7588, 0x808a68a0 }, 0x60|2, 0x60|3 }, + {{ 0x808b8488, 0x808ba7a8, 0x808b75e8, 0x808a6900 }, 0x4|3, 0x4|3 }, + {{ 0x808b848c, 0x808b4a5c, 0x808b75ec, 0x808a6904 }, 0x14|2, 0x14|3 }, + {{ 0x808b84a0, 0x808ba7b4, 0x808b7600, 0x808a6918 }, 0x4|3, 0x4|3 }, + {{ 0x808b84a4, 0x808b49bc, 0x808b9904, 0x808a8c24 }, 0x34|2, 0x34|3 }, + {{ 0x808b84dc, 0x808ba7f0, 0x808b763c, 0x808a6954 }, 0x68|3, 0x68|3 }, + {{ 0x808b8554, 0x808b3f5c, 0x808b840c, 0x808a7724 }, 0x4|3, 0x4|3 }, + {{ 0x808b8558, 0x808ba860, 0x808b76ac, 0x808a69c4 }, 0x4|3, 0x4|3 }, + {{ 0x808b855c, 0x808afb14, 0x808b8414, 0x808a772c }, 0x4|3, 0x4|3 }, + {{ 0x808b8598, 0x808b37a8, 0x808b76e8, 0x808a6a00 }, 0x214|2, 0x214|3 }, + {{ 0x808b87ac, 0x808ced94, 0x808b78fc, 0x808a6c14 }, 0x14|2, 0x14|3 }, + {{ 0x808b87c0, 0x808b39d0, 0x808b7910, 0x808a6c28 }, 0x4|3, 0x4|3 }, + {{ 0x808b87c4, 0x808cedac, 0x808b7914, 0x808a6c2c }, 0x4|3, 0x4|3 }, + {{ 0x808b87c8, 0x808b87f0, 0x808b7918, 0x808a6c30 }, 0x50|2, 0x50|3 }, + {{ 0x808b8820, 0x808ba8a0, 0x808b7970, 0x808a6c88 }, 0x68|3, 0x68|3 }, + {{ 0x808b888c, 0x808c6d6c, 0x808b79dc, 0x808a6cf4 }, 0xc|2, 0xc|3 }, + {{ 0x808b88c0, 0x808b3a30, 0x808b7a10, 0x808a6d28 }, 0x39c|2, 0x39c|3 }, + {{ 0x808b8cd4, 0x808b3180, 0x808b7e24, 0x808a713c }, 0x18|2, 0x18|3 }, + {{ 0x808b8cec, 0x808b3e5c, 0x808b7e3c, 0x808a7154 }, 0x1c|3, 0x1c|3 }, + {{ 0x808b8d0c, 0x808bb444, 0x808b7e5c, 0x808a7174 }, 0x8|2, 0x8|3 }, + {{ 0x808b8d14, 0x808b0cf4, 0x808b7e64, 0x808a717c }, 0x8|2, 0x8|3 }, + {{ 0x808b8d1c, 0x808ba90c, 0x808b7e6c, 0x808a7184 }, 0x444|2, 0x478|3 }, + {{ 0x808b9194, 0x808bad84, 0x808b82e4, 0x808a75fc }, 0x74|3, 0x74|3 }, + {{ 0x808b920c, 0x808ae824, 0x808b835c, 0x808a7674 }, 0x4|3, 0x4|3 }, + {{ 0x808b9210, 0x808bae00, 0x808b8360, 0x808a7678 }, 0x4|3, 0x4|3 }, + {{ 0x808b9214, 0x808ae82c, 0x808b8364, 0x808a767c }, 0x8|2, 0x8|3 }, + {{ 0x808b9220, 0x808b3ec0, 0x808b8370, 0x808a7688 }, 0x194|2, 0x194|3 }, + {{ 0x808b93b4, 0x808b88b0, 0x808b8504, 0x808a781c }, 0x2c|2, 0x2c|3 }, + {{ 0x808b9414, 0x808b40b4, 0x808b8564, 0x808a787c }, 0x4|3, 0x4|3 }, + {{ 0x808b9450, 0x808bae10, 0x808b85a0, 0x808a78b8 }, 0x4|3, 0x4|3 }, + {{ 0x808b94b4, 0x808af5b0, 0x808b8604, 0x808a791c }, 0x4|3, 0x4|3 }, + {{ 0x808b94b8, 0x808b40f0, 0x808b8608, 0x808a7920 }, 0x8c|2, 0x8c|3 }, + {{ 0x808b9544, 0x808c32bc, 0x808b8694, 0x808a79ac }, 0x40|2, 0x40|3 }, + {{ 0x808b95b4, 0x808bae74, 0x808b8704, 0x808a7a1c }, 0x334|2, 0x378|3 }, + {{ 0x808b992c, 0x808bb1ec, 0x808b8a7c, 0x808a7d94 }, 0x4|3, 0x4|3 }, + {{ 0x808b9980, 0x808bb240, 0x808b8ad0, 0x808a7df0 }, 0xc|2, 0xc|3 }, + {{ 0x808b998c, 0x808b41ec, 0x808b8adc, 0x808a7dfc }, 0xf8|2, 0xf8|3 }, + {{ 0x808b9a84, 0x808b4294, 0x808b8bd4, 0x808a7ef4 }, 0x4|3, 0x4|3 }, + {{ 0x808b9a98, 0x808b42f8, 0x808b8be8, 0x808a7f08 }, 0x4|3, 0x4|3 }, + {{ 0x808b9a9c, 0x808cd8d4, 0x808b8bec, 0x808a7f0c }, 0x4|3, 0x4|3 }, + {{ 0x808b9ad0, 0x808bb250, 0x808b8c20, 0x808a7f40 }, 0x7c|3, 0x7c|3 }, + {{ 0x808b9b50, 0x808b89e0, 0x808b8ca0, 0x808a7fc0 }, 0x34|2, 0x34|3 }, + {{ 0x808b9b84, 0x808bb304, 0x808b8cd4, 0x808a7ff4 }, 0x4|3, 0x4|3 }, + {{ 0x808b9b88, 0x808b8a18, 0x808b8cd8, 0x808a7ff8 }, 0x4|3, 0x4|3 }, + {{ 0x808b9b90, 0x808b8b18, 0x808b8ce0, 0x808a8000 }, 0x30|2, 0x30|3 }, + {{ 0x808b9bc0, 0x808b8b88, 0x808b8d10, 0x808a8030 }, 0x34|2, 0x34|3 }, + {{ 0x808b9bf4, 0x808b467c, 0x808b8d44, 0x808a8064 }, 0x8|2, 0x8|3 }, + {{ 0x808b9c00, 0x808bb340, 0x808b8d50, 0x808a8070 }, 0x4|3, 0x4|3 }, + {{ 0x808b9c04, 0x808b53bc, 0x808b8d54, 0x808a8074 }, 0x1c|2, 0x1c|3 }, + {{ 0x808b9c20, 0x808b31b8, 0x808b8d70, 0x808a8090 }, 0x40|2, 0x40|3 }, + {{ 0x808b9c68, 0x808b4330, 0x808b8db8, 0x808a80d8 }, 0x304|2, 0x304|3 }, + {{ 0x808b9f70, 0x808bc8b4, 0x808b90c0, 0x808a83e0 }, 0x4|3, 0x4|3 }, + {{ 0x808b9f74, 0x808b463c, 0x808b90c4, 0x808a83e4 }, 0x4|3, 0x4|3 }, + {{ 0x808b9f78, 0x808bc8bc, 0x808b90c8, 0x808a83e8 }, 0x4|3, 0x4|3 }, + {{ 0x808b9f80, 0x808bb3a8, 0x808b90d0, 0x808a83f0 }, 0x80|3, 0x80|3 }, + {{ 0x808ba030, 0x808b8b18, 0x808b9180, 0x808a84a0 }, 0x2c|2, 0x2c|3 }, + {{ 0x808ba05c, 0x808b4644, 0x808b91ac, 0x808a84cc }, 0x38|2, 0x38|3 }, + {{ 0x808ba0a0, 0x808bb488, 0x808b91f0, 0x808a8510 }, 0x33c|2, 0x33c|3 }, + {{ 0x808ba3dc, 0x808babb8, 0x808b952c, 0x808a884c }, 0x4|3, 0x4|3 }, + {{ 0x808ba3e0, 0x808bb7c8, 0x808b9530, 0x808a8850 }, 0x4|3, 0x4|3 }, + {{ 0x808ba3e4, 0x808babc0, 0x808b9534, 0x808a8854 }, 0x8|2, 0x8|3 }, + {{ 0x808ba3ec, 0x808bb7d4, 0x808b953c, 0x808a885c }, 0x4|3, 0x4|3 }, + {{ 0x808ba44c, 0x808b6ee4, 0x808b959c, 0x808a88bc }, 0x4|3, 0x4|3 }, + {{ 0x808ba450, 0x808bb838, 0x808b95a0, 0x808a88c0 }, 0x4|3, 0x4|3 }, + {{ 0x808ba454, 0x808b6eec, 0x808b95a4, 0x808a88c4 }, 0x8|2, 0x8|3 }, + {{ 0x808ba45c, 0x808bb844, 0x808b95ac, 0x808a88cc }, 0x4|3, 0x4|3 }, + {{ 0x808ba460, 0x808b6ef8, 0x808b95b0, 0x808a88d0 }, 0x4|3, 0x4|3 }, + {{ 0x808ba464, 0x808ce714, 0x808b95b4, 0x808a88d4 }, 0x10|2, 0x10|3 }, + {{ 0x808ba478, 0x808d50c8, 0x808b95c8, 0x808a88e8 }, 0x4|3, 0x4|3 }, + {{ 0x808ba480, 0x808b4688, 0x808b95d0, 0x808a88f0 }, 0x6c4|2, 0x6fc|3 }, + {{ 0x808bab7c, 0x808b4d84, 0x808b9ccc, 0x808a8fec }, 0x4|3, 0x4|3 }, + {{ 0x808bab84, 0x808ba01c, 0x808b9cd4, 0x808a8ff4 }, 0x2c|2, 0x2c|3 }, + {{ 0x808babb0, 0x808cd4b8, 0x808b9d00, 0x808a9020 }, 0x8|2, 0x8|3 }, + {{ 0x808babb8, 0x808b4dc0, 0x808b9d08, 0x808a9028 }, 0x4|3, 0x4|3 }, + {{ 0x808babbc, 0x808cd4c4, 0x808b9d0c, 0x808a902c }, 0x8|2, 0x8|3 }, + {{ 0x808babc4, 0x808bb864, 0x808b9d14, 0x808a9034 }, 0x2c8|2, 0x2d8|3 }, + {{ 0x808bae9c, 0x808bbb3c, 0x808b9fec, 0x808a930c }, 0x4|3, 0x4|3 }, + {{ 0x808baec4, 0x808b4dcc, 0x808ba014, 0x808a9334 }, 0x29c|2, 0x29c|3 }, + {{ 0x808bb194, 0x808bb84c, 0x808ba2e4, 0x808a9604 }, 0x4|3, 0x4|3 }, + {{ 0x808bb198, 0x808bbb58, 0x808ba2e8, 0x808a9608 }, 0x27c|2, 0x288|3 }, + {{ 0x808bb420, 0x808bbde0, 0x808ba570, 0x808a9890 }, 0x4|3, 0x4|3 }, + {{ 0x808bb428, 0x808c4948, 0x808ba578, 0x808a9898 }, 0x4|3, 0x4|3 }, + {{ 0x808bb42c, 0x808ae5c4, 0x808ba57c, 0x808a989c }, 0x4|3, 0x4|3 }, + {{ 0x808bb430, 0x808bbdf0, 0x808ba580, 0x808a98a0 }, 0x4|3, 0x4|3 }, + {{ 0x808bb434, 0x808ae5cc, 0x808ba584, 0x808a98a4 }, 0x4|3, 0x4|3 }, + {{ 0x808bb43c, 0x808b50b4, 0x808ba58c, 0x808a98ac }, 0x248|2, 0x270|3 }, + {{ 0x808bb6ac, 0x808b5324, 0x808ba7fc, 0x808a9b1c }, 0x98|3, 0x98|3 }, + {{ 0x808bb770, 0x808b32c8, 0x808ba8c0, 0x808a9be0 }, 0x30|2, 0x30|3 }, + {{ 0x808bb7a0, 0x808bbdf8, 0x808ba8f0, 0x808a9c10 }, 0x8|2, 0x8|3 }, + {{ 0x808bb7b0, 0x808b9fc0, 0x808ba900, 0x808a9c20 }, 0x4|3, 0x4|3 }, + {{ 0x808bb7b4, 0x808bbe0c, 0x808ba904, 0x808a9c24 }, 0x4|3, 0x4|3 }, + {{ 0x808bb7b8, 0x808b9fc8, 0x808ba908, 0x808a9c28 }, 0x24|2, 0x24|3 }, + {{ 0x808bb7dc, 0x808bbe34, 0x808ba92c, 0x808a9c4c }, 0x4|3, 0x4|3 }, + {{ 0x808bb7e0, 0x808b9ff0, 0x808ba930, 0x808a9c50 }, 0x60|2, 0x60|3 }, + {{ 0x808bb840, 0x808bbe98, 0x808ba990, 0x808a9cb0 }, 0x4|3, 0x4|3 }, + {{ 0x808bb844, 0x808ba054, 0x808ba994, 0x808a9cb4 }, 0x4|3, 0x4|3 }, + {{ 0x808bb848, 0x808b5418, 0x808ba998, 0x808a9cb8 }, 0x108|2, 0x108|3 }, + {{ 0x808bb950, 0x808b5520, 0x8088eb38, 0x808a9dc0 }, 0x4|3, 0x4|3 }, + {{ 0x808bb954, 0x808b5524, 0x808baaa4, 0x808a9dc4 }, 0x10e8|2, 0x10e8|3 }, + {{ 0x808bca3c, 0x808b660c, 0x808bbb8c, 0x808ad7fc }, 0x4|3, 0x4|3 }, + {{ 0x808bca40, 0x808b6610, 0x808bbb90, 0x808aaeb0 }, 0x40|2, 0x40|3 }, + {{ 0x808bca80, 0x807e2594, 0x807eb4ac, 0x807da200 }, 0x4|3, 0x4|3 }, + {{ 0x808bca84, 0x807e52f0, 0x807eec6c, 0x807dd9c0 }, 0x4|3, 0x4|3 }, + {{ 0x808bca8c, 0x808b665c, 0x808bbbdc, 0x808aaefc }, 0x1ed0|2, 0x1ed0|3 }, + {{ 0x808be95c, 0x808b8fbc, 0x808bdaac, 0x808acdcc }, 0x3c|2, 0x3c|3 }, + {{ 0x808be998, 0x808b8568, 0x808bdae8, 0x808ace08 }, 0x4|3, 0x4|3 }, + {{ 0x808be99c, 0x808b8ffc, 0x808bdaec, 0x808ace0c }, 0x4|3, 0x4|3 }, + {{ 0x808be9d0, 0x808d41b0, 0x808bdb20, 0x808ace40 }, 0x4|3, 0x4|3 }, + {{ 0x808be9d4, 0x808b85a4, 0x808bdb24, 0x808ace44 }, 0x4|3, 0x4|3 }, + {{ 0x808be9e4, 0x808b4ff4, 0x808bdb34, 0x808ace54 }, 0x4|3, 0x4|3 }, + {{ 0x808be9f0, 0x808bbea8, 0x808bdb40, 0x808ace60 }, 0x68|3, 0x68|3 }, + {{ 0x808bea5c, 0x808b3fa8, 0x808bdbac, 0x808acecc }, 0x20|2, 0x20|3 }, + {{ 0x808beaac, 0x808b8d88, 0x808bdbfc, 0x808acf1c }, 0x8|2, 0x8|3 }, + {{ 0x808beab4, 0x808b8454, 0x808bdc04, 0x808acf24 }, 0x4|3, 0x4|3 }, + {{ 0x808beab8, 0x808b85c0, 0x808bdc08, 0x808acf28 }, 0x588|2, 0x588|3 }, + {{ 0x808bf040, 0x808b8b88, 0x808be190, 0x808ad4b0 }, 0x47c|2, 0x47c|3 }, + {{ 0x808bf4bc, 0x808b9004, 0x808be60c, 0x808aec10 }, 0x4|3, 0x4|3 }, + {{ 0x808bf4c0, 0x808b9008, 0x808be610, 0x808ad930 }, 0x1f4|2, 0x21c|3 }, + {{ 0x808bf6dc, 0x808b9224, 0x808be82c, 0x808adb4c }, 0x98|3, 0x98|3 }, + {{ 0x808bf774, 0x808d40ac, 0x808be8c4, 0x808adbe4 }, 0x60|2, 0x60|3 }, + {{ 0x808bf7d8, 0x808bbf70, 0x808be928, 0x808adc48 }, 0x84|2, 0x84|3 }, + {{ 0x808bf85c, 0x808d3934, 0x808be9ac, 0x808adccc }, 0x30|2, 0x30|3 }, + {{ 0x808bf88c, 0x808bb95c, 0x808be9dc, 0x808adcfc }, 0x4|3, 0x4|3 }, + {{ 0x808bf890, 0x808bc028, 0x808be9e0, 0x808add00 }, 0x4|3, 0x4|3 }, + {{ 0x808bf894, 0x808bb964, 0x808be9e4, 0x808add04 }, 0x4|3, 0x4|3 }, + {{ 0x808bf898, 0x808b92e8, 0x808be9e8, 0x808add08 }, 0x324|2, 0x324|3 }, + {{ 0x808bfc18, 0x808bfc18, 0x808bfc18, 0x808afc18 }, 0x4|3, 0x4|3 }, + {{ 0x808bfc48, 0x808bc030, 0x808bed98, 0x808ae0b8 }, 0x40|2, 0x40|3 }, + {{ 0x808bfc88, 0x808b9f68, 0x808bedd8, 0x808ae0f8 }, 0x4|3, 0x4|3 }, + {{ 0x808bfc8c, 0x808bc074, 0x808beddc, 0x808ae0fc }, 0x4|3, 0x4|3 }, + {{ 0x808bfc90, 0x808b9f70, 0x808bede0, 0x808ae100 }, 0x3c|2, 0x3c|3 }, + {{ 0x808bfccc, 0x808bc0b4, 0x808bee1c, 0x808ae13c }, 0x4|3, 0x4|3 }, + {{ 0x808bfcd0, 0x808b9fb0, 0x808bee20, 0x808ae140 }, 0x3c|2, 0x3c|3 }, + {{ 0x808bfd0c, 0x808bc0f4, 0x808bee5c, 0x808ae17c }, 0x4|3, 0x4|3 }, + {{ 0x808bfd10, 0x808b9ff0, 0x808bee60, 0x808ae180 }, 0x60|2, 0x60|3 }, + {{ 0x808bfd70, 0x808bc158, 0x808beec0, 0x808ae1e0 }, 0x4|3, 0x4|3 }, + {{ 0x808bfd74, 0x808b19dc, 0x808beec4, 0x808ae1e4 }, 0x4|3, 0x4|3 }, + {{ 0x808bfd78, 0x808b96c8, 0x808beec8, 0x808ae1e8 }, 0xd4|2, 0xd4|3 }, + {{ 0x808bfe4c, 0x808bfe4c, 0x808bef9c, 0x808ae2bc }, 0x4|3, 0x4|3 }, + {{ 0x808bfe50, 0x808b97a0, 0x808befa0, 0x808ae2c0 }, 0x78|2, 0x78|3 }, + {{ 0x808bfec8, 0x808bfec8, 0x808bf018, 0x808ae338 }, 0x4|3, 0x4|3 }, + {{ 0x808bfecc, 0x808b981c, 0x808bf01c, 0x808ae33c }, 0x250|2, 0x250|3 }, + {{ 0x808c011c, 0x808b9a6c, 0x808bf26c, 0x808b011c }, 0x4|3, 0x4|3 }, + {{ 0x808c0120, 0x808b9a70, 0x808bf270, 0x808ae590 }, 0x7c|2, 0x7c|3 }, + {{ 0x808c019c, 0x808c019c, 0x808c019c, 0x808b019c }, 0x4|3, 0x4|3 }, + {{ 0x808c01a0, 0x808b9af0, 0x808bf2f0, 0x808ae610 }, 0x60|2, 0x60|3 }, + {{ 0x808c0200, 0x808b9b50, 0x808c0200, 0x808ae670 }, 0x4|3, 0x4|3 }, + {{ 0x808c0204, 0x808b9b54, 0x808bf354, 0x808ae674 }, 0x60|2, 0x60|3 }, + {{ 0x808c0264, 0x808c0264, 0x808c0264, 0x808b0264 }, 0x4|3, 0x4|3 }, + {{ 0x808c0268, 0x808b9bb8, 0x808bf3b8, 0x808ae6d8 }, 0x60|2, 0x60|3 }, + {{ 0x808c02c8, 0x808b9c18, 0x808bf418, 0x808b02c8 }, 0x4|3, 0x4|3 }, + {{ 0x808c02cc, 0x808b9c1c, 0x808bf41c, 0x808ae73c }, 0x314|2, 0x314|3 }, + {{ 0x808c0618, 0x808bc070, 0x808bf768, 0x808aea88 }, 0x44|2, 0x44|3 }, + {{ 0x808c065c, 0x808b9fac, 0x808bf7ac, 0x808aeacc }, 0x4|3, 0x4|3 }, + {{ 0x808c0660, 0x808bc0b8, 0x808bf7b0, 0x808aead0 }, 0x10|2, 0x10|3 }, + {{ 0x808c069c, 0x808b9fec, 0x808bf7ec, 0x808aeb0c }, 0x68|3, 0x68|3 }, + {{ 0x808c0708, 0x808ba898, 0x808bf858, 0x808aeb78 }, 0x8|2, 0x8|3 }, + {{ 0x808c0710, 0x808bc168, 0x808bf860, 0x808aeb80 }, 0x4|3, 0x4|3 }, + {{ 0x808c0714, 0x808ba8a4, 0x808bf864, 0x808aeb84 }, 0x5c|2, 0x5c|3 }, + {{ 0x808c0770, 0x808b91c0, 0x808bf8c0, 0x808aebe0 }, 0x4|3, 0x4|3 }, + {{ 0x808c0774, 0x808bc1cc, 0x808bf8c4, 0x808aebe4 }, 0x4|3, 0x4|3 }, + {{ 0x808c0778, 0x808b91c8, 0x808bf8c8, 0x808aebe8 }, 0x8|2, 0x8|3 }, + {{ 0x808c0780, 0x808b4300, 0x808bf8d0, 0x808aebf0 }, 0x30|2, 0x30|3 }, + {{ 0x808c07b0, 0x808ba060, 0x808bf900, 0x808aec20 }, 0x13c|2, 0x13c|3 }, + {{ 0x808c0960, 0x808bc208, 0x808bfab0, 0x808aedd0 }, 0x20|2, 0x20|3 }, + {{ 0x808c0980, 0x808d44e8, 0x808bfad0, 0x808aedf0 }, 0x4|3, 0x4|3 }, + {{ 0x808c0984, 0x808ba04c, 0x808bfad4, 0x808aedf4 }, 0x4|3, 0x4|3 }, + {{ 0x808c0988, 0x808bc230, 0x808bfad8, 0x808aedf8 }, 0x4|3, 0x4|3 }, + {{ 0x808c098c, 0x808bc36c, 0x808bfadc, 0x808aedfc }, 0x3a4|2, 0x3a4|3 }, + {{ 0x808c0d30, 0x808d41b0, 0x808bfe80, 0x808af1a0 }, 0x4|3, 0x4|3 }, + {{ 0x808c0d34, 0x808bc714, 0x808bfe84, 0x808af1a4 }, 0x4|3, 0x4|3 }, + {{ 0x808c0d3c, 0x808d42cc, 0x808bfe8c, 0x808af1ac }, 0x4|3, 0x4|3 }, + {{ 0x808c0d4c, 0x808bffbc, 0x808bfe9c, 0x808b4f54 }, 0x4|3, 0x4|3 }, + {{ 0x808c0d50, 0x808c3184, 0x808bfea0, 0x808b5d84 }, 0x4|3, 0x4|3 }, + {{ 0x808c0d54, 0x808bc23c, 0x808bfea4, 0x808b5d88 }, 0x4|3, 0x4|3 }, + {{ 0x808c0d58, 0x808bc240, 0x808bfea8, 0x808af1c8 }, 0x8|2, 0x8|3 }, + {{ 0x808c0d60, 0x808bc248, 0x808bfeb0, 0x808af1f8 }, 0x4|3, 0x4|3 }, + {{ 0x808c0d64, 0x808bc24c, 0x808bfeb4, 0x808af1d0 }, 0x4|3, 0x4|3 }, + {{ 0x808c0d68, 0x808bc250, 0x808bfeb8, 0x808af200 }, 0x28|2, 0x28|3 }, + {{ 0x808c0d90, 0x808bc278, 0x808bfee0, 0x808af200 }, 0x4|3, 0x4|3 }, + {{ 0x808c0d94, 0x808bc27c, 0x808bfee4, 0x808af22c }, 0x24|2, 0x24|3 }, + {{ 0x808c0db8, 0x808bc2a0, 0x808bff08, 0x808af228 }, 0x4|3, 0x4|3 }, + {{ 0x808c0dbc, 0x808bc2a4, 0x808bff0c, 0x808af254 }, 0x60|2, 0x60|3 }, + {{ 0x808c0e1c, 0x808bc304, 0x808bff6c, 0x808af28c }, 0x4|3, 0x4|3 }, + {{ 0x808c0e20, 0x808bc308, 0x808bff70, 0x808af2b8 }, 0x64|2, 0x64|3 }, + {{ 0x808c0e88, 0x808bc738, 0x808bffd8, 0x808af320 }, 0x4|3, 0x4|3 }, + {{ 0x808c0e8c, 0x808bc734, 0x808bffdc, 0x808af324 }, 0x4|3, 0x4|3 }, + {{ 0x808c0e90, 0x808bc370, 0x808bffe0, 0x808af328 }, 0x4|3, 0x4|3 }, + {{ 0x808c0e94, 0x808bc73c, 0x808bffe4, 0x808af32c }, 0x1c54|2, 0x1c54|3 }, + {{ 0x808c2ae8, 0x808c9f9c, 0x808c1c38, 0x808b0f80 }, 0x4|3, 0x4|3 }, + {{ 0x808c2aec, 0x808be394, 0x808c1c3c, 0x808b0f84 }, 0x4|3, 0x4|3 }, + {{ 0x808c2af0, 0x808c9fa4, 0x808c1c40, 0x808b0f88 }, 0x8|2, 0x8|3 }, + {{ 0x808c2be0, 0x808c0aa8, 0x808c1d30, 0x808b1078 }, 0x10|2, 0x1e0|3 }, + {{ 0x808c2dc0, 0x808c0c88, 0x808c1f10, 0x808b1258 }, 0x4|3, 0x4|3 }, + {{ 0x808c2eac, 0x808cb7a4, 0x808c1ffc, 0x808b1344 }, 0x4|3, 0x4|3 }, + {{ 0x808c2eb0, 0x808c0d78, 0x808c2000, 0x808b1348 }, 0x4|3, 0x4|3 }, + {{ 0x808c2eb4, 0x808cb7ac, 0x808c2004, 0x808b134c }, 0x4|3, 0x4|3 }, + {{ 0x808c2eb8, 0x808c9648, 0x808c2008, 0x808b1350 }, 0xc8|2, 0xc8|3 }, + {{ 0x808c2f80, 0x808c77c8, 0x808c20d0, 0x808b1418 }, 0x8|2, 0x8|3 }, + {{ 0x808c2f9c, 0x808c239c, 0x808c20ec, 0x808b1434 }, 0x4|3, 0x4|3 }, + {{ 0x808c2fa0, 0x808be488, 0x808c20f0, 0x808b1438 }, 0x4|3, 0x4|3 }, + {{ 0x808c3090, 0x808c0e68, 0x808c21e0, 0x808b1528 }, 0x794|2, 0x794|3 }, + {{ 0x808c3824, 0x808c1114, 0x808c2974, 0x808b1cbc }, 0x4|3, 0x4|3 }, + {{ 0x808c3828, 0x808c1600, 0x808c2978, 0x808b1cc0 }, 0x4|3, 0x4|3 }, + {{ 0x808c382c, 0x808c111c, 0x808c297c, 0x808b1cc4 }, 0x50|2, 0x50|3 }, + {{ 0x808c3920, 0x808d1560, 0x808c2a70, 0x808b1db8 }, 0x4|3, 0x4|3 }, + {{ 0x808c395c, 0x808cb7a4, 0x808c2aac, 0x808b1df4 }, 0x4|3, 0x4|3 }, + {{ 0x808c3960, 0x808be578, 0x808c2ab0, 0x808b1df8 }, 0xf4|2, 0xf4|3 }, + {{ 0x808c3a54, 0x808bfbfc, 0x808c2ba4, 0x808b1eec }, 0xe8|2, 0xe8|3 }, + {{ 0x808c3b40, 0x808c1738, 0x808c2c90, 0x808b1fd8 }, 0x7c4|2, 0x7c4|3 }, + {{ 0x808c4308, 0x808be758, 0x808c3458, 0x808b27a0 }, 0x5a0|2, 0x5a0|3 }, + {{ 0x808c48a8, 0x808c2360, 0x808c39f8, 0x808b2d40 }, 0x4|3, 0x4|3 }, + {{ 0x808c48ac, 0x808cab6c, 0x808c39fc, 0x808b2d44 }, 0x38|2, 0x38|3 }, + {{ 0x808c48e4, 0x808c1efc, 0x808c3a34, 0x808b2d7c }, 0x8|2, 0x8|3 }, + {{ 0x808c48ec, 0x808be80c, 0x808c3a3c, 0x808b2d84 }, 0x4|3, 0x4|3 }, + {{ 0x808c49dc, 0x808c2a0c, 0x808c3b2c, 0x808b2e74 }, 0x1c|2, 0x1c|3 }, + {{ 0x808c4a04, 0x808bed34, 0x808c3b54, 0x808b2e9c }, 0x16c|2, 0x16c|3 }, + {{ 0x808c4ba4, 0x808c201c, 0x808c3cf4, 0x808b303c }, 0x388|2, 0x474|3 }, + {{ 0x808c5018, 0x808c2490, 0x808c4168, 0x808b34b0 }, 0x4|3, 0x4|3 }, + {{ 0x808c5104, 0x808cb7a4, 0x808c4254, 0x808b359c }, 0x4|3, 0x4|3 }, + {{ 0x808c5108, 0x808c2580, 0x808c4258, 0x808b35a0 }, 0x4|3, 0x4|3 }, + {{ 0x808c510c, 0x808cb7ac, 0x808c425c, 0x808b35a4 }, 0x4|3, 0x4|3 }, + {{ 0x808c5110, 0x808c9648, 0x808c4260, 0x808b35a8 }, 0xe4|2, 0xe4|3 }, + {{ 0x808c51f4, 0x808beed4, 0x808c4344, 0x808b368c }, 0x54c|2, 0x54c|3 }, + {{ 0x808c5744, 0x808cc9ec, 0x808c4894, 0x808b3bdc }, 0x4|3, 0x4|3 }, + {{ 0x808c5748, 0x808c2670, 0x808c4898, 0x808b3be0 }, 0x4|3, 0x4|3 }, + {{ 0x808c574c, 0x808cc9f4, 0x808c489c, 0x808b3be4 }, 0xb0|2, 0xb0|3 }, + {{ 0x808c57fc, 0x808c16fc, 0x808c494c, 0x808b3c94 }, 0x2c|2, 0x2c|3 }, + {{ 0x808c5834, 0x808bf424, 0x808c4984, 0x808b3ccc }, 0x408|2, 0x408|3 }, + {{ 0x808c5c74, 0x808c275c, 0x808c4dc4, 0x808b410c }, 0x14|2, 0x14|3 }, + {{ 0x808c5c8c, 0x808d870c, 0x808c4ddc, 0x808b4124 }, 0xa4|2, 0xa4|3 }, + {{ 0x808c5d30, 0x808b1d88, 0x808c4e80, 0x808b41c8 }, 0x3c|2, 0x3c|3 }, + {{ 0x808c5d70, 0x808bf868, 0x808c4ec0, 0x808b4208 }, 0x1a4|2, 0x1a4|3 }, + {{ 0x808c5f14, 0x808c0c84, 0x808c5064, 0x808b43ac }, 0x4|3, 0x4|3 }, + {{ 0x808c5f18, 0x808bfa10, 0x808c5068, 0x808b43b0 }, 0x4|3, 0x4|3 }, + {{ 0x808c6000, 0x808c2b78, 0x808c5150, 0x808b4498 }, 0x8|2, 0x8|3 }, + {{ 0x808c6008, 0x808bfb00, 0x808c5158, 0x808b44a0 }, 0x4|3, 0x4|3 }, + {{ 0x808c60f8, 0x808c2858, 0x808c5248, 0x808b4590 }, 0x32c|2, 0x32c|3 }, + {{ 0x808c6424, 0x808bfa14, 0x808c5574, 0x808b48bc }, 0xec|2, 0xec|3 }, + {{ 0x808c6510, 0x808c2c70, 0x808c5660, 0x808b49a8 }, 0x4|3, 0x4|3 }, + {{ 0x808c6514, 0x808bfb04, 0x808c5664, 0x808b49ac }, 0xf8|2, 0xf8|3 }, + {{ 0x808c66f8, 0x808c2d60, 0x808c5848, 0x808b4b90 }, 0x4|3, 0x4|3 }, + {{ 0x808c66fc, 0x808c0f5c, 0x808c584c, 0x808b4b94 }, 0xb0|2, 0xb0|3 }, + {{ 0x808c67e8, 0x808bfce8, 0x808c5938, 0x808b4c80 }, 0x680|2, 0x680|3 }, + {{ 0x808c6e68, 0x808be188, 0x808c5fb8, 0x808b5300 }, 0xec|2, 0xec|3 }, + {{ 0x808c6f54, 0x808c2b6c, 0x808c60a4, 0x808b53ec }, 0x4|3, 0x4|3 }, + {{ 0x808c6f58, 0x808c0458, 0x808c60a8, 0x808b53f0 }, 0x4|3, 0x4|3 }, + {{ 0x808c6f5c, 0x808c2b74, 0x808c60ac, 0x808b53f4 }, 0x4|3, 0x4|3 }, + {{ 0x808c6f60, 0x808c0f50, 0x808c60b0, 0x808b53f8 }, 0x8|2, 0x8|3 }, + {{ 0x808c6f68, 0x808c2e50, 0x808c60b8, 0x808b5400 }, 0x4|3, 0x4|3 }, + {{ 0x808c6f6c, 0x808c0f5c, 0x808c60bc, 0x808b5404 }, 0xb0|2, 0xb0|3 }, + {{ 0x808c7050, 0x808c0460, 0x808c61a0, 0x808b54e8 }, 0x49c|2, 0x49c|3 }, + {{ 0x808c7524, 0x808c2f3c, 0x808c6674, 0x808b59bc }, 0x140|2, 0x140|3 }, + {{ 0x808c7664, 0x808c0934, 0x808c67b4, 0x808b5afc }, 0x168|2, 0x168|3 }, + {{ 0x808c77d0, 0x808c6054, 0x808c6920, 0x808b5c68 }, 0x4|3, 0x4|3 }, + {{ 0x808c77d4, 0x808c0aa4, 0x808c6924, 0x808b5c6c }, 0x4|3, 0x4|3 }, + {{ 0x808c77d8, 0x808c3080, 0x808c6928, 0x808b5c70 }, 0x1c|2, 0x1c|3 }, + {{ 0x808c77f4, 0x808c32c0, 0x808c6944, 0x808b5c8c }, 0x3c|2, 0x3c|3 }, + {{ 0x808c7830, 0x808c4530, 0x808c6980, 0x808b5cc8 }, 0x30|2, 0x30|3 }, + {{ 0x808c7860, 0x808c4960, 0x808c69b0, 0x808b5cf8 }, 0x4|3, 0x4|3 }, + {{ 0x808c7864, 0x808bd76c, 0x808c69b4, 0x808b5cfc }, 0xc|2, 0xc|3 }, + {{ 0x808c7870, 0x808c3108, 0x808c69c0, 0x808b5d08 }, 0x224|2, 0x224|3 }, + {{ 0x808c7a94, 0x808c496c, 0x808c6be4, 0x808b5f2c }, 0x50|2, 0x5c|3 }, + {{ 0x808c7af0, 0x808c49c8, 0x808c6c40, 0x808b5f88 }, 0x8|3, 0x8|3 }, + {{ 0x808c7af8, 0x808d6014, 0x808c6c48, 0x808b5f90 }, 0x4|3, 0x4|3 }, + {{ 0x808c7afc, 0x808c4154, 0x808c6c4c, 0x808b5f94 }, 0x4|3, 0x4|3 }, + {{ 0x808c7b00, 0x808c3330, 0x808c6c50, 0x808b5f98 }, 0x1030|2, 0x1088|3 }, + {{ 0x808c8b88, 0x808c43b8, 0x808c7cd8, 0x808b7020 }, 0x4|3, 0x4|3 }, + {{ 0x808c8cb8, 0x808c49d8, 0x808c7e08, 0x808b7150 }, 0x248|2, 0x248|3 }, + {{ 0x808c8f88, 0x808b23c8, 0x808c80d8, 0x808b7420 }, 0x8|2, 0x8|3 }, + {{ 0x808c8f90, 0x808c4cb0, 0x808c80e0, 0x808b7428 }, 0x4|3, 0x4|3 }, + {{ 0x808c8f98, 0x808c44e0, 0x808c80e8, 0x808b7430 }, 0x1ac|2, 0x238|3 }, + {{ 0x808c91d0, 0x808c4718, 0x808c8320, 0x808b7668 }, 0x14|3, 0x14|3 }, + {{ 0x808c91e8, 0x808d1278, 0x808c8338, 0x808b7680 }, 0x4|3, 0x4|3 }, + {{ 0x808c91f0, 0x808c4cc0, 0x808c8340, 0x808b7688 }, 0x4|3, 0x4|3 }, + {{ 0x808c9200, 0x808c4738, 0x808c8350, 0x808b7698 }, 0x21c|3, 0x21c|3 }, + {{ 0x808c941c, 0x808c4cc4, 0x808c856c, 0x808b78b4 }, 0x4c0|2, 0x4c0|3 }, + {{ 0x808c98e4, 0x808c67b4, 0x808c8a34, 0x808b7d7c }, 0x2dc|2, 0x2fc|3 }, + {{ 0x808c9be0, 0x808c6ab0, 0x808c8d30, 0x808b8078 }, 0x4|3, 0x4|3 }, + {{ 0x808c9c00, 0x808c5188, 0x808c8d50, 0x808b8098 }, 0x62c|2, 0x62c|3 }, + {{ 0x808ca22c, 0x808c6ad4, 0x808c937c, 0x808b86c4 }, 0x2a4|2, 0x2a4|3 }, + {{ 0x808ca530, 0x808c5780, 0x808c9680, 0x808b89c8 }, 0x8|2, 0x8|3 }, + {{ 0x808ca538, 0x808c6de0, 0x808c9688, 0x808b89d0 }, 0x4|3, 0x4|3 }, + {{ 0x808ca53c, 0x808c578c, 0x808c968c, 0x808b89d4 }, 0x64|2, 0x64|3 }, + {{ 0x808ca5a0, 0x808c6d78, 0x808c96f0, 0x808b8a38 }, 0x68|2, 0x68|3 }, + {{ 0x808ca608, 0x808c5858, 0x808c9758, 0x808b8aa0 }, 0x4|3, 0x4|3 }, + {{ 0x808ca60c, 0x808c6de4, 0x808c975c, 0x808b8aa4 }, 0x50|2, 0x68|3 }, + {{ 0x808ca674, 0x808c6e4c, 0x808c97c4, 0x808b8b0c }, 0x4|3, 0x4|3 }, + {{ 0x808ca690, 0x808c5888, 0x808c97e0, 0x808b8b28 }, 0x3ec|2, 0x3f8|3 }, + {{ 0x808caa88, 0x808c5c80, 0x808c9bd8, 0x808b8f20 }, 0x20|3, 0x20|3 }, + {{ 0x808caaa8, 0x808aa11c, 0x808c9bf8, 0x808b8f40 }, 0x4|3, 0x4|3 }, + {{ 0x808caab0, 0x808a458c, 0x808c9c00, 0x808b8f48 }, 0x4|3, 0x4|3 }, + {{ 0x808caac0, 0x808c6e68, 0x808c9c10, 0x808b8f58 }, 0x4b4|2, 0x4b4|3 }, + {{ 0x808caf74, 0x808b0f84, 0x808ca0c4, 0x808b940c }, 0x10|2, 0x10|3 }, + {{ 0x808caf84, 0x808c08fc, 0x808ca0d4, 0x808b941c }, 0x34|2, 0x34|3 }, + {{ 0x808cafb8, 0x808c5cb0, 0x808ca108, 0x808b9450 }, 0x68|2, 0x78|3 }, + {{ 0x808cb030, 0x808c5d28, 0x808ca180, 0x808b94c8 }, 0x8|3, 0x8|3 }, + {{ 0x808cb040, 0x808c7368, 0x808ca190, 0x808b94d8 }, 0x188|2, 0x188|3 }, + {{ 0x808cb1c8, 0x808b1778, 0x808ca318, 0x808b9660 }, 0x74|2, 0x74|3 }, + {{ 0x808cb240, 0x808c5d38, 0x808ca390, 0x808b96d8 }, 0x168|2, 0x180|3 }, + {{ 0x808cb3c0, 0x808c5eb8, 0x808ca510, 0x808b9858 }, 0x8c4|3, 0x8c4|3 }, + {{ 0x808cbcbc, 0x8089cc94, 0x808cae0c, 0x808ba154 }, 0x4|3, 0x4|3 }, + {{ 0x808cbcc0, 0x808cab10, 0x808cae10, 0x808ba158 }, 0x14|1, 0x14|1 }, + {{ 0x808cbcd4, 0x808cab24, 0x808cae24, 0x808ba16c }, 0x4|0, 0x38|1 }, + {{ 0x808cbd54, 0x808c7564, 0x808caea4, 0x808ba1ec }, 0x154|2, 0x154|3 }, + {{ 0x808cbea8, 0x808c2358, 0x808caff8, 0x808ba340 }, 0xc|2, 0xc|3 }, + {{ 0x808cbeb4, 0x808cab6c, 0x808cb004, 0x808ba34c }, 0x5d0|2, 0x5d0|3 }, + {{ 0x808cc48c, 0x808c76fc, 0x808cb5dc, 0x808ba924 }, 0x3d4|2, 0x3d4|3 }, + {{ 0x808cc8cc, 0x808cb144, 0x808cba1c, 0x808bad64 }, 0x5f4|2, 0x5f4|3 }, + {{ 0x808ccec0, 0x808c7ad0, 0x808cc010, 0x808bb358 }, 0x30|2, 0x30|3 }, + {{ 0x808ccf28, 0x808beed0, 0x808cc078, 0x808bb3c0 }, 0x4|3, 0x4|3 }, + {{ 0x808ccf30, 0x808c7b40, 0x808cc080, 0x808bb3c8 }, 0x4|3, 0x4|3 }, + {{ 0x808cd020, 0x808cb7a8, 0x808cc170, 0x808bb4b8 }, 0x4|3, 0x4|3 }, + {{ 0x808cd110, 0x808c7c30, 0x808cc260, 0x808bb5a8 }, 0x8b8|2, 0x8b8|3 }, + {{ 0x808cda54, 0x808d4258, 0x808ccba4, 0x808bbeec }, 0x2c|2, 0x2c|3 }, + {{ 0x808cda90, 0x808d3118, 0x808ccbe0, 0x808bbf28 }, 0xc|2, 0xc|3 }, + {{ 0x808cda9c, 0x808c8d14, 0x808ccbec, 0x808bbf34 }, 0x14|2, 0x14|3 }, + {{ 0x808cdab0, 0x808c85d0, 0x808ccc00, 0x808bbf48 }, 0x4|3, 0x4|3 }, + {{ 0x808cdab4, 0x808c8d2c, 0x808ccc04, 0x808bbf4c }, 0x4|3, 0x4|3 }, + {{ 0x808cdab8, 0x808cb880, 0x808ccc08, 0x808bbf50 }, 0x570|2, 0x570|3 }, + {{ 0x808ce12c, 0x808c60d4, 0x808cd27c, 0x808bc5c4 }, 0x10|2, 0x10|3 }, + {{ 0x808ce140, 0x808c85f0, 0x808cd290, 0x808bc5d8 }, 0x33c|2, 0x33c|3 }, + {{ 0x808ce480, 0x808c9dc0, 0x808cd5d0, 0x808bc918 }, 0xc4|2, 0xc4|3 }, + {{ 0x808ce568, 0x808cbf08, 0x808cd6b8, 0x808bca00 }, 0x5c0|2, 0x5c0|3 }, + {{ 0x808ceb28, 0x808af1dc, 0x808cdc78, 0x808bcfc0 }, 0x18|2, 0x18|3 }, + {{ 0x808ceb48, 0x808b0fc8, 0x808cdc98, 0x808bcfe0 }, 0x8|2, 0x8|3 }, + {{ 0x808ceb50, 0x808cc4f0, 0x808cdca0, 0x808bcfe8 }, 0x4|3, 0x4|3 }, + {{ 0x808ceb54, 0x808c8d2c, 0x808cdca4, 0x808bcfec }, 0x4|3, 0x4|3 }, + {{ 0x808ceb58, 0x808c8a00, 0x808cdca8, 0x808bcff0 }, 0x648|2, 0x648|3 }, + {{ 0x808cf1a0, 0x808cc510, 0x808ce2f0, 0x808bd638 }, 0x14|2, 0x14|3 }, + {{ 0x808cf2c8, 0x808c9048, 0x808ce418, 0x808bd760 }, 0x234|2, 0x234|3 }, + {{ 0x808cf4fc, 0x808c2364, 0x808ce64c, 0x808bd994 }, 0x38|2, 0x38|3 }, + {{ 0x808cf534, 0x808c77e4, 0x808ce684, 0x808bd9cc }, 0x4|3, 0x4|3 }, + {{ 0x808cf538, 0x808c92b8, 0x808ce688, 0x808bd9d0 }, 0x4|3, 0x4|3 }, + {{ 0x808cf53c, 0x808c77ec, 0x808ce68c, 0x808bd9d4 }, 0x4|3, 0x4|3 }, + {{ 0x808cf540, 0x808d18d0, 0x808ce690, 0x808bd9d8 }, 0x4|3, 0x4|3 }, + {{ 0x808cf628, 0x808cc638, 0x808ce778, 0x808bdac0 }, 0x1dc|2, 0x2c8|3 }, + {{ 0x808cf8f0, 0x808cc900, 0x808cea40, 0x808bdd88 }, 0xf4|3, 0xf4|3 }, + {{ 0x808cf9e8, 0x808c9dc0, 0x808ceb38, 0x808bde80 }, 0xd8|2, 0xe4|3 }, + {{ 0x808cfacc, 0x808c9ea4, 0x808cec1c, 0x808bdf64 }, 0x4|3, 0x4|3 }, + {{ 0x808cfad0, 0x808c93a8, 0x808cec20, 0x808bdf68 }, 0x690|2, 0x690|3 }, + {{ 0x808d0160, 0x808d0160, 0x808cf2b0, 0x808be5f8 }, 0x4|3, 0x4|3 }, + {{ 0x808d0164, 0x808c9a3c, 0x808cf2b4, 0x808be5fc }, 0x200|2, 0x200|3 }, + {{ 0x808d0364, 0x808d0364, 0x808d0364, 0x808c0364 }, 0x4|3, 0x4|3 }, + {{ 0x808d0368, 0x808c9c40, 0x808cf4b8, 0x808be800 }, 0x120|2, 0x120|3 }, + {{ 0x808d04bc, 0x808d5b0c, 0x808cf60c, 0x808be954 }, 0x4|3, 0x4|3 }, + {{ 0x808d04c4, 0x808ccadc, 0x808cf614, 0x808be95c }, 0x18|2, 0x18|3 }, + {{ 0x808d05c4, 0x808a50d4, 0x808cf714, 0x808bea5c }, 0x4|3, 0x4|3 }, + {{ 0x808d05c8, 0x808c9da0, 0x808cf718, 0x808bea60 }, 0x714|2, 0x714|3 }, + {{ 0x808d0ce0, 0x808c7edc, 0x808cfe30, 0x808bf178 }, 0xe8|2, 0xe8|3 }, + {{ 0x808d0dc8, 0x808ca5a0, 0x808cff18, 0x808bf260 }, 0xf0|3, 0xf0|3 }, + {{ 0x808d0ebc, 0x808ccbcc, 0x808d000c, 0x808bf354 }, 0x18|2, 0x104|3 }, + {{ 0x808d0fc0, 0x808cccd0, 0x808d0110, 0x808bf458 }, 0x1e4|3, 0x1e4|3 }, + {{ 0x808d1290, 0x808ca6a8, 0x808d03e0, 0x808bf728 }, 0x438|2, 0x438|3 }, + {{ 0x808d16c8, 0x808aea64, 0x808d0818, 0x808bfb60 }, 0x2c|2, 0x2c|3 }, + {{ 0x808d16f4, 0x808c455c, 0x808d0844, 0x808bfb8c }, 0x4|3, 0x4|3 }, + {{ 0x808d16f8, 0x808ccfa0, 0x808d0848, 0x808bfb90 }, 0xdc|2, 0xf0|3 }, + {{ 0x808d17e8, 0x808cd090, 0x808d0938, 0x808bfc80 }, 0x14|3, 0x14|3 }, + {{ 0x808d1804, 0x808ce2f4, 0x808d0954, 0x808bfc9c }, 0x4|3, 0x4|3 }, + {{ 0x808d1818, 0x808cd0b0, 0x808d0968, 0x808bfcb0 }, 0x578|2, 0x578|3 }, + {{ 0x808d1d9c, 0x808ce304, 0x808d0eec, 0x808c0234 }, 0x158|2, 0x164|3 }, + {{ 0x808d1f00, 0x808ce468, 0x808d1050, 0x808c0398 }, 0x4|3, 0x4|3 }, + {{ 0x808d1f38, 0x808cd638, 0x808d1088, 0x808c03d0 }, 0x74|2, 0x74|3 }, + {{ 0x808d1fac, 0x808ce464, 0x808d10fc, 0x808c0444 }, 0x4|3, 0x4|3 }, + {{ 0x808d1fb0, 0x808cd6b0, 0x808d1100, 0x808c0448 }, 0x4|3, 0x4|3 }, + {{ 0x808d1fb4, 0x808ce46c, 0x808d1104, 0x808c044c }, 0xa0|2, 0xa0|3 }, + {{ 0x808d2054, 0x808ce45c, 0x808d11a4, 0x808c04ec }, 0x8|2, 0x8|3 }, + {{ 0x808d205c, 0x808cd6ac, 0x808d11ac, 0x808c04f4 }, 0x4|3, 0x4|3 }, + {{ 0x808d2060, 0x808ce518, 0x808d11b0, 0x808c04f8 }, 0x4|3, 0x4|3 }, + {{ 0x808d2064, 0x808cd6b4, 0x808d11b4, 0x808c04fc }, 0x378|2, 0x378|3 }, + {{ 0x808d2418, 0x808d4b58, 0x808d1568, 0x808c08b0 }, 0x8|2, 0x8|3 }, + {{ 0x808d2420, 0x808cda70, 0x808d1570, 0x808c08b8 }, 0x4|3, 0x4|3 }, + {{ 0x808d2428, 0x808b3f58, 0x808d1578, 0x808c08c0 }, 0x4|3, 0x4|3 }, + {{ 0x808d242c, 0x808ce514, 0x808d157c, 0x808c08c4 }, 0x4|3, 0x4|3 }, + {{ 0x808d2430, 0x808cda80, 0x808d1580, 0x808c08c8 }, 0x4|3, 0x4|3 }, + {{ 0x808d2434, 0x808ce51c, 0x808d1584, 0x808c08cc }, 0x130|2, 0x130|3 }, + {{ 0x808d2564, 0x808ce2ec, 0x808d16b4, 0x808c09fc }, 0x4|3, 0x4|3 }, + {{ 0x808d2568, 0x808b0ac0, 0x808d16b8, 0x808c0a00 }, 0x4|3, 0x4|3 }, + {{ 0x808d2570, 0x808cdab8, 0x808d16c0, 0x808c0a08 }, 0x71c|2, 0x71c|3 }, + {{ 0x808d2cbc, 0x808bf828, 0x808d1e0c, 0x808c1154 }, 0x4|3, 0x4|3 }, + {{ 0x808d2cf4, 0x808ce654, 0x808d1e44, 0x808c118c }, 0xa0|2, 0xa0|3 }, + {{ 0x808d2da8, 0x808c6a58, 0x808d1ef8, 0x808c1240 }, 0x10|2, 0x10|3 }, + {{ 0x808d2dcc, 0x808ce23c, 0x808d1f1c, 0x808c1264 }, 0xb4|2, 0xb4|3 }, + {{ 0x808d2e80, 0x808b0ac0, 0x808d1fd0, 0x808c1318 }, 0x4|3, 0x4|3 }, + {{ 0x808d2e84, 0x808d4b6c, 0x808d1fd4, 0x808c131c }, 0x8|2, 0x8|3 }, + {{ 0x808d2e8c, 0x808d4d24, 0x808d1fdc, 0x808c1324 }, 0x38|2, 0x38|3 }, + {{ 0x808d2ec4, 0x808d4bac, 0x808d2014, 0x808c135c }, 0x4|3, 0x4|3 }, + {{ 0x808d2ec8, 0x808d4d60, 0x808d2018, 0x808c1360 }, 0x38|2, 0x38|3 }, + {{ 0x808d2f00, 0x808d4be8, 0x808d2050, 0x808c1398 }, 0x4|3, 0x4|3 }, + {{ 0x808d2f04, 0x808d4d9c, 0x808d2054, 0x808c139c }, 0x3c|2, 0x3c|3 }, + {{ 0x808d2f40, 0x808d4c28, 0x808d2090, 0x808c13d8 }, 0x4|3, 0x4|3 }, + {{ 0x808d2f44, 0x808d4ddc, 0x808d2094, 0x808c13dc }, 0x74|2, 0x74|3 }, + {{ 0x808d2fb8, 0x808d4ca0, 0x808d2108, 0x808c1450 }, 0x4|3, 0x4|3 }, + {{ 0x808d2fbc, 0x808d4e54, 0x808d210c, 0x808c1454 }, 0x3c|2, 0x3c|3 }, + {{ 0x808d2ff8, 0x808d4ce0, 0x808d2148, 0x808c1490 }, 0x4|3, 0x4|3 }, + {{ 0x808d2ffc, 0x808d4e94, 0x808d214c, 0x808c1494 }, 0x4|3, 0x4|3 }, + {{ 0x808d3000, 0x808b88d8, 0x808d2150, 0x808c1498 }, 0x4|3, 0x4|3 }, + {{ 0x808d3004, 0x808d518c, 0x808d2154, 0x808c149c }, 0x34|2, 0x34|3 }, + {{ 0x808d3038, 0x808ce730, 0x808d2188, 0x808c14d0 }, 0x54|2, 0x88|3 }, + {{ 0x808d30c0, 0x808ce7b8, 0x808d2210, 0x808c1558 }, 0xfc|3, 0xfc|3 }, + {{ 0x808d31c4, 0x808d50d8, 0x808d2314, 0x808c165c }, 0x34|2, 0x34|3 }, + {{ 0x808d31f8, 0x808ce8f0, 0x808d2348, 0x808c1690 }, 0x4|3, 0x4|3 }, + {{ 0x808d31fc, 0x808d50d4, 0x808d234c, 0x808c1694 }, 0x38|2, 0x38|3 }, + {{ 0x808d3234, 0x808ce92c, 0x808d2384, 0x808c16cc }, 0x4|3, 0x4|3 }, + {{ 0x808d323c, 0x808d4cec, 0x808d238c, 0x808c16d4 }, 0x518|2, 0x518|3 }, + {{ 0x808d3764, 0x808ce934, 0x808d28b4, 0x808c1bfc }, 0x33c|2, 0x384|3 }, + {{ 0x808d3ae8, 0x808cecb8, 0x808d2c38, 0x808c1f80 }, 0x4|3, 0x4|3 }, + {{ 0x808d3b48, 0x808cef88, 0x808d2c98, 0x808c1fe0 }, 0x40|2, 0x40|3 }, + {{ 0x808d3b88, 0x808ced58, 0x808d2cd8, 0x808c2020 }, 0x4|3, 0x4|3 }, + {{ 0x808d3b8c, 0x808cefcc, 0x808d2cdc, 0x808c2024 }, 0x4|3, 0x4|3 }, + {{ 0x808d3bd8, 0x808d5248, 0x808d2d28, 0x808c2070 }, 0x4|3, 0x4|3 }, + {{ 0x808d3c18, 0x808ceda8, 0x808d2d68, 0x808c20b0 }, 0x28|2, 0x28|3 }, + {{ 0x808d3c74, 0x808cec64, 0x808d2dc4, 0x808c210c }, 0x4|3, 0x4|3 }, + {{ 0x808d3c78, 0x808d5288, 0x808d2dc8, 0x808c2110 }, 0x4|3, 0x4|3 }, + {{ 0x808d3c7c, 0x808cecbc, 0x808d2dcc, 0x808c2114 }, 0x9c|2, 0x9c|3 }, + {{ 0x808d3d18, 0x808d5288, 0x808d2e68, 0x808c21b0 }, 0x54|2, 0xa4|3 }, + {{ 0x808d3dbc, 0x808d532c, 0x808d2f0c, 0x808c2254 }, 0x4|3, 0x4|3 }, + {{ 0x808d3dc8, 0x808cee60, 0x808d2f18, 0x808c2260 }, 0x4c|1, 0x4c|1 }, + {{ 0x808d3e14, 0x808ceeac, 0x808d2f64, 0x808c22ac }, 0x4|0, 0x124|1 }, + {{ 0x808d3f3c, 0x808d5204, 0x808d308c, 0x808c23d4 }, 0x44|2, 0x44|3 }, + {{ 0x808d3f80, 0x808cf018, 0x808d30d0, 0x808c2418 }, 0x4|3, 0x4|3 }, + {{ 0x808d3f84, 0x808d524c, 0x808d30d4, 0x808c241c }, 0x3c|2, 0x3c|3 }, + {{ 0x808d3fc0, 0x808d5380, 0x808d3110, 0x808c2458 }, 0x4|3, 0x4|3 }, + {{ 0x808d3fc4, 0x808ced5c, 0x808d3114, 0x808c245c }, 0x4|3, 0x4|3 }, + {{ 0x808d4010, 0x808cf058, 0x808d3160, 0x808c24a8 }, 0x4|3, 0x4|3 }, + {{ 0x808d4024, 0x808d5334, 0x808d3174, 0x808c24bc }, 0x4|3, 0x4|3 }, + {{ 0x808d4070, 0x808d53d0, 0x808d31c0, 0x808c2508 }, 0xa4|3, 0xa4|3 }, + {{ 0x808d4118, 0x808cf070, 0x808d3268, 0x808c25b0 }, 0x34|2, 0x48|3 }, + {{ 0x808d4160, 0x808cf0b8, 0x808d32b0, 0x808c25f8 }, 0x4|3, 0x4|3 }, + {{ 0x808d416c, 0x808c9ea4, 0x808d32bc, 0x808c2604 }, 0x4|3, 0x4|3 }, + {{ 0x808d4170, 0x808d54c0, 0x808d32c0, 0x808c2608 }, 0x4|3, 0x4|3 }, + {{ 0x808d4174, 0x808cbde4, 0x808d32c4, 0x808c260c }, 0x4|3, 0x4|3 }, + {{ 0x808d4178, 0x808d54c8, 0x808d32c8, 0x808c2610 }, 0x4|3, 0x4|3 }, + {{ 0x808d417c, 0x808cbdec, 0x808d32cc, 0x808c2614 }, 0x4|3, 0x4|3 }, + {{ 0x808d4298, 0x808cf0c8, 0x808d33e8, 0x808c2730 }, 0x604|2, 0x750|3 }, + {{ 0x808d49e8, 0x808cf818, 0x808d3b38, 0x808c2e80 }, 0x4|3, 0x4|3 }, + {{ 0x808d4a20, 0x808d54d0, 0x808d3b70, 0x808c2eb8 }, 0x4c4|2, 0x4c4|3 }, + {{ 0x808d4ef0, 0x808cf968, 0x808d4040, 0x808c3388 }, 0x3c4|2, 0x3c4|3 }, + {{ 0x808d52b8, 0x808d59a0, 0x808d4408, 0x808c3750 }, 0x24|2, 0x24|3 }, + {{ 0x808d52dc, 0x808d0284, 0x808d442c, 0x808c3774 }, 0x11c|2, 0x11c|3 }, + {{ 0x808d53f8, 0x808c95e8, 0x808d4548, 0x808c3890 }, 0x30|2, 0x30|3 }, + {{ 0x808d5430, 0x808cfd30, 0x808d4580, 0x808c38c8 }, 0x554|2, 0x554|3 }, + {{ 0x808d5984, 0x808d59c4, 0x808d4ad4, 0x808c3e1c }, 0x160|2, 0x160|3 }, + {{ 0x808d5c30, 0x808d03d8, 0x808d4d80, 0x808c40c8 }, 0x50c|2, 0x50c|3 }, + {{ 0x808d6178, 0x808d5c70, 0x808d52c8, 0x808c4610 }, 0x160|2, 0x160|3 }, + {{ 0x808d62e4, 0x808d091c, 0x808d5434, 0x808c477c }, 0xa44|2, 0xac4|3 }, + {{ 0x808d6da8, 0x808d13e0, 0x808d5ef8, 0x808c5240 }, 0x4|3, 0x4|3 }, + {{ 0x808d6dbc, 0x808d5ddc, 0x808d5f0c, 0x808c5254 }, 0x14|2, 0x14|3 }, + {{ 0x808d6dd8, 0x808d13f8, 0x808d5f28, 0x808c5270 }, 0x1aa0|2, 0x1aa0|3 }, + {{ 0x808d8960, 0x808d5df8, 0x808d7ab0, 0x808c6df8 }, 0x4|3, 0x4|3 }, + {{ 0x808d8a50, 0x808d2f80, 0x808d7ba0, 0x808c6ee8 }, 0xfc|2, 0xfc|3 }, + {{ 0x808d8b58, 0x808d5ee8, 0x808d7ca8, 0x808c6ff0 }, 0xf4|2, 0xf4|3 }, + {{ 0x808d8c4c, 0x808d5fdc, 0x808d7d9c, 0x808c79dc }, 0xc|2, 0xc|3 }, + {{ 0x808d8c58, 0x808d5fe8, 0x808d7da8, 0x808c70f0 }, 0x10|2, 0x28|3 }, + {{ 0x808d8c80, 0x808d6010, 0x808d7dd0, 0x808c7118 }, 0x10|3, 0x10|3 }, + {{ 0x808d8ca8, 0x808d3088, 0x808d7df8, 0x808c7140 }, 0x158|2, 0x158|3 }, + {{ 0x808d8e04, 0x808d6464, 0x808d7f54, 0x808c729c }, 0xa4|2, 0xa4|3 }, + {{ 0x808d8ea8, 0x808d6038, 0x808d7ff8, 0x808c7340 }, 0x4|3, 0x4|3 }, + {{ 0x808d8eb0, 0x808d65e0, 0x808d8000, 0x808c7348 }, 0x84|2, 0x84|3 }, + {{ 0x808d8f34, 0x808d31e4, 0x808d8084, 0x808c73cc }, 0xc|2, 0xc|3 }, + {{ 0x808d8f40, 0x808d60d0, 0x808d8090, 0x808c73d8 }, 0x4|3, 0x4|3 }, + {{ 0x808d8f44, 0x808d31f4, 0x808d8094, 0x808c73dc }, 0x1e8|2, 0x1fc|3 }, + {{ 0x808d9140, 0x808d33f0, 0x808d8290, 0x808c75d8 }, 0x34|3, 0x34|3 }, + {{ 0x808d9184, 0x808c561c, 0x808d82d4, 0x808c761c }, 0x4|3, 0x4|3 }, + {{ 0x808d9188, 0x808d3438, 0x808d82d8, 0x808c7620 }, 0x4|3, 0x4|3 }, + {{ 0x808d918c, 0x808d620c, 0x808d82dc, 0x808c7624 }, 0x4|3, 0x4|3 }, + {{ 0x808d9220, 0x808d6168, 0x808d8370, 0x808c76b8 }, 0xc|2, 0xc|3 }, + {{ 0x808d922c, 0x808d343c, 0x808d837c, 0x808c76c4 }, 0xc4|1, 0xc4|1 }, + {{ 0x808d92f0, 0x808d3500, 0x808d8440, 0x808c7788 }, 0x4|0, 0xb8|1 }, + {{ 0x808d93c0, 0x808d63e0, 0x808d8510, 0x808c7858 }, 0x70|2, 0x70|3 }, + {{ 0x808d9430, 0x808d3640, 0x808d8580, 0x808c78c8 }, 0x4|3, 0x4|3 }, + {{ 0x808d9434, 0x808d6454, 0x808d8584, 0x808c78cc }, 0x1c|2, 0x1c|3 }, + {{ 0x808d9450, 0x808d3660, 0x808d85a0, 0x808c78e8 }, 0x4|3, 0x4|3 }, + {{ 0x808d9454, 0x808d6474, 0x808d85a4, 0x808c78ec }, 0x4|3, 0x4|3 }, + {{ 0x808d9458, 0x808d60e0, 0x808d85a8, 0x808c78f0 }, 0x90|2, 0x90|3 }, + {{ 0x808d94e8, 0x808d36f8, 0x808d8638, 0x808c7980 }, 0x4|3, 0x4|3 }, + {{ 0x808d94ec, 0x808d6174, 0x808d863c, 0x808c7984 }, 0x13c|2, 0x1cc|3 }, + {{ 0x808d96b8, 0x808d6340, 0x808d8808, 0x808c7b50 }, 0x4|3, 0x4|3 }, + {{ 0x808d96c0, 0x808d35d0, 0x808d8810, 0x808c7b58 }, 0x90|2, 0x90|3 }, + {{ 0x808d9750, 0x808d63d8, 0x808d88a0, 0x808c7be8 }, 0x4|3, 0x4|3 }, + {{ 0x808d9754, 0x808d3664, 0x808d88a4, 0x808c7bec }, 0x94|2, 0x94|3 }, + {{ 0x808d97e8, 0x808d6470, 0x808d8938, 0x808c7c80 }, 0x4|3, 0x4|3 }, + {{ 0x808d97ec, 0x808d36fc, 0x808d893c, 0x808c7c84 }, 0x3d4|2, 0x3d4|3 }, + {{ 0x808d9bc4, 0x808d3cdc, 0x808d8d14, 0x808c805c }, 0x4|3, 0x4|3 }, + {{ 0x808d9bc8, 0x808d6508, 0x808d8d18, 0x808c8060 }, 0x9c|3, 0x9c|3 }, + {{ 0x808d9c64, 0x808d3aec, 0x808d8db4, 0x808c80fc }, 0x4|3, 0x4|3 }, + {{ 0x808d9cf8, 0x808d3ad8, 0x808d8e48, 0x808c8190 }, 0x398|2, 0x3a8|3 }, + {{ 0x808da0a0, 0x808d3e80, 0x808d91f0, 0x808c8538 }, 0x4|3, 0x4|3 }, + {{ 0x808da0a4, 0x808d65a4, 0x808d91f4, 0x808c853c }, 0x4|3, 0x4|3 }, + {{ 0x808da0a8, 0x808d6048, 0x808d91f8, 0x808c8540 }, 0x24|2, 0x24|3 }, + {{ 0x808da0cc, 0x808d65cc, 0x808d921c, 0x808c8564 }, 0x98|2, 0x98|3 }, + {{ 0x808da164, 0x808d31e4, 0x808d92b4, 0x808c85fc }, 0xc|2, 0xc|3 }, + {{ 0x808da170, 0x808d6670, 0x808d92c0, 0x808c8608 }, 0x4|3, 0x4|3 }, + {{ 0x808da174, 0x808d31f4, 0x808d92c4, 0x808c860c }, 0x94|2, 0x94|3 }, + {{ 0x808da208, 0x808d6708, 0x808d9358, 0x808c86a0 }, 0x4|3, 0x4|3 }, + {{ 0x808da20c, 0x808d328c, 0x808d935c, 0x808c86a4 }, 0x8|2, 0x8|3 }, + {{ 0x808da214, 0x808d6714, 0x808d9364, 0x808c86ac }, 0x4|3, 0x4|3 }, + {{ 0x808da218, 0x808d3298, 0x808d9368, 0x808c86b0 }, 0x1c|2, 0x1c|3 }, + {{ 0x808da234, 0x808d3e7c, 0x808d9384, 0x808c86cc }, 0x4|3, 0x4|3 }, + {{ 0x808da238, 0x808d6738, 0x808d9388, 0x808c86d0 }, 0x4|3, 0x4|3 }, + {{ 0x808da23c, 0x808d3e84, 0x808d938c, 0x808c86d4 }, 0x130|2, 0x144|3 }, + {{ 0x808da380, 0x808d3fc8, 0x808d94d0, 0x808c8818 }, 0x34|3, 0x34|3 }, + {{ 0x808da3c4, 0x808d6734, 0x808d9514, 0x808c885c }, 0x4|3, 0x4|3 }, + {{ 0x808da3c8, 0x808d4010, 0x808d9518, 0x808c8860 }, 0x4|3, 0x4|3 }, + {{ 0x808da3cc, 0x808d673c, 0x808d951c, 0x808c8864 }, 0x64|2, 0x94|3 }, + {{ 0x808da460, 0x808d67d0, 0x808d95b0, 0x808c88f8 }, 0x4|3, 0x4|3 }, + {{ 0x808da4cc, 0x808d400c, 0x808d961c, 0x808c8964 }, 0x570|2, 0x570|3 }, + {{ 0x808daa48, 0x808d68d8, 0x808d9b98, 0x808c8ee0 }, 0x2ac|2, 0x2ac|3 }, + {{ 0x808dacf4, 0x808aeb1c, 0x808d9e44, 0x808c918c }, 0x4|3, 0x4|3 }, + {{ 0x808dacf8, 0x808b512c, 0x808d9e48, 0x808c9190 }, 0x8|2, 0x8|3 }, + {{ 0x808dad00, 0x808d4588, 0x808d9e50, 0x808c9198 }, 0xe0|2, 0x144|3 }, + {{ 0x808dae44, 0x808d46cc, 0x808d9f94, 0x808c92dc }, 0x4|3, 0x4|3 }, + {{ 0x808dae54, 0x808cedac, 0x808d9fa4, 0x808c92ec }, 0x4|3, 0x4|3 }, + {{ 0x808daea8, 0x808c4720, 0x808d9ff8, 0x808c9340 }, 0x4|3, 0x4|3 }, + {{ 0x808daeb8, 0x808b66e8, 0x808da008, 0x808c9350 }, 0x90|2, 0x90|3 }, + {{ 0x808daf48, 0x808d4738, 0x808da098, 0x808c93e0 }, 0x4|3, 0x4|3 }, + {{ 0x808daf4c, 0x80875fb8, 0x8088237c, 0x808710d0 }, 0x4|3, 0x4|3 }, + {{ 0x808daf64, 0x80875fb8, 0x8088237c, 0x808710d0 }, 0x4|3, 0x4|3 }, + {{ 0x808daf68, 0x80875fb8, 0x8088237c, 0x808710d0 }, 0x4|3, 0x4|3 }, + {{ 0x808daf6c, 0x80875fb8, 0x8088237c, 0x808710d0 }, 0x4|3, 0x4|3 }, + {{ 0x808daf70, 0x80875fb8, 0x8088237c, 0x808710d0 }, 0x4|3, 0x4|3 }, + {{ 0x808daf74, 0x80875fb8, 0x8088237c, 0x808710d0 }, 0x4|3, 0x4|3 }, + {{ 0x808daf78, 0x80875fb8, 0x8088237c, 0x808710d0 }, 0x4|3, 0x4|3 }, + {{ 0x808daf7c, 0x80875fb8, 0x8088237c, 0x808710d0 }, 0x4|3, 0x4|3 }, + {{ 0x808daf80, 0x80875fb8, 0x8088237c, 0x808710d0 }, 0x4|3, 0x4|3 }, + {{ 0x808dafa4, 0x808d4794, 0x808da0f4, 0x808c943c }, 0x22c|3, 0x22c|3 }, + {{ 0x808db228, 0x808d1138, 0x808da378, 0x808c96c0 }, 0x144|2, 0x144|3 }, + {{ 0x808db370, 0x808d4b60, 0x808da4c0, 0x808c9808 }, 0x4|3, 0x4|3 }, + {{ 0x808db37c, 0x808b5604, 0x808da4cc, 0x808c9814 }, 0x4|3, 0x4|3 }, + {{ 0x808db380, 0x808d6c28, 0x808da4d0, 0x808c9818 }, 0x874|2, 0x874|3 }, + {{ 0x808dbc14, 0x808bcf80, 0x808dad64, 0x808ca0ac }, 0x50|2, 0x50|3 }, + {{ 0x808dbc74, 0x808b6a24, 0x808dadc4, 0x808ca10c }, 0x10|2, 0x10|3 }, + {{ 0x808dbd30, 0x808d7660, 0x808dae80, 0x808ca1c8 }, 0x4|3, 0x4|3 }, + {{ 0x808dbdec, 0x808af3b4, 0x808daf3c, 0x808ca284 }, 0x4|3, 0x4|3 }, + {{ 0x808dbdf0, 0x808d75d8, 0x808daf40, 0x808ca288 }, 0x4|3, 0x4|3 }, + {{ 0x808dbdf4, 0x808b239c, 0x808daf44, 0x808ca28c }, 0x4|3, 0x4|3 }, + {{ 0x808dbdfc, 0x808d75e4, 0x808daf4c, 0x808ca294 }, 0x4|3, 0x4|3 }, + {{ 0x808dbe08, 0x808d7720, 0x808daf58, 0x808ca2a0 }, 0x4|3, 0x4|3 }, + {{ 0x808dbe10, 0x808d31bc, 0x808daf60, 0x808ca2a8 }, 0x4|3, 0x4|3 }, + {{ 0x808dbe14, 0x808c5280, 0x808daf64, 0x808ca2ac }, 0x4|3, 0x4|3 }, + {{ 0x808dbe18, 0x808d75f0, 0x808daf68, 0x808ca2b0 }, 0x1c|2, 0x1c|3 }, + {{ 0x808dbe34, 0x808ae974, 0x808daf84, 0x808ca2cc }, 0x4|3, 0x4|3 }, + {{ 0x808dbe38, 0x808d7610, 0x808daf88, 0x808ca2d0 }, 0x4|3, 0x4|3 }, + {{ 0x808dbe3c, 0x808c46dc, 0x808daf8c, 0x808ca2d4 }, 0xc|2, 0xc|3 }, + {{ 0x808dbe48, 0x808d7620, 0x808daf98, 0x808ca2e0 }, 0x4|3, 0x4|3 }, + {{ 0x808dbe4c, 0x808c46ec, 0x808daf9c, 0x808ca2e4 }, 0x24|2, 0x24|3 }, + {{ 0x808dbe78, 0x808d7650, 0x808dafc8, 0x808ca310 }, 0x4|3, 0x4|3 }, + {{ 0x808dbe84, 0x808d7d4c, 0x808dafd4, 0x808ca31c }, 0x6c4|2, 0x6c4|3 }, + {{ 0x808dc580, 0x808bda70, 0x808db6d0, 0x808caa18 }, 0x34|2, 0x34|3 }, + {{ 0x808dc5b4, 0x808d772c, 0x808db704, 0x808caa4c }, 0x57c|2, 0x594|3 }, + {{ 0x808dcb48, 0x808d7cc0, 0x808dbc98, 0x808cafe0 }, 0x4|3, 0x4|3 }, + {{ 0x808dcbd4, 0x808d847c, 0x808dbd24, 0x808cb06c }, 0x84c|2, 0x84c|3 }, + {{ 0x809bd6e8, 0x809b8f28, 0x809bc748, 0x809abd28 }, 0x4|0, 0x40|1 }, + {{ 0x809bd728, 0x809b8f68, 0x809bc788, 0x809abd68 }, 0x14|0, 0x20|1 }, + {{ 0x809bd748, 0x809b8f88, 0x809bc7a8, 0x809abd88 }, 0x4|0, 0x4|0 }, + {{ 0x809c18f8, 0x809bd110, 0x809c0958, 0x809aff38 }, 0xc|0, 0xc|0 }, + {{ 0x809c1e38, 0x809bd508, 0x809c0e98, 0x809b0478 }, 0x4|0, 0x4|0 }, + {{ 0x809c20d8, 0x809bd918, 0x809c1138, 0x809b0718 }, 0x4|0, 0x4|0 }, + {{ 0x809c20f8, 0x809bd950, 0x809c1158, 0x809b0738 }, 0x4|0, 0x4|0 }, + {{ 0x809c2100, 0x809bd930, 0x809c1160, 0x809b0740 }, 0x4|0, 0x4|0 }, + {{ 0x809c3618, 0x809bee20, 0x809c2678, 0x809b1c58 }, 0x4|0, 0x4|0 }, + {{ 0x809c38b8, 0x809bf0b0, 0x809c2918, 0x809b13f8 }, 0x4|0, 0x4|0 }, + {{ 0x809c38bc, 0x809bf0b4, 0x809c291c, 0x809b1efc }, 0x8|0, 0x8|0 }, + {{ 0xcd000000, 0xcd000000, 0xcd000000, 0xcd000000 }, 0x8000|0, 0x8000|0 }, +}; // 2304 records + diff --git a/project/src/lib-brres.c b/project/src/lib-brres.c index 10ab6d4..4bb1058 100644 --- a/project/src/lib-brres.c +++ b/project/src/lib-brres.c @@ -710,8 +710,6 @@ enumError CreateBRRES if ( f_ptr->dir_id != dir_id ) continue; - noPRINT("*** %d %3u %s\n",f_ptr->is_dir,f_ptr->dir_id,f_ptr->path); - //--- write name data IsolateFilename(path_buf,sizeof(path_buf),f_ptr->path,f_ptr->fform); @@ -849,22 +847,36 @@ static int iterate_brres_group { it->name = 0; ccp name = ""; - uint name_len = 0; + int name_len = 0; uint new_path_len = path_len; const uint name_off = it->endian->rd32(&entry->name_off); - if (name_off) + + if ( name_off && name_off < szs->size ) { it->name = name = (ccp)grp + name_off; name_len = it->endian->rd32(name-4); - if ( path_len + name_len < sizeof(it->path)-2 ) - { - it->trail_path = it->path+path_len; - memcpy(it->trail_path,name,name_len); - new_path_len += name_len; - it->path[new_path_len] = 0; - } + if ( name_len < 0 ) + name_len = strlen(name); + if ( name_len < 1 || name_off + name_len > szs->size ) + name_len = 0; + } + + char name_buf[20]; + if ( name_len < 1 ) + { + name_len = snprintf(name_buf,sizeof(name_buf),"_file_%zu",entry-grp->entry); + name = name_buf; + it->name = 0; } + if ( path_len + name_len < sizeof(it->path)-2 ) + { + it->trail_path = it->path+path_len; + memcpy(it->trail_path,name,name_len); + new_path_len += name_len; + it->path[new_path_len] = 0; + } + const u8 * data = (u8*)grp + it->endian->rd32(&entry->data_off); it->index++; if ( data < it->root_end ) diff --git a/project/src/lib-file.c b/project/src/lib-file.c index c4cce3d..80be732 100644 --- a/project/src/lib-file.c +++ b/project/src/lib-file.c @@ -3626,15 +3626,13 @@ void AnalyzeSlotAttrib ( slot_info_t *si, bool reset_si, mem_t attrib ) if ( src[0]=='r' && src[1]>='1' && src[1]<='8' && src[2]>='1' && src[2]<='4' ) { const u16 slot = strtoul(src+1,0,10); - if ( !si->have_31_71 && !si->have_31_42_71 && !si->have_31_62_71 ) + if ( !si->have_31_71 && !si->have_31_42_71 ) { si->race_mode = SIT_RECOMMEND; si->race_slot = slot; StringCopySM(si->race_info,sizeof(si->race_info),src,3); } - else if ( slot == 31 || slot == 71 - || slot == 42 && si->have_31_42_71 - || slot == 62 && si->have_31_62_71 ) + else if ( slot == 31 || slot == 71 || slot == 42 && si->have_31_42_71 ) { si->race_mode = SIT_MANDATORY; si->race_slot = slot; @@ -3718,22 +3716,6 @@ void AnalyzeSlotAttrib ( slot_info_t *si, bool reset_si, mem_t attrib ) StringCopySM(si->race_info,sizeof(si->race_info),src,8); } } - else if (!memcmp(src,"31+62+71",8)) - { - si->have_31_62_71 = true; - if ( si->race_mode != SIT_MANDATORY3 - && (si->race_slot == 31 || si->race_slot == 62 || si->race_slot == 71 )) - { - si->race_mode = SIT_MANDATORY; - snprintf(si->race_info,sizeof(si->race_info),"%u",si->race_slot); - } - else - { - si->race_mode = SIT_MANDATORY3; - si->race_slot = 31; - StringCopySM(si->race_info,sizeof(si->race_info),src,8); - } - } break; } } diff --git a/project/src/lib-lecode.c b/project/src/lib-lecode.c index 05d3c00..8c71067 100644 --- a/project/src/lib-lecode.c +++ b/project/src/lib-lecode.c @@ -228,6 +228,18 @@ ccp GetLecodeDebugName ( le_debug_mode_t mode ) //----------------------------------------------------------------------------- +ccp GetCheatModeInfo ( uint cheat_mode ) +{ + switch (cheat_mode) + { + case 0: return "disabled"; + case 1: return "debug only"; + default: return "all"; + } +} + +//----------------------------------------------------------------------------- + ccp GetLecodeDebugInfo ( le_debug_mode_t mode ) { switch (mode) @@ -463,6 +475,8 @@ bool GetNextDebugMode ( lecode_debug_info_t *ldi ) { LEDEB_CHECK_POINT, LEDEB_S_CHECK_POINT, "CHECK-POINT" }, { LEDEB_RESPAWN, 0, "RESPAWN" }, { LEDEB_LAP_POS, 0, "LAP-POS" }, + { LEDEB_XPF, LEDEB_S_XPF, "XPF" }, +// [[xpf+]] }; while ( ldi->index >= 0 && ldi->index < sizeof(tab)/sizeof(*tab) ) @@ -505,6 +519,7 @@ lecode_debug_t DecodeLecodeDebug ( lecode_debug_ex_t *lde, lecode_debug_t mode ) lde->check_point = mode >> LEDEB_S_CHECK_POINT & LEDEB_M_CHECK_POINT; lde->respawn = ( mode & LEDEB_RESPAWN ) > 0; lde->lap_pos = ( mode & LEDEB_LAP_POS ) > 0; + lde->xpf = mode >> LEDEB_S_XPF & LEDEB_M_XPF; lde->have_output = isDebugModeOutput(mode); lde->is_active = isDebugModeActive(mode); @@ -518,7 +533,9 @@ lecode_debug_t EncodeLecodeDebug ( lecode_debug_ex_t *lde ) { DASSERT(lde); - lecode_debug_t mode = ( lde->check_point & LEDEB_M_CHECK_POINT ) << LEDEB_S_CHECK_POINT; + lecode_debug_t mode = ( lde->check_point & LEDEB_M_CHECK_POINT ) << LEDEB_S_CHECK_POINT + | ( lde->xpf & LEDEB_M_XPF ) << LEDEB_S_XPF; + if ( lde->enabled ) mode |= LEDEB_ENABLED; if ( lde->opponent ) mode |= LEDEB_OPPONENT; if ( lde->space ) mode |= LEDEB_SPACE; @@ -572,7 +589,7 @@ bool SetupLecodeDebugLPAR { { PREDEBUG_CLEAR, 0, 0 }, - { PREDEBUG_STANDARD, 1, LEDEB__STD }, + { PREDEBUG_STANDARD, 1, LEDEB__STD|LEDEB_SHORT_XPF }, { PREDEBUG_OPPONENT, 1, LEDEB__STD }, { PREDEBUG_OPPONENT, 2, LEDEB__STD|LEDEB_OPPONENT }, @@ -582,6 +599,8 @@ bool SetupLecodeDebugLPAR { PREDEBUG_VERTICAL, 2, LEDEB_RESPAWN }, { PREDEBUG_VERTICAL, 3, LEDEB_LAP_POS }, { PREDEBUG_VERTICAL, 4, LEDEB_POSITION }, + { PREDEBUG_VERTICAL, 5, LEDEB_LONG_XPF }, +// [[xpf+]] {0,0,0} }; @@ -661,9 +680,12 @@ lpar_mode_t CalcCurrentLparMode ( const le_lpar_t * lp, bool use_limit_param ) if ( lp->enable_perfmon > 1 ) return LPM_EXPERIMENTAL; + // [[new-lpar]] + return lp->enable_perfmon || !lp->enable_xpflags || lp->enable_speedo > SPEEDO_FRACTION1 + || lp->cheat_mode > 1 ? LPM_TESTING : LPM_PRODUCTIVE; } @@ -699,6 +721,8 @@ bool LimitToLparMode ( le_lpar_t * lp, lpar_mode_t lpmode ) { lp->enable_xpflags = 1; modified = true; } if ( lp->enable_speedo > SPEEDO_MAX ) { lp->enable_speedo = SPEEDO_MAX; modified = true; } + if ( lp->cheat_mode > 1 ) + { lp->cheat_mode = 1; modified = true; } } else if ( lpmode == LPM_TESTING ) { @@ -706,6 +730,8 @@ bool LimitToLparMode ( le_lpar_t * lp, lpar_mode_t lpmode ) { lp->enable_perfmon = 1; modified = true; } } + // [[new-lpar]] + return modified; } @@ -725,32 +751,33 @@ void ClearLparChat ( le_lpar_t * lp ) const u16 chat_mode_legacy[BMG_N_CHAT] = { - 0,0,0,0, 0,0,0,0, // 1 .. 8 - 0,0,0,0, 0,0,0,0, // 9 .. 16 - 0,0,0,0, 0,0,0,0, // 17 .. 24 - 0,0,0,0, 0,0,0,0, // 25 .. 32 - 0,0,0,0, 0,0,0,0, // 33 .. 40 - 0,0,0,0, 0,0,0,0, // 41 .. 48 - 0,0,0,0, 0,0,0,0, // 49 .. 56 - 0,0,0,0, 0,0,0,0, // 57 .. 64 + 0,0,0,0, 0,0,0,0, // 1 .. 8 + 0,0,0,0, 0,0,0,0, // 9 .. 16 + 0,0,0,0, 0,0,0,0, // 17 .. 24 + 0,0,0,0, 0,0,0,0, // 25 .. 32 + 0,0,0,0, 0,0,0,0, // 33 .. 40 + 0,0,0,0, 0,0,0,0, // 41 .. 48 + 0,0,0,0, 0,0,0,0, // 49 .. 56 + 0,0,0,0, 0,0,0,0, // 57 .. 64 - CHATMD_ANY_VEHICLE, 0,0,0, // 65 .. 68 - CHATMD_KARTS_ONLY, // 69 - CHATMD_BIKES_ONLY, // 70 - CHATMD_TRACK_BY_HOST, // 71 - CHATMD_ANY_TRACK, // 72 + CHATMD_VEHICLE_BEG+CHATVEH_ANY, // 65 + 0,0,0, // 66 .. 68 + CHATMD_VEHICLE_BEG+CHATVEH_KART, // 69 + CHATMD_VEHICLE_BEG+CHATVEH_BIKE, // 70 + CHATMD_TRACK_BY_HOST, // 71 + CHATMD_ANY_TRACK, // 72 - RACE0 + 1, // 73 - RACE0 + 2, // 74 - RACE0 + 3, // 75 - RACE0 + 4, // 76 - RACE0 + 5, // 77 - RACE0 + 6, // 78 - RACE0 + 8, // 79 - RACE0 + 10, // 80 + RACE0 + 1, // 73 + RACE0 + 2, // 74 + RACE0 + 3, // 75 + RACE0 + 4, // 76 + RACE0 + 5, // 77 + RACE0 + 6, // 78 + RACE0 + 8, // 79 + RACE0 + 10, // 80 - 0,0,0,0, 0,0,0,0, // 81 .. 88 - 0,0,0,0, 0,0,0,0, // 89 .. 96 + 0,0,0,0, 0,0,0,0, // 81 .. 88 + 0,0,0,0, 0,0,0,0, // 89 .. 96 }; //----------------------------------------------------------------------------- @@ -880,20 +907,20 @@ void InitializeLPAR ( le_lpar_t *lpar, bool load_lpar ) DASSERT(lpar); memset(lpar,0,sizeof(*lpar)); - lpar->limit_mode = LPM__DEFAULT; - - lpar->engine[0] = 10; - lpar->engine[1] = 60; - lpar->engine[2] = 30; - lpar->enable_xpflags= 1; - lpar->block_track = 0; + lpar->limit_mode = LPM__DEFAULT; + lpar->engine[0] = 10; + lpar->engine[1] = 60; + lpar->engine[2] = 30; + lpar->enable_xpflags = 1; + lpar->drag_blue_shell = 1; + lpar->thcloud_frames = 300; if ( load_lpar && opt_lpar ) LoadLPAR(lpar,false,0,false); } /////////////////////////////////////////////////////////////////////////////// - + static void NormalizeLPAR ( le_lpar_t * lp ) { DASSERT(lp); @@ -912,6 +939,10 @@ static void NormalizeLPAR ( le_lpar_t * lp ) lp->engine[2] = 100 - lp->engine[0] - lp->engine[1]; } + if ( lp->thcloud_frames < 1 || lp->thcloud_frames > 0x7fff ) + lp->thcloud_frames = 300; + + lp->cheat_mode = lp->cheat_mode < 2 ? lp->cheat_mode : 2; lp->enable_200cc = lp->enable_200cc > 0; lp->enable_perfmon = lp->enable_perfmon < 2 ? lp->enable_perfmon : 2; lp->enable_custom_tt = lp->enable_custom_tt > 0; @@ -919,10 +950,15 @@ static void NormalizeLPAR ( le_lpar_t * lp ) lp->enable_speedo = lp->enable_speedo < SPEEDO_MAX ? lp->enable_speedo : SPEEDO_MAX; lp->block_track = lp->block_track < LE_MAX_BLOCK_TRACK ? lp->block_track : LE_MAX_BLOCK_TRACK; + lp->drag_blue_shell = lp->drag_blue_shell > 0; + #if 0 for ( int c = 0; c < LEDEB__N_CONFIG; c++ ) for ( int l = 0; l < LEDEB__N_LINE; l++ ) lp->debug[c][l] &= LEDEB__ALL; + #endif + + // [[new-lpar]] } /////////////////////////////////////////////////////////////////////////////// @@ -962,10 +998,10 @@ static void CopyLPAR2Data ( le_analyse_t * ana ) if ( offsetof(le_binpar_v1_t,item_cheat) < ana->param_size ) h->item_cheat = lp->item_cheat; - if ( offsetof(le_binpar_v1_t,debug_predef[LEDEB__N_CONFIG]) <= ana->param_size ) + if ( offsetof(le_binpar_v1_t,debug_predef[LEDEB__N_CONFIG-1]) < ana->param_size ) memcpy( h->debug_predef,lp->debug_predef,sizeof(h->debug_predef)); - if ( offsetof(le_binpar_v1_t,debug[LEDEB__N_CONFIG][0]) <= ana->param_size ) + if ( offsetof(le_binpar_v1_t,debug[LEDEB__N_CONFIG-1][LEDEB__N_LINE-1]) < ana->param_size ) write_be32n( h->debug[0], lp->debug[0], LEDEB__N_CONFIG*LEDEB__N_LINE ); if ( offsetof(le_binpar_v1_t,block_track) < ana->param_size ) @@ -976,6 +1012,17 @@ static void CopyLPAR2Data ( le_analyse_t * ana ) if ( offsetof(le_binpar_v1_t,chat_mode_2) + sizeof(h->chat_mode_2) <= ana->param_size ) write_be16n(h->chat_mode_2,lp->chat_mode_2,BMG_N_CHAT); + + if ( offsetof(le_binpar_v1_t,cheat_mode) < ana->param_size ) + h->cheat_mode = lp->cheat_mode; + + if ( offsetof(le_binpar_v1_t,drag_blue_shell) < ana->param_size ) + h->drag_blue_shell = lp->drag_blue_shell; + + if ( offsetof(le_binpar_v1_t,thcloud_frames) < ana->param_size ) + h->thcloud_frames = htons(lp->thcloud_frames); + + // [[new-lpar]] } // @@ -1071,8 +1118,10 @@ enumError WriteSectionLPAR if (verbose) { + // [[new-lpar]] fprintf(f,text_lpar_sect_param_cr ,GetLparModeName(CalcCurrentLparMode(lpar,true),export_count>0) + ,lpar->cheat_mode ,lpar->engine[0],lpar->engine[1],lpar->engine[2] ,lpar->enable_200cc ,lpar->enable_perfmon @@ -1082,13 +1131,17 @@ enumError WriteSectionLPAR ,GetLecodeSpeedoName(lpar->enable_speedo) ,GetLecodeDebugName(lpar->debug_mode) ,lpar->item_cheat + ,lpar->drag_blue_shell + ,lpar->thcloud_frames,lpar->thcloud_frames/60.0 ); } else { + // [[new-lpar]] fprintf(f, "\r\n" "LIMIT-MODE = %s\r\n\r\n" + "CHEAT-MODE = %d\r\n" "ENGINE = %u,%u,%u\r\n" "ENABLE-200CC = %u\r\n" "PERF-MONITOR = %u\r\n" @@ -1097,8 +1150,11 @@ enumError WriteSectionLPAR "BLOCK-TRACK = %u\r\n" "SPEEDOMETER = SPEEDO$%s\r\n" "DEBUG = DEBUG$%s\r\n" - "ITEM-CHEATS = %u\r\n" + "ITEM-CHEAT = %u\r\n" + "DRAG-BLUE-SHELL = %u\r\n" + "THCLOUD-TIME = %u # %.2fs\r\n" ,GetLparModeName(CalcCurrentLparMode(lpar,true),export_count>0) + ,lpar->cheat_mode ,lpar->engine[0],lpar->engine[1],lpar->engine[2] ,lpar->enable_200cc ,lpar->enable_perfmon @@ -1108,6 +1164,8 @@ enumError WriteSectionLPAR ,GetLecodeSpeedoName(lpar->enable_speedo) ,GetLecodeDebugName(lpar->debug_mode) ,lpar->item_cheat + ,lpar->drag_blue_shell + ,lpar->thcloud_frames,lpar->thcloud_frames/60.0 ); } @@ -1416,7 +1474,21 @@ enumError AnalyseLEBinary be32n(ana->lpar.debug[0],p->debug[0],LEDEB__N_CONFIG*LEDEB__N_LINE); ana->lpar.item_cheat = p->item_cheat; } - break; + + if ( param_size >= sizeof(le_binpar_v1_264_t) ) + { + le_binpar_v1_264_t *p = (le_binpar_v1_264_t*)(data+off_param); + ana->lpar.cheat_mode = p->cheat_mode; + ana->lpar.drag_blue_shell = p->drag_blue_shell; + ana->lpar.thcloud_frames = ntohs(p->thcloud_frames); + } +// else +// { +// ana->lpar.drag_blue_shell = 1; +// ana->lpar.thcloud_frames = 300; +// } + + break; // [[new-lpar]] default: // at least v1 @@ -2232,6 +2304,13 @@ void DumpLEAnalyse ( FILE *f, uint indent, const le_analyse_t *ana ) { const le_binpar_v1_t *h = ana->param_v1; DASSERT(h); + + if ( ana->param_size >= sizeof(le_binpar_v1_264_t) ) + fprintf(f, + "%*s" "Allow cheat codes: %u = %s\n" + ,indent,"", h->cheat_mode, GetCheatModeInfo(h->cheat_mode) + ); + fprintf(f, "%*s" "Engine chances: " "%u + %u + %u = %u (1%s0cc+mirror=total)\n" @@ -2287,6 +2366,19 @@ void DumpLEAnalyse ( FILE *f, uint indent, const le_analyse_t *ana ) ); } + if ( ana->param_size >= sizeof(le_binpar_v1_264_t) ) + { + const int nframes = ntohs(h->thcloud_frames); + fprintf(f, + "%*s" "Drag blue shells: %u = %sabled\n" + "%*s" "Thundercloud time: %u frames = %.2fs\n" + ,indent,"", h->drag_blue_shell, h->drag_blue_shell ? "en" : "dis" + ,indent,"", nframes, nframes/60.0 + ); + } + + // [[new-lpar]] + #if 0 // for later use if ( ana->param_size >= sizeof(le_binpar_v1_1bc_t) ) { @@ -2776,6 +2868,8 @@ void PatchLPAR ( le_lpar_t * lp ) if ( opt_lecode_debug != OFFON_AUTO ) lp->debug_mode = opt_lecode_debug >= DEBUGMD_ENABLED && opt_lecode_debug < DEBUGMD__N ? opt_lecode_debug : DEBUGMD_OFF; + + // [[new-lpar]] } /////////////////////////////////////////////////////////////////////////////// @@ -2823,16 +2917,20 @@ static enumError ScanTextLPAR_PARAM const ScanParam_t ptab[] = { { "LIMIT-MODE", SPM_INT, &limit_mode }, - { "ENGINE", SPM_U8, lpar->engine, 3,3 }, - { "ENABLE-200CC", SPM_U8, &lpar->enable_200cc }, - { "PERF-MONITOR", SPM_U8, &lpar->enable_perfmon }, - { "CUSTOM-TT", SPM_S8, &lpar->enable_custom_tt }, - { "XPFLAGS", SPM_U8, &lpar->enable_xpflags }, - { "BLOCK-TRACK", SPM_U8, &lpar->block_track }, - { "SPEEDOMETER", SPM_U8, &lpar->enable_speedo }, - { "DEBUG", SPM_U8, &lpar->debug_mode }, - { "ITEM-CHEAT", SPM_U8, &lpar->item_cheat }, - {0} + { "CHEAT-MODE", SPM_U8, &lpar->cheat_mode }, + { "ENGINE", SPM_U8, lpar->engine, 3,3 }, + { "ENABLE-200CC", SPM_U8, &lpar->enable_200cc }, + { "PERF-MONITOR", SPM_U8, &lpar->enable_perfmon }, + { "CUSTOM-TT", SPM_S8, &lpar->enable_custom_tt }, + { "XPFLAGS", SPM_U8, &lpar->enable_xpflags }, + { "BLOCK-TRACK", SPM_U8, &lpar->block_track }, + { "SPEEDOMETER", SPM_U8, &lpar->enable_speedo }, + { "DEBUG", SPM_U8, &lpar->debug_mode }, + { "ITEM-CHEAT", SPM_U8, &lpar->item_cheat }, + { "ITEM-CHEATS", SPM_U8, &lpar->item_cheat }, // bug in 2021-04, [[obsolete]] in 2022 + { "DRAG-BLUE-SHELL", SPM_U8, &lpar->drag_blue_shell }, + { "THCLOUD-TIME", SPM_U16, &lpar->thcloud_frames }, + {0} // [[new-lpar]] }; @@ -2993,6 +3091,7 @@ static enumError ScanTextLPAR_DEBUG { "CHECK-POINT", SPM_U8, &debug.check_point }, { "RESPAWN", SPM_U8, &debug.respawn }, { "LAP-POS", SPM_U8, &debug.lap_pos }, + { "XPF", SPM_U8, &debug.xpf }, {0} }; diff --git a/project/src/lib-lecode.h b/project/src/lib-lecode.h index 2f2acc2..e37b36e 100644 --- a/project/src/lib-lecode.h +++ b/project/src/lib-lecode.h @@ -116,16 +116,22 @@ typedef enum lecode_debug_t LEDEB_CHECK_POINT = 0x0030, // 2 bits! LEDEB_RESPAWN = 0x0040, LEDEB_LAP_POS = 0x0080, + LEDEB_XPF = 0x0300, // 2 bits! + LEDEB_SHORT_XPF = 0x0100, + LEDEB_LONG_XPF = 0x0200, //--- derived values LEDEB__STD = 0x00f9, // standard output - LEDEB__OUTPUT = 0x00f8, // flags that produce output - LEDEB__ALL = 0x00ff, // all flags + LEDEB__OUTPUT = 0x03f8, // flags that produce output + LEDEB__ALL = 0x03ff, // all flags - LEDEB_S_CHECK_POINT = 4, // shift for LEDEB_CHECKPOINT + LEDEB_S_CHECK_POINT = 4, // shift for LEDEB_CHECK_POINT LEDEB_M_CHECK_POINT = 3, // mask after shift + LEDEB_S_XPF = 8, // shift for LEDEB_XPF + LEDEB_M_XPF = 3, // mask after shift + //--- special values LEDEB__N_CONFIG = 4, // number of debug configurations @@ -158,7 +164,7 @@ bool GetNextDebugMode ( lecode_debug_info_t *ldi ); static inline bool isDebugModeOutput ( lecode_debug_t mode ) - { return mode & LEDEB__OUTPUT; } + { return ( mode & LEDEB__OUTPUT ) != 0; } static inline bool isDebugModeActive ( lecode_debug_t mode ) { return mode & LEDEB_ENABLED && mode & LEDEB__OUTPUT; } @@ -179,6 +185,7 @@ typedef struct lecode_debug_ex_t u8 check_point; u8 respawn; u8 lap_pos; + u8 xpf; // status bool have_output; // would produce output if ENABLED @@ -230,12 +237,15 @@ ccp GetPredefDebugName ( predef_debug_t pd_mode ); /////////////////////////////////////////////////////////////////////////////// /////////////// le_lpar_t /////////////// /////////////////////////////////////////////////////////////////////////////// -// [[le_lpar_t]] +// [[le_lpar_t]] [[new-lpar]] typedef struct le_lpar_t { lpar_mode_t limit_mode; // limit of other params + u16 thcloud_frames; // number of frames a player is small after thundercloud hit + + u8 cheat_mode; // 0:off, 1:debug only, 2:allow all u8 engine[3]; // 100cc, 150cc, mirror (sum always 100) u8 enable_200cc; // TRUE: 200C enabled => 150cc, 200cc, mirror u8 enable_perfmon; // >0: performance monitor enabled; >1: for dolphin too @@ -245,6 +255,7 @@ typedef struct le_lpar_t u8 block_track; // block used tracks for 0..20 races u8 no_speedo_if_debug; // 1 bit for each debug configuration u8 item_cheat; // 0:disabled, 1:enabled + u8 drag_blue_shell; // >0: allow dragging of blue shell u8 debug_mode; // debug mode u8 debug_predef[LEDEB__N_CONFIG]; @@ -573,9 +584,56 @@ __attribute__ ((packed)) le_binpar_v1_260_t; _Static_assert(sizeof(le_binpar_v1_260_t)==0x260,"le_binpar_v1_260_t"); //----------------------------------------------------------------------------- -// [[le_binpar_v1_t]] +// [[le_binpar_v1_264_t]] + +typedef struct le_binpar_v1_264_t +{ + /*000*/ char magic[8]; // LE_PARAM_MAGIC + /*008*/ u32 version; // always 1 for v1 + /*00c*/ u32 size; // size (and minor version) + /*010*/ u32 off_eod; // offset of end-of-data + + /*014*/ u32 off_cup_par; // offset to cup param + /*018*/ u32 off_cup_track; // offset of cup-track list + /*01c*/ u32 off_cup_arena; // offset of cup-arena list + /*020*/ u32 off_course_par; // offset of course param + /*024*/ u32 off_property; // offset of property list + /*028*/ u32 off_music; // offset of music list + /*02c*/ u32 off_flags; // offset of music list + + /*030*/ u8 engine[3]; // 100cc, 150cc, mirror (sum always 100) + /*033*/ u8 enable_200cc; // TRUE: 200C enabled => 150cc, 200cc, mirror + /*034*/ u8 enable_perfmon; // >0: performance monitor enabled; >1: for dolphin too + /*035*/ u8 enable_custom_tt; // TRUE: time trial for cusotm tracks enabled + /*036*/ u8 enable_xpflags; // TRUE: extended presence flags enabled + /*037*/ u8 block_track; // block used track for 0.. tracks + /*038*/ u16 chat_mode_1[BMG_N_CHAT]; // mode for each chat message + /*0f8*/ u16 chat_mode_2[BMG_N_CHAT]; // mode for each chat message + /*1b8*/ u8 enable_speedo; // speedometer selection (0..2), see SPEEDO_* + /*1b9*/ u8 no_speedo_if_debug; // if bit is set: suppress speedometer + /*1ba*/ u8 debug_mode; // debug mode (0..), see DEBUGMD_* + /*1bb*/ u8 item_cheat; // 0:disabled, 1:enabled + + /*1bc*/ u8 debug_predef[LEDEB__N_CONFIG]; + // information about used predefined mode + /*1c0*/ u32 debug[LEDEB__N_CONFIG][LEDEB__N_LINE]; + // debug line settings, see LEDEB_* + + /*260*/ u8 cheat_mode; // 0:off, 1:debug only, 2:allow all + /*261*/ u8 drag_blue_shell; // >0: allow dragging of blue shell + /*262*/ u16 thcloud_frames; // number of frames a player is small after thundercloud hit + + /*264*/ + +} +__attribute__ ((packed)) le_binpar_v1_264_t; + +_Static_assert(sizeof(le_binpar_v1_264_t)==0x264,"le_binpar_v1_264_t"); + +//----------------------------------------------------------------------------- +// [[le_binpar_v1_t]] [[new-lpar]] -typedef struct le_binpar_v1_260_t le_binpar_v1_t; +typedef struct le_binpar_v1_264_t le_binpar_v1_t; // /////////////////////////////////////////////////////////////////////////////// diff --git a/project/src/lib-staticr.c b/project/src/lib-staticr.c index 8919309..afbd6b4 100644 --- a/project/src/lib-staticr.c +++ b/project/src/lib-staticr.c @@ -728,9 +728,29 @@ const str_server_patch_t ServerPatch[217+1] = // /////////////////////////////////////////////////////////////////////////////// +/////////////// data: porting /////////////// +/////////////////////////////////////////////////////////////////////////////// + +#include "addr_port.inc" + +#define N_ADDR_PORT (sizeof(addr_port)/sizeof(*addr_port)) + +// +/////////////////////////////////////////////////////////////////////////////// /////////////// data access /////////////// /////////////////////////////////////////////////////////////////////////////// +const KeywordTab_t str_mode_keyword_tab[] = +{ + { STR_M_PAL, "PAL", 0, 0 }, + { STR_M_USA, "USA", 0, 0 }, + { STR_M_JAP, "JAP", "JAPAN", 0 }, + { STR_M_KOR, "KOR", "KOREAN", 0 }, + {0,0,0,0}, +}; + +/////////////////////////////////////////////////////////////////////////////// + ccp GetStrModeName ( str_mode_t mode ) { switch (mode) @@ -894,7 +914,7 @@ const u32 * GetMenuOffsetTab ( str_mode_t mode ) /////////////////////////////////////////////////////////////////////////////// -#define ORIG_VBI_VALUE 0x4e800020 +#define ORIG_VBI_VALUE 0x4e800020 // blr static u32 GetVbiAddress ( const staticr_t * str ) { @@ -2312,6 +2332,274 @@ static uint PatchHTTPS // /////////////////////////////////////////////////////////////////////////////// +/////////////// address porting /////////////// +/////////////////////////////////////////////////////////////////////////////// + +const ccp addr_size_flags_info[] = +{ + "verified", // ASM_VERIFIED + "extension from verified", // ASM_EXPANDED + "not sure", // ASM_UNSURE + "suspect to be wrong", // ASM_SUSPECT +}; + +/////////////////////////////////////////////////////////////////////////////// + +ccp GetAddressSizeColor ( const ColorSet_t *cs, addr_size_mode_t asmode ) +{ + if (cs) + { + switch ( asmode & ASM_M_MODE ) + { + case 0: return cs->green; + case 1: return cs->cyan; + case 2: return cs->yellow; + case 3: return cs->red; + } + } + return EmptyString; +} + +/////////////////////////////////////////////////////////////////////////////// + +const addr_port_t * GetPortingRecordPAL ( u32 addr ) +{ + int beg = 0; + int end = N_ADDR_PORT - 1; + const int region = STR_M_PAL - STR_ZBI_FIRST; + + while ( beg <= end ) + { + const uint idx = (beg+end)/2; + const addr_port_t *p = addr_port + idx; + if ( addr < p->addr[region] ) + end = idx - 1 ; + else if ( addr >= p->addr[region] + ( p->size2 & ASM_M_SIZE ) ) + beg = idx + 1; + else + return p; + } + return 0; +} + +/////////////////////////////////////////////////////////////////////////////// + +static int sort_addr_port_usa ( const addr_port_t **a, const addr_port_t **b ) +{ + return (int)(*a)->addr[STR_M_USA-STR_ZBI_FIRST] + - (int)(*b)->addr[STR_M_USA-STR_ZBI_FIRST]; +} + +static int sort_addr_port_jap ( const addr_port_t **a, const addr_port_t **b ) +{ + return (int)(*a)->addr[STR_M_JAP-STR_ZBI_FIRST] + - (int)(*b)->addr[STR_M_JAP-STR_ZBI_FIRST]; +} + +static int sort_addr_port_kor ( const addr_port_t **a, const addr_port_t **b ) +{ + return (int)(*a)->addr[STR_M_KOR-STR_ZBI_FIRST] + - (int)(*b)->addr[STR_M_KOR-STR_ZBI_FIRST]; +} + +/////////////////////////////////////////////////////////////////////////////// + +const addr_port_t * GetPortingRecord ( str_mode_t mode, u32 addr ) +{ + static const addr_port_t **usa = 0; + static const addr_port_t **jap = 0; + static const addr_port_t **kor = 0; + + const addr_port_t ***list_ptr = 0; + qsort_func func = 0; + + switch (mode) + { + case STR_M_PAL: return GetPortingRecordPAL(addr); + case STR_M_USA: list_ptr = &usa; func = (qsort_func)sort_addr_port_usa; break; + case STR_M_JAP: list_ptr = &jap; func = (qsort_func)sort_addr_port_jap; break; + case STR_M_KOR: list_ptr = &kor; func = (qsort_func)sort_addr_port_kor; break; + default: return 0; + } + + if (!*list_ptr) + { + u_nsec_t start = GetTimerNSec(); + *list_ptr = MALLOC(sizeof(**list_ptr)*N_ADDR_PORT); + const addr_port_t *src = addr_port; + const addr_port_t **dest = *list_ptr; + for ( int i = 0; i < N_ADDR_PORT; i++ ) + *dest++ = src++; + qsort( *list_ptr, N_ADDR_PORT, sizeof(**list_ptr), func ); + if ( logging >= 3 ) + fprintf(stdlog,"# Porting list for %s in %.1f µsec calculated.\n", + GetStrModeName(mode), (GetTimerNSec()-start)*1e-3 ); + + #if 0 + const addr_port_t **base = *list_ptr; + for ( int i = 0; i < 4; i++ ) + { + const addr_port_t *p = base[i]; + printf (">>> %8x %8x %8x %8x : %6x %6x\n", + p->addr[0], p->addr[1], p->addr[2], p->addr[3], p->size1, p->size2 ); + } + #endif + } + + int beg = 0; + int end = N_ADDR_PORT - 1; + const int region = mode - STR_ZBI_FIRST; + const addr_port_t **base = *list_ptr; + + while ( beg <= end ) + { + const uint idx = (beg+end)/2; + const addr_port_t *p = base[idx]; + const u32 raddr = p->addr[region]; + + if ( addr < raddr ) + end = idx - 1 ; + else if ( addr >= raddr + ( p->size2 & ASM_M_SIZE ) ) + beg = idx + 1; + else + return p; + } + return 0; +} + +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +addr_type_t GetAddressType ( str_mode_t mode, u32 addr ) +{ + if (!addr) + return ADDRT_NULL; + + if (IsMirroredAddress(addr)) + return GetAddressType(mode,addr-MIRRORED_ADDRESS_DELTA) + + (ADDRT_MIRROR_BEGIN-ADDRT_MEMORY_BEGIN); + + const dol_sect_info_t *dsi = GetInfoDOL(mode); + if (dsi) + { + for ( int sect = 0; sect <= DOL_IDX_BSS; sect++, dsi++ ) + if ( addr >= dsi->addr && addr < dsi->addr + dsi->size ) + return sect + ADDRT_DOL; + } + + struct data_t + { + u32 rel1; // first REL address + u32 rel2; // last REL address+1 + }; + +// mountpoint file size fix size end of rel end of fixed +// PAL 805102E0 0x4ad3c4 0x3cd104 809BD6A4 808DD3E4 +// USA 8050BF60 0x4acf94 0x3ccd2c 809B8EF4 808D8C8C +// JAP 8050FC60 0x4acabc 0x3cc8d4 809BC71C 808DC534 +// KOR 804FE300 0x4ad9fc 0x3cd57c 809ABCFC 808CB87C + + static const struct data_t pal = { 0x805102e0,0x808dd3e4 }; + static const struct data_t usa = { 0x8050bf60,0x808d8c8c }; + static const struct data_t jap = { 0x8050fc60,0x808dc534 }; + static const struct data_t kor = { 0x804fe300,0x808cb87c }; + + const struct data_t *data; + switch (mode) + { + case STR_M_PAL: data = &pal; break; + case STR_M_USA: data = &usa; break; + case STR_M_JAP: data = &jap; break; + case STR_M_KOR: data = &kor; break; + default: return ADDRT_INVALID; + } + + if ( addr >= data->rel1 && addr < data->rel2 ) + return ADDRT_STATICR; + + struct mem_layout_t + { + u32 begin; + u32 end; + u32 mode; + }; + + static const struct mem_layout_t tab[] = + { + { 0x80000000, 0x80004000, ADDRT_HEAD }, + { 0x80000000, 0x81800000, ADDRT_MEM1 }, + { 0x90000000, 0x94000000, ADDRT_MEM2 }, + { 0xcd000000, 0xcd008000, ADDRT_HOLLYWOOD }, + {0,0,0} + }; + + for ( const struct mem_layout_t *ptr = tab; ptr->end; ptr++ ) + if ( addr >= ptr->begin && addr < ptr->end ) + return ptr->mode; + + return ADDRT_INVALID; +} + +/////////////////////////////////////////////////////////////////////////////// + +ccp GetAddressTypeName ( addr_type_t type ) +{ + if (IsMirroredAddressType(type)) + { + ccp res = GetAddressTypeName(type-(ADDRT_MIRROR_BEGIN-ADDRT_MEMORY_BEGIN)); + const uint size = strlen(res)+1; + char *buf = GetCircBuf(size); + StringLowerS(buf,size,res); + return buf; + } + + if ( type >= ADDRT_DOL && type <= ADDRT_BSS ) + return dol_section_name[ type - ADDRT_DOL ]; + + switch (type) + { + case ADDRT_NULL: return "null"; + case ADDRT_INVALID: return "invalid"; + case ADDRT_STATICR: return "REL"; + case ADDRT_HEAD: return "HEAD"; + case ADDRT_MEM1: return "MEM1"; + case ADDRT_MEM2: return "MEM2"; + case ADDRT_HOLLYWOOD: return "HLWD"; + default: return PrintCircBuf("?%02u?",type); + } +} + +/////////////////////////////////////////////////////////////////////////////// + +ccp GetAddressTypeColor ( const ColorSet_t *col, addr_type_t type ) +{ + if ( !col || !col->colorize ) + return EmptyString; + + if (IsMirroredAddressType(type)) + type -= ADDRT_MIRROR_BEGIN - ADDRT_MEMORY_BEGIN; + + if ( type >= ADDRT_DOL && type < ADDRT_BSS ) + return type < ADDRT_DOL + DOL_N_TEXT_SECTIONS ? col->b_green : col->b_yellow; + + switch (type) + { + case ADDRT_BSS: return col->b_magenta_blue; + case ADDRT_NULL: return EmptyString; + case ADDRT_INVALID: return col->b_orange; + case ADDRT_STATICR: return col->b_cyan; + + case ADDRT_HEAD: + case ADDRT_MEM1: return col->b_blue_cyan; + case ADDRT_MEM2: return col->b_blue; + case ADDRT_HOLLYWOOD: return col->yellow; + + default: return col->error; + } +} + +// +/////////////////////////////////////////////////////////////////////////////// /////////////// main.dol support /////////////// /////////////////////////////////////////////////////////////////////////////// @@ -2398,11 +2686,11 @@ void AnalyzeDOL write_be32(str->data+offset,ORIG_VBI_VALUE); str->dol_status = str->dol_status & ~DOL_S_ORIG | DOL_S_VBI; - if ( ( cur_value & 0xff000000 ) == 0x4b000000 ) + if ( ( cur_value & 0xfc000000 ) == 0x48000000 ) { - str->vbi_address = cur_value & 0x00ffffff; - if ( str->vbi_address & 0x00800000 ) - str->vbi_address |= 0xff000000; + str->vbi_address = cur_value & 0x03ffffff; + if ( str->vbi_address & 0x02000000 ) + str->vbi_address |= 0xfc000000; str->vbi_address += vbi_addr; } } @@ -2469,6 +2757,20 @@ void AnalyzeDOL if ( str->dol_status & DOL_S_ORIG ) str->dol_info_flags |= DIF_ORIG; } + + #if defined(TEST) && 0 || 1 + if (vbi_addr) + { + dol_header_t *dh = (dol_header_t*)str->data; + const u32 offset = GetDolOffsetByAddr(dh,vbi_addr,4,0); + if (offset) + fprintf(stderr,"#VBI: %08x: %08x %08x %08x\n", + vbi_addr - 0x18, + be32(str->data+offset-24), + be32(str->data+offset-4), + be32(str->data+offset)); + } + #endif } /////////////////////////////////////////////////////////////////////////////// @@ -4302,8 +4604,8 @@ static enumError AddSectionHelper2 memcpy(str->data+store,str->data+offset,sizeof(u32)); } - const u32 code = ( seg->vbi_entry - patch_addr ) & 0xffffff | 0x4b000000; - PRINT("PATCH addr %08x off %08x from %08x to %08x\n", + const u32 code = ( seg->vbi_entry - patch_addr ) & 0x3ffffff | 0x48000000; + PRINT("PATCH addr %08x (off %08x, VBI) from %08x to %08x\n", patch_addr, offset, be32(str->data+offset), code ); if ( verbose > 0 ) fprintf(stdlog, @@ -6190,6 +6492,7 @@ char mkw_domain[100] = "mariokartwii.gs.wiimmfi.de"; ccp wifi_domain = mkw_domain + 16; bool wifi_domain_is_wiimmfi = false; wcode_t opt_wcode = WCODE_AUTO; +ccp opt_order = 0; /////////////////////////////////////////////////////////////////////////////// diff --git a/project/src/lib-staticr.h b/project/src/lib-staticr.h index 48e07d1..91b5761 100644 --- a/project/src/lib-staticr.h +++ b/project/src/lib-staticr.h @@ -176,17 +176,16 @@ typedef enum str_mode_t STR_M_USA, STR_M_JAP, STR_M_KOR, - - STR_M__N, + STR_M__N, //--- zero based index support STR_ZBI_FIRST = STR_M_PAL, STR_ZBI_N = STR_M__N - STR_ZBI_FIRST, - } __attribute__ ((packed)) str_mode_t; -ccp GetStrModeName ( str_mode_t ); +ccp GetStrModeName ( str_mode_t mode ); +extern const KeywordTab_t str_mode_keyword_tab[]; //----------------------------------------------------------------------------- // [[str_flags_t]] @@ -579,6 +578,89 @@ int PatchByWPF // /////////////////////////////////////////////////////////////////////////////// +/////////////// address porting /////////////// +/////////////////////////////////////////////////////////////////////////////// +// [[addr_size_flags_t]] + +typedef enum addr_size_mode_t +{ + ASM_VERIFIED, // addresses verified + ASM_EXPANDED, // expansion of verified addresses + ASM_UNSURE, // unsure (not verified) + ASM_SUSPECT, // suspect! + + ASM_M_MODE = 0x00000003, + ASM_M_SIZE = 0xfffffffc, +} +addr_size_mode_t; + +extern const ccp addr_size_flags_info[]; +ccp GetAddressSizeColor ( const ColorSet_t *cs, addr_size_mode_t asmode ); + +/////////////////////////////////////////////////////////////////////////////// +// [[addr_port_t]] + +typedef struct addr_port_t +{ + u32 addr[STR_ZBI_N]; // addresses for all 4 regions (never 0) + u32 size1; // first size with flags () + u32 size2; // second size with other flags. size2 is always ≥size1. +} +addr_port_t; + +//----------------------------------------------------------------------------- + +const addr_port_t * GetPortingRecord ( str_mode_t mode, u32 addr ); +const addr_port_t * GetPortingRecordPAL ( u32 addr ); + +/////////////////////////////////////////////////////////////////////////////// +// [[addr_type_t]] + +typedef enum addr_type_t +{ + ADDRT_NULL, // address is NULL + ADDRT_INVALID, // invalid address + + ADDRT_MEMORY_BEGIN, + + ADDRT_DOL, // valid address of DOL + ADDRT_BSS = ADDRT_DOL + DOL_N_SECTIONS, + ADDRT_STATICR, // valid address of STATICR + + ADDRT_HEAD, // valid address 80000000..80004000 (mirrror +0x40000000) + ADDRT_MEM1, // valid address 80000000..81800000 (mirrror +0x40000000) + ADDRT_MEM2, // valid address 90000000..94000000 (mirrror +0x40000000) + + ADDRT_MEMORY_END, + ADDRT_MIRROR_BEGIN = ADDRT_MEMORY_END, + ADDRT_MIRROR_END = ADDRT_MIRROR_BEGIN + ADDRT_MEMORY_END - ADDRT_MEMORY_BEGIN, + + ADDRT_HOLLYWOOD, // Hollywood registers cd000000..0xcd008000 + + ADDRT__N, +} +addr_type_t; + +//----------------------------------------------------------------------------- + +#define MIRRORED_ADDRESS_DELTA 0x40000000 + +static inline bool IsMirroredAddress ( u32 addr ) +{ + return addr >= 0xc0000000 && addr < 0xc1800000 + || addr >= 0xd0000000 && addr < 0xd4000000; +} + +static inline bool IsMirroredAddressType ( addr_type_t type ) + { return type >= ADDRT_MIRROR_BEGIN && type < ADDRT_MIRROR_END; } + + +addr_type_t GetAddressType ( str_mode_t mode, u32 addr ); +ccp GetAddressTypeName ( addr_type_t type ); +ccp GetAddressTypeColor ( const ColorSet_t *col, addr_type_t type ); + +// +/////////////////////////////////////////////////////////////////////////////// /////////////// main.dol support /////////////// /////////////////////////////////////////////////////////////////////////////// @@ -734,6 +816,7 @@ extern enum VsBtMode patch_vs_mode; extern enum VsBtMode patch_bt_mode; extern char patch_vs_str[2]; extern char patch_bt_str[2]; +extern ccp opt_order; int ScanOptVS ( bool is_bt, bool allow_2, ccp arg ); diff --git a/project/src/lib-std.c b/project/src/lib-std.c index 6e5ea84..cda3b2d 100644 --- a/project/src/lib-std.c +++ b/project/src/lib-std.c @@ -644,6 +644,7 @@ void SetupLib ( int argc, char ** argv, ccp tname, ccp tvers, ccp ttitle ) TRACE_SIZEOF(ScanParamMode); TRACE_SIZEOF(ScanParam_t); TRACE_SIZEOF(SetupDef_t); + TRACE_SIZEOF(ListDef_t); TRACE_SIZEOF(SetupParam_t); TRACE_SIZEOF(StringField_t); TRACE_SIZEOF(SubstString_t); @@ -771,10 +772,7 @@ void SetupLib ( int argc, char ** argv, ccp tname, ccp tvers, ccp ttitle ) void NormalizeOptions ( - uint log_level // 0: no log - // 1: print PROGRAM_NAME - // 2: + print SHARE_PATH + SEARCH_PATH - // 3: + print AUTOADD_PATH + uint log_level // >0: print PROGRAM_NAME and pathes ) { SetupColors(); diff --git a/project/src/lib-std.h b/project/src/lib-std.h index 2d68f85..c1ec7a8 100644 --- a/project/src/lib-std.h +++ b/project/src/lib-std.h @@ -120,10 +120,7 @@ void SetupLib ( int argc, char ** argv, ccp tname, ccp tvers, ccp ttitle ); void NormalizeOptions ( - uint log_level // 0: no log - // 1: print PROGRAM_NAME - // 2: + print SHARE_PATH + SEARCH_PATH - // 3: + print AUTOADD_PATH + uint log_level // >0: print PROGRAM_NAME and pathes ); ccp GetCtLeInfo(); @@ -1286,7 +1283,7 @@ typedef enum slot_info_type_t SIT_NOT, // not defined SIT_GENERIC, // generic slot: "arena" or music by race/arena slot SIT_RECOMMEND, // recommended slot: "r##" | "a##" | "m*" - SIT_MANDATORY3, // mandatory alternative: "31+42+71" | "31+62+71" + SIT_MANDATORY3, // mandatory alternative: "31+42+71" SIT_MANDATORY2, // mandatory alternative: "31+71" SIT_MANDATORY, // mandatory slot: "##" } @@ -1309,7 +1306,6 @@ typedef struct slot_info_t slot_info_type_t music_mode; // 0:not, 1:generic, 2:"m*" bool have_31_71; // true: "31+71" found! bool have_31_42_71; // true: "31+42+71" found! - bool have_31_62_71; // true: "31+62+71" found! char race_info[9]; // race slot as text: "##" | "r##" | "31+71" | "31+41+71" char arena_info[6]; // arena slot as text: "arena" | "a##" @@ -1687,7 +1683,7 @@ enumError ScanSetupFile ( SetupDef_t * sdef, // object list terminated with an element 'name=NULL' const ListDef_t * ldef, // NULL or object list terminated - // with an element 'name=NULL' + // with an element 'name=NULL' ccp path1, // filename of text file, part 1 ccp path2, // filename of text file, part 2 SubDir_t * sdir, // not NULL: use it and ignore 'path1' @@ -1967,7 +1963,7 @@ valid_t IsValidCTCODE ccp fname // not NULL: print warnings with file ref ); -//// +// /////////////////////////////////////////////////////////////////////////////// /////////////// scan configuration /////////////// /////////////////////////////////////////////////////////////////////////////// @@ -2009,6 +2005,7 @@ const StringField_t * GetAutoaddList(void); extern ccp autoadd_destination; +// /////////////////////////////////////////////////////////////////////////////// /////////////// misc /////////////// /////////////////////////////////////////////////////////////////////////////// diff --git a/project/src/lib-szs-create.c b/project/src/lib-szs-create.c index 1523d2e..163d2c2 100644 --- a/project/src/lib-szs-create.c +++ b/project/src/lib-szs-create.c @@ -3903,6 +3903,8 @@ int FindSlotsSZS if (required_slot) *required_slot = 62; } + else + SLOT(6,2) = -1; //--- adjust special slots & terminate @@ -3962,9 +3964,7 @@ void AnalyzeSlot ( slot_ana_t *sa, szs_file_t *szs ) if ( sa->required_slot == 31 ) { - if ( sa->slot[ISLOT(6,2)] > 0 ) - StringCopyS(sa->mandatory_slot,sizeof(sa->mandatory_slot),"31+62+71"); - else if ( sa->slot[ISLOT(4,2)] > 0 ) + if ( sa->slot[ISLOT(4,2)] > 0 ) StringCopyS(sa->mandatory_slot,sizeof(sa->mandatory_slot),"31+42+71"); else StringCopyS(sa->mandatory_slot,sizeof(sa->mandatory_slot),"31+71"); diff --git a/project/src/lib-szs.c b/project/src/lib-szs.c index f541186..edf4700 100644 --- a/project/src/lib-szs.c +++ b/project/src/lib-szs.c @@ -3429,7 +3429,6 @@ int IterateFilesParSZS clean_path,recurse, cut_files, sort_mode, GetNameFF(szs->fform_file,szs->fform_arch)); - szs_iterator_func ifunc = GetIteratorFunction(szs->fform_arch,cut_files>=0); if (!ifunc) return -1; diff --git a/project/src/ui/tab-wstrt.inc b/project/src/ui/tab-wstrt.inc index 291c635..e6d0d22 100644 --- a/project/src/ui/tab-wstrt.inc +++ b/project/src/ui/tab-wstrt.inc @@ -111,6 +111,24 @@ " Select parts by --vaddr, --faddr and --sname." " Without selectors, the whole file is dumped." }, + { T_DEF_CMD, "PORT", "PORT", + "wstrt PORT param...", + "The command expects a list of keywords or hex numbers." + " Keywords are @PAL@ (default), @USA@, @JAP@, @KOR@, or any abbreviation of them." + " They select the region for the next numeric input values." + " The hex numbers are interpreted as addresses." + " If possible, they are ported to all other regions." + " The result is printed as colorized table." + "\n" + " This address porting is EXPERIMENTAL!" }, + + { T_DEF_CMD, "WHERE", "WHERE", + "wstrt WHERE address...", + "A list of addresses in hex format is expected as input." + " The segments in which the specified addresses" + " are located is calculated for each region." + " The result is output as a human and machine readable table." }, + { H_DEF_CMD, "HTTPS", "_HTTPS", "wstrt _HTTPS file...", "Collect data about https-requests and print a total summary" @@ -627,6 +645,13 @@ { T_OPT_C, "SECTIONS", "sections", 0, 0 /* copy of wszst */ }, + { T_OPT_CP, "ORDER", "order", + "pujk", + "The parameter is scanend for the first appearance of letters P (for PAL)," + " U (USA), J (JAPAN) and K (KOREA) to define the order of the output." + " Case is ignored. Missing letters are added automatically." + " The default is @'PUJK'@." }, + { T_SEP_OPT, 0,0,0,0 }, //----- separator ----- { T_OPT_CP, "VADDR", "vaddr|va", @@ -775,8 +800,7 @@ " The effective number of bytes per line is format dependent" " (multiple of format size)." }, - - // + // //---------- wstrt GROUP DEST ---------- { T_GRP_BEG, "DEST", 0,0,0 }, @@ -941,6 +965,10 @@ " If set, a second table with the image map is printed." " If set twice, a third table with delta values is printed too." }, + //---------- COMMAND wstrt CDUMP ---------- + + { T_CMD_BEG, "CDUMP", 0,0,0 }, + //---------- COMMAND wstrt HEXDUMP ---------- { T_CMD_BEG, "HEXDUMP", 0,0,0 }, @@ -951,9 +979,25 @@ { T_SEP_OPT, 0,0,0,0 }, { T_COPY_GRP, "HEXDUMP", 0,0,0 }, - //---------- COMMAND wstrt CDUMP ---------- + //---------- COMMAND wstrt PORT ---------- - { T_CMD_BEG, "CDUMP", 0,0,0 }, + { T_CMD_BEG, "PORT", 0,0,0 }, + { T_COPT, "ORDER", 0,0,0 }, + { T_COPT, "NO_HEADER", 0,0, + "Suppress the table header and footer and output exactly 1 line for" + " each specified address. This makes the output more machine-readable." }, + { T_COPT, "BRIEF", 0,0, + " Same as {--no-header}." }, + + //---------- COMMAND wstrt WHERE ---------- + + { T_CMD_BEG, "WHERE", 0,0,0 }, + { T_COPT, "ORDER", 0,0,0 }, + { T_COPT, "NO_HEADER", 0,0, + "Suppress the table header and footer and output exactly 1 line for" + " each specified address. This makes the output more machine-readable." }, + { T_COPT, "BRIEF", 0,0, + " Same as {--no-header}." }, //---------- COMMAND wstrt HTTPS ---------- diff --git a/project/src/ui/ui-wstrt.c b/project/src/ui/ui-wstrt.c index 8b83b7c..e317089 100644 --- a/project/src/ui/ui-wstrt.c +++ b/project/src/ui/ui-wstrt.c @@ -289,6 +289,14 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = "Print in machine readable sections and parameter lines." }, + { OPT_ORDER, false, false, false, false, false, 0, "order", + "pujk", + "The parameter is scanend for the first appearance of letters P (for" + " PAL), U (USA), J (JAPAN) and K (KOREA) to define the order of the" + " output. Case is ignored. Missing letters are added automatically." + " The default is 'PUJK'." + }, + { OPT_VADDR, false, false, false, false, true, 0, "vaddr", "RANGE", "Comma separated list of virtual addresses to select the hex-dump" @@ -459,7 +467,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = " dependent (multiple of format size)." }, - {0,0,0,0,0,0,0,0,0,0}, // OPT__N_SPECIFIC == 62 + {0,0,0,0,0,0,0,0,0,0}, // OPT__N_SPECIFIC == 63 //----- global options ----- @@ -849,7 +857,7 @@ static const InfoOption_t OptionInfo[OPT__N_TOTAL+1] = " directory." }, - {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 113 + {0,0,0,0,0,0,0,0,0,0} // OPT__N_TOTAL == 114 }; @@ -917,6 +925,32 @@ static const InfoOption_t option_cmd_DUMP_LONG = " If set twice, a third table with delta values is printed too." }; +static const InfoOption_t option_cmd_PORT_NO_HEADER = + { OPT_NO_HEADER, false, false, false, false, false, 'H', "no-header", + 0, + "Suppress the table header and footer and output exactly 1 line for" + " each specified address. This makes the output more machine-readable." + }; + +static const InfoOption_t option_cmd_PORT_BRIEF = + { OPT_BRIEF, false, false, false, false, false, 'B', "brief", + 0, + " Same as --no-header." + }; + +static const InfoOption_t option_cmd_WHERE_NO_HEADER = + { OPT_NO_HEADER, false, false, false, false, false, 'H', "no-header", + 0, + "Suppress the table header and footer and output exactly 1 line for" + " each specified address. This makes the output more machine-readable." + }; + +static const InfoOption_t option_cmd_WHERE_BRIEF = + { OPT_BRIEF, false, false, false, false, false, 'B', "brief", + 0, + " Same as --no-header." + }; + static const InfoOption_t option_cmd_HTTPS_LONG = { OPT_LONG, false, false, false, false, false, 'l', "long", 0, @@ -993,6 +1027,8 @@ static const KeywordTab_t CommandTab[] = { CMD_DUMP, "DUMP", 0, 0 }, { CMD_CDUMP, "_CDUMP", 0, 0 }, { CMD_HEXDUMP, "HEXDUMP", "XDUMP", 0 }, + { CMD_PORT, "PORT", 0, 0 }, + { CMD_WHERE, "WHERE", 0, 0 }, { CMD_HTTPS, "_HTTPS", 0, 0 }, { CMD_EXTRACT, "EXTRACT", "X", 0 }, { CMD_TRACKS, "TRACKS", 0, 0 }, @@ -1138,6 +1174,7 @@ static const struct option OptionLong[] = { "cs", 1, 0, GO_CREATE_SECT }, { "wpf", 1, 0, GO_WPF }, { "sections", 0, 0, GO_SECTIONS }, + { "order", 1, 0, GO_ORDER }, { "vaddr", 1, 0, GO_VADDR }, { "va", 1, 0, GO_VADDR }, { "faddr", 1, 0, GO_FADDR }, @@ -1287,38 +1324,39 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /* 0x0b8 */ OPT_CREATE_SECT, /* 0x0b9 */ OPT_WPF, /* 0x0ba */ OPT_SECTIONS, - /* 0x0bb */ OPT_VADDR, - /* 0x0bc */ OPT_FADDR, - /* 0x0bd */ OPT_SNAME, - /* 0x0be */ OPT_INT1, - /* 0x0bf */ OPT_INT2, - /* 0x0c0 */ OPT_INT3, - /* 0x0c1 */ OPT_INT4, - /* 0x0c2 */ OPT_INT5, - /* 0x0c3 */ OPT_INT6, - /* 0x0c4 */ OPT_INT7, - /* 0x0c5 */ OPT_INT8, - /* 0x0c6 */ OPT_FLOAT, - /* 0x0c7 */ OPT_DOUBLE, - /* 0x0c8 */ OPT_LE, - /* 0x0c9 */ OPT_BE, - /* 0x0ca */ OPT_ZEROS, - /* 0x0cb */ OPT_HEX, - /* 0x0cc */ OPT_DEC, - /* 0x0cd */ OPT_C_SYNTAX, - /* 0x0ce */ OPT_ADDR, - /* 0x0cf */ OPT_ALIGN, - /* 0x0d0 */ OPT_TRIGGER, - /* 0x0d1 */ OPT_NO_ADDR, - /* 0x0d2 */ OPT_NO_NUMBERS, - /* 0x0d3 */ OPT_NO_TEXT, - /* 0x0d4 */ OPT_FORMAT, - /* 0x0d5 */ OPT_NO_NULL, - /* 0x0d6 */ OPT_NARROW, - /* 0x0d7 */ OPT_SMALL, - /* 0x0d8 */ OPT_WIDE, - /* 0x0d9 */ OPT_BYTES, - /* 0x0da */ 0,0,0,0, 0,0, + /* 0x0bb */ OPT_ORDER, + /* 0x0bc */ OPT_VADDR, + /* 0x0bd */ OPT_FADDR, + /* 0x0be */ OPT_SNAME, + /* 0x0bf */ OPT_INT1, + /* 0x0c0 */ OPT_INT2, + /* 0x0c1 */ OPT_INT3, + /* 0x0c2 */ OPT_INT4, + /* 0x0c3 */ OPT_INT5, + /* 0x0c4 */ OPT_INT6, + /* 0x0c5 */ OPT_INT7, + /* 0x0c6 */ OPT_INT8, + /* 0x0c7 */ OPT_FLOAT, + /* 0x0c8 */ OPT_DOUBLE, + /* 0x0c9 */ OPT_LE, + /* 0x0ca */ OPT_BE, + /* 0x0cb */ OPT_ZEROS, + /* 0x0cc */ OPT_HEX, + /* 0x0cd */ OPT_DEC, + /* 0x0ce */ OPT_C_SYNTAX, + /* 0x0cf */ OPT_ADDR, + /* 0x0d0 */ OPT_ALIGN, + /* 0x0d1 */ OPT_TRIGGER, + /* 0x0d2 */ OPT_NO_ADDR, + /* 0x0d3 */ OPT_NO_NUMBERS, + /* 0x0d4 */ OPT_NO_TEXT, + /* 0x0d5 */ OPT_FORMAT, + /* 0x0d6 */ OPT_NO_NULL, + /* 0x0d7 */ OPT_NARROW, + /* 0x0d8 */ OPT_SMALL, + /* 0x0d9 */ OPT_WIDE, + /* 0x0da */ OPT_BYTES, + /* 0x0db */ 0,0,0,0, 0, /* 0x0e0 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x0f0 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, /* 0x100 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, @@ -1332,158 +1370,172 @@ static const OptionIndex_t OptionIndex[UIOPT_INDEX_SIZE] = /////////////// opt_allowed_cmd_* /////////////// /////////////////////////////////////////////////////////////////////////////// -static u8 option_allowed_cmd_VERSION[62] = // cmd #1 +static u8 option_allowed_cmd_VERSION[63] = // cmd #1 { 0,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0 + 0,0,0 }; -static u8 option_allowed_cmd_HELP[62] = // cmd #2 +static u8 option_allowed_cmd_HELP[63] = // cmd #2 { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1 + 1,1,1 }; -static u8 option_allowed_cmd_CONFIG[62] = // cmd #3 +static u8 option_allowed_cmd_CONFIG[63] = // cmd #3 { 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0 + 0,0,0 }; -static u8 option_allowed_cmd_ARGTEST[62] = // cmd #4 +static u8 option_allowed_cmd_ARGTEST[63] = // cmd #4 { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1 + 1,1,1 }; -static u8 option_allowed_cmd_TEST[62] = // cmd #5 +static u8 option_allowed_cmd_TEST[63] = // cmd #5 { 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1 + 1,1,1 }; -static u8 option_allowed_cmd_COLORS[62] = // cmd #6 +static u8 option_allowed_cmd_COLORS[63] = // cmd #6 { 0,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0 + 0,0,0 }; -static u8 option_allowed_cmd_ERROR[62] = // cmd #7 +static u8 option_allowed_cmd_ERROR[63] = // cmd #7 { 0,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 1,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0 + 0,0,0 }; -static u8 option_allowed_cmd_FILETYPE[62] = // cmd #8 +static u8 option_allowed_cmd_FILETYPE[63] = // cmd #8 { 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0 + 0,0,0 }; -static u8 option_allowed_cmd_FILEATTRIB[62] = // cmd #9 +static u8 option_allowed_cmd_FILEATTRIB[63] = // cmd #9 { 0,0,0,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0 + 0,0,0 }; -static u8 option_allowed_cmd_RAWDUMP[62] = // cmd #10 +static u8 option_allowed_cmd_RAWDUMP[63] = // cmd #10 { 0,0,0,0,0, 0,1,1,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0 + 0,0,0 }; -static u8 option_allowed_cmd_DUMP[62] = // cmd #11 +static u8 option_allowed_cmd_DUMP[63] = // cmd #11 { 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0 + 0,0,0 }; -static u8 option_allowed_cmd_CDUMP[62] = // cmd #12 +static u8 option_allowed_cmd_CDUMP[63] = // cmd #12 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0 + 0,0,0 }; -static u8 option_allowed_cmd_HEXDUMP[62] = // cmd #13 +static u8 option_allowed_cmd_HEXDUMP[63] = // cmd #13 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, - 1,1 + 0,0,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, + 1,1,1 +}; + +static u8 option_allowed_cmd_PORT[63] = // cmd #14 +{ + 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0 +}; + +static u8 option_allowed_cmd_WHERE[63] = // cmd #15 +{ + 0,0,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, + 0,0,0 }; -static u8 option_allowed_cmd_HTTPS[62] = // cmd #14 +static u8 option_allowed_cmd_HTTPS[63] = // cmd #16 { 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0 + 0,0,0 }; -static u8 option_allowed_cmd_EXTRACT[62] = // cmd #15 +static u8 option_allowed_cmd_EXTRACT[63] = // cmd #17 { 0,0,0,0,0, 0,1,1,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0 + 0,0,0 }; -static u8 option_allowed_cmd_TRACKS[62] = // cmd #16 +static u8 option_allowed_cmd_TRACKS[63] = // cmd #18 { 0,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0 + 0,0,0 }; -static u8 option_allowed_cmd_ARENAS[62] = // cmd #17 +static u8 option_allowed_cmd_ARENAS[63] = // cmd #19 { 0,1,1,1,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0 + 0,0,0 }; -static u8 option_allowed_cmd_FILES[62] = // cmd #18 +static u8 option_allowed_cmd_FILES[63] = // cmd #20 { 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0 + 0,0,0 }; -static u8 option_allowed_cmd_FIND[62] = // cmd #19 +static u8 option_allowed_cmd_FIND[63] = // cmd #21 { 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0 + 0,0,0 }; -static u8 option_allowed_cmd_POINTS[62] = // cmd #20 +static u8 option_allowed_cmd_POINTS[63] = // cmd #22 { 0,1,1,0,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0 + 0,0,0 }; -static u8 option_allowed_cmd_ANALYZE[62] = // cmd #21 +static u8 option_allowed_cmd_ANALYZE[63] = // cmd #23 { 0,1,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0 + 0,0,0 }; -static u8 option_allowed_cmd_PATCH[62] = // cmd #22 +static u8 option_allowed_cmd_PATCH[63] = // cmd #24 { 0,0,0,0,0, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, - 0,0 + 0,0,0 }; @@ -1677,6 +1729,24 @@ static const InfoOption_t * option_tab_cmd_HEXDUMP[] = 0 }; +static const InfoOption_t * option_tab_cmd_PORT[] = +{ + OptionInfo + OPT_ORDER, + &option_cmd_PORT_NO_HEADER, + &option_cmd_PORT_BRIEF, + + 0 +}; + +static const InfoOption_t * option_tab_cmd_WHERE[] = +{ + OptionInfo + OPT_ORDER, + &option_cmd_WHERE_NO_HEADER, + &option_cmd_WHERE_BRIEF, + + 0 +}; + static const InfoOption_t * option_tab_cmd_HTTPS[] = { &option_cmd_HTTPS_LONG, @@ -2096,6 +2166,41 @@ static const InfoCommand_t CommandInfo[CMD__N+1] = option_allowed_cmd_HEXDUMP }, + { CMD_PORT, + false, + false, + false, + "PORT", + 0, + "wstrt PORT param...", + "The command expects a list of keywords or hex numbers. Keywords are" + " PAL (default), USA, JAP, KOR, or any abbreviation of them. They" + " select the region for the next numeric input values. The hex numbers" + " are interpreted as addresses. If possible, they are ported to all" + " other regions. The result is printed as colorized table.\n" + " This address porting is EXPERIMENTAL!", + 0, + 3, + option_tab_cmd_PORT, + option_allowed_cmd_PORT + }, + + { CMD_WHERE, + false, + false, + false, + "WHERE", + 0, + "wstrt WHERE address...", + "A list of addresses in hex format is expected as input. The segments" + " in which the specified addresses are located is calculated for each" + " region. The result is output as a human and machine readable table.", + 0, + 3, + option_tab_cmd_WHERE, + option_allowed_cmd_WHERE + }, + { CMD_HTTPS, true, false, diff --git a/project/src/ui/ui-wstrt.h b/project/src/ui/ui-wstrt.h index 9c23bd8..4662318 100644 --- a/project/src/ui/ui-wstrt.h +++ b/project/src/ui/ui-wstrt.h @@ -86,6 +86,7 @@ typedef enum enumOptions OPT_CREATE_SECT, OPT_WPF, OPT_SECTIONS, + OPT_ORDER, OPT_VADDR, OPT_FADDR, OPT_SNAME, @@ -118,7 +119,7 @@ typedef enum enumOptions OPT_WIDE, OPT_BYTES, - OPT__N_SPECIFIC, // == 62 + OPT__N_SPECIFIC, // == 63 //----- global options ----- @@ -174,7 +175,7 @@ typedef enum enumOptions OPT_CLEAN_DOL, OPT_CT_DIR, - OPT__N_TOTAL // == 113 + OPT__N_TOTAL // == 114 } enumOptions; @@ -219,6 +220,7 @@ typedef enum enumOptions // OB_CREATE_SECT = 1llu << OPT_CREATE_SECT, // OB_WPF = 1llu << OPT_WPF, // OB_SECTIONS = 1llu << OPT_SECTIONS, +// OB_ORDER = 1llu << OPT_ORDER, // OB_VADDR = 1llu << OPT_VADDR, // OB_FADDR = 1llu << OPT_FADDR, // OB_SNAME = 1llu << OPT_SNAME, @@ -323,12 +325,20 @@ typedef enum enumOptions // // OB_CMD_DUMP = OB_LONG, // +// OB_CMD_CDUMP = 0, +// // OB_CMD_HEXDUMP = OB_VADDR // | OB_FADDR // | OB_SNAME // | OB_GRP_HEXDUMP, // -// OB_CMD_CDUMP = 0, +// OB_CMD_PORT = OB_ORDER +// | OB_NO_HEADER +// | OB_BRIEF, +// +// OB_CMD_WHERE = OB_ORDER +// | OB_NO_HEADER +// | OB_BRIEF, // // OB_CMD_HTTPS = OB_LONG, // @@ -400,6 +410,8 @@ typedef enum enumCommands CMD_DUMP, CMD_CDUMP, CMD_HEXDUMP, + CMD_PORT, + CMD_WHERE, CMD_HTTPS, CMD_EXTRACT, @@ -412,7 +424,7 @@ typedef enum enumCommands CMD_ANALYZE, CMD_PATCH, - CMD__N // == 23 + CMD__N // == 25 } enumCommands; @@ -509,6 +521,7 @@ typedef enum enumGetOpt GO_CREATE_SECT, GO_WPF, GO_SECTIONS, + GO_ORDER, GO_VADDR, GO_FADDR, GO_SNAME, diff --git a/project/src/ui/ui.def b/project/src/ui/ui.def index 0c8671f..0570f46 100644 --- a/project/src/ui/ui.def +++ b/project/src/ui/ui.def @@ -22332,6 +22332,21 @@ " Select parts by --vaddr, --faddr and --sname. Without selectors, the" \ " whole file is dumped." ) +#:def_cmd( "PORT", "PORT", \ + "wstrt PORT param...", \ + "The command expects a list of keywords or hex numbers. Keywords are" \ + " @PAL@ (default), @USA@, @JAP@, @KOR@, or any abbreviation of them." \ + " They select the region for the next numeric input values. The hex" \ + " numbers are interpreted as addresses. If possible, they are ported" \ + " to all other regions. The result is printed as colorized table.\n" \ + " This address porting is EXPERIMENTAL!" ) + +#:def_cmd( "WHERE", "WHERE", \ + "wstrt WHERE address...", \ + "A list of addresses in hex format is expected as input. The segments" \ + " in which the specified addresses are located is calculated for each" \ + " region. The result is output as a human and machine readable table." ) + #:def_cmd( "EXTRACT", "EXTRACT|X", \ "wstrt EXTRACT dol...", \ "Extract the sections of a DOL file into a directory. StaticR.rel" \ @@ -22789,6 +22804,13 @@ "", \ "Print in machine readable sections and parameter lines." ) +#:def_opt( "ORDER", "order", "CP", \ + "pujk", \ + "The parameter is scanend for the first appearance of letters P (for" \ + " PAL), U (USA), J (JAPAN) and K (KOREA) to define the order of the" \ + " output. Case is ignored. Missing letters are added automatically." \ + " The default is @'PUJK'@." ) + #:def_opt( "VADDR", "vaddr|va", "CP", \ "RANGE", \ "Comma separated list of virtual addresses to select the hex-dump" \ @@ -23146,6 +23168,32 @@ "", \ "" ) +#:def_cmd_opt( "PORT", "ORDER", \ + "", \ + "" ) + +#:def_cmd_opt( "PORT", "NO_HEADER", \ + "", \ + "Suppress the table header and footer and output exactly 1 line for" \ + " each specified address. This makes the output more machine-readable." ) + +#:def_cmd_opt( "PORT", "BRIEF", \ + "", \ + " Same as {--no-header}." ) + +#:def_cmd_opt( "WHERE", "ORDER", \ + "", \ + "" ) + +#:def_cmd_opt( "WHERE", "NO_HEADER", \ + "", \ + "Suppress the table header and footer and output exactly 1 line for" \ + " each specified address. This makes the output more machine-readable." ) + +#:def_cmd_opt( "WHERE", "BRIEF", \ + "", \ + " Same as {--no-header}." ) + #:def_cmd_opt( "HTTPS", "LONG", \ "", \ " Print output a C source" ) diff --git a/project/src/wbmgt.c b/project/src/wbmgt.c index c5726b6..8c9ac2e 100644 --- a/project/src/wbmgt.c +++ b/project/src/wbmgt.c @@ -842,7 +842,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) #ifdef DEBUG DumpUsedOptions(&InfoUI_wbmgt,TRACE_FILE,11); #endif - NormalizeOptions( verbose > 3 && !is_env ? 2 : 0 ); + NormalizeOptions( verbose > 3 && !is_env ); SetupBMG(filter_bmg); return !err ? ERR_OK : ProgInfo.max_error ? ProgInfo.max_error : ERR_SYNTAX; diff --git a/project/src/wctct.c b/project/src/wctct.c index 815126f..b81066f 100644 --- a/project/src/wctct.c +++ b/project/src/wctct.c @@ -844,7 +844,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) #ifdef DEBUG DumpUsedOptions(&InfoUI_wctct,TRACE_FILE,11); #endif - NormalizeOptions( verbose > 3 && !is_env ? 2 : 0 ); + NormalizeOptions( verbose > 3 && !is_env ); SetupBMG(filter_bmg); UsePatchingListBMG(&opt_load_bmg); diff --git a/project/src/wimgt.c b/project/src/wimgt.c index 8625693..61ef456 100644 --- a/project/src/wimgt.c +++ b/project/src/wimgt.c @@ -648,7 +648,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) #ifdef DEBUG DumpUsedOptions(&InfoUI_wimgt,TRACE_FILE,11); #endif - NormalizeOptions( verbose > 3 && !is_env ? 2 : 0 ); + NormalizeOptions( verbose > 3 && !is_env ); return !err ? ERR_OK : ProgInfo.max_error ? ProgInfo.max_error : ERR_SYNTAX; } diff --git a/project/src/wkclt.c b/project/src/wkclt.c index 10d7232..fd55727 100644 --- a/project/src/wkclt.c +++ b/project/src/wkclt.c @@ -1204,7 +1204,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) DumpUsedOptions(&InfoUI_wkclt,TRACE_FILE,11); #endif CloseTransformation(); - NormalizeOptions( verbose > 3 && !is_env ? 2 : 0 ); + NormalizeOptions( verbose > 3 && !is_env ); SetupKCL(); return !err ? ERR_OK : ProgInfo.max_error ? ProgInfo.max_error : ERR_SYNTAX; diff --git a/project/src/wkmpt.c b/project/src/wkmpt.c index 80d44c2..60ffafb 100644 --- a/project/src/wkmpt.c +++ b/project/src/wkmpt.c @@ -1682,7 +1682,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) DumpUsedOptions(&InfoUI_wkmpt,TRACE_FILE,11); #endif CloseTransformation(); - NormalizeOptions( verbose > 3 && !is_env ? 2 : 0 ); + NormalizeOptions( verbose > 3 && !is_env ); SetupKCL(); SetupKMP(); diff --git a/project/src/wlect.c b/project/src/wlect.c index 123a3a8..2fc1bea 100644 --- a/project/src/wlect.c +++ b/project/src/wlect.c @@ -252,7 +252,7 @@ static enumError cmd_dpad() while ( *arg && (uint)*arg <= ' ' ) arg++; u32 num = 0; - if ( *arg >= '0' && *arg <= '9' || *arg >= 'a' && *arg <= 'f' || *arg >= 'A' && *arg <= 'F' ) + if ( *arg >= '0' && *arg <= '9' || *arg >= 'a' && *arg <= 'f' || *arg >= 'A' && *arg <= 'F' ) num = str2l(arg,0,16); else { @@ -274,7 +274,16 @@ static enumError cmd_dpad() { switch (n&3) { - case 0: *--dest = '.'; break; + case 0: + if ( *dest == 'U' || *dest == '.' ) + { + *dest = '.'; + *--dest = '.'; + } + else + *--dest = 'U'; + break; + case 1: *--dest = 'L'; break; case 2: *--dest = 'R'; break; case 3: *--dest = 'D'; break; @@ -1215,7 +1224,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) #ifdef DEBUG DumpUsedOptions(&InfoUI_wlect,TRACE_FILE,11); #endif - NormalizeOptions( verbose > 3 && !is_env ? 2 : 0 ); + NormalizeOptions( verbose > 3 && !is_env ); SetupBMG(0); UsePatchingListBMG(&opt_load_bmg); diff --git a/project/src/wmdlt.c b/project/src/wmdlt.c index bb705cc..77bc384 100644 --- a/project/src/wmdlt.c +++ b/project/src/wmdlt.c @@ -614,7 +614,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) DumpUsedOptions(&InfoUI_wmdlt,TRACE_FILE,11); #endif CloseTransformation(); - NormalizeOptions( verbose > 3 && !is_env ? 2 : 0 ); + NormalizeOptions( verbose > 3 && !is_env ); SetupMDL(); return !err ? ERR_OK : ProgInfo.max_error ? ProgInfo.max_error : ERR_SYNTAX; diff --git a/project/src/wpatt.c b/project/src/wpatt.c index 0f28c97..0cfb061 100644 --- a/project/src/wpatt.c +++ b/project/src/wpatt.c @@ -407,7 +407,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) DumpUsedOptions(&InfoUI_wpatt,TRACE_FILE,11); #endif //CloseTransformation(); - NormalizeOptions( verbose > 3 && !is_env ? 2 : 0 ); + NormalizeOptions( verbose > 3 && !is_env ); if (!err) WarnDepractedOptions(&InfoUI_wpatt); diff --git a/project/src/wstrt.c b/project/src/wstrt.c index 31265d7..8ff727e 100644 --- a/project/src/wstrt.c +++ b/project/src/wstrt.c @@ -401,6 +401,207 @@ static enumError cmd_hexdump() // /////////////////////////////////////////////////////////////////////////////// +/////////////// command port /////////////// +/////////////////////////////////////////////////////////////////////////////// + +static void setup_order ( int index[STR_ZBI_N], int delta ) +{ + int dest_index = 0; + char used[STR_ZBI_N] = {0}; + + if (opt_order) + { + ccp ptr = opt_order; + while ( *ptr && dest_index < STR_ZBI_N ) + { + int idx = -1; + switch(*ptr++) + { + case 'p': case 'P': idx = STR_M_PAL - STR_ZBI_FIRST; break; + case 'u': case 'U': idx = STR_M_USA - STR_ZBI_FIRST; break; + case 'j': case 'J': idx = STR_M_JAP - STR_ZBI_FIRST; break; + case 'k': case 'K': idx = STR_M_KOR - STR_ZBI_FIRST; break; + } + + if ( idx >= 0 && !used[idx] ) + { + used[idx]++; + index[dest_index++] = idx + STR_ZBI_FIRST - delta; + } + } + } + + for ( int i = 0; i < STR_ZBI_N && dest_index < STR_ZBI_N; i++ ) + if (!used[i]) + index[dest_index++] = i + STR_ZBI_FIRST - delta; + + if ( logging >= 3 ) + fprintf(stdlog,"# Region Order: %d:%s %d:%s %d:%s %d:%s\n", + index[0], GetStrModeName(index[0]+delta), + index[1], GetStrModeName(index[1]+delta), + index[2], GetStrModeName(index[2]+delta), + index[3], GetStrModeName(index[3]+delta) ); +} + +//----------------------------------------------------------------------------- + +static enumError cmd_port() +{ + + if (brief_count) + print_header = false; + + int index[STR_ZBI_N]; + setup_order(index,STR_ZBI_FIRST); + + + //--- port addresses + + int max_fw = 0; + for ( int md = 0; md <= ASM_M_MODE; md++ ) + { + const int slen = strlen(addr_size_flags_info[md]); + if ( max_fw < slen ) + max_fw = slen; + } + + const int sep_len_3 = 3*(56+max_fw); + + int count = 0; + str_mode_t mode = STR_M_PAL; + ParamList_t *param; + for ( param = first_param; param; param = param->next ) + { + ccp arg = param->arg; + if ( !arg || !*arg ) + continue; + + const KeywordTab_t *cmd = ScanKeyword(0,arg,str_mode_keyword_tab); + if (cmd) + { + mode = cmd->id; + continue; + } + + if ( print_header && !count++ ) + printf("\n%s#%.*s\n%s# %s %s %s %s where status\n%s#%.*s%s\n", + colout->heading, sep_len_3, ThinLine300_3, + colout->heading, + GetStrModeName(index[0]+STR_ZBI_FIRST), + GetStrModeName(index[1]+STR_ZBI_FIRST), + GetStrModeName(index[2]+STR_ZBI_FIRST), + GetStrModeName(index[3]+STR_ZBI_FIRST), + colout->heading, sep_len_3, ThinLine300_3, colout->reset ); + + const u32 num = str2ul(arg,0,16); + const addr_type_t atype = GetAddressType(mode,num); + const ccp atname = GetAddressTypeName(atype); + const u32 mirror = IsMirroredAddress(num) ? MIRRORED_ADDRESS_DELTA : 0; + const u32 addr = num - mirror; + const addr_port_t *ap = GetPortingRecord(mode,addr); + + if (!ap) + { + printf("%s! Can't port %s address 0x%08x (%s)!%s\n", + colout->warn, GetStrModeName(mode), num, atname, colout->reset ); + } + else + { + const int idx = mode - STR_ZBI_FIRST; + const int offset = addr - ap->addr[idx]; + + for ( int i = 0; i < STR_ZBI_N; i++ ) + { + const u32 val = ap->addr[index[i]] + offset + mirror; + if ( idx == i ) + printf(" %s%#8x%s",colout->value,val,colout->reset); + else + printf(" %#8x",val); + } + + const int asmode = ( offset < ap->size1 ? ap->size1 : ap->size2 ) & ASM_M_MODE; + printf(" %s%-5.5s%s %s%u: %s%s\n", + GetAddressTypeColor(colout,atype), atname, colout->reset, + GetAddressSizeColor(colout,asmode), + asmode, addr_size_flags_info[asmode], + colout->reset ); + } + } + + if (print_header) + { + if ( count > 0 ) + printf("%s#%.*s%s\n\n", colout->heading, sep_len_3, ThinLine300_3, colout->reset ); + else + putchar('\n'); + } + + return ERR_OK; +} + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// command where /////////////// +/////////////////////////////////////////////////////////////////////////////// + +static enumError cmd_where() +{ + + if (brief_count) + print_header = false; + + int index[STR_ZBI_N]; + setup_order(index,0); + + + //--- port addresses + + const int sep_len_3 = 3*34; + + int count = 0; + ParamList_t *param; + for ( param = first_param; param; param = param->next ) + { + ccp arg = param->arg; + if ( !arg || !*arg ) + continue; + + if ( print_header && !count++ ) + printf("\n%s#%.*s\n%s# Address %s %s %s %s\n%s#%.*s%s\n", + colout->heading, sep_len_3, ThinLine300_3, + colout->heading, + GetStrModeName(index[0]), + GetStrModeName(index[1]), + GetStrModeName(index[2]), + GetStrModeName(index[3]), + colout->heading, sep_len_3, ThinLine300_3, colout->reset ); + + const uint num = str2ul(arg,0,16); + printf(" %8x:",num); + for ( int i = 0; i < STR_ZBI_N; i++ ) + { + addr_type_t type = GetAddressType(index[i],num); + printf(" %s%-4.4s%s", + GetAddressTypeColor(colout,type), + GetAddressTypeName(type), + colout->reset ); + } + putchar('\n'); + } + + if (print_header) + { + if ( count > 0 ) + printf("%s#%.*s%s\n\n", colout->heading, sep_len_3, ThinLine300_3, colout->reset ); + else + putchar('\n'); + } + + return ERR_OK; +} + +// +/////////////////////////////////////////////////////////////////////////////// /////////////// command https /////////////// /////////////////////////////////////////////////////////////////////////////// @@ -1261,6 +1462,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) case GO_BRIEF: brief_count++; break; case GO_NO_HEADER: print_header = false; break; case GO_SECTIONS: print_sections++; break; + case GO_ORDER: opt_order = optarg; break; case GO_VADDR: InsertAddressMemMap(&vaddr,true,optarg,16); break; case GO_FADDR: InsertAddressMemMap(&faddr,true,optarg,16); break; @@ -1320,7 +1522,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) #ifdef DEBUG DumpUsedOptions(&InfoUI_wstrt,TRACE_FILE,11); #endif - NormalizeOptions( verbose > 3 && !is_env ? 2 : 0 ); + NormalizeOptions( verbose > 3 && !is_env ); if (!is_env) { @@ -1389,6 +1591,8 @@ static enumError CheckCommand ( int argc, char ** argv ) case CMD_DUMP: err = cmd_dump(false); break; case CMD_CDUMP: err = cmd_dump(true); break; case CMD_HEXDUMP: err = cmd_hexdump(); break; + case CMD_PORT: err = cmd_port(); break; + case CMD_WHERE: err = cmd_where(); break; case CMD_HTTPS: err = cmd_https(); break; case CMD_EXTRACT: err = cmd_extract(); break; diff --git a/project/src/wszst.c b/project/src/wszst.c index a169ccf..419b2e8 100644 --- a/project/src/wszst.c +++ b/project/src/wszst.c @@ -5325,7 +5325,7 @@ static enumError CheckOptions ( int argc, char ** argv, bool is_env ) DumpUsedOptions(&InfoUI_wszst,TRACE_FILE,11); #endif CloseTransformation(); - NormalizeOptions( verbose > 3 && !is_env ? 3 : 0 ); + NormalizeOptions( verbose > 3 && !is_env ); SetupBMG(filter_bmg); SetupKCL(); SetupKMP(); diff --git a/project/src/wtest.c b/project/src/wtest.c index dc4cca0..351e18c 100644 --- a/project/src/wtest.c +++ b/project/src/wtest.c @@ -57,6 +57,7 @@ #include "lib-bmg.h" #include "lib-lecode.h" #include "lib-common.h" +#include "lib-staticr.h" #define CMD1_FW 13 @@ -3824,57 +3825,6 @@ static enumError test_config ( int argc, char ** argv ) // /////////////////////////////////////////////////////////////////////////////// -/////////////// test_search() /////////////// -/////////////////////////////////////////////////////////////////////////////// - -static void print_search ( const search_file_list_t *sfl, ccp title ) -{ - if (title) - printf("> %s\n",title); - - uint i; - search_file_t *sf = sfl->list; - for ( i = 1; i <= sfl->used; i++, sf++ ) - printf("%5d. [a=%d,it=%d,h:%x] %s\n", - i, sf->alloced, sf->itype, sf->hint, sf->fname ); -} - -//----------------------------------------------------------------------------- - -static enumError test_search ( int argc, char ** argv ) -{ - search_file_list_t sfl; - InitializeSearchFile(&sfl); - print_search(&sfl,"init"); - - int i; - for ( i = 1; i < argc; i++ ) - { - ccp arg = argv[i]; - CopyMode_t cm = CPM_LINK; - if ( *arg == '+' ) - { - arg = STRDUP(arg+1); - cm = CPM_MOVE; - if ( i == 1 ) - { - int res = SearchConfig1(&sfl,"wiimms-szs-tools.conf",arg, - ".szs","/etc",std_share_path,0); - printf("SearchConfig1(), res=%d\n",res); - continue; - } - } - AppendSearchFile(&sfl,arg,cm,"config0.txt"); - } - print_search(&sfl,"argv[]"); - - ResetSearchFile(&sfl); - putchar('\n'); - return ERR_OK; -} - -// -/////////////////////////////////////////////////////////////////////////////// /////////////// test_quote() /////////////// /////////////////////////////////////////////////////////////////////////////// @@ -3902,7 +3852,7 @@ static enumError test_quote ( int argc, char ** argv ) test_quote_helper(0); test_quote_helper(EmptyString); test_quote_helper("ab\ec\td\n \"xyz\' ghi"); - + int i; for ( i = 1; i < argc; i++ ) test_quote_helper(argv[i]); @@ -4000,6 +3950,742 @@ static enumError test_cygpath ( int argc, char ** argv ) // /////////////////////////////////////////////////////////////////////////////// +/////////////// test_scan_port() data /////////////// +/////////////////////////////////////////////////////////////////////////////// + +typedef struct known_addr_t +{ + u32 pal_addr; + u32 size; +} +known_addr_t; + +//----------------------------------------------------------------------------- + +static const known_addr_t known_addr[] = +{ + { 0x803457e0, 4*0x538 }, // lecode struct wiimote_t + { 0x80350580, 4* 8 }, // lecode struct gcn_controller_t +}; + +#if 0 // DUMMY + { 0x, xxxx }, // lecode struct xxxx +#endif + +#define N_KNOWN_ADDR (sizeof(known_addr)/sizeof(*known_addr)) + +//----------------------------------------------------------------------------- + +static const known_addr_t * get_known_addr ( u32 pal_addr ) +{ + static int done = 0; + if (!done++) + { + // check order and overlap + + int err_count = 0; + const known_addr_t *ptr = known_addr; + for ( int i = 0; i < N_KNOWN_ADDR-1; i++, ptr++ ) + { + if ( ptr->pal_addr + ptr->size >= ptr[1].pal_addr ) + { + fprintf(stderr,"ERR/KNOWN_ADDR: %3u: %x +%x = %x : %x +%x\n", + i, + ptr->pal_addr, ptr->size, ptr->pal_addr + ptr->size, + ptr[1].pal_addr, ptr[1].size ); + err_count++; + } + } + ASSERT(!err_count); + } + + //--- search + + int beg = 0; + int end = N_KNOWN_ADDR - 1; + + while ( beg <= end ) + { + const uint idx = (beg+end)/2; + const known_addr_t *p = known_addr + idx; + if ( pal_addr < p->pal_addr ) + end = idx - 1 ; +// else if ( pal_addr >= p->pal_addr + p->size ) + else if ( pal_addr > p->pal_addr ) // only exact addrsss match + beg = idx + 1; + else + return p; + } + return 0; +} + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// test_scan_port() helpers /////////////// +/////////////////////////////////////////////////////////////////////////////// + +const int AUTO_EXPAND1 = 8; // tie ranges if address delta(size1) <= # +const int AUTO_EXPAND2 = 8; // tie ranges if address delta(size2) <= # +const int MAX_DELTA_P2 = 0x100000; // max dallowed delat for prio2 + +#undef ADDROF +#undef ENDOF1 +#undef ENDOF2 +#undef SIZE1 +#undef SIZE2 +#undef MODE1 +#undef MODE2 +#undef SAMEDELTA + +#define ADDROF(p) ( (p)->addr[STR_0_PAL]) +#define ENDOF1(p) ( (p)->addr[STR_0_PAL] + ( (p)->size1 & ASM_M_SIZE )) +#define ENDOF2(p) ( (p)->addr[STR_0_PAL] + ( (p)->size2 & ASM_M_SIZE )) +#define SIZE1(p) ( (p)->size1 & ASM_M_SIZE ) +#define SIZE2(p) ( (p)->size2 & ASM_M_SIZE ) +#define MODE1(p) ( (p)->size1 & ASM_M_MODE ) +#define MODE2(p) ( (p)->size2 & ASM_M_MODE ) +#define SAMEDELTA(a,b) ( \ + (a)->addr[STR_0_USA] - (a)->addr[STR_0_PAL] == (b)->addr[STR_0_USA] - (b)->addr[STR_0_PAL] \ + && (a)->addr[STR_0_JAP] - (a)->addr[STR_0_PAL] == (b)->addr[STR_0_JAP] - (b)->addr[STR_0_PAL] \ + && (a)->addr[STR_0_KOR] - (a)->addr[STR_0_PAL] == (b)->addr[STR_0_KOR] - (b)->addr[STR_0_PAL] \ + ) + +//----------------------------------------------------------------------------- + +enum +{ + STR_0_PAL = STR_M_PAL - STR_ZBI_FIRST, + STR_0_USA = STR_M_USA - STR_ZBI_FIRST, + STR_0_JAP = STR_M_JAP - STR_ZBI_FIRST, + STR_0_KOR = STR_M_KOR - STR_ZBI_FIRST, +}; + +//----------------------------------------------------------------------------- + +typedef struct aport_t +{ + addr_port_t *list; + uint size; + uint used; + + // stats + uint max_size1; + uint max_size2; + uint line_count; +} +aport_t; + +//----------------------------------------------------------------------------- + +#define MAX_APORT_PRIO 2 +aport_t aport_list[MAX_APORT_PRIO] = {{0}}; + +//----------------------------------------------------------------------------- + +static int get_port_record ( aport_t *aport, u32 addr, bool *found ) +{ + int beg = 0; + int end = (int)aport->used - 1; + const int region = STR_M_PAL - STR_ZBI_FIRST; + + while ( beg <= end ) + { + const uint idx = (beg+end)/2; + addr_port_t *p = aport->list + idx; + if ( addr < p->addr[region] ) + end = idx - 1 ; + else if ( addr >= p->addr[region] + ( p->size2 & ASM_M_SIZE ) ) + beg = idx + 1; + else + { + *found = true; + return idx; + } + } + *found = false; + return beg; +} + +//----------------------------------------------------------------------------- + +static void remove_record ( aport_t *aport, addr_port_t *rec ) +{ + ASSERT(aport); + ASSERT(rec); + ASSERT( rec >= aport->list ); + ASSERT( rec < aport->list + aport->used ); + + int idx = rec - aport->list; + if ( idx < --aport->used ) + memmove( rec, rec+1, (aport->used - idx) * sizeof(*rec) ); +} +//----------------------------------------------------------------------------- + +static addr_port_t * insert_record ( aport_t *aport, int index, const addr_port_t *src ) +{ + ASSERT(aport); + + if ( aport->used == aport->size ) + { + aport->size += 1000 + aport->size/5; + aport->list = REALLOC(aport->list,aport->size*sizeof(*aport->list)); + fprintf(stderr,"ALLOC: %u/%u records\n",aport->used,aport->size); + } + + index = CheckIndex1(aport->used,index); + ASSERT( index >= 0 && index <= aport->used ); + addr_port_t *cur = aport->list + index; + + if ( index < aport->used ) + memmove( cur+1, cur, (aport->used - index) * sizeof(*cur) ); + + aport->used++; + if (src) + memcpy(cur,src,sizeof(*cur)); + return cur; +} + +//----------------------------------------------------------------------------- + +static void insert_range ( aport_t *aport, u32 addr, u32 size ) +{ + bool found; + const int idx = get_port_record(aport,addr,&found); + addr_port_t *cur = insert_record(aport_list,idx,0); + cur->addr[STR_0_PAL] = + cur->addr[STR_0_USA] = + cur->addr[STR_0_JAP] = + cur->addr[STR_0_KOR] = addr; + cur->size1 = cur->size2 = size; +} + +//----------------------------------------------------------------------------- + +static int check_overlay ( aport_t *aport, addr_port_t *cur, int def_stat ) +{ + addr_port_t *nxt = cur + 1; + if ( nxt - aport->list >= aport->used ) + return def_stat; + + const u32 cur_pal = cur->addr[STR_0_PAL]; + const u32 cur_end1 = cur_pal + ( cur->size1 & ASM_M_SIZE ); + const u32 cur_end2 = cur_pal + ( cur->size2 & ASM_M_SIZE ); + const u32 nxt_pal = nxt->addr[STR_0_PAL]; + + if ( nxt_pal - cur_end1 <= AUTO_EXPAND1 ) + { + PRINT0("OVERLAY1: %x .. %x .. %x : %x .. %x .. %x\n", + cur_pal, cur_pal + cur->size1, cur_pal + cur->size2, + nxt_pal, nxt_pal + nxt->size1, nxt_pal + nxt->size2 ); + + cur->size1 = nxt_pal + ( nxt->size1 & ASM_M_SIZE ) - cur_pal; + cur->size2 = nxt_pal + ( nxt->size2 & ASM_M_SIZE ) - cur_pal | ASM_EXPANDED; + remove_record(aport,nxt); + return 6; + } + + if ( cur_end2 <= nxt_pal ) + return def_stat; + + cur->size2 = nxt_pal - cur_pal | (cur->size2&ASM_M_MODE); +xBINGO; +PRINT1("OVERLAY2: %x .. %x .. %x : %x .. %x .. %x\n", + cur_pal, cur_pal + cur->size1, cur_pal + cur->size2, + nxt_pal, nxt_pal + nxt->size1, nxt_pal + nxt->size2 ); + + return 5; +} + +//----------------------------------------------------------------------------- + +static int expand_address ( aport_t *aport, addr_port_t *cur, u32 addr ) +{ + const u32 cur_pal = cur->addr[STR_0_PAL]; + const int size1 = ( cur->size1 & ASM_M_SIZE ); + const int size2 = ( cur->size2 & ASM_M_SIZE ); + ASSERT( addr >= cur_pal ); + + if ( addr < cur_pal + size1 ) + return 19; + + if ( addr < cur_pal + size2 ) + { + const int pal_delta = addr - ( cur_pal + size1 ); + PRINT0("delta=%d, AUTO_EXPAND1=%d => %d\n",pal_delta,AUTO_EXPAND1,pal_delta<=AUTO_EXPAND1); + if ( pal_delta <= AUTO_EXPAND1 ) + { + cur->size1 = addr - cur_pal + 4; + ASSERT( cur->size1 <= cur->size2 ); + return check_overlay(aport,cur,11); + } + } + + if ( addr > cur_pal + size2 + AUTO_EXPAND2 ) + return 0; + + + //--- now we expand the current record + + addr += 4; + cur->size2 = ( addr - cur_pal ) | ASM_EXPANDED; + return check_overlay(aport,cur,12); +} + +//----------------------------------------------------------------------------- + +static void tie_records ( aport_t *aport ) +{ + for ( int i = 0; i < aport->used-1; ) + { + addr_port_t *cur = aport->list + i; + if ( MODE1(cur) == MODE2(cur) ) + cur->size1 = cur->size2; + + if ( ENDOF1(cur) == ADDROF(cur+1) + && MODE1(cur) == MODE1(cur+1) + && SAMEDELTA(cur,cur+1) ) + { + const u32 add = ADDROF(cur+1) - ADDROF(cur); + cur->size1 = cur[1].size1 + add; + cur->size2 = cur[1].size2 + add; + remove_record(aport,cur+1); + } + else + i++; + } +} + +//----------------------------------------------------------------------------- + +static ccp check_valid_record ( const aport_t *aport, const addr_port_t *cur ) +{ + const addr_port_t *nxt = cur+1; + if ( nxt >= aport->list + aport->used ) + return 0; + + if ( cur->addr[STR_0_PAL] > nxt->addr[STR_0_PAL] ) + return "WRONG ORDER"; + + if ( cur->addr[STR_0_PAL] == nxt->addr[STR_0_PAL] ) + return "SAME ADDRESS"; + + static char buf[50]; + const u32 size2 = cur->size2 & ASM_M_SIZE; + if ( cur->addr[STR_0_PAL] + size2 > nxt->addr[STR_0_PAL] ) + { + snprintf(buf,sizeof(buf),"OVERLAY: %x + %x = %x > %x", + cur->addr[STR_0_PAL], size2, cur->addr[STR_0_PAL]+size2, + nxt->addr[STR_0_PAL] ); + return buf; + } + + const u32 size1 = cur->size1 & ASM_M_SIZE; + if ( (s32)size1 <= 0 || (s32)size2 <= 0 || size1 > size2 ) + { + snprintf(buf,sizeof(buf),"SIZE: %x, %x",size1,size2); + return buf; + } + + return 0; +} + +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// test_scan_port() /////////////// +/////////////////////////////////////////////////////////////////////////////// + +static enumError test_scan_port ( int argc, char ** argv, int verbose ) +{ + //--- well known areas + + insert_range(aport_list,0x80000000,0x4000); + + //--- use DOL segments + +#if 1 + u32 section_max_addr[ADDRT__N] = {0}; + u32 section_size[ADDRT__N] = {0}; + section_size[ADDRT_DOL+0] = INT_MAX; + section_size[ADDRT_DOL+1] = 0xd80; + section_size[ADDRT_DOL+DOL_N_TEXT_SECTIONS+0] = INT_MAX; + section_size[ADDRT_DOL+DOL_N_TEXT_SECTIONS+1] = INT_MAX; + section_size[ADDRT_DOL+DOL_N_TEXT_SECTIONS+2] = INT_MAX; + section_size[ADDRT_DOL+DOL_N_TEXT_SECTIONS+3] = INT_MAX; + section_size[ADDRT_DOL+DOL_N_TEXT_SECTIONS+6] = 0xa5c; + + dol_sect_info_t * GetInfoDOL ( str_mode_t mode ); + const dol_sect_info_t *psect = GetInfoDOL(STR_M_PAL); + const dol_sect_info_t *usect = GetInfoDOL(STR_M_USA); + const dol_sect_info_t *jsect = GetInfoDOL(STR_M_JAP); + const dol_sect_info_t *ksect = GetInfoDOL(STR_M_KOR); + + for ( int si = ADDRT_DOL; si < ADDRT__N; si++, psect++, usect++, jsect++, ksect++ ) + { + if (!section_size[si]) + continue; + + if ( section_size[si] > psect->size ) + section_size[si] = psect->size; + section_max_addr[si] = psect->addr + section_size[si]; + PRINT1("SECTION[%2u] : %3s %x +%6x : %8x %8x %8x %8x\n", + si, psect->name, section_max_addr[si], section_size[si], + psect->addr, usect->addr, jsect->addr, ksect->addr ); + + bool found; + int idx = get_port_record(aport_list,psect->addr,&found); + addr_port_t *cur = insert_record(aport_list,idx,0); + cur->addr[STR_0_PAL] = psect->addr; + cur->addr[STR_0_USA] = usect->addr; + cur->addr[STR_0_JAP] = jsect->addr; + cur->addr[STR_0_KOR] = ksect->addr; + cur->size1 = cur->size2 = section_size[si]; + } + tie_records(aport_list); + +#if 1 + //--- scan stdin + + uint line_count = 0; + + while (fgets(iobuf,sizeof(iobuf)-1,stdin)) + { + line_count++; + + char *ptr = iobuf; + if ( *ptr == '#' ) + continue; + + uint prio = str2ul(ptr,&ptr,10); + if ( prio < 1 || prio > MAX_APORT_PRIO ) + continue; + aport_t *aport = aport_list + prio - 1; + addr_port_t *cur = aport->used > 0 ? aport->list + aport->used - 1 : 0; + + u32 pal = str2ul(ptr,&ptr,16) & ASM_M_SIZE; + u32 usa = str2ul(ptr,&ptr,16) & ASM_M_SIZE; + u32 jap = str2ul(ptr,&ptr,16) & ASM_M_SIZE; + u32 kor = str2ul(ptr,&ptr,16) & ASM_M_SIZE; + if ( !usa || !jap || !pal || !kor ) + continue; + aport->line_count++; + + if ( prio > 1 && ( + abs( (int)usa - (int)pal ) > MAX_DELTA_P2 + || abs( (int)jap - (int)pal ) > MAX_DELTA_P2 + || abs( (int)kor - (int)pal ) > MAX_DELTA_P2 + )) + { + continue; + } + + const addr_type_t at_pal = GetAddressType(STR_M_PAL,pal); + const addr_type_t at_usa = GetAddressType(STR_M_USA,usa); + const addr_type_t at_jap = GetAddressType(STR_M_JAP,jap); + const addr_type_t at_kor = GetAddressType(STR_M_KOR,kor); + if ( at_pal <= ADDRT_INVALID || at_usa != at_pal || at_jap != at_pal || at_kor != at_pal ) + { + if (verbose>0) + { + fflush(stdout); + fprintf(stderr,"!ADDR TYPE[%d:pujk]: %8x/%-3s %8x/%-3s %8x/%-3s %8x/%-3s\n", + prio, + pal, GetAddressTypeName(at_pal), + usa, GetAddressTypeName(at_usa), + jap, GetAddressTypeName(at_jap), + kor, GetAddressTypeName(at_kor) ); + fflush(stderr); + } + continue; + } + + const u32 max_addr = section_max_addr[at_pal]; + if ( pal < max_addr ) + continue; + + if ( prio > 1 ) + { + bool found; + int ridx = get_port_record(aport_list,pal,&found); + addr_port_t *prod = 0; + if (found) + prod = aport_list->list + ridx; + else if ( ridx > 0 ) + prod = aport_list->list + ridx-1; + + const bool same_delta + = prod + && usa - pal == prod->addr[STR_0_USA] - prod->addr[STR_0_PAL] + && jap - pal == prod->addr[STR_0_JAP] - prod->addr[STR_0_PAL] + && kor - pal == prod->addr[STR_0_KOR] - prod->addr[STR_0_PAL]; + if (same_delta) + { + const int stat = expand_address(aport_list,prod,pal); + if ( stat && stat < -10 ) + fprintf(stderr,"ADD[%u>%d]: %8x +%6x +%6x: %8x +%6x\n", + found, stat, + prod->addr[STR_0_PAL], prod->size1, prod->size2, + pal, pal - prod->addr[STR_0_PAL] ); + if (stat) + continue; + } + } + + const known_addr_t *known_addr = get_known_addr(pal); + const uint add_size = known_addr ? known_addr->size : 4; + + const bool same_delta + = cur + && usa - pal == cur->addr[STR_0_USA] - cur->addr[STR_0_PAL] + && jap - pal == cur->addr[STR_0_JAP] - cur->addr[STR_0_PAL] + && kor - pal == cur->addr[STR_0_KOR] - cur->addr[STR_0_PAL]; + + if (same_delta) + { + const int offset = pal - ADDROF(cur); + if ( offset <= cur->size1 + AUTO_EXPAND1 ) + { + cur->size1 = cur->size2 = offset + add_size; + continue; + } + cur->size2 = offset | ASM_EXPANDED; + } + + bool found; + int ridx = get_port_record(aport,pal,&found); + cur = insert_record(aport,ridx,0); + cur->addr[STR_0_PAL] = pal; + cur->addr[STR_0_USA] = usa; + cur->addr[STR_0_JAP] = jap; + cur->addr[STR_0_KOR] = kor; + cur->size1 = add_size; + cur->size2 = add_size; + } + + fputc('\n',stderr); + for ( int pr = 0; pr < MAX_APORT_PRIO; pr++ ) + { + aport_t *aport = aport_list + pr; + uint max_size1 = 0; + uint max_size2 = 0; + const addr_port_t *p = aport->list; + for ( int i = 0; i < aport->used; i++, p++ ) + { + if ( max_size1 < p->size1 ) + max_size1 = p->size1 & ASM_M_SIZE; + if ( max_size2 < p->size2 ) + max_size2 = p->size2 & ASM_M_SIZE; + } + aport->max_size1 = max_size1; + aport->max_size2 = max_size2; + + fprintf(stderr,"PRIO-%d: %7u/%u lines scanned, %6u/%u records, max-size:%7x,%7x\n", + pr+1, aport->line_count, line_count, + aport->used, aport->size, max_size1, max_size2 ); + } + fflush(stderr); + + + //--- mix tables + + int index1 = 0; + const addr_port_t *ptr2 = aport_list[1].list; + const addr_port_t *end2 = ptr2 + aport_list[1].used; + + while ( ptr2 < end2 && index1 < aport_list[0].used ) + { + addr_port_t *ptr1 = aport_list[0].list + index1; + addr_port_t *end1 = ptr1 + aport_list[0].used; + while ( ptr1 < end1 && ENDOF2(ptr1) <= ADDROF(ptr2) ) + ptr1++; + + if ( ptr1 == end1 ) + break; + + index1 = ptr1 - aport_list[0].list; + int delta = (int)ADDROF(ptr1) - (int)ADDROF(ptr2); + PRINT0("INS: %3d/%d/%d : %p %x..%x : %p %x..%x : %d\n", + index1, aport_list->used, aport_list->size, + ptr1, ADDROF(ptr1), ENDOF2(ptr1), + ptr2, ADDROF(ptr2), ENDOF2(ptr2), + delta ); + + if ( delta > 0 ) + { + ptr1 = insert_record(aport_list,index1,ptr2); + if ( ptr1->size1 > delta ) + ptr1->size1 = delta; + if ( ptr1->size2 > delta ) + ptr1->size2 = delta; + + u32 mode1, mode2; + if ( ptr1->size2 == delta && SAMEDELTA(ptr1,ptr1+1) ) + mode1 = mode2 = ptr1[1].size2 & ASM_M_MODE; + else if ( index1 && ENDOF2(ptr1-1) == ADDROF(ptr1) && SAMEDELTA(ptr1,ptr1-1) ) + mode1 = mode2 = ptr1[-1].size2 & ASM_M_MODE; + else + { + mode1 = ptr1->size1 < 8 ? ASM_SUSPECT : ASM_UNSURE; + mode2 = ASM_SUSPECT; + } + + ptr1->size1 = ptr1->size1 & ASM_M_SIZE | mode1; + ptr1->size2 = ptr1->size2 & ASM_M_SIZE | mode2; + } + else if ( ENDOF2(ptr2) > ENDOF2(ptr1) ) + { +xBINGO; +// ptr1 = insert_record(aport_list,index1+1,ptr2); + } + + ptr2++; + } + + // add final records + while ( ptr2 < end2 ) + insert_record(aport_list,INT_MAX,ptr2); + +#endif + + //--- add finaly hollywood registers + + insert_range(aport_list,0xcd000000,0x8000); + tie_records(aport_list); + + + //--- scan args + + uint prio = 1; + const aport_t *aport = aport_list; + + int i; + for ( i = 1; i < argc; i++ ) + { + ccp arg = argv[i]; + if (!strcmp(arg,"l")) + { + const addr_port_t *p = aport->list; + for ( int i = 0; i < aport->used; i++, p++ ) + fprintf(stderr,"%8x %8x %8x %8x : %6x|%u %6x|%u\n", + p->addr[STR_0_PAL], + p->addr[STR_0_USA], + p->addr[STR_0_JAP], + p->addr[STR_0_KOR], + p->size1 & ASM_M_SIZE, p->size1 & ASM_M_MODE, + p->size2 & ASM_M_SIZE, p->size2 & ASM_M_MODE ); + continue; + } + + if ( arg[0] == 'p' && arg[1] && !arg[2] ) + { + uint p = arg[1] - '0'; + if ( p >= 1 && p <= MAX_APORT_PRIO ) + { + prio = p; + aport = aport_list + prio - 1; + } + continue; + } + + if (!strcmp(arg,"c")) + { + printf("\nconst static addr_port_t addr_port[%u] =\n{\n",aport->used); + const addr_port_t *p = aport->list; + for ( int i = 0; i < aport->used; i++, p++ ) + { + ccp valid = check_valid_record(aport,p); + if (valid) + { + fflush(stdout); + fprintf(stderr,"INVALID[%d] %8x: %s\n",i,p->addr[STR_0_PAL],valid); + fflush(stderr); + } + + printf("\t{{ 0x%08x, 0x%08x, 0x%08x, 0x%08x }, %#8x|%u, %#8x|%u },%s%s\n", + p->addr[0], p->addr[1], p->addr[2], p->addr[3], + p->size1 & ASM_M_SIZE, p->size1 & ASM_M_MODE, + p->size2 & ASM_M_SIZE, p->size2 & ASM_M_MODE, + valid ? " // " : "", valid ? valid : "" ); + } + printf("}; // %u records\n\n",aport->used); + continue; + } + + if (!strcmp(arg,"cc")) + { + ParamField_t pf; + InitializeParamField(&pf); + + printf("\nconst static addr_port_t addr_port[%u] =\n{\n" + " //%8s%12s%12s%12s%17s%12s // >end : %24s%22s%11s N\n\n", + aport->used, + "PAL", "USA", "JAP", "KOR", "size1|f", "size2|f", + "USA/JAP/KOR - PAL", "JAP/KOR - USA", "KOR-JAP" ); + const addr_port_t *p = aport->list; + char prev_delta[80] = {0}; + for ( int i = 0; i < aport->used; i++, p++ ) + { + ccp valid = check_valid_record(aport,p); + if (valid) + { + fflush(stdout); + fprintf(stderr,"INVALID[%d] %8x: %s\n",i,p->addr[STR_0_PAL],valid); + fflush(stderr); + } + + char delta[80], count[10]; + snprintf(delta,sizeof(delta),"%8d %8d %8d : %8d %8d : %8d", + p->addr[1]-p->addr[0], p->addr[2]-p->addr[0], p->addr[3]-p->addr[0], + p->addr[2]-p->addr[1], p->addr[3]-p->addr[1], + p->addr[3]-p->addr[2] ); + const ParamFieldItem_t *it = IncrementParamField(&pf,delta,false); + if (strcmp(prev_delta,delta)) + StringCopyS(prev_delta,sizeof(prev_delta),delta); + else + StringCopyS(delta,sizeof(delta), + " . . . : . . : ."); + + if ( it && it->num > 1 ) + snprintf(count,sizeof(count),"*%u",it->num); + else + { + count[0] = '-'; + count[1] = 0; + } + + printf(" {{ 0x%08x, 0x%08x, 0x%08x, 0x%08x }, %#8x|%u, %#8x|%u }, // >%08x : %s %5s%s%s\n", + p->addr[0], p->addr[1], p->addr[2], p->addr[3], + p->size1 & ASM_M_SIZE, p->size1 & ASM_M_MODE, + p->size2 & ASM_M_SIZE, p->size2 & ASM_M_MODE, + ENDOF2(p), delta, count, + valid ? " ! " : "", valid ? valid : "" ); + } + printf("}; // %u records\n\n",aport->used); + continue; + } + + if (!strcmp(arg,"raw")) + { + fwrite(aport->list,sizeof(*aport->list),aport->used,stdout); + continue; + } + } +#endif + return ERR_OK; +} + +//----------------------------------------------------------------------------- + +#undef ADDROF +#undef ENDOF1 +#undef ENDOF2 +#undef SIZE1 +#undef SIZE2 +#undef MODE1 +#undef MODE2 +#undef SAMEDELTA + +// +/////////////////////////////////////////////////////////////////////////////// /////////////// develop() /////////////// /////////////////////////////////////////////////////////////////////////////// @@ -4273,16 +4959,20 @@ enum CMD_CLOCK, // test_clock(argc,argv) CMD_ENDIAN, // test_endian(argc,argv) CMD_CONFIG, // test_config(argc,argv) - CMD_SEARCH, // test_search(argc,argv) CMD_QUOTE, // test_quote(argc,argv) CMD_EML, // test_eml(argc,argv) CMD_CYGPATH, // test_cygpath(argc,argv) + CMD_SCAN_PORT, // test_scan_port(argc,argv,0) + CMD_SCAN_PORT_V, // test_scan_port(argc,argv,1) CMD__N }; /////////////////////////////////////////////////////////////////////////////// +// Options: +// 1: suppress title output + static const KeywordTab_t CommandTab[] = { { CMD_HELP, "HELP", "?", 0 }, @@ -4336,10 +5026,11 @@ static const KeywordTab_t CommandTab[] = { CMD_CLOCK, "CLOCK", 0, 0 }, { CMD_ENDIAN, "ENDIAN", 0, 0 }, { CMD_CONFIG, "CONFIG", 0, 0 }, - { CMD_SEARCH, "SEARCH", 0, 0 }, { CMD_QUOTE, "QUOTE", "Q", 0 }, { CMD_EML, "EML", 0, 0 }, { CMD_CYGPATH, "CYGPATH", 0, 0 }, + { CMD_SCAN_PORT, "SCAN-PORT", "SP", 1 }, + { CMD_SCAN_PORT_V, "SCAN-PORT-V", "SPV", 1 }, { CMD__N,0,0,0 } }; @@ -4383,12 +5074,8 @@ void AddOne ( double m[3][4] ) int main ( int argc, char ** argv ) { - printf("***** %s *****\n",TITLE); print_title_func = print_title; SetupLib(argc,argv,NAME,VERSION,TITLE); - fflush(stdout); - - //printf(" |" MM1(XXX) "|" MM2(XXX) "\n"); if (0) { @@ -4412,7 +5099,6 @@ int main ( int argc, char ** argv ) printf(" %6.2f %6.2f %6.2f\n",x.m[0][0],x.m[1][1],x.m[2][2]); } - printf("term width = %d\n",GetTermWidth(80,0)); if ( argc < 2 ) help_exit(); @@ -4421,10 +5107,18 @@ int main ( int argc, char ** argv ) const KeywordTab_t * cmd_ct = ScanKeyword(&cmd_stat,argv[1],CommandTab); if (!cmd_ct) { + printf("***** %s *****\n",TITLE); PrintKeywordError(CommandTab,argv[1],cmd_stat,0,0); help_exit(); } + if (!cmd_ct->opt&1) + { + printf("***** %s *****\n",TITLE); + printf("term width = %d\n",GetTermWidth(80,0)); + } + fflush(stdout); + argv[1] = argv[0]; argv++; argc--; @@ -4481,10 +5175,11 @@ int main ( int argc, char ** argv ) case CMD_CLOCK: test_clock(argc,argv); break; case CMD_ENDIAN: test_endian(argc,argv); break; case CMD_CONFIG: test_config(argc,argv); break; - case CMD_SEARCH: test_search(argc,argv); break; case CMD_QUOTE: test_quote(argc,argv); break; case CMD_EML: test_eml(argc,argv); break; case CMD_CYGPATH: test_cygpath(argc,argv); break; + case CMD_SCAN_PORT: test_scan_port(argc,argv,0); break; + case CMD_SCAN_PORT_V: test_scan_port(argc,argv,1); break; //case CMD_HELP: default: help_exit(); |
