From 105720c2e5431f8b734c4a2b569853d7cbbf5d11 Mon Sep 17 00:00:00 2001 From: yoshida_teruhisa Date: Fri, 3 Apr 2009 06:41:15 +0000 Subject: [PATCH] =?UTF-8?q?tests=E3=81=A7=E3=82=82=E6=AD=A2=E3=81=BE?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7=E5=85=A8=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/branches/20090403_1_4test@2786 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- build/tests/AppVersionViewer/ARM9/Makefile | 150 - build/tests/AppVersionViewer/ARM9/main.rsf | 248 - build/tests/AppVersionViewer/banner/Makefile | 49 - .../AppVersionViewer/banner/banner_v3.bsf | Bin 884 -> 0 bytes .../AppVersionViewer/banner/icon/icon.bmp | Bin 630 -> 0 bytes build/tests/CalcHMAC_forBroadOn/Makefile | 47 - build/tests/CalcHMAC_forBroadOn/main.rsf | 171 - .../src/CalcHMAC_forBroadOn.c | 368 - build/tests/CheckCardAccess/Makefile | 32 - build/tests/CheckCardAccess/Makefile.game | 47 - build/tests/CheckCardAccess/Makefile.normal | 47 - build/tests/CheckCardAccess/Makefile.off | 47 - build/tests/CheckCardAccess/game_mode.rsf | 243 - build/tests/CheckCardAccess/normal_mode.rsf | 243 - .../tests/CheckCardAccess/slot_power_off.rsf | 243 - build/tests/CheckCardAccess/src/font.c | 579 - build/tests/CheckCardAccess/src/font.h | 36 - build/tests/CheckCardAccess/src/hotswTypes.h | 134 - build/tests/CheckCardAccess/src/main.c | 768 -- build/tests/CheckCardAccess/src/romSpec.h | 152 - build/tests/CheckCardMode/Makefile | 37 - build/tests/CheckCardMode/src/font.c | 579 - build/tests/CheckCardMode/src/font.h | 36 - build/tests/CheckCardMode/src/hotswTypes.h | 134 - build/tests/CheckCardMode/src/main.c | 535 - build/tests/CheckCardMode/src/romSpec.h | 152 - .../CheckDSHashTable/CheckDSHashTable.rsf | 249 - build/tests/CheckDSHashTable/Makefile | 48 - build/tests/CheckDSHashTable/src/main.c | 285 - build/tests/CheckPreloadParameters/Makefile | 40 - .../CheckPreloadParameters/banner/Makefile | 47 - .../banner/banner_v3.bsf | Bin 980 -> 0 bytes .../banner/icon/gameIcon.bmp | Bin 630 -> 0 bytes build/tests/CheckPreloadParameters/src/main.c | 457 - build/tests/CheckSharedFont/Makefile | 42 - build/tests/CheckSharedFont/ROM-TS_nand.rsf | 263 - .../CheckSharedFont/src/loadSharedFont.c | 147 - .../CheckSharedFont/src/loadSharedFont.h | 42 - build/tests/CheckSharedFont/src/main.c | 98 - build/tests/CreateDevKp/ARM9/Makefile | 60 - build/tests/CreateDevKp/ARM9/main.rsf | 204 - .../tests/CreateDevKp/ARM9/src/RomTypeTest.c | 143 - .../tests/CreateDevKp/ARM9/src/RomTypeTest.h | 35 - build/tests/CreateDevKp/ARM9/src/main.c | 85 - build/tests/CreateDevKp/Makefile | 30 - build/tests/CreateDevKp/banner/Makefile | 48 - .../CreateDevKp/banner/icon/gameIcon.bmp | Bin 630 -> 0 bytes .../banner/icon/msk_pictchat_icon.bin | Bin 4480 -> 0 bytes .../banner/test-utf16_0_v3.TWL.bsf | Bin 594 -> 0 bytes .../CustomSystemUpdater/ARM7.TWL/Makefile | 74 - .../ARM7.TWL/armadillo.lsf | 86 - .../ARM7.TWL/include/kami_pxi.h | 44 - .../ARM7.TWL/src/kami_pxi.c | 262 - .../CustomSystemUpdater/ARM7.TWL/src/main.c | 576 - .../CustomSystemUpdater/ARM9.TWL/ARM9-TS.lsf | 57 - .../CustomSystemUpdater/ARM9.TWL/Makefile | 150 - .../ARM9.TWL/include/graphics.h | 48 - .../ARM9.TWL/include/hw_info.h | 71 - .../ARM9.TWL/include/import.h | 49 - .../ARM9.TWL/include/kami_copy_file.h | 41 - .../ARM9.TWL/include/kami_font.h | 94 - .../ARM9.TWL/include/kami_pxi.h | 89 - .../ARM9.TWL/include/kami_write_nandfirm.h | 52 - .../ARM9.TWL/include/keypad.h | 48 - .../ARM9.TWL/src/font_data.c | 734 -- .../ARM9.TWL/src/graphics.c | 199 - .../ARM9.TWL/src/hw_info.c | 147 - .../CustomSystemUpdater/ARM9.TWL/src/import.c | 194 - .../ARM9.TWL/src/kami_copy_file.c | 105 - .../ARM9.TWL/src/kami_font.c | 407 - .../ARM9.TWL/src/kami_pxi.c | 370 - .../ARM9.TWL/src/kami_write_nandfirm.c | 332 - .../CustomSystemUpdater/ARM9.TWL/src/keypad.c | 85 - build/tests/CustomSystemUpdater/Makefile | 123 - .../tests/CustomSystemUpdater/banner/Makefile | 47 - .../CustomSystemUpdater/banner/banner_AUS.bnr | Bin 9152 -> 0 bytes .../CustomSystemUpdater/banner/banner_EUR.bnr | Bin 9152 -> 0 bytes .../CustomSystemUpdater/banner/banner_JPN.bnr | Bin 9152 -> 0 bytes .../CustomSystemUpdater/banner/banner_USA.bnr | Bin 9152 -> 0 bytes .../CustomSystemUpdater/banner/banner_v3.bsf | Bin 852 -> 0 bytes .../banner/icon/gameIcon.bmp | Bin 592 -> 0 bytes .../CustomSystemUpdater/common/include/fifo.h | 90 - .../CustomSystemUpdater/custom_base.yaml | 10 - build/tests/CustomSystemUpdater/default.yaml | 14 - build/tests/CustomSystemUpdater/makecsu.sh | 36 - build/tests/CustomSystemUpdater/romchecker.rb | 207 - build/tests/CustomSystemUpdater/sumaker.rb | 212 - .../template/ARM9.TWL/main.rsf | 229 - .../template/ARM9.TWL/src/main.c | 765 -- .../CustomSystemUpdater/work/aftercls.sh | 48 - build/tests/CustomSystemUpdater/work/cls.sh | 51 - build/tests/CustomSystemUpdater/work/mkcls.py | 151 - .../work/pickup_tad.dev.sh | 55 - .../CustomSystemUpdater/work/pickup_tad.pl | 146 - .../tests/CustomSystemUpdater/work/toaqua.rb | 92 - build/tests/CustomSystemUpdater/work/tocls.sh | 51 - build/tests/CustomSystemUpdater/work/tocsu.sh | 66 - build/tests/CustomSystemUpdater/work/util.pl | 110 - .../DisplaySystemInformation/ARM7/Makefile | 85 - .../ARM7/armadillo.lcf.template | 400 - .../ARM7/armadillo.lsf | 85 - .../ARM7/armadillo.response.template | 22 - .../DisplaySystemInformation/ARM7/src/main.c | 632 - .../ARM7/src/overwriteRtc.c | 67 - .../ARM7_armadillo/Makefile | 86 - .../ARM7_armadillo/armadillo.lcf.template | 400 - .../ARM7_armadillo/armadillo.lsf | 85 - .../armadillo.response.template | 22 - .../ARM7_armadillo/src/crt0.SCR.c | 714 - .../ARM7_armadillo/src/main.c | 632 - .../ARM7_armadillo/src/overwriteRtc.c | 67 - .../ARM7_racoon/Makefile | 82 - .../ARM7_racoon/racoon.lcf.template | 935 -- .../ARM7_racoon/racoon.lsf | 231 - .../ARM7_racoon/racoon.response.template | 40 - .../ARM7_racoon/src/initScfg.c | 108 - .../ARM7_racoon/src/main.c | 992 -- .../DisplaySystemInformation/ARM9/Makefile | 44 - .../DisplaySystemInformation/ARM9/Makefile.0 | 149 - .../DisplaySystemInformation/ARM9/Makefile.1 | 149 - .../DisplaySystemInformation/ARM9/Makefile.10 | 149 - .../DisplaySystemInformation/ARM9/Makefile.11 | 149 - .../DisplaySystemInformation/ARM9/Makefile.12 | 149 - .../DisplaySystemInformation/ARM9/Makefile.13 | 149 - .../DisplaySystemInformation/ARM9/Makefile.14 | 149 - .../DisplaySystemInformation/ARM9/Makefile.15 | 149 - .../DisplaySystemInformation/ARM9/Makefile.16 | 149 - .../DisplaySystemInformation/ARM9/Makefile.17 | 149 - .../DisplaySystemInformation/ARM9/Makefile.2 | 149 - .../DisplaySystemInformation/ARM9/Makefile.3 | 149 - .../DisplaySystemInformation/ARM9/Makefile.4 | 149 - .../DisplaySystemInformation/ARM9/Makefile.5 | 149 - .../DisplaySystemInformation/ARM9/Makefile.6 | 149 - .../DisplaySystemInformation/ARM9/Makefile.7 | 149 - .../DisplaySystemInformation/ARM9/Makefile.8 | 149 - .../DisplaySystemInformation/ARM9/Makefile.9 | 149 - .../DisplaySystemInformation/ARM9/filemove.rb | 23 - .../ARM9/main_normal.rsf | 250 - .../ARM9/main_secure.rsf | 247 - .../ARM9/makeConditions.txt | 19 - .../ARM9/makeFooter.txt | 121 - .../ARM9/makeHeader.txt | 21 - .../ARM9/makeMaking.rb | 54 - .../ARM9/src/control.c | 425 - .../ARM9/src/control.h | 41 - .../ARM9/src/drawFunc.c | 1085 -- .../ARM9/src/drawFunc.h | 54 - .../ARM9/src/getInformation.h | 59 - .../ARM9/src/get_font.c | 118 - .../ARM9/src/get_hw.c | 108 - .../ARM9/src/get_other.c | 69 - .../ARM9/src/get_owner.c | 37 - .../ARM9/src/get_parental.c | 53 - .../ARM9/src/get_scfg.c | 1137 -- .../ARM9/src/get_secureUser.c | 112 - .../ARM9/src/get_sysmenu.c | 265 - .../ARM9/src/get_versionData.c | 55 - .../ARM9/src/get_whitelist.c | 155 - .../ARM9/src/get_wl.c | 142 - .../ARM9/src/infodata.xls | Bin 35328 -> 0 bytes .../DisplaySystemInformation/ARM9/src/main.c | 120 - .../DisplaySystemInformation/ARM9/src/misc.c | 759 -- .../DisplaySystemInformation/ARM9/src/misc.h | 196 - .../ARM9/src/myIoreg_SCFG.h | 533 - .../ARM9/src/strResource.c | 726 -- .../ARM9/src/strResource.h | 293 - .../DisplaySystemInformation/ARM9/src/util.c | 46 - .../DisplaySystemInformation/ARM9/src/util.h | 10 - .../ARM9/src/viewSystemInfo.c | 317 - .../ARM9/src/viewSystemInfo.h | 101 - build/tests/DisplaySystemInformation/Makefile | 30 - .../banner/MakeFooter.txt | 29 - .../banner/MakeHeader.txt | 18 - .../DisplaySystemInformation/banner/Makefile | 39 - .../banner/Makefile.020A | 48 - .../banner/Makefile.021A | 48 - .../banner/Makefile.022A | 48 - .../banner/Makefile.023A | 48 - .../banner/Makefile.024A | 48 - .../banner/Makefile.025A | 48 - .../banner/Makefile.0B0A | 48 - .../banner/Makefile.0B1A | 48 - .../banner/Makefile.0B2A | 48 - .../banner/Makefile.0B3A | 48 - .../banner/Makefile.0B4A | 48 - .../banner/Makefile.0B5A | 48 - .../banner/Makefile.0B6A | 48 - .../banner/Makefile.0B7A | 48 - .../banner/Makefile.0B8A | 48 - .../banner/Makefile.0B9A | 48 - .../banner/Makefile.0BAA | 48 - .../banner/Makefile.0BBA | 48 - .../banner/banner020A_v3.bsf | Bin 712 -> 0 bytes .../banner/banner021A_v3.bsf | Bin 712 -> 0 bytes .../banner/banner022A_v3.bsf | Bin 728 -> 0 bytes .../banner/banner023A_v3.bsf | Bin 728 -> 0 bytes .../banner/banner024A_v3.bsf | Bin 728 -> 0 bytes .../banner/banner025A_v3.bsf | Bin 728 -> 0 bytes .../banner/banner0B0A_v3.bsf | Bin 712 -> 0 bytes .../banner/banner0B1A_v3.bsf | Bin 712 -> 0 bytes .../banner/banner0B2A_v3.bsf | Bin 712 -> 0 bytes .../banner/banner0B3A_v3.bsf | Bin 712 -> 0 bytes .../banner/banner0B4A_v3.bsf | Bin 712 -> 0 bytes .../banner/banner0B5A_v3.bsf | Bin 712 -> 0 bytes .../banner/banner0B6A_v3.bsf | Bin 712 -> 0 bytes .../banner/banner0B7A_v3.bsf | Bin 712 -> 0 bytes .../banner/banner0B8A_v3.bsf | Bin 728 -> 0 bytes .../banner/banner0B9A_v3.bsf | Bin 728 -> 0 bytes .../banner/banner0BAA_v3.bsf | Bin 728 -> 0 bytes .../banner/banner0BBA_v3.bsf | Bin 728 -> 0 bytes .../banner/bannerOption.txt | 19 - .../banner/banner_v3.bsf | Bin 984 -> 0 bytes .../banner/icon/020A.bmp | Bin 630 -> 0 bytes .../banner/icon/021A.bmp | Bin 630 -> 0 bytes .../banner/icon/022A.bmp | Bin 630 -> 0 bytes .../banner/icon/023A.bmp | Bin 630 -> 0 bytes .../banner/icon/024A.bmp | Bin 630 -> 0 bytes .../banner/icon/025A.bmp | Bin 630 -> 0 bytes .../banner/icon/0B0A.bmp | Bin 630 -> 0 bytes .../banner/icon/0B1A.bmp | Bin 630 -> 0 bytes .../banner/icon/0B2A.bmp | Bin 630 -> 0 bytes .../banner/icon/0B3A.bmp | Bin 630 -> 0 bytes .../banner/icon/0B4A.bmp | Bin 630 -> 0 bytes .../banner/icon/0B5A.bmp | Bin 630 -> 0 bytes .../banner/icon/0B6A.bmp | Bin 630 -> 0 bytes .../banner/icon/0B7A.bmp | Bin 630 -> 0 bytes .../banner/icon/0B8A.bmp | Bin 630 -> 0 bytes .../banner/icon/0B9A.bmp | Bin 630 -> 0 bytes .../banner/icon/0BAA.bmp | Bin 630 -> 0 bytes .../banner/icon/0BBA.bmp | Bin 630 -> 0 bytes .../banner/icon/gameIcon.bmp | Bin 630 -> 0 bytes .../banner/makeMaker.rb | 27 - .../common/include/address.h | 28 - build/tests/ErrorLogTest/ARM9/Makefile | 32 - build/tests/ErrorLogTest/ARM9/Makefile.0 | 56 - build/tests/ErrorLogTest/ARM9/Makefile.1 | 55 - build/tests/ErrorLogTest/ARM9/main.rsf | 269 - .../ErrorLogTest/ARM9/src/ErrorLogTest.c | 137 - build/tests/ErrorLogTest/Makefile | 31 - build/tests/ErrorLogTest/about.txt | 11 - build/tests/ErrorLogTest/banner/Makefile | 49 - build/tests/ErrorLogTest/banner/banner_v3.bsf | Bin 820 -> 0 bytes .../ErrorLogTest/banner/icon/gameIcon.bmp | Bin 630 -> 0 bytes build/tests/FakeRomHeader/Makefile | 99 - build/tests/FakeRomHeader/README.txt | 35 - build/tests/FakeRomHeader/keys.c | 243 - build/tests/FakeRomHeader/keys.h | 14 - build/tests/FakeRomHeader/main.c | 533 - build/tests/FatalErrorChecker/ARM9/Makefile | 55 - build/tests/FatalErrorChecker/ARM9/main.rsf | 245 - .../FatalErrorChecker/ARM9/src/font_data.c | 734 -- .../FatalErrorChecker/ARM9/src/graphics.c | 160 - .../FatalErrorChecker/ARM9/src/graphics.h | 46 - .../FatalErrorChecker/ARM9/src/kami_font.c | 407 - .../FatalErrorChecker/ARM9/src/kami_font.h | 95 - .../tests/FatalErrorChecker/ARM9/src/keypad.c | 85 - .../tests/FatalErrorChecker/ARM9/src/keypad.h | 48 - build/tests/FatalErrorChecker/ARM9/src/main.c | 652 - build/tests/FatalErrorChecker/Makefile | 30 - build/tests/FatalErrorChecker/banner/Makefile | 47 - .../FatalErrorChecker/banner/banner_v3.bsf | Bin 900 -> 0 bytes .../banner/icon/gameIcon.bmp | Bin 630 -> 0 bytes build/tests/FatalErrorMaker/ARM9/Makefile | 32 - build/tests/FatalErrorMaker/ARM9/Makefile.0 | 87 - build/tests/FatalErrorMaker/ARM9/Makefile.1 | 87 - build/tests/FatalErrorMaker/ARM9/main.rsf | 248 - .../ARM9/src/fatalErrorMaker.c | 379 - .../ARM9/src/fatalErrorMaker.h | 34 - build/tests/FatalErrorMaker/ARM9/src/main.c | 101 - build/tests/FatalErrorMaker/Makefile | 30 - build/tests/FatalErrorMaker/about.txt | 22 - build/tests/FatalErrorMaker/banner/Makefile | 35 - .../FatalErrorMaker/banner/Makefile.012A | 48 - .../FatalErrorMaker/banner/Makefile.0G4A | 48 - build/tests/FatalErrorMaker/banner/banner.bnr | Bin 9152 -> 0 bytes .../FatalErrorMaker/banner/banner012A_v3.bsf | Bin 824 -> 0 bytes .../FatalErrorMaker/banner/banner0G4A_v3.bsf | Bin 792 -> 0 bytes .../FatalErrorMaker/banner/bannerOption.txt | 2 - .../FatalErrorMaker/banner/banner_v3.bsf | Bin 980 -> 0 bytes .../FatalErrorMaker/banner/icon/012A.bmp | Bin 630 -> 0 bytes .../FatalErrorMaker/banner/icon/0G4A.bmp | Bin 630 -> 0 bytes .../FatalErrorMaker/banner/icon/gameIcon.bmp | Bin 630 -> 0 bytes build/tests/FileRecoveryTest/Makefile | 43 - build/tests/FileRecoveryTest/main.rsf | 269 - build/tests/FileRecoveryTest/src/main.c | 60 - build/tests/HashCheckTemplate/ARM7/Makefile | 30 - .../tests/HashCheckTemplate/ARM7/Makefile_hyb | 88 - .../tests/HashCheckTemplate/ARM7/Makefile_ltd | 81 - .../ARM7/Makefile_ltd_offset | 83 - .../HashCheckTemplate/ARM7/mongoose_hct.lsf | 172 - .../HashCheckTemplate/ARM7/racoon_hct.lsf | 231 - build/tests/HashCheckTemplate/ARM9/Makefile | 29 - .../tests/HashCheckTemplate/ARM9/Makefile_hyb | 75 - .../tests/HashCheckTemplate/ARM9/Makefile_ltd | 75 - build/tests/HashCheckTemplate/ARM9/main.rsf | 185 - .../ARM9/src/HashCheckTemplate.c | 151 - .../ARM9/src/HashCheckTemplate.h | 37 - build/tests/HashCheckTemplate/ARM9/src/main.c | 87 - build/tests/HashCheckTemplate/Makefile | 30 - build/tests/HashCheckTemplate/banner/Makefile | 47 - .../HashCheckTemplate/banner/banner_v3.bsf | Bin 942 -> 0 bytes .../banner/icon/gameIcon.bmp | Bin 630 -> 0 bytes .../tests/HashCheckTemplate/crt/ARM7/Makefile | 29 - .../HashCheckTemplate/crt/ARM7/Makefile_hyb | 52 - .../HashCheckTemplate/crt/ARM7/Makefile_ltd | 52 - .../crt/ARM7/src/crt0_hct.HYB.c | 918 -- .../crt/ARM7/src/crt0_hct.LTD.c | 861 -- build/tests/HashCheckTemplate/crt/Makefile | 31 - .../crt/common/include/boot_sync.h | 35 - build/tests/HashCheckTemplate/memo.txt | 49 - .../HashCheckTemplate/test_roms/rombreak.bat | 199 - .../test_roms/破壊ずみROMの作り方.txt | 9 - build/tests/Launcher_sdlog/Makefile | 37 - .../tests/Launcher_sdlog/jackal.TWL/Makefile | 58 - .../Launcher_sdlog/jackal.TWL/make_lsf.pl | 57 - build/tests/Launcher_sdlog/readme.txt | 48 - build/tests/Launcher_sdlog/scripts/Makefile | 60 - .../Launcher_sdlog/scripts/sdlog_main_c.pl | 92 - .../Launcher_sdlog/scripts/sdlog_makefile.pl | 103 - .../Launcher_sdlog/sdlog/ARM7.TWL/Makefile | 100 - .../sdlog/ARM7.TWL/src/os_printf.c | 1536 --- .../Launcher_sdlog/sdlog/ARM9.TWL/Makefile | 46 - .../sdlog/ARM9.TWL/include/sd_log_wrapper.h | 44 - .../sdlog/ARM9.TWL/src/sd_log_wrapper.c | 179 - build/tests/Launcher_sdlog/sdlog/Makefile | 24 - build/tests/Makefile | 53 - build/tests/NotLaunchRom/Makefile | 32 - build/tests/NotLaunchRom/Makefile.0 | 51 - build/tests/NotLaunchRom/Makefile.1 | 51 - build/tests/NotLaunchRom/Makefile.2 | 54 - build/tests/NotLaunchRom/include/data.h | 28 - build/tests/NotLaunchRom/secure.rsf | 196 - build/tests/NotLaunchRom/src/data.c | 573 - build/tests/NotLaunchRom/src/main.c | 109 - build/tests/NotLaunchRom/system.rsf | 195 - build/tests/NotLaunchRom/user.rsf | 195 - build/tests/RomTypeTest/ARM9/Makefile | 35 - build/tests/RomTypeTest/ARM9/Makefile.0 | 61 - build/tests/RomTypeTest/ARM9/Makefile.1 | 61 - build/tests/RomTypeTest/ARM9/Makefile.2 | 61 - build/tests/RomTypeTest/ARM9/Makefile.3 | 61 - build/tests/RomTypeTest/ARM9/Makefile.4 | 61 - build/tests/RomTypeTest/ARM9/Makefile.5 | 62 - build/tests/RomTypeTest/ARM9/Makefile.6 | 62 - build/tests/RomTypeTest/ARM9/Makefile.7 | 62 - build/tests/RomTypeTest/ARM9/Makefile.8 | 62 - build/tests/RomTypeTest/ARM9/Makefile.9 | 62 - build/tests/RomTypeTest/ARM9/Makefile.a | 62 - build/tests/RomTypeTest/ARM9/Makefile.b | 62 - build/tests/RomTypeTest/ARM9/Makefile.c | 62 - build/tests/RomTypeTest/ARM9/Makefile.h | 62 - build/tests/RomTypeTest/ARM9/Makefile.i | 62 - build/tests/RomTypeTest/ARM9/Makefile.j | 62 - build/tests/RomTypeTest/ARM9/Makefile.k | 62 - build/tests/RomTypeTest/ARM9/main0.rsf | 204 - build/tests/RomTypeTest/ARM9/main1.rsf | 204 - build/tests/RomTypeTest/ARM9/main2.rsf | 204 - build/tests/RomTypeTest/ARM9/main3.rsf | 204 - build/tests/RomTypeTest/ARM9/main4.rsf | 204 - build/tests/RomTypeTest/ARM9/main5.rsf | 204 - build/tests/RomTypeTest/ARM9/main6.rsf | 204 - build/tests/RomTypeTest/ARM9/main7.rsf | 204 - build/tests/RomTypeTest/ARM9/main8.rsf | 204 - build/tests/RomTypeTest/ARM9/main9.rsf | 204 - build/tests/RomTypeTest/ARM9/maina.rsf | 204 - build/tests/RomTypeTest/ARM9/mainb.rsf | 204 - build/tests/RomTypeTest/ARM9/mainc.rsf | 204 - build/tests/RomTypeTest/ARM9/mainh.rsf | 204 - build/tests/RomTypeTest/ARM9/maini.rsf | 204 - build/tests/RomTypeTest/ARM9/mainj.rsf | 204 - build/tests/RomTypeTest/ARM9/maink.rsf | 204 - .../tests/RomTypeTest/ARM9/src/RomTypeTest.c | 419 - .../tests/RomTypeTest/ARM9/src/RomTypeTest.h | 36 - build/tests/RomTypeTest/ARM9/src/main.c | 86 - build/tests/RomTypeTest/Makefile | 30 - build/tests/RomTypeTest/banner/Makefile | 35 - build/tests/RomTypeTest/banner/Makefile.0 | 48 - build/tests/RomTypeTest/banner/Makefile.1 | 48 - build/tests/RomTypeTest/banner/Makefile.2 | 48 - build/tests/RomTypeTest/banner/Makefile.3 | 48 - build/tests/RomTypeTest/banner/Makefile.4 | 48 - build/tests/RomTypeTest/banner/Makefile.5 | 48 - build/tests/RomTypeTest/banner/Makefile.6 | 48 - build/tests/RomTypeTest/banner/Makefile.7 | 48 - build/tests/RomTypeTest/banner/Makefile.8 | 48 - build/tests/RomTypeTest/banner/Makefile.9 | 48 - build/tests/RomTypeTest/banner/Makefile.a | 48 - build/tests/RomTypeTest/banner/Makefile.b | 48 - build/tests/RomTypeTest/banner/Makefile.c | 48 - build/tests/RomTypeTest/banner/Makefile.d | 48 - build/tests/RomTypeTest/banner/Makefile.e | 48 - build/tests/RomTypeTest/banner/Makefile.f | 48 - build/tests/RomTypeTest/banner/Makefile.g | 48 - build/tests/RomTypeTest/banner/Makefile.h | 48 - build/tests/RomTypeTest/banner/Makefile.i | 48 - build/tests/RomTypeTest/banner/Makefile.j | 48 - build/tests/RomTypeTest/banner/Makefile.k | 48 - build/tests/RomTypeTest/banner/banner_v3.bsf | Bin 762 -> 0 bytes .../RomTypeTest/banner/icon/gameIcon.bmp | Bin 630 -> 0 bytes .../banner/icon/msk_pictchat_icon.bin | Bin 4480 -> 0 bytes .../banner/test-utf16_0_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_1_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_2_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_3_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_4_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_5_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_6_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_7_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_8_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_9_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_a_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_b_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_c_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_d_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_e_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_f_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_g_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_h_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_i_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_j_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_k_v3.TWL.bsf | Bin 610 -> 0 bytes build/tests/Shared2File/Makefile | 46 - build/tests/Shared2File/main.rsf | 198 - build/tests/Shared2File/src/main.c | 490 - .../SimpleBenchmark/ARM9/ARM9-TS.lcf.template | 1048 -- build/tests/SimpleBenchmark/ARM9/ARM9-TS.lsf | 53 - build/tests/SimpleBenchmark/ARM9/Makefile | 32 - build/tests/SimpleBenchmark/ARM9/Makefile.0 | 77 - build/tests/SimpleBenchmark/ARM9/Makefile.1 | 64 - build/tests/SimpleBenchmark/ARM9/main0.rsf | 204 - build/tests/SimpleBenchmark/ARM9/main1.rsf | 204 - .../ARM9/src/SimpleBenchmark.c | 119 - .../ARM9/src/SimpleBenchmark.h | 36 - build/tests/SimpleBenchmark/ARM9/src/main.c | 86 - build/tests/SimpleBenchmark/Makefile | 30 - build/tests/SimpleBenchmark/banner/Makefile | 32 - build/tests/SimpleBenchmark/banner/Makefile.0 | 48 - build/tests/SimpleBenchmark/banner/Makefile.1 | 48 - .../SimpleBenchmark/banner/banner_v3.bsf | Bin 762 -> 0 bytes .../SimpleBenchmark/banner/icon/gameIcon.bmp | Bin 630 -> 0 bytes .../banner/icon/msk_pictchat_icon.bin | Bin 4480 -> 0 bytes .../banner/test-utf16_0_v3.TWL.bsf | Bin 802 -> 0 bytes .../banner/test-utf16_1_v3.TWL.bsf | Bin 802 -> 0 bytes build/tests/TestComponent/ARM7.TWL/Makefile | 103 - .../TestComponent/ARM7.TWL/armadillo.lsf | 89 - .../TestComponent/ARM7.TWL/include/kami_pxi.h | 44 - .../ARM7.TWL/src/crt0.SCFG_NOLOCK.c | 798 -- .../TestComponent/ARM7.TWL/src/kami_pxi.c | 413 - build/tests/TestComponent/ARM7.TWL/src/main.c | 654 - .../tests/TestComponent/ARM9.TWL/ARM9-TS.lsf | 57 - build/tests/TestComponent/ARM9.TWL/Makefile | 130 - .../TestComponent/ARM9.TWL/include/graphics.h | 46 - .../ARM9.TWL/include/kami_font.h | 95 - .../TestComponent/ARM9.TWL/include/kami_pxi.h | 123 - .../TestComponent/ARM9.TWL/include/keypad.h | 48 - build/tests/TestComponent/ARM9.TWL/main.rsf | 232 - .../TestComponent/ARM9.TWL/src/font_data.c | 734 -- .../TestComponent/ARM9.TWL/src/graphics.c | 160 - .../TestComponent/ARM9.TWL/src/kami_font.c | 407 - .../TestComponent/ARM9.TWL/src/kami_pxi.c | 743 -- .../tests/TestComponent/ARM9.TWL/src/keypad.c | 85 - build/tests/TestComponent/ARM9.TWL/src/main.c | 230 - build/tests/TestComponent/Makefile | 34 - build/tests/TestComponent/banner/Makefile | 47 - .../tests/TestComponent/banner/banner_v3.bsf | Bin 884 -> 0 bytes .../TestComponent/banner/icon/gameIcon.bmp | Bin 592 -> 0 bytes .../tests/TestComponent/common/include/fifo.h | 105 - build/tests/TestMaker/Makefile | 241 - .../TestMaker/banner/dummy/Cell/Cell0.nce | Bin 6260 -> 0 bytes .../dummy/Character/banner_anm_idea03_ALL.ncg | Bin 4336 -> 0 bytes .../dummy/ColorPalette/banner_anm_idea03.ncl | Bin 556 -> 0 bytes .../banner/dummy/Preview/Preview0.npv | 104 - .../TestMaker/banner/dummy/Scene/Scene0.nsn | 54 - .../tests/TestMaker/banner/dummy/workset.ini | 4 - .../TestMaker/banner/eula/Cell/Cell0.nce | Bin 5924 -> 0 bytes .../TestMaker/banner/eula/Character/eula.ncg | Bin 4324 -> 0 bytes .../banner/eula/ColorPalette/eula.ncl | Bin 556 -> 0 bytes .../banner/eula/Preview/Preview0.npv | 104 - .../TestMaker/banner/eula/Scene/Scene0.nsn | 54 - build/tests/TestMaker/banner/eula/workset.ini | 4 - .../TestMaker/banner/font/Cell/Cell0.nce | Bin 5348 -> 0 bytes .../TestMaker/banner/font/Character/font.ncg | Bin 4324 -> 0 bytes .../banner/font/ColorPalette/font.ncl | Bin 556 -> 0 bytes .../banner/font/Preview/Preview0.npv | 104 - .../TestMaker/banner/font/Scene/Scene0.nsn | 54 - build/tests/TestMaker/banner/font/workset.ini | 4 - .../TestMaker/banner/parental/Cell/Cell0.nce | Bin 5104 -> 0 bytes .../parental/Character/parental_control.ncg | Bin 4336 -> 0 bytes .../ColorPalette/parental_control.ncl | Bin 556 -> 0 bytes .../banner/parental/Preview/Preview0.npv | 104 - .../banner/parental/Scene/Scene0.nsn | 54 - .../TestMaker/banner/parental/workset.ini | 4 - .../TestMaker/banner/shop/Cell/Cell0.nce | Bin 6260 -> 0 bytes .../shop/Character/banner_anm_idea03_ALL.ncg | Bin 4336 -> 0 bytes .../shop/ColorPalette/banner_anm_idea03.ncl | Bin 556 -> 0 bytes .../banner/shop/Preview/Preview0.npv | 104 - .../TestMaker/banner/shop/Scene/Scene0.nsn | 54 - build/tests/TestMaker/banner/shop/workset.ini | 4 - .../config/ROM-TS_nand_forPARENTAL.rsf | 251 - .../config/romparam_forBoottest.yaml | Bin 105824 -> 0 bytes .../TestMaker/config/romparam_forCLStest.yaml | Bin 8136 -> 0 bytes .../config/romparam_forEULAtest.yaml | Bin 5004 -> 0 bytes .../romparam_forFATFSPermissiontest.yaml | Bin 29196 -> 0 bytes .../config/romparam_forShoptest.yaml | Bin 2370 -> 0 bytes .../config/twl_parentalcontrol_spec.yaml | Bin 1894 -> 0 bytes .../20080617_DS_fontcodeList_NOE_FIANL.xls | Bin 1482240 -> 0 bytes .../doc/twl_cls_checksheet_20080508.xls | Bin 50688 -> 0 bytes .../doc/twl_parentalcontrol_spec_20080704.xls | Bin 16384 -> 0 bytes build/tests/TestMaker/readme.txt | 39 - build/tests/TestMaker/romparam.yaml | Bin 2036 -> 0 bytes build/tests/TestMaker/rsf/ROM-TS_custom.rsf | 319 - build/tests/TestMaker/script/clsdir.py | 85 - build/tests/TestMaker/script/config.py | 172 - build/tests/TestMaker/script/fontcode.py | 80 - .../tests/TestMaker/script/parentalcontrol.py | 71 - build/tests/TestMaker/script/rename_eula.py | 21 - build/tests/TestMaker/script/rename_font.py | 30 - .../tests/TestMaker/script/rename_parental.py | 25 - build/tests/UjiPackage/Makefile | 98 - build/tests/UjiPackage/readme.txt | 24 - build/tests/WDSTest/Makefile | 40 - build/tests/WDSTest/src/main.c | 297 - build/tests/WDSWrapperTest/Makefile | 37 - build/tests/WDSWrapperTest/src/main.c | 197 - build/tests/WirelessChecker/@ | 1 - build/tests/WirelessChecker/Makefile | 133 - .../WirelessChecker/banner/000A_WLCK.bmp | Bin 630 -> 0 bytes .../WirelessChecker/banner/000A_WLCK.bsf | Bin 982 -> 0 bytes build/tests/WirelessChecker/banner/Makefile | 47 - .../tests/WirelessChecker/components/Makefile | 31 - .../components/racoon_wckr/Makefile | 56 - .../components/racoon_wckr/make_lsf.pl | 53 - .../tests/WirelessChecker/libraries/Makefile | 30 - .../libraries/nwm/ARM7/Makefile | 126 - .../libraries/nwm/ARM9/Makefile | 95 - .../WirelessChecker/libraries/nwm/Makefile | 39 - .../libraries/nwm/scripts/Makefile | 42 - .../nwm/scripts/make_nwm_fw_wrack.pl | 108 - build/tests/WirelessChecker/readme.txt | 62 - .../WirelessChecker/resources/ds_ipl10.bmp | Bin 922102 -> 0 bytes build/tests/WirelessChecker/rsf/Makefile | 37 - build/tests/WirelessChecker/rsf/make_rsf.pl | 97 - build/tests/WirelessChecker/src/frame.cpp | 148 - build/tests/WirelessChecker/src/frame.h | 72 - build/tests/WirelessChecker/src/main.cpp | 135 - build/tests/WirelessChecker/src/test.cpp | 96 - build/tests/WirelessChecker/src/test.h | 54 - .../tests/WirelessChecker/src/test_fatal.cpp | 130 - build/tests/WirelessChecker/src/test_fatal.h | 37 - build/tests/WirelessChecker/src/test_nwm.cpp | 355 - build/tests/WirelessChecker/src/test_nwm.h | 52 - .../WirelessChecker/src/test_recovery.cpp | 97 - .../tests/WirelessChecker/src/test_recovery.h | 37 - build/tests/WirelessChecker/src/test_wm.cpp | 376 - build/tests/WirelessChecker/src/test_wm.h | 43 - .../tests/WirelessChecker/src/util/canvas.cpp | 175 - build/tests/WirelessChecker/src/util/canvas.h | 78 - .../tests/WirelessChecker/src/util/memory.cpp | 122 - build/tests/WirelessChecker/src/util/memory.h | 38 - build/tests/WirelessChecker/src/util/util.cpp | 276 - build/tests/WirelessChecker/src/util/util.h | 103 - .../WirelessChecker/src/util/wprintf.cpp | 387 - .../tests/WirelessChecker/src/util/wprintf.h | 100 - build/tests/build4WLDev/Makefile | 146 - build/tests/build4WLDev/Makefile_environment | 41 - build/tests/build4WLDev/Makefile_old | 144 - build/tests/build4WLDev/readme.txt | 26 - build/tests/build4WLDev/scripts/Makefile | 74 - build/tests/build4WLDev/scripts/Makefile_old | 87 - .../scripts/launcher_MachineSetting_c.pl | 52 - .../scripts/launcher_fake_macaddress.pl | 123 - .../scripts/launcher_loadWlanFirm_c.pl | 55 - .../build4WLDev/scripts/launcher_makefile.pl | 112 - .../scripts/launcher_makefile_region.pl | 112 - .../scripts/systemupdater_source.pl | 125 - build/tests/compressSharedFontLoad/README.txt | 60 - .../compSharedFont/Makefile | 62 - .../compSharedFont/compBLZ_modified/Makefile | 73 - .../compSharedFont/compBLZ_modified/_ | 1 - .../compSharedFont/compBLZ_modified/common.h | 42 - .../compBLZ_modified/compress.c | 374 - .../compBLZ_modified/compress.h | 55 - .../compSharedFont/compBLZ_modified/file.c | 314 - .../compSharedFont/compBLZ_modified/file.h | 35 - .../compSharedFont/compBLZ_modified/main.c | 171 - .../compSharedFont/genFontTable.plx | 261 - .../compSharedFont/makeboot.bat | 18 - .../compSharedFont/ntrcomp/@ | 1 - .../compSharedFont/ntrcomp/Makefile | 27 - .../compSharedFont/ntrcomp/Makefile.BAK | 25 - .../compSharedFont/ntrcomp/gcc/Makefile | 59 - .../compSharedFont/ntrcomp/gcc/Makefile.BAK | 59 - .../ntrcomp/src/multipleCompLib.c | 2494 ---- .../ntrcomp/src/multipleCompLib.h | 55 - .../compSharedFont/ntrcomp/src/nitroCompLib.c | 2282 ---- .../compSharedFont/ntrcomp/src/nitroCompLib.h | 127 - .../ntrcomp/src/ntcompress_main.c | 1164 -- .../ntrcomp/src/ntcompress_test.c | 661 - .../ntrcomp/src/ntcompress_test.h | 23 - .../compSharedFont/ntrcomp/src/rangeCoder.c | 539 - .../compSharedFont/ntrcomp/src/rangeCoder.h | 46 - .../compSharedFont/ntrcomp/src/types.h | 57 - .../ntrcomp/vc++/ntcompress.sln | 21 - .../ntrcomp/vc++/ntcompress.vcproj | 179 - .../testLoadSpeed/Makefile | 54 - .../testLoadSpeed/ROM-TS_nand.rsf | 277 - .../testLoadSpeed/copy_to_sdk/Makefile | 39 - .../testLoadSpeed/copy_to_sdk/os_sharedFont.c | 352 - .../testLoadSpeed/copy_to_sdk/sharedFont.h | 69 - .../testLoadSpeed/src/loadSharedFont.c | 198 - .../testLoadSpeed/src/loadSharedFont.h | 46 - .../testLoadSpeed/src/main.c | 101 - build/tests/yuv2rgb/Makefile | 121 - build/tests/yuv2rgb/data/camera_shutter.dat | Bin 32628 -> 0 bytes .../yuv2rgb/data/camera_shutter_MONO.dat | Bin 16314 -> 0 bytes build/tests/yuv2rgb/data/wheel.dat | Bin 136388 -> 0 bytes build/tests/yuv2rgb/include/const.h | 36 - .../tests/yuv2rgb/include/menuCameraManager.h | 381 - build/tests/yuv2rgb/include/new.h | 45 - build/tests/yuv2rgb/include/snd_data.h | 35 - build/tests/yuv2rgb/include/yuv2rgb.h | 85 - build/tests/yuv2rgb/readme.txt | 227 - .../tests/yuv2rgb/redipl_defs_autogen_by_uig | 14 - build/tests/yuv2rgb/src/cpu_yuv2rgb.c | 103 - build/tests/yuv2rgb/src/dsp_yuv2rgb.c | 308 - build/tests/yuv2rgb/src/mainy.cpp | 1813 --- build/tests/yuv2rgb/src/menuCameraManager.cpp | 2453 ---- build/tests/yuv2rgb/src/menuIrqHandler.c | 169 - build/tests/yuv2rgb/src/menuIrqHandler.h | 36 - build/tests/yuv2rgb/src/new.cpp | 130 - build/tests/yuv2rgb/src/snd_data.c | 10771 ---------------- build/tests/yuv2rgb/yuv2rgb.rsf.template | 222 - 632 files changed, 94213 deletions(-) delete mode 100644 build/tests/AppVersionViewer/ARM9/Makefile delete mode 100644 build/tests/AppVersionViewer/ARM9/main.rsf delete mode 100644 build/tests/AppVersionViewer/banner/Makefile delete mode 100644 build/tests/AppVersionViewer/banner/banner_v3.bsf delete mode 100644 build/tests/AppVersionViewer/banner/icon/icon.bmp delete mode 100644 build/tests/CalcHMAC_forBroadOn/Makefile delete mode 100644 build/tests/CalcHMAC_forBroadOn/main.rsf delete mode 100644 build/tests/CalcHMAC_forBroadOn/src/CalcHMAC_forBroadOn.c delete mode 100644 build/tests/CheckCardAccess/Makefile delete mode 100644 build/tests/CheckCardAccess/Makefile.game delete mode 100644 build/tests/CheckCardAccess/Makefile.normal delete mode 100644 build/tests/CheckCardAccess/Makefile.off delete mode 100644 build/tests/CheckCardAccess/game_mode.rsf delete mode 100644 build/tests/CheckCardAccess/normal_mode.rsf delete mode 100644 build/tests/CheckCardAccess/slot_power_off.rsf delete mode 100644 build/tests/CheckCardAccess/src/font.c delete mode 100644 build/tests/CheckCardAccess/src/font.h delete mode 100644 build/tests/CheckCardAccess/src/hotswTypes.h delete mode 100644 build/tests/CheckCardAccess/src/main.c delete mode 100644 build/tests/CheckCardAccess/src/romSpec.h delete mode 100644 build/tests/CheckCardMode/Makefile delete mode 100644 build/tests/CheckCardMode/src/font.c delete mode 100644 build/tests/CheckCardMode/src/font.h delete mode 100644 build/tests/CheckCardMode/src/hotswTypes.h delete mode 100644 build/tests/CheckCardMode/src/main.c delete mode 100644 build/tests/CheckCardMode/src/romSpec.h delete mode 100644 build/tests/CheckDSHashTable/CheckDSHashTable.rsf delete mode 100644 build/tests/CheckDSHashTable/Makefile delete mode 100644 build/tests/CheckDSHashTable/src/main.c delete mode 100644 build/tests/CheckPreloadParameters/Makefile delete mode 100644 build/tests/CheckPreloadParameters/banner/Makefile delete mode 100644 build/tests/CheckPreloadParameters/banner/banner_v3.bsf delete mode 100644 build/tests/CheckPreloadParameters/banner/icon/gameIcon.bmp delete mode 100644 build/tests/CheckPreloadParameters/src/main.c delete mode 100644 build/tests/CheckSharedFont/Makefile delete mode 100644 build/tests/CheckSharedFont/ROM-TS_nand.rsf delete mode 100644 build/tests/CheckSharedFont/src/loadSharedFont.c delete mode 100644 build/tests/CheckSharedFont/src/loadSharedFont.h delete mode 100644 build/tests/CheckSharedFont/src/main.c delete mode 100644 build/tests/CreateDevKp/ARM9/Makefile delete mode 100644 build/tests/CreateDevKp/ARM9/main.rsf delete mode 100644 build/tests/CreateDevKp/ARM9/src/RomTypeTest.c delete mode 100644 build/tests/CreateDevKp/ARM9/src/RomTypeTest.h delete mode 100644 build/tests/CreateDevKp/ARM9/src/main.c delete mode 100644 build/tests/CreateDevKp/Makefile delete mode 100644 build/tests/CreateDevKp/banner/Makefile delete mode 100644 build/tests/CreateDevKp/banner/icon/gameIcon.bmp delete mode 100644 build/tests/CreateDevKp/banner/icon/msk_pictchat_icon.bin delete mode 100644 build/tests/CreateDevKp/banner/test-utf16_0_v3.TWL.bsf delete mode 100644 build/tests/CustomSystemUpdater/ARM7.TWL/Makefile delete mode 100644 build/tests/CustomSystemUpdater/ARM7.TWL/armadillo.lsf delete mode 100644 build/tests/CustomSystemUpdater/ARM7.TWL/include/kami_pxi.h delete mode 100644 build/tests/CustomSystemUpdater/ARM7.TWL/src/kami_pxi.c delete mode 100644 build/tests/CustomSystemUpdater/ARM7.TWL/src/main.c delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/ARM9-TS.lsf delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/Makefile delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/include/graphics.h delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/include/hw_info.h delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/include/import.h delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_copy_file.h delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_font.h delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_pxi.h delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_write_nandfirm.h delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/include/keypad.h delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/src/font_data.c delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/src/graphics.c delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/src/hw_info.c delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/src/import.c delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_copy_file.c delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_font.c delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_pxi.c delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_write_nandfirm.c delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/src/keypad.c delete mode 100644 build/tests/CustomSystemUpdater/Makefile delete mode 100644 build/tests/CustomSystemUpdater/banner/Makefile delete mode 100644 build/tests/CustomSystemUpdater/banner/banner_AUS.bnr delete mode 100644 build/tests/CustomSystemUpdater/banner/banner_EUR.bnr delete mode 100644 build/tests/CustomSystemUpdater/banner/banner_JPN.bnr delete mode 100644 build/tests/CustomSystemUpdater/banner/banner_USA.bnr delete mode 100644 build/tests/CustomSystemUpdater/banner/banner_v3.bsf delete mode 100644 build/tests/CustomSystemUpdater/banner/icon/gameIcon.bmp delete mode 100644 build/tests/CustomSystemUpdater/common/include/fifo.h delete mode 100644 build/tests/CustomSystemUpdater/custom_base.yaml delete mode 100644 build/tests/CustomSystemUpdater/default.yaml delete mode 100755 build/tests/CustomSystemUpdater/makecsu.sh delete mode 100755 build/tests/CustomSystemUpdater/romchecker.rb delete mode 100755 build/tests/CustomSystemUpdater/sumaker.rb delete mode 100644 build/tests/CustomSystemUpdater/template/ARM9.TWL/main.rsf delete mode 100644 build/tests/CustomSystemUpdater/template/ARM9.TWL/src/main.c delete mode 100755 build/tests/CustomSystemUpdater/work/aftercls.sh delete mode 100755 build/tests/CustomSystemUpdater/work/cls.sh delete mode 100644 build/tests/CustomSystemUpdater/work/mkcls.py delete mode 100755 build/tests/CustomSystemUpdater/work/pickup_tad.dev.sh delete mode 100755 build/tests/CustomSystemUpdater/work/pickup_tad.pl delete mode 100755 build/tests/CustomSystemUpdater/work/toaqua.rb delete mode 100755 build/tests/CustomSystemUpdater/work/tocls.sh delete mode 100755 build/tests/CustomSystemUpdater/work/tocsu.sh delete mode 100755 build/tests/CustomSystemUpdater/work/util.pl delete mode 100644 build/tests/DisplaySystemInformation/ARM7/Makefile delete mode 100644 build/tests/DisplaySystemInformation/ARM7/armadillo.lcf.template delete mode 100644 build/tests/DisplaySystemInformation/ARM7/armadillo.lsf delete mode 100644 build/tests/DisplaySystemInformation/ARM7/armadillo.response.template delete mode 100644 build/tests/DisplaySystemInformation/ARM7/src/main.c delete mode 100644 build/tests/DisplaySystemInformation/ARM7/src/overwriteRtc.c delete mode 100644 build/tests/DisplaySystemInformation/ARM7_armadillo/Makefile delete mode 100644 build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.lcf.template delete mode 100644 build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.lsf delete mode 100644 build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.response.template delete mode 100644 build/tests/DisplaySystemInformation/ARM7_armadillo/src/crt0.SCR.c delete mode 100644 build/tests/DisplaySystemInformation/ARM7_armadillo/src/main.c delete mode 100644 build/tests/DisplaySystemInformation/ARM7_armadillo/src/overwriteRtc.c delete mode 100644 build/tests/DisplaySystemInformation/ARM7_racoon/Makefile delete mode 100644 build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lcf.template delete mode 100644 build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lsf delete mode 100644 build/tests/DisplaySystemInformation/ARM7_racoon/racoon.response.template delete mode 100644 build/tests/DisplaySystemInformation/ARM7_racoon/src/initScfg.c delete mode 100644 build/tests/DisplaySystemInformation/ARM7_racoon/src/main.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.0 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.1 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.10 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.11 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.12 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.13 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.14 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.15 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.16 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.17 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.2 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.3 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.4 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.5 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.6 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.7 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.8 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.9 delete mode 100755 build/tests/DisplaySystemInformation/ARM9/filemove.rb delete mode 100644 build/tests/DisplaySystemInformation/ARM9/main_normal.rsf delete mode 100644 build/tests/DisplaySystemInformation/ARM9/main_secure.rsf delete mode 100644 build/tests/DisplaySystemInformation/ARM9/makeConditions.txt delete mode 100644 build/tests/DisplaySystemInformation/ARM9/makeFooter.txt delete mode 100644 build/tests/DisplaySystemInformation/ARM9/makeHeader.txt delete mode 100755 build/tests/DisplaySystemInformation/ARM9/makeMaking.rb delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/control.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/control.h delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/drawFunc.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/drawFunc.h delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/getInformation.h delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_font.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_hw.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_other.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_owner.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_parental.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_scfg.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_secureUser.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_sysmenu.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_versionData.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_whitelist.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_wl.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/infodata.xls delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/main.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/misc.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/misc.h delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/myIoreg_SCFG.h delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/strResource.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/strResource.h delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/util.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/util.h delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.h delete mode 100644 build/tests/DisplaySystemInformation/Makefile delete mode 100644 build/tests/DisplaySystemInformation/banner/MakeFooter.txt delete mode 100644 build/tests/DisplaySystemInformation/banner/MakeHeader.txt delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.020A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.021A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.022A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.023A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.024A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.025A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0B0A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0B1A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0B2A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0B3A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0B4A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0B5A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0B6A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0B7A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0B8A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0B9A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0BAA delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0BBA delete mode 100644 build/tests/DisplaySystemInformation/banner/banner020A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner021A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner022A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner023A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner024A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner025A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0B0A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0B1A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0B2A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0B3A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0B4A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0B5A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0B6A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0B7A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0B8A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0B9A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0BAA_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0BBA_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/bannerOption.txt delete mode 100644 build/tests/DisplaySystemInformation/banner/banner_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/020A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/021A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/022A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/023A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/024A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/025A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0B0A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0B1A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0B2A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0B3A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0B4A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0B5A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0B6A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0B7A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0B8A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0B9A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0BAA.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0BBA.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/gameIcon.bmp delete mode 100755 build/tests/DisplaySystemInformation/banner/makeMaker.rb delete mode 100644 build/tests/DisplaySystemInformation/common/include/address.h delete mode 100644 build/tests/ErrorLogTest/ARM9/Makefile delete mode 100644 build/tests/ErrorLogTest/ARM9/Makefile.0 delete mode 100644 build/tests/ErrorLogTest/ARM9/Makefile.1 delete mode 100644 build/tests/ErrorLogTest/ARM9/main.rsf delete mode 100644 build/tests/ErrorLogTest/ARM9/src/ErrorLogTest.c delete mode 100644 build/tests/ErrorLogTest/Makefile delete mode 100644 build/tests/ErrorLogTest/about.txt delete mode 100644 build/tests/ErrorLogTest/banner/Makefile delete mode 100644 build/tests/ErrorLogTest/banner/banner_v3.bsf delete mode 100644 build/tests/ErrorLogTest/banner/icon/gameIcon.bmp delete mode 100644 build/tests/FakeRomHeader/Makefile delete mode 100644 build/tests/FakeRomHeader/README.txt delete mode 100644 build/tests/FakeRomHeader/keys.c delete mode 100644 build/tests/FakeRomHeader/keys.h delete mode 100644 build/tests/FakeRomHeader/main.c delete mode 100644 build/tests/FatalErrorChecker/ARM9/Makefile delete mode 100644 build/tests/FatalErrorChecker/ARM9/main.rsf delete mode 100644 build/tests/FatalErrorChecker/ARM9/src/font_data.c delete mode 100644 build/tests/FatalErrorChecker/ARM9/src/graphics.c delete mode 100644 build/tests/FatalErrorChecker/ARM9/src/graphics.h delete mode 100644 build/tests/FatalErrorChecker/ARM9/src/kami_font.c delete mode 100644 build/tests/FatalErrorChecker/ARM9/src/kami_font.h delete mode 100644 build/tests/FatalErrorChecker/ARM9/src/keypad.c delete mode 100644 build/tests/FatalErrorChecker/ARM9/src/keypad.h delete mode 100644 build/tests/FatalErrorChecker/ARM9/src/main.c delete mode 100644 build/tests/FatalErrorChecker/Makefile delete mode 100644 build/tests/FatalErrorChecker/banner/Makefile delete mode 100644 build/tests/FatalErrorChecker/banner/banner_v3.bsf delete mode 100644 build/tests/FatalErrorChecker/banner/icon/gameIcon.bmp delete mode 100644 build/tests/FatalErrorMaker/ARM9/Makefile delete mode 100644 build/tests/FatalErrorMaker/ARM9/Makefile.0 delete mode 100644 build/tests/FatalErrorMaker/ARM9/Makefile.1 delete mode 100644 build/tests/FatalErrorMaker/ARM9/main.rsf delete mode 100644 build/tests/FatalErrorMaker/ARM9/src/fatalErrorMaker.c delete mode 100644 build/tests/FatalErrorMaker/ARM9/src/fatalErrorMaker.h delete mode 100644 build/tests/FatalErrorMaker/ARM9/src/main.c delete mode 100644 build/tests/FatalErrorMaker/Makefile delete mode 100644 build/tests/FatalErrorMaker/about.txt delete mode 100644 build/tests/FatalErrorMaker/banner/Makefile delete mode 100644 build/tests/FatalErrorMaker/banner/Makefile.012A delete mode 100644 build/tests/FatalErrorMaker/banner/Makefile.0G4A delete mode 100644 build/tests/FatalErrorMaker/banner/banner.bnr delete mode 100644 build/tests/FatalErrorMaker/banner/banner012A_v3.bsf delete mode 100644 build/tests/FatalErrorMaker/banner/banner0G4A_v3.bsf delete mode 100644 build/tests/FatalErrorMaker/banner/bannerOption.txt delete mode 100644 build/tests/FatalErrorMaker/banner/banner_v3.bsf delete mode 100644 build/tests/FatalErrorMaker/banner/icon/012A.bmp delete mode 100644 build/tests/FatalErrorMaker/banner/icon/0G4A.bmp delete mode 100644 build/tests/FatalErrorMaker/banner/icon/gameIcon.bmp delete mode 100644 build/tests/FileRecoveryTest/Makefile delete mode 100644 build/tests/FileRecoveryTest/main.rsf delete mode 100644 build/tests/FileRecoveryTest/src/main.c delete mode 100644 build/tests/HashCheckTemplate/ARM7/Makefile delete mode 100644 build/tests/HashCheckTemplate/ARM7/Makefile_hyb delete mode 100644 build/tests/HashCheckTemplate/ARM7/Makefile_ltd delete mode 100644 build/tests/HashCheckTemplate/ARM7/Makefile_ltd_offset delete mode 100644 build/tests/HashCheckTemplate/ARM7/mongoose_hct.lsf delete mode 100644 build/tests/HashCheckTemplate/ARM7/racoon_hct.lsf delete mode 100644 build/tests/HashCheckTemplate/ARM9/Makefile delete mode 100644 build/tests/HashCheckTemplate/ARM9/Makefile_hyb delete mode 100644 build/tests/HashCheckTemplate/ARM9/Makefile_ltd delete mode 100644 build/tests/HashCheckTemplate/ARM9/main.rsf delete mode 100644 build/tests/HashCheckTemplate/ARM9/src/HashCheckTemplate.c delete mode 100644 build/tests/HashCheckTemplate/ARM9/src/HashCheckTemplate.h delete mode 100644 build/tests/HashCheckTemplate/ARM9/src/main.c delete mode 100644 build/tests/HashCheckTemplate/Makefile delete mode 100644 build/tests/HashCheckTemplate/banner/Makefile delete mode 100644 build/tests/HashCheckTemplate/banner/banner_v3.bsf delete mode 100644 build/tests/HashCheckTemplate/banner/icon/gameIcon.bmp delete mode 100644 build/tests/HashCheckTemplate/crt/ARM7/Makefile delete mode 100644 build/tests/HashCheckTemplate/crt/ARM7/Makefile_hyb delete mode 100644 build/tests/HashCheckTemplate/crt/ARM7/Makefile_ltd delete mode 100644 build/tests/HashCheckTemplate/crt/ARM7/src/crt0_hct.HYB.c delete mode 100644 build/tests/HashCheckTemplate/crt/ARM7/src/crt0_hct.LTD.c delete mode 100644 build/tests/HashCheckTemplate/crt/Makefile delete mode 100644 build/tests/HashCheckTemplate/crt/common/include/boot_sync.h delete mode 100644 build/tests/HashCheckTemplate/memo.txt delete mode 100644 build/tests/HashCheckTemplate/test_roms/rombreak.bat delete mode 100644 build/tests/HashCheckTemplate/test_roms/破壊ずみROMの作り方.txt delete mode 100644 build/tests/Launcher_sdlog/Makefile delete mode 100644 build/tests/Launcher_sdlog/jackal.TWL/Makefile delete mode 100755 build/tests/Launcher_sdlog/jackal.TWL/make_lsf.pl delete mode 100644 build/tests/Launcher_sdlog/readme.txt delete mode 100644 build/tests/Launcher_sdlog/scripts/Makefile delete mode 100755 build/tests/Launcher_sdlog/scripts/sdlog_main_c.pl delete mode 100755 build/tests/Launcher_sdlog/scripts/sdlog_makefile.pl delete mode 100644 build/tests/Launcher_sdlog/sdlog/ARM7.TWL/Makefile delete mode 100644 build/tests/Launcher_sdlog/sdlog/ARM7.TWL/src/os_printf.c delete mode 100644 build/tests/Launcher_sdlog/sdlog/ARM9.TWL/Makefile delete mode 100644 build/tests/Launcher_sdlog/sdlog/ARM9.TWL/include/sd_log_wrapper.h delete mode 100644 build/tests/Launcher_sdlog/sdlog/ARM9.TWL/src/sd_log_wrapper.c delete mode 100644 build/tests/Launcher_sdlog/sdlog/Makefile delete mode 100644 build/tests/Makefile delete mode 100644 build/tests/NotLaunchRom/Makefile delete mode 100644 build/tests/NotLaunchRom/Makefile.0 delete mode 100644 build/tests/NotLaunchRom/Makefile.1 delete mode 100644 build/tests/NotLaunchRom/Makefile.2 delete mode 100644 build/tests/NotLaunchRom/include/data.h delete mode 100644 build/tests/NotLaunchRom/secure.rsf delete mode 100644 build/tests/NotLaunchRom/src/data.c delete mode 100644 build/tests/NotLaunchRom/src/main.c delete mode 100644 build/tests/NotLaunchRom/system.rsf delete mode 100644 build/tests/NotLaunchRom/user.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.0 delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.1 delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.2 delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.3 delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.4 delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.5 delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.6 delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.7 delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.8 delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.9 delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.a delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.b delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.c delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.h delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.i delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.j delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.k delete mode 100644 build/tests/RomTypeTest/ARM9/main0.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/main1.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/main2.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/main3.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/main4.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/main5.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/main6.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/main7.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/main8.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/main9.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/maina.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/mainb.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/mainc.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/mainh.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/maini.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/mainj.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/maink.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/src/RomTypeTest.c delete mode 100644 build/tests/RomTypeTest/ARM9/src/RomTypeTest.h delete mode 100644 build/tests/RomTypeTest/ARM9/src/main.c delete mode 100644 build/tests/RomTypeTest/Makefile delete mode 100644 build/tests/RomTypeTest/banner/Makefile delete mode 100644 build/tests/RomTypeTest/banner/Makefile.0 delete mode 100644 build/tests/RomTypeTest/banner/Makefile.1 delete mode 100644 build/tests/RomTypeTest/banner/Makefile.2 delete mode 100644 build/tests/RomTypeTest/banner/Makefile.3 delete mode 100644 build/tests/RomTypeTest/banner/Makefile.4 delete mode 100644 build/tests/RomTypeTest/banner/Makefile.5 delete mode 100644 build/tests/RomTypeTest/banner/Makefile.6 delete mode 100644 build/tests/RomTypeTest/banner/Makefile.7 delete mode 100644 build/tests/RomTypeTest/banner/Makefile.8 delete mode 100644 build/tests/RomTypeTest/banner/Makefile.9 delete mode 100644 build/tests/RomTypeTest/banner/Makefile.a delete mode 100644 build/tests/RomTypeTest/banner/Makefile.b delete mode 100644 build/tests/RomTypeTest/banner/Makefile.c delete mode 100644 build/tests/RomTypeTest/banner/Makefile.d delete mode 100644 build/tests/RomTypeTest/banner/Makefile.e delete mode 100644 build/tests/RomTypeTest/banner/Makefile.f delete mode 100644 build/tests/RomTypeTest/banner/Makefile.g delete mode 100644 build/tests/RomTypeTest/banner/Makefile.h delete mode 100644 build/tests/RomTypeTest/banner/Makefile.i delete mode 100644 build/tests/RomTypeTest/banner/Makefile.j delete mode 100644 build/tests/RomTypeTest/banner/Makefile.k delete mode 100644 build/tests/RomTypeTest/banner/banner_v3.bsf delete mode 100644 build/tests/RomTypeTest/banner/icon/gameIcon.bmp delete mode 100644 build/tests/RomTypeTest/banner/icon/msk_pictchat_icon.bin delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_0_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_1_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_2_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_3_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_4_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_5_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_6_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_7_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_8_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_9_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_a_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_b_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_c_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_d_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_e_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_f_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_g_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_h_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_i_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_j_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_k_v3.TWL.bsf delete mode 100644 build/tests/Shared2File/Makefile delete mode 100644 build/tests/Shared2File/main.rsf delete mode 100644 build/tests/Shared2File/src/main.c delete mode 100644 build/tests/SimpleBenchmark/ARM9/ARM9-TS.lcf.template delete mode 100644 build/tests/SimpleBenchmark/ARM9/ARM9-TS.lsf delete mode 100644 build/tests/SimpleBenchmark/ARM9/Makefile delete mode 100644 build/tests/SimpleBenchmark/ARM9/Makefile.0 delete mode 100644 build/tests/SimpleBenchmark/ARM9/Makefile.1 delete mode 100644 build/tests/SimpleBenchmark/ARM9/main0.rsf delete mode 100644 build/tests/SimpleBenchmark/ARM9/main1.rsf delete mode 100644 build/tests/SimpleBenchmark/ARM9/src/SimpleBenchmark.c delete mode 100644 build/tests/SimpleBenchmark/ARM9/src/SimpleBenchmark.h delete mode 100644 build/tests/SimpleBenchmark/ARM9/src/main.c delete mode 100644 build/tests/SimpleBenchmark/Makefile delete mode 100644 build/tests/SimpleBenchmark/banner/Makefile delete mode 100644 build/tests/SimpleBenchmark/banner/Makefile.0 delete mode 100644 build/tests/SimpleBenchmark/banner/Makefile.1 delete mode 100644 build/tests/SimpleBenchmark/banner/banner_v3.bsf delete mode 100644 build/tests/SimpleBenchmark/banner/icon/gameIcon.bmp delete mode 100644 build/tests/SimpleBenchmark/banner/icon/msk_pictchat_icon.bin delete mode 100644 build/tests/SimpleBenchmark/banner/test-utf16_0_v3.TWL.bsf delete mode 100644 build/tests/SimpleBenchmark/banner/test-utf16_1_v3.TWL.bsf delete mode 100644 build/tests/TestComponent/ARM7.TWL/Makefile delete mode 100644 build/tests/TestComponent/ARM7.TWL/armadillo.lsf delete mode 100644 build/tests/TestComponent/ARM7.TWL/include/kami_pxi.h delete mode 100644 build/tests/TestComponent/ARM7.TWL/src/crt0.SCFG_NOLOCK.c delete mode 100644 build/tests/TestComponent/ARM7.TWL/src/kami_pxi.c delete mode 100644 build/tests/TestComponent/ARM7.TWL/src/main.c delete mode 100644 build/tests/TestComponent/ARM9.TWL/ARM9-TS.lsf delete mode 100644 build/tests/TestComponent/ARM9.TWL/Makefile delete mode 100644 build/tests/TestComponent/ARM9.TWL/include/graphics.h delete mode 100644 build/tests/TestComponent/ARM9.TWL/include/kami_font.h delete mode 100644 build/tests/TestComponent/ARM9.TWL/include/kami_pxi.h delete mode 100644 build/tests/TestComponent/ARM9.TWL/include/keypad.h delete mode 100644 build/tests/TestComponent/ARM9.TWL/main.rsf delete mode 100644 build/tests/TestComponent/ARM9.TWL/src/font_data.c delete mode 100644 build/tests/TestComponent/ARM9.TWL/src/graphics.c delete mode 100644 build/tests/TestComponent/ARM9.TWL/src/kami_font.c delete mode 100644 build/tests/TestComponent/ARM9.TWL/src/kami_pxi.c delete mode 100644 build/tests/TestComponent/ARM9.TWL/src/keypad.c delete mode 100644 build/tests/TestComponent/ARM9.TWL/src/main.c delete mode 100644 build/tests/TestComponent/Makefile delete mode 100644 build/tests/TestComponent/banner/Makefile delete mode 100644 build/tests/TestComponent/banner/banner_v3.bsf delete mode 100644 build/tests/TestComponent/banner/icon/gameIcon.bmp delete mode 100644 build/tests/TestComponent/common/include/fifo.h delete mode 100644 build/tests/TestMaker/Makefile delete mode 100644 build/tests/TestMaker/banner/dummy/Cell/Cell0.nce delete mode 100644 build/tests/TestMaker/banner/dummy/Character/banner_anm_idea03_ALL.ncg delete mode 100644 build/tests/TestMaker/banner/dummy/ColorPalette/banner_anm_idea03.ncl delete mode 100644 build/tests/TestMaker/banner/dummy/Preview/Preview0.npv delete mode 100644 build/tests/TestMaker/banner/dummy/Scene/Scene0.nsn delete mode 100644 build/tests/TestMaker/banner/dummy/workset.ini delete mode 100644 build/tests/TestMaker/banner/eula/Cell/Cell0.nce delete mode 100644 build/tests/TestMaker/banner/eula/Character/eula.ncg delete mode 100644 build/tests/TestMaker/banner/eula/ColorPalette/eula.ncl delete mode 100644 build/tests/TestMaker/banner/eula/Preview/Preview0.npv delete mode 100644 build/tests/TestMaker/banner/eula/Scene/Scene0.nsn delete mode 100644 build/tests/TestMaker/banner/eula/workset.ini delete mode 100644 build/tests/TestMaker/banner/font/Cell/Cell0.nce delete mode 100644 build/tests/TestMaker/banner/font/Character/font.ncg delete mode 100644 build/tests/TestMaker/banner/font/ColorPalette/font.ncl delete mode 100644 build/tests/TestMaker/banner/font/Preview/Preview0.npv delete mode 100644 build/tests/TestMaker/banner/font/Scene/Scene0.nsn delete mode 100644 build/tests/TestMaker/banner/font/workset.ini delete mode 100644 build/tests/TestMaker/banner/parental/Cell/Cell0.nce delete mode 100644 build/tests/TestMaker/banner/parental/Character/parental_control.ncg delete mode 100644 build/tests/TestMaker/banner/parental/ColorPalette/parental_control.ncl delete mode 100644 build/tests/TestMaker/banner/parental/Preview/Preview0.npv delete mode 100644 build/tests/TestMaker/banner/parental/Scene/Scene0.nsn delete mode 100644 build/tests/TestMaker/banner/parental/workset.ini delete mode 100644 build/tests/TestMaker/banner/shop/Cell/Cell0.nce delete mode 100644 build/tests/TestMaker/banner/shop/Character/banner_anm_idea03_ALL.ncg delete mode 100644 build/tests/TestMaker/banner/shop/ColorPalette/banner_anm_idea03.ncl delete mode 100644 build/tests/TestMaker/banner/shop/Preview/Preview0.npv delete mode 100644 build/tests/TestMaker/banner/shop/Scene/Scene0.nsn delete mode 100644 build/tests/TestMaker/banner/shop/workset.ini delete mode 100644 build/tests/TestMaker/config/ROM-TS_nand_forPARENTAL.rsf delete mode 100644 build/tests/TestMaker/config/romparam_forBoottest.yaml delete mode 100644 build/tests/TestMaker/config/romparam_forCLStest.yaml delete mode 100644 build/tests/TestMaker/config/romparam_forEULAtest.yaml delete mode 100644 build/tests/TestMaker/config/romparam_forFATFSPermissiontest.yaml delete mode 100644 build/tests/TestMaker/config/romparam_forShoptest.yaml delete mode 100644 build/tests/TestMaker/config/twl_parentalcontrol_spec.yaml delete mode 100644 build/tests/TestMaker/doc/20080617_DS_fontcodeList_NOE_FIANL.xls delete mode 100644 build/tests/TestMaker/doc/twl_cls_checksheet_20080508.xls delete mode 100644 build/tests/TestMaker/doc/twl_parentalcontrol_spec_20080704.xls delete mode 100644 build/tests/TestMaker/readme.txt delete mode 100644 build/tests/TestMaker/romparam.yaml delete mode 100644 build/tests/TestMaker/rsf/ROM-TS_custom.rsf delete mode 100644 build/tests/TestMaker/script/clsdir.py delete mode 100644 build/tests/TestMaker/script/config.py delete mode 100644 build/tests/TestMaker/script/fontcode.py delete mode 100644 build/tests/TestMaker/script/parentalcontrol.py delete mode 100644 build/tests/TestMaker/script/rename_eula.py delete mode 100644 build/tests/TestMaker/script/rename_font.py delete mode 100644 build/tests/TestMaker/script/rename_parental.py delete mode 100644 build/tests/UjiPackage/Makefile delete mode 100644 build/tests/UjiPackage/readme.txt delete mode 100644 build/tests/WDSTest/Makefile delete mode 100644 build/tests/WDSTest/src/main.c delete mode 100644 build/tests/WDSWrapperTest/Makefile delete mode 100644 build/tests/WDSWrapperTest/src/main.c delete mode 100644 build/tests/WirelessChecker/@ delete mode 100644 build/tests/WirelessChecker/Makefile delete mode 100644 build/tests/WirelessChecker/banner/000A_WLCK.bmp delete mode 100644 build/tests/WirelessChecker/banner/000A_WLCK.bsf delete mode 100644 build/tests/WirelessChecker/banner/Makefile delete mode 100644 build/tests/WirelessChecker/components/Makefile delete mode 100644 build/tests/WirelessChecker/components/racoon_wckr/Makefile delete mode 100755 build/tests/WirelessChecker/components/racoon_wckr/make_lsf.pl delete mode 100644 build/tests/WirelessChecker/libraries/Makefile delete mode 100644 build/tests/WirelessChecker/libraries/nwm/ARM7/Makefile delete mode 100644 build/tests/WirelessChecker/libraries/nwm/ARM9/Makefile delete mode 100644 build/tests/WirelessChecker/libraries/nwm/Makefile delete mode 100644 build/tests/WirelessChecker/libraries/nwm/scripts/Makefile delete mode 100755 build/tests/WirelessChecker/libraries/nwm/scripts/make_nwm_fw_wrack.pl delete mode 100644 build/tests/WirelessChecker/readme.txt delete mode 100644 build/tests/WirelessChecker/resources/ds_ipl10.bmp delete mode 100644 build/tests/WirelessChecker/rsf/Makefile delete mode 100755 build/tests/WirelessChecker/rsf/make_rsf.pl delete mode 100644 build/tests/WirelessChecker/src/frame.cpp delete mode 100644 build/tests/WirelessChecker/src/frame.h delete mode 100644 build/tests/WirelessChecker/src/main.cpp delete mode 100644 build/tests/WirelessChecker/src/test.cpp delete mode 100644 build/tests/WirelessChecker/src/test.h delete mode 100644 build/tests/WirelessChecker/src/test_fatal.cpp delete mode 100644 build/tests/WirelessChecker/src/test_fatal.h delete mode 100644 build/tests/WirelessChecker/src/test_nwm.cpp delete mode 100644 build/tests/WirelessChecker/src/test_nwm.h delete mode 100644 build/tests/WirelessChecker/src/test_recovery.cpp delete mode 100644 build/tests/WirelessChecker/src/test_recovery.h delete mode 100644 build/tests/WirelessChecker/src/test_wm.cpp delete mode 100644 build/tests/WirelessChecker/src/test_wm.h delete mode 100644 build/tests/WirelessChecker/src/util/canvas.cpp delete mode 100644 build/tests/WirelessChecker/src/util/canvas.h delete mode 100644 build/tests/WirelessChecker/src/util/memory.cpp delete mode 100644 build/tests/WirelessChecker/src/util/memory.h delete mode 100644 build/tests/WirelessChecker/src/util/util.cpp delete mode 100644 build/tests/WirelessChecker/src/util/util.h delete mode 100644 build/tests/WirelessChecker/src/util/wprintf.cpp delete mode 100644 build/tests/WirelessChecker/src/util/wprintf.h delete mode 100644 build/tests/build4WLDev/Makefile delete mode 100644 build/tests/build4WLDev/Makefile_environment delete mode 100644 build/tests/build4WLDev/Makefile_old delete mode 100644 build/tests/build4WLDev/readme.txt delete mode 100644 build/tests/build4WLDev/scripts/Makefile delete mode 100644 build/tests/build4WLDev/scripts/Makefile_old delete mode 100755 build/tests/build4WLDev/scripts/launcher_MachineSetting_c.pl delete mode 100755 build/tests/build4WLDev/scripts/launcher_fake_macaddress.pl delete mode 100755 build/tests/build4WLDev/scripts/launcher_loadWlanFirm_c.pl delete mode 100755 build/tests/build4WLDev/scripts/launcher_makefile.pl delete mode 100755 build/tests/build4WLDev/scripts/launcher_makefile_region.pl delete mode 100755 build/tests/build4WLDev/scripts/systemupdater_source.pl delete mode 100644 build/tests/compressSharedFontLoad/README.txt delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/Makefile delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/Makefile delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/_ delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/common.h delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/compress.c delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/compress.h delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/file.c delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/file.h delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/main.c delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/genFontTable.plx delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/makeboot.bat delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/@ delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/Makefile delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/Makefile.BAK delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/gcc/Makefile delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/gcc/Makefile.BAK delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/multipleCompLib.c delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/multipleCompLib.h delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/nitroCompLib.c delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/nitroCompLib.h delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_main.c delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_test.c delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_test.h delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/rangeCoder.c delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/rangeCoder.h delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/types.h delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/vc++/ntcompress.sln delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/vc++/ntcompress.vcproj delete mode 100644 build/tests/compressSharedFontLoad/testLoadSpeed/Makefile delete mode 100644 build/tests/compressSharedFontLoad/testLoadSpeed/ROM-TS_nand.rsf delete mode 100644 build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/Makefile delete mode 100644 build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/os_sharedFont.c delete mode 100644 build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/sharedFont.h delete mode 100644 build/tests/compressSharedFontLoad/testLoadSpeed/src/loadSharedFont.c delete mode 100644 build/tests/compressSharedFontLoad/testLoadSpeed/src/loadSharedFont.h delete mode 100644 build/tests/compressSharedFontLoad/testLoadSpeed/src/main.c delete mode 100644 build/tests/yuv2rgb/Makefile delete mode 100644 build/tests/yuv2rgb/data/camera_shutter.dat delete mode 100644 build/tests/yuv2rgb/data/camera_shutter_MONO.dat delete mode 100644 build/tests/yuv2rgb/data/wheel.dat delete mode 100644 build/tests/yuv2rgb/include/const.h delete mode 100644 build/tests/yuv2rgb/include/menuCameraManager.h delete mode 100644 build/tests/yuv2rgb/include/new.h delete mode 100644 build/tests/yuv2rgb/include/snd_data.h delete mode 100644 build/tests/yuv2rgb/include/yuv2rgb.h delete mode 100644 build/tests/yuv2rgb/readme.txt delete mode 100644 build/tests/yuv2rgb/redipl_defs_autogen_by_uig delete mode 100644 build/tests/yuv2rgb/src/cpu_yuv2rgb.c delete mode 100644 build/tests/yuv2rgb/src/dsp_yuv2rgb.c delete mode 100644 build/tests/yuv2rgb/src/mainy.cpp delete mode 100644 build/tests/yuv2rgb/src/menuCameraManager.cpp delete mode 100644 build/tests/yuv2rgb/src/menuIrqHandler.c delete mode 100644 build/tests/yuv2rgb/src/menuIrqHandler.h delete mode 100644 build/tests/yuv2rgb/src/new.cpp delete mode 100644 build/tests/yuv2rgb/src/snd_data.c delete mode 100644 build/tests/yuv2rgb/yuv2rgb.rsf.template diff --git a/build/tests/AppVersionViewer/ARM9/Makefile b/build/tests/AppVersionViewer/ARM9/Makefile deleted file mode 100644 index 5e20a362..00000000 --- a/build/tests/AppVersionViewer/ARM9/Makefile +++ /dev/null @@ -1,150 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 0 -IS_SECURE_APP = TRUE -IS_NAND_APP = FALSE -NAND_ACCESS = TRUE -AES_SLOT = FALSE -INVISIBLE_SCFG = TRUE -GAMECODE = 0BZA -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=N -DVERSION_VIEWER=TRUE -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCDIR = $(DISP_INFO)/ARM9/src - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c \ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_NAME = AppVersionViewer -TARGET_BIN = $(TARGET_NAME).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE) -OBJDIR = ./obj/$(TWL_BUILDTYPE) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = $(DISP_INFO)/ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/AppVersionViewer/ARM9/main.rsf b/build/tests/AppVersionViewer/ARM9/main.rsf deleted file mode 100644 index 36a4c3fe..00000000 --- a/build/tests/AppVersionViewer/ARM9/main.rsf +++ /dev/null @@ -1,248 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - - # TITLE NAME: Your product name within 12bytes - # - TitleName "DispInfo" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - MakerCode 01 - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - RomHeaderTemplate $(ROM_HEADER_TEMPLATE) - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile ./etc/myGameBanner.bnr - BannerFile ../banner/banner.bnr - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping MAP_TS_SCR - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # CommonClientKey: launcher deliver common client Key [TRUE/FALSE] - # - #CommonClientKey FALSE - - # - # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] - # - #HwAESSlotB FALSE - - # - # HwAESSlotC: launcher deliver HW AES slot C setting [TRUE/FALSE] - # - #HwAESSlotC FALSE - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess $(DISPINFO_SDACCESS) - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - #NANDAccess FALSE - NANDAccess $(DISPINFO_NANDACCESS) - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - LockSCFG $(DISPINFO_LOCKSCFG) - HwAESSlotA_SSLClientCert $(DISPINFO_AES) - DisableDebug TRUE - - ### - #### END -} - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - #Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType $(DISPINFO_APPTYPE) -# AppType SYSTEM - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard] - # - Media $(DISPINFO_MEDIA) -# Media NAND - # - # Data only title : [TRUE/FALSE] - # don't have to edit - ##DataOnly FALSE - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure $(DISPINFO_SECURE) -# Secure TRUE - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(DISPINFO_GAMECODE) - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile FALSE - -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR - -} diff --git a/build/tests/AppVersionViewer/banner/Makefile b/build/tests/AppVersionViewer/banner/Makefile deleted file mode 100644 index a6a3b396..00000000 --- a/build/tests/AppVersionViewer/banner/Makefile +++ /dev/null @@ -1,49 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/icon.bmp -BANNER_SPEC = banner_v3.bsf - -TARGETS = banner.bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/AppVersionViewer/banner/banner_v3.bsf b/build/tests/AppVersionViewer/banner/banner_v3.bsf deleted file mode 100644 index d3ede19aac9fe1d430c0c3ab0defd20898766412..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 884 zcmc(eO>4qH5Qg8Y1^>fB&b1W5gSS>pwMdbsdS9brz%P>6;Gb8Y-Sy-txwH%n^YPB) zoy_d@66sxuVi`SqG5A({WTl*Fq9ay{6)V#gyR9chcXX)v8y&uD^rH<-3K*^LjEr_V z5h;l+U}#jqJ;N{Y_V}6CDV3H?LDXSq^op6}RXt5K{MX6cbaQw)c9{<69eav1Y(>td4zvke-|Hfn$k*A=wkI&%LC v3NGIID_XLRh0f>=e#s8{dO<37m4jNU19D5o>X&`EYqZ2t@;h*@W9WVZ-vxd7 diff --git a/build/tests/AppVersionViewer/banner/icon/icon.bmp b/build/tests/AppVersionViewer/banner/icon/icon.bmp deleted file mode 100644 index b2ddda22a01af1e882ca8bc549e33043518ca915..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb`D!41PO2t{et0XjmDoul`zle0(j07xu^L?5Jz?OQ8_7|hQH^Tq4EU8QUzKJmxb zFLEPW?Y_V!!jabYi%5z$>Agcl9f`;c=gVIN{nt!Q!;LE}dp&caJA~q9773&H!q8Rc z#jA#bts1K(-#N<=!T9kS`jB_v)HCym)nn#U-e@?OpObwNqkP5TY;T@d3mo$hmx`wL LrM`BTi$2LdA||>E diff --git a/build/tests/CalcHMAC_forBroadOn/Makefile b/build/tests/CalcHMAC_forBroadOn/Makefile deleted file mode 100644 index 755280bf..00000000 --- a/build/tests/CalcHMAC_forBroadOn/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CalcHMAC_forBroadOn -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: #$ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -TARGET_PLATFORM := TWL - -SRCS = CalcHMAC_forBroadOn.c - -TARGET_BIN = CalcHMAC_forBroadOn.srl - -TITLEID_LO = 0BRA - -ROM_SPEC = main.rsf - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -LINCLUDES = $(ROOT)/build/libraries/lcfg/ARM9.TWL/include -LLIBRARIES = liblcfg$(TWL_LIBSUFFIX).a - -ifneq ($(TWL_IPL_RED_PRIVATE_ROOT),) -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo.der' -endif - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \ - -DPRIVKEY_PATH='$(TWL_IPL_RED_PRIVATE_ROOT)/keys/rsa' \ - -DCARD_REGION='$(CARD_REGION)' - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/CalcHMAC_forBroadOn/main.rsf b/build/tests/CalcHMAC_forBroadOn/main.rsf deleted file mode 100644 index e35eb49e..00000000 --- a/build/tests/CalcHMAC_forBroadOn/main.rsf +++ /dev/null @@ -1,171 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - RomVersion 2 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 2G - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - NANDAccess TRUE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(PRIVKEY_PATH) - Root /key - File $(HWINFO_PRIVKEY) -} diff --git a/build/tests/CalcHMAC_forBroadOn/src/CalcHMAC_forBroadOn.c b/build/tests/CalcHMAC_forBroadOn/src/CalcHMAC_forBroadOn.c deleted file mode 100644 index 9019ea4e..00000000 --- a/build/tests/CalcHMAC_forBroadOn/src/CalcHMAC_forBroadOn.c +++ /dev/null @@ -1,368 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#include -#include -#include -#include -#include -#include -#include -#include "TWLStoreFile.h" - -// define data------------------------------------------------------------------ -#define HWINFO_PRIVKEY_PATH "rom:key/private_HWInfo.der" // ip閧 -#define RSA_KEY_LENGTH_1024 RSA_KEY_LENGTH -#define HWINFO_S_BODY_SIZE 0x1C - -#define PATH_K00A317_JP "sdmc:/hwinfo_s/HWInfo_S.K00A317_JP.dat" -#define PATH_K00A317_US "sdmc:/hwinfo_s/HWInfo_S.K00A317_US.dat" -#define PATH_K00A317_EU "sdmc:/hwinfo_s/HWInfo_S.K00A317_EU.dat" -#define PATH_K00A317_AU "sdmc:/hwinfo_s/HWInfo_S.K00A317_AU.dat" -#define PATH_K00A319_JP "sdmc:/hwinfo_s/HWInfo_S.K00A319_JP.dat" -#define PATH_K00A319_US "sdmc:/hwinfo_s/HWInfo_S.K00A319_US.dat" -#define PATH_K00A319_EU "sdmc:/hwinfo_s/HWInfo_S.K00A319_EU.dat" -#define PATH_K00A319_AU "sdmc:/hwinfo_s/HWInfo_S.K00A319_AU.dat" - -//------------------------------------------------------------------------------ -extern s32 CRYPTO_RSA_Sign_custom(CRYPTORSASignContext *context, CRYPTORSASignParam *param); - -//------------------------------------------------------------------------------ -static u8 s_privKey[ 4096 ] ATTRIBUTE_ALIGN(32); -static TSFHeader s_header; - -/*----------------------------------------------------------------------------*/ -static const u64 FuseID_K00A317 = 0x08a1080105112134LLU; -static const u64 FuseID_K00A319 = 0x08a1080105112122LLU; - -/*----------------------------------------------------------------------------*/ -static const u8 HWINFO_S_K00A317_JP[HWINFO_S_BODY_SIZE] = -{ - 0x01, 0x00, 0x00, 0x00, /* validLanguageBitmap */ - 0x00, 0x00, 0x00, 0x00, /* flags, rsv */ - 0x00, /* region */ - 'T', 'J', 'N', '5', '6', '3', '2', '0', - '4', '0', '2', '0', 0x00, 'K', 0x00, /* serialNo */ - 'J', 'A', 'N', 'H' /* launcherTitleID_Lo */ -}; - -static const u8 HWINFO_S_K00A317_US[HWINFO_S_BODY_SIZE] = -{ - 0x26, 0x00, 0x00, 0x00, /* validLanguageBitmap */ - 0x00, 0x00, 0x00, 0x00, /* flags, rsv */ - 0x01, /* region */ - 'T', 'N', '5', '6', '3', '2', '0', '4', - '0', '2', '0', 0x00, 0x00, 'K', 0x00, /* serialNo */ - 'E', 'A', 'N', 'H' /* launcherTitleID_Lo */ -}; - -static const u8 HWINFO_S_K00A317_EU[HWINFO_S_BODY_SIZE] = -{ - 0x3E, 0x00, 0x00, 0x00, /* validLanguageBitmap */ - 0x00, 0x00, 0x00, 0x00, /* flags, rsv */ - 0x02, /* region */ - 'T', 'E', 'N', '5', '6', '3', '2', '0', - '4', '0', '2', '0', 0x00, 'K', 0x00, /* serialNo */ - 'P', 'A', 'N', 'H' /* launcherTitleID_Lo */ -}; - -static const u8 HWINFO_S_K00A317_AU[HWINFO_S_BODY_SIZE] = -{ - 0x02, 0x00, 0x00, 0x00, /* validLanguageBitmap */ - 0x00, 0x00, 0x00, 0x00, /* flags, rsv */ - 0x03, /* region */ - 'T', 'A', 'N', '5', '6', '3', '2', '0', - '4', '0', '2', '0', 0x00, 'K', 0x00, /* serialNo */ - 'U', 'A', 'N', 'H' /* launcherTitleID_Lo */ -}; - - -/*----------------------------------------------------------------------------*/ -static const u8 HWINFO_S_K00A319_JP[HWINFO_S_BODY_SIZE] = -{ - 0x01, 0x00, 0x00, 0x00, /* validLanguageBitmap */ - 0x00, 0x00, 0x00, 0x00, /* flags, rsv */ - 0x00, /* region */ - 'T', 'J', 'N', '3', '5', '3', '8', '9', - '0', '3', '3', '4', 0x00, 'K', 0x00, /* serialNo */ - 'J', 'A', 'N', 'H' /* launcherTitleID_Lo */ -}; - -static const u8 HWINFO_S_K00A319_US[HWINFO_S_BODY_SIZE] = -{ - 0x26, 0x00, 0x00, 0x00, /* validLanguageBitmap */ - 0x00, 0x00, 0x00, 0x00, /* flags, rsv */ - 0x01, /* region */ - 'T', 'N', '3', '5', '3', '8', '9', '0', - '3', '3', '4', 0x00, 0x00, 'K', 0x00, /* serialNo */ - 'E', 'A', 'N', 'H' /* launcherTitleID_Lo */ -}; - -static const u8 HWINFO_S_K00A319_EU[HWINFO_S_BODY_SIZE] = -{ - 0x3E, 0x00, 0x00, 0x00, /* validLanguageBitmap */ - 0x00, 0x00, 0x00, 0x00, /* flags, rsv */ - 0x02, /* region */ - 'T', 'E', 'N', '3', '5', '3', '8', '9', - '0', '3', '3', '4', 0x00, 'K', 0x00, /* serialNo */ - 'P', 'A', 'N', 'H' /* launcherTitleID_Lo */ -}; - -static const u8 HWINFO_S_K00A319_AU[HWINFO_S_BODY_SIZE] = -{ - 0x02, 0x00, 0x00, 0x00, /* validLanguageBitmap */ - 0x00, 0x00, 0x00, 0x00, /* flags, rsv */ - 0x03, /* region */ - 'T', 'A', 'N', '3', '5', '3', '8', '9', - '0', '3', '3', '4', 0x00, 'K', 0x00, /* serialNo */ - 'U', 'A', 'N', 'H' /* launcherTitleID_Lo */ -}; - -//================================================================================ - -static void CalcHWSecureInfoHMAC( void *pDstHMAC, const void* body, u64 fuseID ) -{ - u8 key[SVC_SHA1_DIGEST_SIZE]; - int i; - SVC_CalcSHA1(key, &fuseID, sizeof(u64)); - SVC_CalcHMACSHA1( pDstHMAC, body, HWINFO_S_BODY_SIZE, key, SVC_SHA1_DIGEST_SIZE); - - OS_TPrintf( "key : " ); - for( i = 0; i < SVC_SHA1_DIGEST_SIZE; i++ ) { - OS_TPrintf( "%02x", key[ i ] ); - } - OS_TPrintf( "\n" ); - OS_TPrintf( "hmac: " ); - for( i = 0; i < SVC_SHA1_DIGEST_SIZE; i++ ) { - OS_TPrintf( "%02x", ((u8 *)pDstHMAC)[ i ] ); - } - OS_TPrintf( "\n" ); - - return; -} - -// ZoiBERGR[hȂj -static BOOL CalcSignature( void *pDstSign, const void *pSrc, u32 len, const u8 *pPrivKeyDER, u32 keyFileLen, u32 keyLen ) -{ - CRYPTORSASignContext context; - CRYPTORSASignInitParam initParam; - CRYPTORSASignParam param; - int result_len; - - initParam.key = (void*)pPrivKeyDER; - initParam.key_len = keyFileLen; - if( CRYPTO_RSA_SignInit(&context, &initParam) != 0 ) { - return FALSE; - } - - param.in = (void *)pSrc; - param.in_len = len; - param.out = pDstSign; - param.out_size = keyLen; - - result_len = CRYPTO_RSA_Sign_custom(&context, ¶m); - if( result_len != keyLen ) { - return FALSE; - } - - return CRYPTO_RSA_SignTerminate(&context) == 0 ? TRUE : FALSE; -} - - -static BOOL LCFGi_THW_WriteSecureInfoCustom( char *pPath, const LCFGTWLHWSecureInfo *pSrcInfo, u64 fuseID, const u8 *pPrivKeyDER, u32 keyFileLen ) -{ - TSFHeader header; - - // wb_ - MI_CpuClear8( &header, sizeof(TSFHeader) ); - header.version = LCFG_TWL_HWINFO_SECURE_VERSION; - header.bodyLength = sizeof( LCFGTWLHWSecureInfo ); - - // wb_Zo - { - u8 hmac_sha1[ SVC_SHA1_DIGEST_SIZE ]; - CalcHWSecureInfoHMAC( hmac_sha1, pSrcInfo, fuseID ); - if( !CalcSignature( (void *)header.digest.rsa, hmac_sha1, SVC_SHA1_DIGEST_SIZE, pPrivKeyDER, keyFileLen, RSA_KEY_LENGTH_1024 ) ) { - return FALSE; - } - } - - // t@C - (void)FS_CreateFileAuto( pPath, FS_PERMIT_R | FS_PERMIT_W ); - { -#define HWINFO_FILE_LEN ( 16 * 1024 ) - FSFile file[1]; - char *pBuffer = OS_Alloc( HWINFO_FILE_LEN ); - - if( !FS_OpenFileEx( file, pPath, FS_FILEMODE_RW ) ) { - return FALSE; - } - if( FS_SetFileLength( file, HWINFO_FILE_LEN ) != FS_RESULT_SUCCESS ) { - (void)FS_CloseFile( file ); - return FALSE; - } - if( pBuffer ) { - MI_CpuFillFast( pBuffer, 0xffffffff, HWINFO_FILE_LEN ); - (void)FS_WriteFile( file, pBuffer, HWINFO_FILE_LEN ); - } - (void)FS_CloseFile( file ); - } - - // Cg - if( !LCFGi_TSF_WriteFile( pPath, &header, (const void *)pSrcInfo, NULL ) ) { - return FALSE; - } - return TRUE; -} - - -// 閧̃[h -static BOOL ReadPrivateKey( void *pBuffer, u32 *pKeyFileLen, char *pPath ) -{ - BOOL retval = TRUE; - FSFile file; - - FS_InitFile( &file ); - if( !FS_OpenFileEx( &file, pPath, FS_FILEMODE_R ) ) - { - OS_TPrintf( "PrivateKey read failed.\n" ); - retval = FALSE; - }else { - *pKeyFileLen = FS_GetFileLength( &file ); - if( *pKeyFileLen > 0 ) { - if( FS_ReadFile( &file, pBuffer, (s32)*pKeyFileLen ) == *pKeyFileLen ) { - OS_TPrintf( "PrivateKey read succeeded.\n" ); - }else { - OS_TPrintf( "PrivateKey read failed.\n" ); - retval = FALSE; - } - } - FS_CloseFile( &file ); - } - return retval; -} - -/*---------------------------------------------------------------------------* - Name: InitAllocSystem - - Description: q[v쐬 OS_Alloc g悤ɂ܂B - - Arguments: ȂB - - Returns: ȂB - *---------------------------------------------------------------------------*/ -static void InitAllocSystem() -{ - void* newArenaLo; - OSHeapHandle hHeap; - - // CA[ĩAP[gVXe - newArenaLo = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetMainArenaLo(newArenaLo); - - // CA[iɃq[v쐬 - hHeap = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - OS_SetCurrentHeap(OS_ARENA_MAIN, hHeap); -} - -extern u64 g_HWInfoFuseROM; -extern char *g_pHwInfoPath; - - -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: main - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void TwlMain(void) -{ - BOOL retval; - u32 keyLen; - - OS_Init(); - InitAllocSystem(); - (void)OS_SetIrqMask(0); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - (void)OS_EnableIrqMask(OS_IE_SPFIFO_RECV); - FS_Init( FS_DMA_NOT_USE ); - CRYPTO_SetMemAllocator( OS_AllocFromMain, OS_FreeToMain, NULL ); - - OS_TPrintf("---- HMAC over HWInfo_S for PROD boards @ BroadOn ----\n"); - - if( !ReadPrivateKey( s_privKey, &keyLen, HWINFO_PRIVKEY_PATH ) ) { - OS_TPrintf("PrivateKey read failed.\n"); - }else { - OS_TPrintf("TS-Board: K00A317\n"); - retval = LCFGi_THW_WriteSecureInfoCustom( PATH_K00A317_JP, (const LCFGTWLHWSecureInfo *)HWINFO_S_K00A317_JP, FuseID_K00A317, s_privKey, keyLen ); - OS_TPrintf(" JP: %s\n", retval ? "succeeded" : "failed" ); - retval = LCFGi_THW_WriteSecureInfoCustom( PATH_K00A317_US, (const LCFGTWLHWSecureInfo *)HWINFO_S_K00A317_US, FuseID_K00A317, s_privKey, keyLen ); - OS_TPrintf(" US: %s\n", retval ? "succeeded" : "failed" ); - retval = LCFGi_THW_WriteSecureInfoCustom( PATH_K00A317_EU, (const LCFGTWLHWSecureInfo *)HWINFO_S_K00A317_EU, FuseID_K00A317, s_privKey, keyLen ); - OS_TPrintf(" EU: %s\n", retval ? "succeeded" : "failed" ); - retval = LCFGi_THW_WriteSecureInfoCustom( PATH_K00A317_AU, (const LCFGTWLHWSecureInfo *)HWINFO_S_K00A317_AU, FuseID_K00A317, s_privKey, keyLen ); - OS_TPrintf(" AU: %s\n", retval ? "succeeded" : "failed" ); - - OS_TPrintf("TS-Board: K00A319\n"); - retval = LCFGi_THW_WriteSecureInfoCustom( PATH_K00A319_JP, (const LCFGTWLHWSecureInfo *)HWINFO_S_K00A319_JP, FuseID_K00A319, s_privKey, keyLen ); - OS_TPrintf(" JP: %s\n", retval ? "succeeded" : "failed" ); - retval = LCFGi_THW_WriteSecureInfoCustom( PATH_K00A319_US, (const LCFGTWLHWSecureInfo *)HWINFO_S_K00A319_US, FuseID_K00A319, s_privKey, keyLen ); - OS_TPrintf(" US: %s\n", retval ? "succeeded" : "failed" ); - retval = LCFGi_THW_WriteSecureInfoCustom( PATH_K00A319_EU, (const LCFGTWLHWSecureInfo *)HWINFO_S_K00A319_EU, FuseID_K00A319, s_privKey, keyLen ); - OS_TPrintf(" EU: %s\n", retval ? "succeeded" : "failed" ); - retval = LCFGi_THW_WriteSecureInfoCustom( PATH_K00A319_AU, (const LCFGTWLHWSecureInfo *)HWINFO_S_K00A319_AU, FuseID_K00A319, s_privKey, keyLen ); - OS_TPrintf(" AU: %s\n", retval ? "succeeded" : "failed" ); - } -#if 0 - OS_TPrintf("---- Verify phase ----\n"); - { - OS_TPrintf("TS-Board: K00A317\n"); - g_HWInfoFuseROM = FuseID_K00A317; - g_pHwInfoPath = PATH_K00A317_JP; - retval = LCFG_ReadHWSecureInfo(); - OS_TPrintf(" JP: %s\n", retval ? "succeeded" : "failed" ); - g_pHwInfoPath = PATH_K00A317_US; - retval = LCFG_ReadHWSecureInfo(); - OS_TPrintf(" US: %s\n", retval ? "succeeded" : "failed" ); - g_pHwInfoPath = PATH_K00A317_EU; - retval = LCFG_ReadHWSecureInfo(); - OS_TPrintf(" EU: %s\n", retval ? "succeeded" : "failed" ); - g_pHwInfoPath = PATH_K00A317_AU; - retval = LCFG_ReadHWSecureInfo(); - OS_TPrintf(" AU: %s\n", retval ? "succeeded" : "failed" ); - - OS_TPrintf("TS-Board: K00A319\n"); - g_HWInfoFuseROM = FuseID_K00A319; - g_pHwInfoPath = PATH_K00A319_JP; - retval = LCFG_ReadHWSecureInfo(); - OS_TPrintf(" JP: %s\n", retval ? "succeeded" : "failed" ); - g_pHwInfoPath = PATH_K00A319_US; - retval = LCFG_ReadHWSecureInfo(); - OS_TPrintf(" US: %s\n", retval ? "succeeded" : "failed" ); - g_pHwInfoPath = PATH_K00A319_EU; - retval = LCFG_ReadHWSecureInfo(); - OS_TPrintf(" EU: %s\n", retval ? "succeeded" : "failed" ); - g_pHwInfoPath = PATH_K00A319_AU; - retval = LCFG_ReadHWSecureInfo(); - OS_TPrintf(" AU: %s\n", retval ? "succeeded" : "failed" ); - } -#endif - OS_Terminate(); -} diff --git a/build/tests/CheckCardAccess/Makefile b/build/tests/CheckCardAccess/Makefile deleted file mode 100644 index a9bcdf87..00000000 --- a/build/tests/CheckCardAccess/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CheckCardAccess -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = -SUBMAKES = Makefile.off Makefile.normal Makefile.game - -include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/commondefs - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/CheckCardAccess/Makefile.game b/build/tests/CheckCardAccess/Makefile.game deleted file mode 100644 index 336eafb1..00000000 --- a/build/tests/CheckCardAccess/Makefile.game +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CheckCardAccess -# File: Makefile.game -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: #$ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -#---------------------------------------------------------------------------- -TARGET_PLATFORM := TWL - -TARGET_NAME = finalize_check_game -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TARGET_BIN = $(TARGET_NAME).tad - -SRCS = ./src/main.c ./src/font.c - -MACRO_FLAGS += -DMY_TARGET_NAME=\"$(basename $(TARGET_BIN))\" - -#------------------------- - -ROM_SPEC = game_mode.rsf - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib - -#---------------------------------------------------------------------------- - -.PHONY: build_time - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/CheckCardAccess/Makefile.normal b/build/tests/CheckCardAccess/Makefile.normal deleted file mode 100644 index 267b70f0..00000000 --- a/build/tests/CheckCardAccess/Makefile.normal +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CheckCardAccess -# File: Makefile.normal -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: #$ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -#---------------------------------------------------------------------------- -TARGET_PLATFORM := TWL - -TARGET_NAME = finalize_check_normal -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TARGET_BIN = $(TARGET_NAME).tad - -SRCS = ./src/main.c ./src/font.c - -MACRO_FLAGS += -DMY_TARGET_NAME=\"$(basename $(TARGET_BIN))\" - -#------------------------- - -ROM_SPEC = normal_mode.rsf - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib - -#---------------------------------------------------------------------------- - -.PHONY: build_time - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/CheckCardAccess/Makefile.off b/build/tests/CheckCardAccess/Makefile.off deleted file mode 100644 index 4585c909..00000000 --- a/build/tests/CheckCardAccess/Makefile.off +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CheckCardAccess -# File: Makefile.off -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: #$ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -#---------------------------------------------------------------------------- -TARGET_PLATFORM := TWL - -TARGET_NAME = finalize_check_slotpoweroff -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TARGET_BIN = $(TARGET_NAME).tad - -SRCS = ./src/main.c ./src/font.c - -MACRO_FLAGS += -DMY_TARGET_NAME=\"$(basename $(TARGET_BIN))\" - -#------------------------- - -ROM_SPEC = slot_power_off.rsf - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib - -#---------------------------------------------------------------------------- - -.PHONY: build_time - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/CheckCardAccess/game_mode.rsf b/build/tests/CheckCardAccess/game_mode.rsf deleted file mode 100644 index f8d2dba8..00000000 --- a/build/tests/CheckCardAccess/game_mode.rsf +++ /dev/null @@ -1,243 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "MY APP NAME" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode 01 - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G/4G] - # - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - # RomHeaderTemplate ../rh/0C5A/rom_header_0c5a.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - # BannerFile "banner_LTD/banner.bnr" - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - # - # Agree EULA [TRUE/FALSE] - # - #AgreeEULA FALSE - - # - # Agree EULA version [1 - 255] - # - #AgreeEULAVersion 1 - - ### - #### END -} - -AppendProperty -{ - # - # Boot allowed Media: [GameCard] - # - Media NAND - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - #GameCode 4CDA - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Game card power on: [TRUE/FALSE] - # - #GameCardOn FALSE - - # - # Game card transferd to nitro mode: [TRUE/FALSE] - # - GameCardNitroMode TRUE -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(MAKEROM_ROMROOT) - Root / - File $(MAKEROM_ROMFILES) -} - -Rating -{ - # - # Permited age to play for each rating organization - # - # Supported organization - # - CERO (OGN0) : for Japan - # - ESRB (OGN1) : for North America - # - BBFC (OGN2) : obsolete organization - # - USK (OGN3) : for German - # - PEGI_GEN (OGN4) : for Europe - # - PEGI_FINLAND (OGN5) : obsolete organization - # - PEGI_PRT (OGN6) : for Portugal - # - PEGI_BBFC (OGN7) : for UK - # - OFLC (OGN8) : for Australia and NewZealand - # - GRB (OGN9) : for Korea - # - OGN10 : reserved - # - OGN11 : reserved - # - OGN12 : reserved - # - OGN13 : reserved - # - OGN14 : reserved - # - OGN15 : reserved - # - # Available age [ 0 - 31 / PENDING / FREE ] - - CERO FREE -# ESRB FREE -# USK FREE -# PEGI_GEN FREE -# PEGI_PRT FREE -# PEGI_BBFC FREE -# OFLC FREE -# GRB FREE -} diff --git a/build/tests/CheckCardAccess/normal_mode.rsf b/build/tests/CheckCardAccess/normal_mode.rsf deleted file mode 100644 index 888fbd4d..00000000 --- a/build/tests/CheckCardAccess/normal_mode.rsf +++ /dev/null @@ -1,243 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "MY APP NAME" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode 01 - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G/4G] - # - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - # RomHeaderTemplate ../rh/0C4A/rom_header_0c4a.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - # BannerFile "banner_LTD/banner.bnr" - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - # - # Agree EULA [TRUE/FALSE] - # - #AgreeEULA FALSE - - # - # Agree EULA version [1 - 255] - # - #AgreeEULAVersion 1 - - ### - #### END -} - -AppendProperty -{ - # - # Boot allowed Media: [GameCard] - # - Media NAND - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - #GameCode 4CDA - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Game card power on: [TRUE/FALSE] - # - GameCardOn TRUE - - # - # Game card transferd to nitro mode: [TRUE/FALSE] - # - #GameCardNitroMode FALSE -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(MAKEROM_ROMROOT) - Root / - File $(MAKEROM_ROMFILES) -} - -Rating -{ - # - # Permited age to play for each rating organization - # - # Supported organization - # - CERO (OGN0) : for Japan - # - ESRB (OGN1) : for North America - # - BBFC (OGN2) : obsolete organization - # - USK (OGN3) : for German - # - PEGI_GEN (OGN4) : for Europe - # - PEGI_FINLAND (OGN5) : obsolete organization - # - PEGI_PRT (OGN6) : for Portugal - # - PEGI_BBFC (OGN7) : for UK - # - OFLC (OGN8) : for Australia and NewZealand - # - GRB (OGN9) : for Korea - # - OGN10 : reserved - # - OGN11 : reserved - # - OGN12 : reserved - # - OGN13 : reserved - # - OGN14 : reserved - # - OGN15 : reserved - # - # Available age [ 0 - 31 / PENDING / FREE ] - - CERO FREE -# ESRB FREE -# USK FREE -# PEGI_GEN FREE -# PEGI_PRT FREE -# PEGI_BBFC FREE -# OFLC FREE -# GRB FREE -} diff --git a/build/tests/CheckCardAccess/slot_power_off.rsf b/build/tests/CheckCardAccess/slot_power_off.rsf deleted file mode 100644 index b0013f6f..00000000 --- a/build/tests/CheckCardAccess/slot_power_off.rsf +++ /dev/null @@ -1,243 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "MY APP NAME" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode 01 - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G/4G] - # - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - # RomHeaderTemplate ../rh/0C3A/rom_header_0c3a.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - # BannerFile "banner_LTD/banner.bnr" - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - # - # Agree EULA [TRUE/FALSE] - # - #AgreeEULA FALSE - - # - # Agree EULA version [1 - 255] - # - #AgreeEULAVersion 1 - - ### - #### END -} - -AppendProperty -{ - # - # Boot allowed Media: [GameCard] - # - Media NAND - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - #GameCode 4CDA - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Game card power on: [TRUE/FALSE] - # - #GameCardOn FALSE - - # - # Game card transferd to nitro mode: [TRUE/FALSE] - # - #GameCardNitroMode FALSE -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(MAKEROM_ROMROOT) - Root / - File $(MAKEROM_ROMFILES) -} - -Rating -{ - # - # Permited age to play for each rating organization - # - # Supported organization - # - CERO (OGN0) : for Japan - # - ESRB (OGN1) : for North America - # - BBFC (OGN2) : obsolete organization - # - USK (OGN3) : for German - # - PEGI_GEN (OGN4) : for Europe - # - PEGI_FINLAND (OGN5) : obsolete organization - # - PEGI_PRT (OGN6) : for Portugal - # - PEGI_BBFC (OGN7) : for UK - # - OFLC (OGN8) : for Australia and NewZealand - # - GRB (OGN9) : for Korea - # - OGN10 : reserved - # - OGN11 : reserved - # - OGN12 : reserved - # - OGN13 : reserved - # - OGN14 : reserved - # - OGN15 : reserved - # - # Available age [ 0 - 31 / PENDING / FREE ] - - CERO FREE -# ESRB FREE -# USK FREE -# PEGI_GEN FREE -# PEGI_PRT FREE -# PEGI_BBFC FREE -# OFLC FREE -# GRB FREE -} diff --git a/build/tests/CheckCardAccess/src/font.c b/build/tests/CheckCardAccess/src/font.c deleted file mode 100644 index 9500697a..00000000 --- a/build/tests/CheckCardAccess/src/font.c +++ /dev/null @@ -1,579 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - demos.TWL - snd - extraFunc - File: font.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "font.h" - -/*---------------------------------------------------------------------------* - Character data - *---------------------------------------------------------------------------*/ -const u32 d_CharData[8 * 256] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0000h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01010010, 0x01010010, 0x00000110, // 0001h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x01011010, 0x01010010, 0x00010010, // 0002h - 0x00100010, 0x00100010, 0x00100001, 0x00100001, - 0x00000000, 0x01010001, 0x01010001, 0x01111111, // 0003h - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 0004h - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01010000, 0x01010100, 0x00001010, // 0005h - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011000, 0x01011000, 0x01111111, // 0006h - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01010010, 0x01101111, 0x01010010, // 0007h - 0x00010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x01010010, 0x01011111, 0x00000100, // 0008h - 0x00011111, 0x00001000, 0x00000001, 0x00011110, - 0x00000000, 0x01010000, 0x01011000, 0x00000110, // 0009h - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x01010000, 0x01111101, 0x00010001, // 000ah - 0x00010001, 0x00010001, 0x00010001, 0x00001010, - 0x00000000, 0x01010000, 0x01011110, 0x00100000, // 000bh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010100, 0x01011111, 0x00001000, // 000ch - 0x00010000, 0x00000001, 0x00000001, 0x00011110, - 0x00000000, 0x01010001, 0x01010001, 0x00000001, // 000dh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00011000, // 000eh - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x01010010, 0x01111111, 0x00010010, // 000fh - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00001110, 0x01010100, 0x01010010, // 0010h - 0x00111111, 0x00000100, 0x00000100, 0x00011000, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 0011h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x01010100, 0x01011111, 0x00000010, // 0012h - 0x00011110, 0x00100001, 0x00100000, 0x00011110, - 0x00000000, 0x01010000, 0x01011100, 0x00100011, // 0013h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00010000, // 0014h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x01010010, 0x01010010, 0x00001100, // 0015h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010001, 0x01111101, 0x00010001, // 0016h - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01010100, 0x01010011, 0x01110010, // 0017h - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01011110, 0x01011000, 0x00000100, // 0018h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01010000, 0x01011100, 0x00010010, // 0019h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011101, 0x01010001, 0x00111101, // 001ah - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x01110001, 0x01011101, 0x00110001, // 001bh - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01110100, 0x01010011, 0x00110010, // 001ch - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01101110, 0x01011000, 0x00100100, // 001dh - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01110000, 0x01011100, 0x00110010, // 001eh - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x01010001, 0x00111101, // 001fh - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0020h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 0021h - 0x00001000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x01101100, 0x01001000, 0x00100100, // 0022h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00100100, 0x01111111, 0x00100100, // 0023h - 0x00100100, 0x01111111, 0x00010010, 0x00010010, - 0x00000000, 0x00001000, 0x01111110, 0x00001001, // 0024h - 0x00111110, 0x01001000, 0x00111111, 0x00001000, - 0x00000000, 0x01000010, 0x00100101, 0x00010010, // 0025h - 0x00001000, 0x00100100, 0x01010010, 0x00100001, - 0x00000000, 0x00001110, 0x00010001, 0x00001001, // 0026h - 0x01000110, 0x00101001, 0x00110001, 0x01001110, - 0x00000000, 0x00011000, 0x00010000, 0x00001000, // 0027h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01110000, 0x00001000, 0x00000100, // 0028h - 0x00000100, 0x00000100, 0x00001000, 0x01110000, - 0x00000000, 0x00000111, 0x00001000, 0x00010000, // 0029h - 0x00010000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x00001000, 0x01001001, 0x00101010, // 002ah - 0x00011100, 0x00101010, 0x01001001, 0x00001000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 002bh - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002ch - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002dh - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002eh - 0x00000000, 0x00000000, 0x00000000, 0x00001100, - 0x00000000, 0x01000000, 0x00100000, 0x00010000, // 002fh - 0x00001000, 0x00000100, 0x00000010, 0x00000001, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0030h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00011100, 0x00010000, 0x00010000, // 0031h - 0x00010000, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0032h - 0x00111110, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0033h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00100000, 0x00110000, 0x00101000, // 0034h - 0x00100100, 0x00100010, 0x01111111, 0x00100000, - 0x00000000, 0x01111111, 0x00000001, 0x00111111, // 0035h - 0x01000000, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x00000001, 0x00111111, // 0036h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00100000, 0x00100000, // 0037h - 0x00010000, 0x00010000, 0x00001000, 0x00001000, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0038h - 0x00111110, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0039h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003ah - 0x00000000, 0x00000000, 0x00001100, 0x00000000, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003bh - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x01100000, 0x00011000, 0x00000110, // 003ch - 0x00000001, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00000000, 0x01111111, 0x00000000, // 003dh - 0x00000000, 0x00000000, 0x01111111, 0x00000000, - 0x00000000, 0x00000011, 0x00001100, 0x00110000, // 003eh - 0x01000000, 0x00110000, 0x00001100, 0x00000011, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 003fh - 0x00110000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x00011100, 0x00100010, 0x01001001, // 0040h - 0x01010101, 0x01010101, 0x01010101, 0x00111010, - 0x00000000, 0x00001000, 0x00010100, 0x00010100, // 0041h - 0x00100010, 0x00111110, 0x01000001, 0x01000001, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0042h - 0x00111111, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0043h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x00011111, 0x00100001, 0x01000001, // 0044h - 0x01000001, 0x01000001, 0x00100001, 0x00011111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0045h - 0x01111111, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0046h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0047h - 0x01111001, 0x01000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0048h - 0x01111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x00001000, 0x00001000, // 0049h - 0x00001000, 0x00001000, 0x00001000, 0x00111110, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 004ah - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01100001, 0x00011001, 0x00000101, // 004bh - 0x00000011, 0x00000101, 0x00011001, 0x01100001, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 004ch - 0x00000001, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01000001, 0x01100011, 0x01010101, // 004dh - 0x01001001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x01000001, 0x01000011, 0x01000101, // 004eh - 0x01001001, 0x01010001, 0x01100001, 0x01000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 004fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0050h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 0051h - 0x01000001, 0x01011001, 0x00100010, 0x01011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0052h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x01000001, 0x00000001, // 0053h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00001000, 0x00001000, // 0054h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0055h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01000001, 0x01000001, 0x00100010, // 0056h - 0x00100010, 0x00010100, 0x00010100, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0057h - 0x01001001, 0x01010101, 0x01100011, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0058h - 0x00001000, 0x00010100, 0x00100010, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0059h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01111111, 0x00100000, 0x00010000, // 005ah - 0x00001000, 0x00000100, 0x00000010, 0x01111111, - 0x00000000, 0x01111100, 0x00000100, 0x00000100, // 005bh - 0x00000100, 0x00000100, 0x00000100, 0x01111100, - 0x00000000, 0x00100010, 0x00010100, 0x00111110, // 005ch - 0x00001000, 0x00111110, 0x00001000, 0x00001000, - 0x00000000, 0x00011111, 0x00010000, 0x00010000, // 005dh - 0x00010000, 0x00010000, 0x00010000, 0x00011111, - 0x00000000, 0x00001000, 0x00010100, 0x00100010, // 005eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005fh - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x00010000, 0x00001000, 0x00011000, // 0060h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00011110, 0x00100001, // 0061h - 0x00111110, 0x00100001, 0x00100001, 0x01011110, - 0x00000000, 0x00000001, 0x00000001, 0x00111111, // 0062h - 0x01000001, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00000000, 0x00111100, 0x01000010, // 0063h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000000, 0x01000000, 0x01111110, // 0064h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0065h - 0x01111111, 0x00000001, 0x01000001, 0x00111110, - 0x00000000, 0x00110000, 0x00001000, 0x00001000, // 0066h - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x01111110, 0x01000001, // 0067h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0068h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00001000, 0x00000000, 0x00001000, // 0069h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00100000, 0x00000000, 0x00100000, // 006ah - 0x00100000, 0x00100001, 0x00100001, 0x00011110, - 0x00000000, 0x00000001, 0x00000001, 0x01100001, // 006bh - 0x00011001, 0x00000111, 0x00011001, 0x01100001, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 006ch - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00110111, 0x01001001, // 006dh - 0x01001001, 0x01001001, 0x01001001, 0x01001001, - 0x00000000, 0x00000000, 0x00111111, 0x01000001, // 006eh - 0x01000001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00000000, 0x00011100, 0x00100010, // 006fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00000000, 0x00111101, 0x01000011, // 0070h - 0x01000001, 0x01000011, 0x00111101, 0x00000001, - 0x00000000, 0x00000000, 0x01011110, 0x01100001, // 0071h - 0x01000001, 0x01100001, 0x01011110, 0x01000000, - 0x00000000, 0x00000000, 0x00110001, 0x00001101, // 0072h - 0x00000011, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0073h - 0x00001110, 0x00110000, 0x01000001, 0x00111110, - 0x00000000, 0x00000100, 0x00000100, 0x01111111, // 0074h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0075h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0076h - 0x00100010, 0x00100010, 0x00010100, 0x00001000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0077h - 0x01001001, 0x00101010, 0x00101010, 0x00010100, - 0x00000000, 0x00000000, 0x00100001, 0x00010010, // 0078h - 0x00001100, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0079h - 0x00100010, 0x00011100, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111111, 0x00010000, // 007ah - 0x00001000, 0x00000100, 0x00000010, 0x00111111, - 0x00000000, 0x00001000, 0x00011110, 0x01100100, // 007bh - 0x00011000, 0x00100100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x00011110, 0x00000100, // 007ch - 0x00011110, 0x00110101, 0x00101101, 0x00010010, - 0x00000000, 0x00000000, 0x00000000, 0x00010001, // 007dh - 0x00100001, 0x00100001, 0x00000001, 0x00000010, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007eh - 0x00011110, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007fh - 0x00111110, 0x00010000, 0x00001100, 0x00110010, - 0x00000000, 0x00000000, 0x00000100, 0x00101111, // 0080h - 0x01000100, 0x00011110, 0x00100101, 0x00010110, - 0x00000000, 0x00000000, 0x00001010, 0x00011110, // 0081h - 0x00101011, 0x00100010, 0x00010100, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00011101, // 0082h - 0x00101011, 0x00101001, 0x00011001, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00111000, // 0083h - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00000000, 0x00000000, 0x00011100, // 0084h - 0x00100011, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000110, 0x01001001, 0x00110000, // 0085h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000100, 0x00111111, 0x00000100, // 0086h - 0x00111110, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000000, 0x00100001, 0x01000001, // 0087h - 0x01000001, 0x01000001, 0x00000001, 0x00000010, - 0x00000000, 0x00111100, 0x00000000, 0x00111110, // 0088h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00011100, 0x00000000, 0x00111110, // 0089h - 0x00010000, 0x00001000, 0x00010100, 0x01100010, - 0x00000000, 0x00100100, 0x01011111, 0x00000100, // 008ah - 0x00111110, 0x01000101, 0x01000101, 0x00100010, - 0x00000000, 0x00100010, 0x01001111, 0x01010010, // 008bh - 0x01010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x00000100, 0x00111110, 0x00001000, // 008ch - 0x00111110, 0x00010000, 0x00000010, 0x00111100, - 0x00000000, 0x00100000, 0x00011000, 0x00000110, // 008dh - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x00100000, 0x01111101, 0x00100001, // 008eh - 0x00100001, 0x00100001, 0x00100001, 0x00010010, - 0x00000000, 0x00011110, 0x00100000, 0x00000000, // 008fh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00001000, 0x01111111, 0x00010000, // 0090h - 0x00100000, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0091h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00010000, 0x01111111, 0x00011000, // 0092h - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 0093h - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x00111100, 0x00010000, 0x00001100, // 0094h - 0x01111111, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000100, 0x00011111, 0x00000100, // 0095h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00001000, 0x01111111, 0x00000100, // 0096h - 0x00111100, 0x01000010, 0x01000000, 0x00111100, - 0x00000000, 0x00000000, 0x00011100, 0x00100011, // 0097h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01111111, 0x00010000, 0x00001000, // 0098h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000010, 0x00110010, 0x00001100, // 0099h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00100100, 0x01001111, 0x01000010, // 009ah - 0x00010001, 0x00111100, 0x00010010, 0x00001100, - 0x00000000, 0x00000010, 0x01111010, 0x01000010, // 009bh - 0x00000010, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00100010, 0x00111110, 0x01010010, // 009ch - 0x01001011, 0x01101101, 0x01010101, 0x00110010, - 0x00000000, 0x00110010, 0x01001011, 0x01000110, // 009dh - 0x01000110, 0x01110010, 0x01001011, 0x00110010, - 0x00000000, 0x00011100, 0x00101010, 0x01001001, // 009eh - 0x01001001, 0x01000101, 0x01000101, 0x00110010, - 0x00000000, 0x00100001, 0x01111101, 0x00100001, // 009fh - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00000100, 0x00100011, 0x01100010, // 00a0h - 0x00100001, 0x00100001, 0x00010010, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a1h - 0x00000000, 0x00000100, 0x00001010, 0x00000100, - 0x00000000, 0x01110000, 0x00010000, 0x00010000, // 00a2h - 0x00010000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a3h - 0x00001000, 0x00001000, 0x00001000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a4h - 0x00000000, 0x00000010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00011000, // 00a5h - 0x00011000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x01111111, // 00a6h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00111111, 0x00100000, // 00a7h - 0x00010100, 0x00001100, 0x00000100, 0x00000010, - 0x00000000, 0x00000000, 0x00100000, 0x00100000, // 00a8h - 0x00010000, 0x00001111, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000100, 0x00111111, // 00a9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00aah - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00000000, 0x00010000, 0x00111111, // 00abh - 0x00011000, 0x00010100, 0x00010010, 0x00011001, - 0x00000000, 0x00000000, 0x00000010, 0x00111111, // 00ach - 0x00100010, 0x00010010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00adh - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00aeh - 0x00111110, 0x00100000, 0x00100000, 0x00111110, - 0x00000000, 0x00000000, 0x00100101, 0x00101010, // 00afh - 0x00101010, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00b0h - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x00101000, // 00b1h - 0x00011000, 0x00001000, 0x00001000, 0x00000100, - 0x00000000, 0x01000000, 0x00100000, 0x00011000, // 00b2h - 0x00010111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00001000, 0x01111111, 0x01000001, // 00b3h - 0x01000001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000000, 0x00111110, 0x00001000, // 00b4h - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00100000, 0x01111111, 0x00110000, // 00b5h - 0x00101000, 0x00100100, 0x00100010, 0x00110001, - 0x00000000, 0x00000100, 0x01111111, 0x01000100, // 00b6h - 0x01000100, 0x01000100, 0x01000010, 0x00100001, - 0x00000000, 0x00000100, 0x00111111, 0x00001000, // 00b7h - 0x01111111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x01111100, 0x01000100, 0x01000100, // 00b8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000010, 0x01111110, 0x00100010, // 00b9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00bah - 0x01000000, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 00bbh - 0x00100010, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000011, 0x00000100, 0x01000011, // 00bch - 0x01000100, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x01111111, 0x01000000, 0x00100000, // 00bdh - 0x00010000, 0x00011000, 0x00100100, 0x01000011, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00beh - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x01000001, 0x01000010, 0x01000000, // 00bfh - 0x00100000, 0x00100000, 0x00011000, 0x00000110, - 0x00000000, 0x01111110, 0x01000010, 0x01001110, // 00c0h - 0x01110001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x01100000, 0x00011110, 0x00010000, // 00c1h - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01000101, 0x01001010, 0x01001010, // 00c2h - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00c3h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000010, 0x00000010, 0x00000110, // 00c4h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x00010000, 0x00010000, 0x01111111, // 00c5h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111110, 0x00000000, // 00c6h - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000100, // 00c7h - 0x00101000, 0x00010000, 0x00101000, 0x01000110, - 0x00000000, 0x00001000, 0x01111111, 0x00100000, // 00c8h - 0x00010000, 0x00011100, 0x01101011, 0x00001000, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 00c9h - 0x00100000, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x00010010, 0x00100010, 0x00100010, // 00cah - 0x01000010, 0x01000010, 0x01000001, 0x01000001, - 0x00000000, 0x00000001, 0x00000001, 0x01111111, // 00cbh - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cch - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000100, 0x00001010, // 00cdh - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x01111111, // 00ceh - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cfh - 0x00100010, 0x00010100, 0x00001000, 0x00010000, - 0x00000000, 0x00001110, 0x01110000, 0x00001110, // 00d0h - 0x01110000, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00001000, 0x00001000, 0x00000100, // 00d1h - 0x00000100, 0x00100010, 0x01000010, 0x01111111, - 0x00000000, 0x01000000, 0x01000000, 0x00100100, // 00d2h - 0x00101000, 0x00010000, 0x00101100, 0x01000011, - 0x00000000, 0x01111111, 0x00000100, 0x01111111, // 00d3h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00d4h - 0x00100010, 0x00010100, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00d5h - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00d6h - 0x01111110, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00d7h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00d8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00001010, 0x00001010, 0x00001010, // 00d9h - 0x01001010, 0x01001010, 0x00101010, 0x00011001, - 0x00000000, 0x00000010, 0x00000010, 0x01000010, // 00dah - 0x01000010, 0x00100010, 0x00010010, 0x00001110, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dbh - 0x01000001, 0x01000001, 0x01000001, 0x01111111, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dch - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000011, 0x01000100, 0x01000000, // 00ddh - 0x01000000, 0x00100000, 0x00010000, 0x00001111, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00deh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00dfh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00011110, 0x00001000, 0x00000100, // 00e0h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x00000000, 0x00001100, 0x00010010, // 00e1h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x00100001, 0x01111101, // 00e2h - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00111100, 0x00010000, 0x00111100, // 00e3h - 0x00010000, 0x00011100, 0x00110010, 0x00001100, - 0x00000000, 0x00001110, 0x00101000, 0x00101000, // 00e4h - 0x00111110, 0x01100101, 0x00100101, 0x00010010, - 0x00000000, 0x00000100, 0x00101111, 0x01000100, // 00e5h - 0x00000110, 0x01000101, 0x01000101, 0x00111110, - 0x00000000, 0x00100010, 0x00100010, 0x00111110, // 00e6h - 0x01010010, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000100, 0x00011111, 0x00000010, // 00e7h - 0x00011111, 0x01000010, 0x01000010, 0x00111100, - 0x00000000, 0x00010010, 0x00111110, 0x01010011, // 00e8h - 0x01000010, 0x00100100, 0x00000100, 0x00000100, - 0x00000000, 0x00001000, 0x00111101, 0x01001011, // 00e9h - 0x01001001, 0x01001001, 0x00111000, 0x00000100, - 0x00000000, 0x00001000, 0x00111000, 0x00001000, // 00eah - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00011000, 0x00100000, 0x00000100, // 00ebh - 0x00111010, 0x01000110, 0x01000000, 0x00111000, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00ech - 0x01000110, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00edh - 0x01000011, 0x01001100, 0x01010010, 0x00111100, - 0x00000000, 0x00100010, 0x00110011, 0x00101010, // 00eeh - 0x00100110, 0x00100010, 0x00100011, 0x01000010, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00efh - 0x01000011, 0x01000000, 0x01000010, 0x00111100, - 0x00000000, 0x00000010, 0x00111011, 0x01000110, // 00f0h - 0x01000010, 0x01000011, 0x01000010, 0x00110010, - 0x00000000, 0x00000100, 0x00000100, 0x00000010, // 00f1h - 0x01000110, 0x01000101, 0x01000101, 0x00111001, - 0x00000000, 0x01010100, 0x01111111, 0x00100100, // 00f2h - 0x00100100, 0x00100100, 0x00100010, 0x00010001, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 00f3h - 0x00111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01011110, 0x01100010, 0x00100010, // 00f4h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010010, 0x01111110, 0x00100010, // 00f5h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 00f6h - 0x00100000, 0x00100000, 0x00100000, 0x00111111, - 0x00000000, 0x01010010, 0x01010010, 0x00111111, // 00f7h - 0x00010010, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01010011, 0x01010100, 0x00100011, // 00f8h - 0x00100100, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x01010000, 0x01011111, 0x00010000, // 00f9h - 0x00001000, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x01010010, 0x01111111, 0x00100010, // 00fah - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x01010001, 0x01010010, 0x00100000, // 00fbh - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01011110, 0x01010010, 0x00100110, // 00fch - 0x00111001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010000, 0x01011110, 0x00010000, // 00fdh - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x00100101, 0x01001010, 0x00101010, // 00feh - 0x00100000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x01011110, 0x01010000, 0x00111111, // 00ffh - 0x00001000, 0x00001000, 0x00001000, 0x00000110 -}; - - -/*---------------------------------------------------------------------------* - Palette data - *---------------------------------------------------------------------------*/ -const u32 d_PaletteData[8 * 16] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // black - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x001f0000, 0x00000000, 0x00000000, 0x00000000, // red - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03e00000, 0x00000000, 0x00000000, 0x00000000, // green - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7c000000, 0x00000000, 0x00000000, 0x00000000, // blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03ff0000, 0x00000000, 0x00000000, 0x00000000, // yellow - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7c1f0000, 0x00000000, 0x00000000, 0x00000000, // purple - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7fe00000, 0x00000000, 0x00000000, 0x00000000, // light blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00180000, 0x00000000, 0x00000000, 0x00000000, // dark red - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03000000, 0x00000000, 0x00000000, 0x00000000, // dark green - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x60000000, 0x00000000, 0x00000000, 0x00000000, // dark blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03180000, 0x00000000, 0x00000000, 0x00000000, // dark yellow - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x60180000, 0x00000000, 0x00000000, 0x00000000, // dark purple - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x63000000, 0x00000000, 0x00000000, 0x00000000, // dark light blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x56b50000, 0x00000000, 0x00000000, 0x00000000, // gray - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x2d6b0000, 0x00000000, 0x00000000, 0x00000000, // dark gray - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7fff0000, 0x00000000, 0x00000000, 0x00000000, // white - 0x00000000, 0x00000000, 0x00000000, 0x00000000 -}; - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CheckCardAccess/src/font.h b/build/tests/CheckCardAccess/src/font.h deleted file mode 100644 index b4a94093..00000000 --- a/build/tests/CheckCardAccess/src/font.h +++ /dev/null @@ -1,36 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - demos.TWL - snd - extraFunc - File: font.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef FONT_H_ -#define FONT_H_ - -#ifdef __cplusplus -extern "C" { -#endif -/*===========================================================================*/ - -#include - -extern const u32 d_CharData[8 * 256]; -extern const u32 d_PaletteData[8 * 16]; - -/*===========================================================================*/ -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // FONT_H_ diff --git a/build/tests/CheckCardAccess/src/hotswTypes.h b/build/tests/CheckCardAccess/src/hotswTypes.h deleted file mode 100644 index 02d0843e..00000000 --- a/build/tests/CheckCardAccess/src/hotswTypes.h +++ /dev/null @@ -1,134 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - HOTSW - include - File: type.h - - Copyright 2007-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - *---------------------------------------------------------------------------*/ -#ifndef __HOTSW_TYPES_H__ -#define __HOTSW_TYPES_H__ - -#include -#include -#include "romSpec.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -static inline void HOTSW_WaitCardCtrl(void) -{ - while( reg_MI_MCCNT1_A & REG_MI_MCCNT1_START_MASK ){} -} - -// Define ------------------------------------------------------------------- -// --- Boot Segment -#define BOOT_SEGMENT_SIZE 0x1000 - -// --- Secure Segment -#define SECURE_SEGMENT_START 0x4000 -#define SECURE_SEGMENT_SIZE 0x4000 -#define SECURE_SEGMENT_END (SECURE_SEGMENT_START + SECURE_SEGMENT_SIZE) - -// --- TWL Card -#define TWLCARD_BORDER_OFFSET 0x80000 - -// --- Page / Segment (Byte) -#define PAGE_SIZE 0x200 -#define ONE_SEGMENT_SIZE 0x1000 - -// --- Page / Segment (Word) -#define PAGE_WORD_SIZE 0x80 -#define ONE_SEGMENT_WORD_SIZE 0x400 - -// --- Rom Emulation -#define ROM_EMULATION_DATA_SIZE 0x20 - -// --- Thread -#define HOTSW_THREAD_STACK_SIZE (1024 * 2) -#define HOTSW_DMA_MSG_NUM 8 -#define HOTSW_INSERT_MSG_NUM 16 -#define HOTSW_PULLED_MSG_NUM 16 -#define HOTSW_CTRL_MSG_NUM 8 -#define HOTSW_MSG_BUFFER_NUM (HOTSW_INSERT_MSG_NUM + HOTSW_PULLED_MSG_NUM + HOTSW_CTRL_MSG_NUM) -#define HOTSW_POLLING_CTRL_BUFFER_NUM 4 - -// --- Card Control Reg 0 -#define HOTSW_E2PROM_CTRL_MASK 0x00ff - -// --- Card Control Reg 1 -#define START_FLG_MASK 0x80000000 -#define READY_FLG_MASK 0x00800000 - -#define LATENCY1_SHIFT 0 -#define LATENCY1_MASK 0x00001fff - -#define DS_SHIFT 13 -#define DS_MASK 0x00002000 - -#define SE_SHIFT 14 -#define SE_MASK 0x00004000 - -#define SCR_SHIFT 15 -#define SCR_MASK 0x00008000 - -#define LATENCY2_SHIFT 16 -#define LATENCY2_MASK 0x003f0000 - -#define CS_SHIFT 22 -#define CS_MASK 0x00400000 - -#define RDY_SHIFT 23 -#define RDY_MASK 0x00800000 - -#define PC_SHIFT 24 -#define PC_MASK 0x07000000 - -#define CT_SHIFT 27 -#define CT_MASK 0x08000000 - -#define TRM_SHIFT 28 -#define TRM_MASK 0x10000000 - -#define RESB_SHIFT 29 -#define RESB_MASK 0x20000000 - -#define WR_SHIFT 30 -#define WR_MASK 0x40000000 - -#define START_SHIFT 31 -#define START_MASK 0x80000000 - -#define SCRAMBLE_MASK 0x1040e000 // XNu֌W̃tO}XN -#define SECURE_COMMAND_SCRAMBLE_MASK 0x00406000 // CS SE DS̃}XN - -// --- Page Count -#define PAGE_0 0x0UL << PC_SHIFT -#define PAGE_1 0x1UL << PC_SHIFT -#define PAGE_2 0x2UL << PC_SHIFT -#define PAGE_4 0x3UL << PC_SHIFT -#define PAGE_8 0x4UL << PC_SHIFT -#define PAGE_16 0x5UL << PC_SHIFT -#define PAGE_32 0x6UL << PC_SHIFT -#define PAGE_STAT 0x7UL << PC_SHIFT - - -// union --------------------------------------------------------------------- -typedef union -{ - u64 dw; - u8 b[8]; -} Cmd64; - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif // __HOTSW_TYPES_H__ \ No newline at end of file diff --git a/build/tests/CheckCardAccess/src/main.c b/build/tests/CheckCardAccess/src/main.c deleted file mode 100644 index a449884a..00000000 --- a/build/tests/CheckCardAccess/src/main.c +++ /dev/null @@ -1,768 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - demos - CARD - hotswDebug - File: main_finalize.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - *---------------------------------------------------------------------------*/ - -#include -#include -#include "DEMO.h" -#include "hotswTypes.h" -#include "font.h" - -#define SDK_MAKERCODE '10' -#define DIGEST_HASH_BLOCK_SIZE_SHA1 (512/8) - -#define MY_TEMP_BUFFER_SIZE 0x80000 -#define GAME_FIELD_START_ADDRESS 0x8000 - -#define ONE_SEGMENT_PAGE_NUM 8 - -#define READY_MASK 0x00800000 -#define CARD_COMMAND_MASK 0x07000000 - -#define MY_ROMHEADER_TWL ((ROM_Header_Short *)HW_TWL_CARD_ROM_HEADER_BUF) -#define MY_ROMHEADER_NTR ((ROM_Header_Short *)HW_CARD_ROM_HEADER) -#define MY_ROMHEADER_NAND ((ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF) - -// --------------------------------------------------------------- -// HMACSHA1̌ -static u8 s_digestDefaultKey[ DIGEST_HASH_BLOCK_SIZE_SHA1 ] = { - 0x21, 0x06, 0xc0, 0xde, - 0xba, 0x98, 0xce, 0x3f, - 0xa6, 0x92, 0xe3, 0x9d, - 0x46, 0xf2, 0xed, 0x01, - - 0x76, 0xe3, 0xcc, 0x08, - 0x56, 0x23, 0x63, 0xfa, - 0xca, 0xd4, 0xec, 0xdf, - 0x9a, 0x62, 0x78, 0x34, - - 0x8f, 0x6d, 0x63, 0x3c, - 0xfe, 0x22, 0xca, 0x92, - 0x20, 0x88, 0x97, 0x23, - 0xd2, 0xcf, 0xae, 0xc2, - - 0x32, 0x67, 0x8d, 0xfe, - 0xca, 0x83, 0x64, 0x98, - 0xac, 0xfd, 0x3e, 0x37, - 0x87, 0x46, 0x58, 0x24 -}; - -static u32 rhBuf[BOOT_SEGMENT_SIZE/sizeof(u32)]; -static u32 checkBuf[MY_TEMP_BUFFER_SIZE/sizeof(u32)]; - -static u16 card_lock_id; -static BOOL error, flxhash, ltdhash, romheader; -static BOOL isTwlApplication; -static BOOL isTwlCard; -static ROM_Header_Short *rh; - -static u16 screen[32 * 32] ATTRIBUTE_ALIGN(HW_CACHE_LINE_SIZE); - -// --------------------------------------------------------------- -static void CheckMirrorImage(void); -static int CompRomHeaderForNTR(void* buf); -static void CheckRomHeader(void); -static BOOL CheckHashValue(void* buf, u32 size, void* digest); -static void MY_LoadCard_arm7Static(void); -static void MY_LoadCard_arm7LtdStatic(void); -static void CheckBackupDevice(void); -static void ShowResult(void); -static void debugMessage(void); - -static void ReadBootSegNormal(void* buf); -static void SetCommand(Cmd64 *cndLE); -static void ReadPageGame(u32 start_addr, void* buf, u32 size); -static void ReadCardData(void* dest, s32 offset, s32 length); - -static void VBlankIntr (void); -static void PrintString (s16 x, s16 y, u8 palette, char *text, ...); -static void VolumeSwitchCallback(SNDEXResult result, void* arg); - -/*---------------------------------------------------------------------------* - Name: NitroMain - - Description: C Gg|Cg. - *---------------------------------------------------------------------------*/ -void NitroMain(void) -{ - CARDRomHeader *card_header = (void*)CARD_GetRomHeader(); - - OS_Init(); - OS_InitTick(); - CARD_Init(); - GX_Init(); - GX_DispOff(); - GXS_DispOff(); - - if ( card_header->maker_code == SDK_MAKERCODE ) - { - CARD_Enable(TRUE); - } - - /* \ݒ菉 */ - GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); - MI_CpuClearFast((void*)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE); - (void)GX_DisableBankForLCDC(); - MI_CpuFillFast((void*)HW_OAM, GX_LCD_SIZE_Y, HW_OAM_SIZE); - MI_CpuClearFast((void*)HW_PLTT, HW_PLTT_SIZE); - MI_CpuFillFast((void*)HW_DB_OAM, GX_LCD_SIZE_Y, HW_DB_OAM_SIZE); - MI_CpuClearFast((void*)HW_DB_PLTT, HW_DB_PLTT_SIZE); - GX_SetBankForBG(GX_VRAM_BG_128_A); - G2_SetBG0Control(GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0xf800, // SCR x[XubN 31 - GX_BG_CHARBASE_0x00000, // CHR x[XubN 0 - GX_BG_EXTPLTT_01); - G2_SetBG0Priority(0); - GX_SetGraphicsMode(GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D); - GX_SetVisiblePlane(GX_PLANEMASK_BG0); - GX_LoadBG0Char(d_CharData, 0, sizeof(d_CharData)); - GX_LoadBGPltt(d_PaletteData, 0, sizeof(d_PaletteData)); - MI_CpuClearFast((void*)screen, sizeof(screen)); - DC_FlushRange(screen, sizeof(screen)); - GX_LoadBG0Scr(screen, 0, sizeof(screen)); - - /* ݐݒ */ - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - /* LCD \Jn */ - GX_DispOn(); - GXS_DispOn(); - - PrintString(0, 0, 0xc, "+++ Card Access Check +++"); - - // NANDAvHYB̏ꍇ - if(MY_ROMHEADER_NAND->platform_code == 0x02){ - PrintString(0, 2, 0x5, ""); - } - else if(MY_ROMHEADER_NAND->platform_code == 0x03){ - PrintString(0, 2, 0x6, ""); - } - - // J[hAv^Cv𔻕ʁBgRom Header Buffer ؑւ - if(MY_ROMHEADER_NTR->platform_code & PLATFORM_CODE_FLAG_TWL){ - PrintString(0, 5, 0xf, "- TWL Application -"); - isTwlApplication = TRUE; - rh = MY_ROMHEADER_TWL; - } - else{ - PrintString(0, 5, 0xf, "- NTR Application -"); - isTwlApplication = FALSE; - rh = MY_ROMHEADER_NTR; - } - - // J[h^Cv̔ - isTwlCard = (*(vu32 *)(HW_BOOT_CHECK_INFO_BUF) & HOTSW_ROMID_TWLROM_MASK) ? TRUE : FALSE; - - // Frh̏IĂĂяo -// debugMessage(); - - // tȌ - error = FALSE; - flxhash = TRUE; - ltdhash = TRUE; - romheader = TRUE; - - // bNID擾Ă - card_lock_id = (u16)OS_GetLockID(); - - if(isTwlApplication){ - MY_LoadCard_arm7Static(); - MY_LoadCard_arm7LtdStatic(); - } - else{ - CheckMirrorImage(); - } - - CheckRomHeader(); - CheckBackupDevice(); - - ShowResult(); - - while(1){ -// DEMO_DrawFlip(); - OS_WaitVBlankIntr(); - } -} - - -/*---------------------------------------------------------------------------* - Name: CheckMirrorImage - - Description: - - Game[h GameR}h OK - NormalR}h All 1 - - Normal[h GameR}h All 1 - NormalR}h OK - - SlotPowerOff GameR}h All 0 - NormalR}h All 0 - *---------------------------------------------------------------------------*/ -static void CheckMirrorImage(void) -{ - u32 buf1[PAGE_SIZE/sizeof(u32)]; - u32 buf2[PAGE_SIZE/sizeof(u32)]; - u32 buf_ff[PAGE_SIZE/sizeof(u32)]; - u32 buf_00[PAGE_SIZE/sizeof(u32)]; - - MI_CpuFill8( buf_ff, 0xff, sizeof(buf_ff) ); - MI_CpuFill8( buf_00, 0x0, sizeof(buf_00) ); - - CARD_LockRom(card_lock_id); - - // Game[h̃R}hKey TablëGamëǂ - ReadCardData(buf1, (s32)0x1000, (s32)PAGE_SIZE); - ReadCardData(buf2, (s32)0x8000, (s32)PAGE_SIZE); - - CARD_UnlockRom(card_lock_id); - - // Game[hKey Tablë悩Gamë̃C[Wǂ߂ĂȂAsȃ[h - if(MI_CpuComp8( buf1, buf2, PAGE_SIZE )){ - error = TRUE; - PrintString(0, 7, 0x1, "Unknown Mode"); - } - else{ - // f[^ł ALL 1(GameMode) or ALL 0(SlotPowerOff)Ȃ炿Ɠǂ߂ĂȂ̂ŁANormal[h - if(!MI_CpuComp8( buf_ff, buf2, PAGE_SIZE ) || !MI_CpuComp8( buf_00, buf2, PAGE_SIZE )){ - flxhash = FALSE; - ltdhash = FALSE; - PrintString(0, 7, 0x1, "Flx Area : Not Accessible"); - } - // Key TablëǂŁAGamë̃C[WoĂGame[h - else{ - flxhash = TRUE; - ltdhash = FALSE; - PrintString(0, 7, 0x8, "Flx Area : Accessible"); - } - } -} - - -/*---------------------------------------------------------------------------* - Name: CheckRomHeader - - Description: - *---------------------------------------------------------------------------*/ -static void CheckRomHeader(void) -{ - int result; - u8* pBuf = (u8 *)rhBuf; - u8* romHeader = (u8 *)rh; - - CARD_LockRom(card_lock_id); - - ReadBootSegNormal(pBuf); - - CARD_UnlockRom(card_lock_id); - - // ۂɓǂRom HeaderIPLœǂRom Headerr - if(isTwlApplication){ - result = MI_CpuComp8( pBuf, romHeader, HW_TWL_CARD_ROM_HEADER_BUF_SIZE ); - } - else{ - result = CompRomHeaderForNTR(pBuf); - } - - // - if(result){ - romheader = FALSE; - PrintString(0, 11, 0x1, "Boot Segment : Not Accessible"); - } - else{ - romheader = TRUE; - PrintString(0, 11, 0x8, "Boot Segment : Accessible"); - } - -// DEMO_DrawFlip(); - OS_WaitVBlankIntr(); -} - - -static int CompRomHeaderForNTR(void* buf){ - u8* pBuf = (u8 *)buf; - u8* romHeader = (u8 *)rh; - u32 remainSize = HW_CARD_ROM_HEADER_SIZE; - - while(remainSize){ - // }XNRomRg[񂪕ςĂ̂ŁA͔΂B - if((HW_CARD_ROM_HEADER_SIZE - remainSize) == 0x60){ - pBuf += 4; - romHeader += 4; - remainSize -= 4; - } - if(*pBuf == *romHeader){ - remainSize--; - } - else{ -// OS_TPrintf("Error (adr:0x%08x)\n", HW_CARD_ROM_HEADER_SIZE - remainSize); -// OS_TPrintf("read : 0x%02x real : 0x%02x\n", *pBuf, *romHeader); - break; - } - pBuf++; - romHeader++; - } - - return (int)remainSize; -} - - -/*---------------------------------------------------------------------------* - Name: CheckHashValue - - Description: W[nbV`FbN - *---------------------------------------------------------------------------*/ -static BOOL CheckHashValue(void* buf, u32 size, void* digest) -{ - u8 sha1data[DIGEST_SIZE_SHA1]; - BOOL retval = TRUE; - - // NA - MI_CpuClear8(sha1data, sizeof(sha1data)); - - // ARM7풓W[Hashlƍ - SVC_CalcHMACSHA1( sha1data, - buf, - size, - s_digestDefaultKey, - sizeof(s_digestDefaultKey) ); - - return SVC_CompareSHA1( sha1data, digest ); -} - - -/*---------------------------------------------------------------------------* - Name: MY_LoadCard_arm7Static - - Description: ARM7풓W[ ǂݏoEnbV`FbN - *---------------------------------------------------------------------------*/ -static void MY_LoadCard_arm7Static(void) -{ - BOOL result; - u32* pBuf = checkBuf; - - CARD_LockRom(card_lock_id); - - ReadCardData(pBuf, (s32)rh->sub_rom_offset, (s32)rh->sub_size); - - CARD_UnlockRom(card_lock_id); - - result = CheckHashValue(checkBuf, rh->sub_size, (void *)rh->sub_static_digest); - - if(result){ - flxhash = TRUE; - PrintString(0, 7, 0x8, "Flx Area : Accessible"); - } - else{ - flxhash = FALSE; - PrintString(0, 7, 0x1, "Flx Area : Not Accessible"); - } - -// DEMO_DrawFlip(); - OS_WaitVBlankIntr(); -} - - -/*---------------------------------------------------------------------------* - Name: MY_LoadCard_arm7LtdStatic - - Description: ARM7g풓W[ ǂݏoEnbV`FbN - *---------------------------------------------------------------------------*/ -static void MY_LoadCard_arm7LtdStatic(void) -{ - BOOL result; - u32* pBuf = checkBuf; - - CARD_LockRom(card_lock_id); - - ReadCardData(pBuf, (s32)rh->sub_ltd_rom_offset, (s32)rh->sub_ltd_size); - - CARD_UnlockRom(card_lock_id); - - result = CheckHashValue(checkBuf, rh->sub_ltd_size, (void *)rh->sub_ltd_static_digest); - - if(result){ - ltdhash = TRUE; - PrintString(0, 9, 0x8, "Ltd Area : Accessible"); - } - else{ - ltdhash = FALSE; - PrintString(0, 9, 0x1, "Ltd Area : Not Accessible"); - } - -// DEMO_DrawFlip(); - OS_WaitVBlankIntr(); -} - - -/*---------------------------------------------------------------------------* - Name: CheckBackupDevice - - Description: Backup Device ւ̃ANZX`FbN - - FEEPROM 512 kb̃TuՂƎgČ - *---------------------------------------------------------------------------*/ -static void CheckBackupDevice(void) -{ - BOOL identify; - static CARDResult last_result = CARD_RESULT_SUCCESS; - - CARD_LockBackup(card_lock_id); - - identify = CARD_IdentifyBackup(CARD_BACKUP_TYPE_EEPROM_512KBITS); - if (!identify) - { - PrintString(0, 13, 0x1, "Backup Device Identify Error..."); - error = TRUE; - CARD_UnlockBackup(card_lock_id); - return; - } - - { - u32 pos = 0; - static u8 tmp_buf[65536]; - int i; - const u32 page_size = CARD_GetBackupPageSize(); - const u32 total_size = CARD_GetBackupTotalSize(); - - for (i = 0; i < page_size; ++i) - { - tmp_buf[i] = (u8)(pos * 3 + i); - } - - if (!CARD_IsBackupEeprom()){ - PrintString(0, 13, 0x1, "Please Use EEPROM..."); - error = TRUE; - return; - } - - PrintString(0, 13, 0xf, "Backup Device Check Start..."); -// DEMO_DrawFlip(); - - while(pos < total_size){ - CARD_WriteAndVerifyEepromAsync(pos, tmp_buf, page_size, NULL, NULL); - - (void)CARD_WaitBackupAsync(); - last_result = CARD_GetResultCode(); - - pos += page_size; - - if (last_result != CARD_RESULT_SUCCESS){ - break; - } - } - - if (last_result != CARD_RESULT_SUCCESS){ - PrintString(0, 14, 0x1, "Backup Device : Not Accessible"); - error = TRUE; - } - else{ - PrintString(0, 14, 0x8, "Backup Device : Accessible"); - } - } - - CARD_UnlockBackup(card_lock_id); - -// DEMO_DrawFlip(); - OS_WaitVBlankIntr(); -} - - -/*---------------------------------------------------------------------------* - Name: ReadBootSegNormal - - Description: m[}[hBoot Segmentǂݍ - *---------------------------------------------------------------------------*/ -#define TIME_OUT 1000 - -static void ReadBootSegNormal(void* buf) -{ - u32 i, loop, pc, size, counter; - u64 page = 0; - Cmd64 cndLE; - BOOL isType1; - - OSTick start; - - isType1 = (*(vu32 *)(HW_BOOT_CHECK_INFO_BUF) & HOTSW_ROMID_1TROM_MASK) ? FALSE : TRUE; - - if(isType1){ - loop = 0x1UL; - pc = 0x4UL; - size = BOOT_SEGMENT_SIZE; - } - else{ - loop = ONE_SEGMENT_PAGE_NUM; - pc = 0x1UL; - size = PAGE_SIZE; - } - - counter = 0; - - HOTSW_WaitCardCtrl(); - - for(i=0; i TIME_OUT){ - return; - } - } - *((u32 *)buf + counter++) = reg_MI_MCD1_A; - } - - page++; - - OS_SpinWait( 100 ); - } -} - - -/*---------------------------------------------------------------------------* - Name: HOTSWi_SetCommand - - Description: ŗ^ꂽR}h̃GfBAςăWX^ɃZbg - *---------------------------------------------------------------------------*/ -static void SetCommand(Cmd64 *cndLE) -{ - Cmd64 cndBE; - - // rbOGfBAɒ - cndBE.b[7] = cndLE->b[0]; - cndBE.b[6] = cndLE->b[1]; - cndBE.b[5] = cndLE->b[2]; - cndBE.b[4] = cndLE->b[3]; - cndBE.b[3] = cndLE->b[4]; - cndBE.b[2] = cndLE->b[5]; - cndBE.b[1] = cndLE->b[6]; - cndBE.b[0] = cndLE->b[7]; - - // MCCMD WX^ݒ - reg_MI_MCCMD0_A = *(u32*)cndBE.b; - reg_MI_MCCMD1_A = *(u32*)&cndBE.b[4]; -} - - -/*---------------------------------------------------------------------------* - Name: ReadPageGame - - Description: Q[[hŁAw肳ꂽy[Wwobt@ɎwTCYǂݍ - *---------------------------------------------------------------------------*/ -static void ReadPageGame(u32 start_addr, void* buf, u32 size) -{ - u32 loop, counter=0; - u64 i, page; - Cmd64 cndLE; - u32 rom_ctrl = *(vu32 *)(HW_CARD_ROM_HEADER + 0x60); - - OSTick start; - - rom_ctrl = rom_ctrl & ~CARD_COMMAND_MASK; - page = (u32)(start_addr / PAGE_SIZE); - loop = (u32)(size / PAGE_SIZE); - loop = (size % PAGE_SIZE) ? loop + 1 : loop; - - HOTSW_WaitCardCtrl(); - - for(i=0; i TIME_OUT){ - return; - } - } - *((u32 *)buf + counter++) = reg_MI_MCD1_A; - } - } - - OS_SpinWait( 100 ); -} - - -/*---------------------------------------------------------------------------* - Name: ReadCardData - - Description: J[h璆r[ȃTCY(pager)̃f[^ǂݏo֐ - G[R[hԂ - *---------------------------------------------------------------------------*/ -static void ReadCardData(void* dest, s32 offset, s32 length) -{ - static u8 page_buffer[512]; - u32 page_offset = (u32)(offset & -512); - u32 buffer_offset = (u32)(offset % 512); - u32 valid_length = 512 - buffer_offset; - u32 remain_length; - - // JnAhXy[W̓r - if ( offset % 512 ) - { - ReadPageGame(page_offset, page_buffer, 512); - - MI_CpuCopy8(page_buffer + buffer_offset, dest, (length < valid_length ? length : valid_length)); - - dest = (u8*)dest + valid_length; - offset += valid_length; - length -= valid_length; - if ( length < 0) - { - return; - } - } - - remain_length = (u32)(length % 512); - ReadPageGame((u32)offset, dest, (u32)(length - remain_length)); - - // Pcy[Wr - if( remain_length ){ - dest = (u8*)dest + (length - remain_length); - offset += length - remain_length; - - ReadPageGame((u32)offset, page_buffer, 512); - - MI_CpuCopy8(page_buffer, dest, remain_length); - } -} - - -/*---------------------------------------------------------------------------* - Name: ShowResult - - Description: Result\ - *---------------------------------------------------------------------------*/ -static void ShowResult(void) -{ - PrintString(0, 16, 0xf, "-- Result --"); - - if(romheader && !flxhash && !ltdhash){ - PrintString(0, 18, 0x4, "Normal Mode"); - } - else if((!romheader && flxhash && !ltdhash) || - (!romheader && flxhash && ltdhash && !isTwlCard)){ - PrintString(0, 18, 0x5, "Game Mode"); - } - else if(!romheader && !flxhash && !ltdhash){ - PrintString(0, 18, 0x6, "Slot Power Off"); - } - else{ - PrintString(0, 18, 0x1, "Unknown Mode"); - } - - if(error){ - PrintString(0, 20, 0x1, "Backup Device Error"); - } - -// DEMO_DrawFlip(); -// OS_WaitVBlankIntr(); -} - - -/*---------------------------------------------------------------------------* - Name: debugMessage - - Description: - *---------------------------------------------------------------------------*/ -static void debugMessage(void) -{ - PrintString(0, 4, 0xf, "amr7 NmlRomOfs : 0x%08x", rh->sub_rom_offset); - PrintString(0, 5, 0xf, "amr7 LtdRomOfs : 0x%08x", rh->sub_ltd_rom_offset); - - OS_TPrintf("amr7 NmlRomOfs : 0x%08x\n", rh->sub_rom_offset); - OS_TPrintf("amr7 NmlSize : 0x%08x\n", rh->sub_size); - OS_TPrintf("amr7 LtdRomOfs : 0x%08x\n", rh->sub_ltd_rom_offset); - OS_TPrintf("amr7 LtdSize : 0x%08x\n", rh->sub_ltd_size); -} - - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - - Description: uuN݃xNgB - *---------------------------------------------------------------------------*/ -static void VBlankIntr (void) -{ - /* zXN[ VRAM ɔf */ - DC_FlushRange(screen, sizeof(screen)); - GX_LoadBG0Scr(screen, 0, sizeof(screen)); - - /* IRQ `FbNtOZbg */ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); -} - - -/*---------------------------------------------------------------------------* - Name: PrintString - - Description: zXN[ɕzuB32܂ŁB - - Arguments: x - ̐擪zu x W( ~ 8 hbg )B - y - ̐擪zu y W( ~ 8 hbg )B - palette - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -static void PrintString (s16 x, s16 y, u8 palette, char *text, ...) -{ - va_list vlist; - char temp[32 + 2]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - *((u16*)(&temp[32])) = 0x0000; - for (i = 0; ; i++) - { - if (temp[i] == 0x00) - { - break; - } - screen[((y * 32) + x + i) % (32 * 32)] = (u16)((palette << 12) | temp[i]); - } -} \ No newline at end of file diff --git a/build/tests/CheckCardAccess/src/romSpec.h b/build/tests/CheckCardAccess/src/romSpec.h deleted file mode 100644 index cb96f899..00000000 --- a/build/tests/CheckCardAccess/src/romSpec.h +++ /dev/null @@ -1,152 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - HOTSW - include - File: romSpec.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef __HOTSW_ROMSPEC_H__ -#define __HOTSW_ROMSPEC_H__ - -#ifdef __cplusplus -extern "C" { -#endif - - -// ROM memory map - -#define HOTSW_PAGE_SIZE 0x200 // 512B -#define HOTSW_BOOT_SEG_SIZE 0x1000 // 4KB -#define HOTSW_LOAD_TABLE_SIZE 0x2000 // 8KB -#define HOTSW_KEYTABLE_AREA_SIZE 0x3000 // 12KB -#define HOTSW_KEYTABLE2_AREA_SIZE 0x3000 // 12KB -#define HOTSW_SECURE_AREA_SIZE 0x4000 // 16KB -#define HOTSW_SECURE2_AREA_SIZE 0x4000 // 16KB -#define HOTSW_ROMEMU_INFO_SIZE 0x20 - -#define HOTSW_BOOTSEGMENT_AREA_OFS 0x0000 // 0KB -#define HOTSW_KEYTABLE_AREA_OFS 0x1000 // 4KB -#define HOTSW_SECURE_AREA_OFS 0x4000 // 16KB -#define HOTSW_GAME_AREA_OFS 0x8000 // 32KB -#define HOTSW_SECURE2_AREA_OFS 0x3000 // 12KB -#define HOTSW_GAME2_AREA_OFS 0x7000 // 28KB -#define HOTSW_ROMEMU_INFO_OFS (HOTSW_SECURE_AREA_OFS - HOTSW_PAGE_SIZE + 0x160) - - -// ROM ID - -#define HOTSW_ROMID_1TROM_MASK 0x80000000UL -#define HOTSW_ROMID_TWLROM_MASK 0x40000000UL -#define HOTSW_ROMID_RFSSUP_MASK 0x20000000UL -#define HOTSW_ROMID_SIZE_MASK 0x0000ff00UL - -// ROM STATUS - -#define HOTSW_ROMST_RFS_WARN_L1_MASK 0x00000004UL -#define HOTSW_ROMST_RFS_WARN_L2_MASK 0x00000008UL -#define HOTSW_ROMST_RFS_READY_MASK 0x00000020UL - - -// NORMAL command - -#define HSWOP_N_OP_MASK 0xff00000000000000ULL -#define HSWOP_N_OP_SIZE 8 - -#define HSWOP_N_OP_RD_ID 0x9000000000000000ULL -#define HSWOP_N_OP_RD_PAGE 0x0000000000000000ULL -#define HSWOP_N_OP_WR_PAGE 0x8000000000000000ULL -#define HSWOP_N_OP_LD_TABLE 0x9f00000000000000ULL -#define HSWOP_N_OP_RD_CACHE_START 0x5800000000000000ULL -#define HSWOP_N_OP_RD_CACHE 0x6000000000000000ULL -#define HSWOP_N_OP_RD_CACHE_LAST 0x6800000000000000ULL -#define HSWOP_N_OP_RD_STAT 0xd600000000000000ULL -#define HSWOP_N_OP_RFS_BLK 0xb500000000000000ULL -#define HSWOP_N_OP_CHG_MODE 0x3c00000000000000ULL -#define HSWOP_N_OP_CHG2_MODE 0x3d00000000000000ULL - -#define HSWOP_N_RD_ID_PAD 0x00ffffffffffffffULL -#define HSWOP_N_RD_PAGE_PAD 0x00fffffeff00ffffULL -#define HSWOP_N_CHG_MODE_PAD 0x00000000f00000ffULL -#define HSWOP_N_CHG2_MODE_PAD HSWOP_N_CHG_MODE_PAD - -#define HSWOP_N_RD_PAGE_ADDR_SHIFT 33 -#define HSWOP_N_RD_PAGE_ADDR_SIZE 23 -#define HSWOP_N_RD_PAGE_ADDR_MASK 0x00fffffe00000000ULL - -#define HSWOP_N_VAE_SHIFT 32 -#define HSWOP_N_VAE_SIZE 24 -#define HSWOP_N_VAE_MASK 0x00ffffff00000000ULL - -#define HSWOP_N_VBI_SHIFT 8 -#define HSWOP_N_VBI_SIZE 20 -#define HSWOP_N_VBI_MASK 0x000000000fffff00ULL - - -// SECURE command - -#define HSWOP_S_OP_MASK 0xf000000000000000ULL -#define HSWOP_S_OP_SIZE 4 - -#define HSWOP_S_OP_RD_ID 0x1000000000000000ULL -#define HSWOP_S_OP_RD_SEG 0x2000000000000000ULL -#define HSWOP_S_OP_PNG_ON 0x4000000000000000ULL -#define HSWOP_S_OP_PNG_OFF 0x6000000000000000ULL -#define HSWOP_S_OP_CHG_MODE 0xa000000000000000ULL - -#define HSWOP_S_VA_SHIFT HSWOP_S_VB_SIZE -#define HSWOP_S_VA_SIZE 24 -#define HSWOP_S_VA_MASK 0x00000ffffff00000ULL - -#define HSWOP_S_VB_SHIFT 0 -#define HSWOP_S_VB_SIZE 20 -#define HSWOP_S_VB_MASK 0x00000000000fffffULL - -#define HSWOP_S_VC_SHIFT (HSWOP_S_VA_SIZE + HSWOP_S_VB_SIZE) -#define HSWOP_S_VC_SIZE 16 -#define HSWOP_S_VC_MASK 0x0ffff00000000000ULL - -#define HSWOP_S_VD_SHIFT HSWOP_S_VA_SHIFT -#define HSWOP_S_VD_SIZE HSWOP_S_VA_SIZE -#define HSWOP_S_VD_MASK HSWOP_S_VA_MASK - - -// GAME command - -#define HSWOP_G_OP_MASK 0xff00000000000000ULL -#define HSWOP_G_OP_SIZE 8 - -#define HSWOP_G_OP_RD_ID 0xb800000000000000ULL -#define HSWOP_G_OP_RD_UID 0xb900000000000000ULL -#define HSWOP_G_OP_RD_PAGE 0xb700000000000000ULL -#define HSWOP_G_OP_WR_PAGE 0x8000000000000000ULL -#define HSWOP_G_OP_RD_CACHE_START HSWOP_N_OP_RD_CACHE_START -#define HSWOP_G_OP_RD_CACHE HSWOP_N_OP_RD_CACHE -#define HSWOP_G_OP_RD_CACHE_LAST HSWOP_N_OP_RD_CACHE_LAST -#define HSWOP_G_OP_RD_STAT HSWOP_N_OP_RD_STAT -#define HSWOP_G_OP_RFS_BLK HSWOP_N_OP_RFS_BLK - -#define HSWOP_G_RD_ID_PAD 0x00ffffffffffffffULL -#define HSWOP_G_RD_UID_PAD 0x00ffffffffffffffULL -#define HSWOP_G_RD_PAGE_PAD 0x00f0000000ffffffULL - -#define HSWOP_G_RD_PAGE_ADDR_SHIFT 33 -#define HSWOP_G_RD_PAGE_ADDR_SIZE 23 -#define HSWOP_G_RD_PAGE_ADDR_MASK 0x000ffffe00000000ULL - - -#ifdef __cplusplus -} /* extern "C" */ - -#endif - -/* __HOTSW_ROMSPEC_H__ */ -#endif diff --git a/build/tests/CheckCardMode/Makefile b/build/tests/CheckCardMode/Makefile deleted file mode 100644 index f63e8dc8..00000000 --- a/build/tests/CheckCardMode/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CheckCardMode -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: #$ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -TARGET_PLATFORM := TWL - -SRCS = ./src/main.c ./src/font.c - -TARGET_BIN = card_mode_check.srl - -MACRO_FLAGS += -DMY_TARGET_NAME=\"$(basename $(TARGET_BIN))\" - -#------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/CheckCardMode/src/font.c b/build/tests/CheckCardMode/src/font.c deleted file mode 100644 index 9500697a..00000000 --- a/build/tests/CheckCardMode/src/font.c +++ /dev/null @@ -1,579 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - demos.TWL - snd - extraFunc - File: font.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "font.h" - -/*---------------------------------------------------------------------------* - Character data - *---------------------------------------------------------------------------*/ -const u32 d_CharData[8 * 256] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0000h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01010010, 0x01010010, 0x00000110, // 0001h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x01011010, 0x01010010, 0x00010010, // 0002h - 0x00100010, 0x00100010, 0x00100001, 0x00100001, - 0x00000000, 0x01010001, 0x01010001, 0x01111111, // 0003h - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 0004h - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01010000, 0x01010100, 0x00001010, // 0005h - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011000, 0x01011000, 0x01111111, // 0006h - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01010010, 0x01101111, 0x01010010, // 0007h - 0x00010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x01010010, 0x01011111, 0x00000100, // 0008h - 0x00011111, 0x00001000, 0x00000001, 0x00011110, - 0x00000000, 0x01010000, 0x01011000, 0x00000110, // 0009h - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x01010000, 0x01111101, 0x00010001, // 000ah - 0x00010001, 0x00010001, 0x00010001, 0x00001010, - 0x00000000, 0x01010000, 0x01011110, 0x00100000, // 000bh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010100, 0x01011111, 0x00001000, // 000ch - 0x00010000, 0x00000001, 0x00000001, 0x00011110, - 0x00000000, 0x01010001, 0x01010001, 0x00000001, // 000dh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00011000, // 000eh - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x01010010, 0x01111111, 0x00010010, // 000fh - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00001110, 0x01010100, 0x01010010, // 0010h - 0x00111111, 0x00000100, 0x00000100, 0x00011000, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 0011h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x01010100, 0x01011111, 0x00000010, // 0012h - 0x00011110, 0x00100001, 0x00100000, 0x00011110, - 0x00000000, 0x01010000, 0x01011100, 0x00100011, // 0013h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00010000, // 0014h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x01010010, 0x01010010, 0x00001100, // 0015h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010001, 0x01111101, 0x00010001, // 0016h - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01010100, 0x01010011, 0x01110010, // 0017h - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01011110, 0x01011000, 0x00000100, // 0018h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01010000, 0x01011100, 0x00010010, // 0019h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011101, 0x01010001, 0x00111101, // 001ah - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x01110001, 0x01011101, 0x00110001, // 001bh - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01110100, 0x01010011, 0x00110010, // 001ch - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01101110, 0x01011000, 0x00100100, // 001dh - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01110000, 0x01011100, 0x00110010, // 001eh - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x01010001, 0x00111101, // 001fh - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0020h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 0021h - 0x00001000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x01101100, 0x01001000, 0x00100100, // 0022h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00100100, 0x01111111, 0x00100100, // 0023h - 0x00100100, 0x01111111, 0x00010010, 0x00010010, - 0x00000000, 0x00001000, 0x01111110, 0x00001001, // 0024h - 0x00111110, 0x01001000, 0x00111111, 0x00001000, - 0x00000000, 0x01000010, 0x00100101, 0x00010010, // 0025h - 0x00001000, 0x00100100, 0x01010010, 0x00100001, - 0x00000000, 0x00001110, 0x00010001, 0x00001001, // 0026h - 0x01000110, 0x00101001, 0x00110001, 0x01001110, - 0x00000000, 0x00011000, 0x00010000, 0x00001000, // 0027h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01110000, 0x00001000, 0x00000100, // 0028h - 0x00000100, 0x00000100, 0x00001000, 0x01110000, - 0x00000000, 0x00000111, 0x00001000, 0x00010000, // 0029h - 0x00010000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x00001000, 0x01001001, 0x00101010, // 002ah - 0x00011100, 0x00101010, 0x01001001, 0x00001000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 002bh - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002ch - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002dh - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002eh - 0x00000000, 0x00000000, 0x00000000, 0x00001100, - 0x00000000, 0x01000000, 0x00100000, 0x00010000, // 002fh - 0x00001000, 0x00000100, 0x00000010, 0x00000001, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0030h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00011100, 0x00010000, 0x00010000, // 0031h - 0x00010000, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0032h - 0x00111110, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0033h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00100000, 0x00110000, 0x00101000, // 0034h - 0x00100100, 0x00100010, 0x01111111, 0x00100000, - 0x00000000, 0x01111111, 0x00000001, 0x00111111, // 0035h - 0x01000000, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x00000001, 0x00111111, // 0036h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00100000, 0x00100000, // 0037h - 0x00010000, 0x00010000, 0x00001000, 0x00001000, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0038h - 0x00111110, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0039h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003ah - 0x00000000, 0x00000000, 0x00001100, 0x00000000, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003bh - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x01100000, 0x00011000, 0x00000110, // 003ch - 0x00000001, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00000000, 0x01111111, 0x00000000, // 003dh - 0x00000000, 0x00000000, 0x01111111, 0x00000000, - 0x00000000, 0x00000011, 0x00001100, 0x00110000, // 003eh - 0x01000000, 0x00110000, 0x00001100, 0x00000011, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 003fh - 0x00110000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x00011100, 0x00100010, 0x01001001, // 0040h - 0x01010101, 0x01010101, 0x01010101, 0x00111010, - 0x00000000, 0x00001000, 0x00010100, 0x00010100, // 0041h - 0x00100010, 0x00111110, 0x01000001, 0x01000001, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0042h - 0x00111111, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0043h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x00011111, 0x00100001, 0x01000001, // 0044h - 0x01000001, 0x01000001, 0x00100001, 0x00011111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0045h - 0x01111111, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0046h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0047h - 0x01111001, 0x01000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0048h - 0x01111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x00001000, 0x00001000, // 0049h - 0x00001000, 0x00001000, 0x00001000, 0x00111110, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 004ah - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01100001, 0x00011001, 0x00000101, // 004bh - 0x00000011, 0x00000101, 0x00011001, 0x01100001, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 004ch - 0x00000001, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01000001, 0x01100011, 0x01010101, // 004dh - 0x01001001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x01000001, 0x01000011, 0x01000101, // 004eh - 0x01001001, 0x01010001, 0x01100001, 0x01000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 004fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0050h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 0051h - 0x01000001, 0x01011001, 0x00100010, 0x01011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0052h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x01000001, 0x00000001, // 0053h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00001000, 0x00001000, // 0054h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0055h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01000001, 0x01000001, 0x00100010, // 0056h - 0x00100010, 0x00010100, 0x00010100, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0057h - 0x01001001, 0x01010101, 0x01100011, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0058h - 0x00001000, 0x00010100, 0x00100010, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0059h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01111111, 0x00100000, 0x00010000, // 005ah - 0x00001000, 0x00000100, 0x00000010, 0x01111111, - 0x00000000, 0x01111100, 0x00000100, 0x00000100, // 005bh - 0x00000100, 0x00000100, 0x00000100, 0x01111100, - 0x00000000, 0x00100010, 0x00010100, 0x00111110, // 005ch - 0x00001000, 0x00111110, 0x00001000, 0x00001000, - 0x00000000, 0x00011111, 0x00010000, 0x00010000, // 005dh - 0x00010000, 0x00010000, 0x00010000, 0x00011111, - 0x00000000, 0x00001000, 0x00010100, 0x00100010, // 005eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005fh - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x00010000, 0x00001000, 0x00011000, // 0060h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00011110, 0x00100001, // 0061h - 0x00111110, 0x00100001, 0x00100001, 0x01011110, - 0x00000000, 0x00000001, 0x00000001, 0x00111111, // 0062h - 0x01000001, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00000000, 0x00111100, 0x01000010, // 0063h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000000, 0x01000000, 0x01111110, // 0064h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0065h - 0x01111111, 0x00000001, 0x01000001, 0x00111110, - 0x00000000, 0x00110000, 0x00001000, 0x00001000, // 0066h - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x01111110, 0x01000001, // 0067h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0068h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00001000, 0x00000000, 0x00001000, // 0069h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00100000, 0x00000000, 0x00100000, // 006ah - 0x00100000, 0x00100001, 0x00100001, 0x00011110, - 0x00000000, 0x00000001, 0x00000001, 0x01100001, // 006bh - 0x00011001, 0x00000111, 0x00011001, 0x01100001, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 006ch - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00110111, 0x01001001, // 006dh - 0x01001001, 0x01001001, 0x01001001, 0x01001001, - 0x00000000, 0x00000000, 0x00111111, 0x01000001, // 006eh - 0x01000001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00000000, 0x00011100, 0x00100010, // 006fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00000000, 0x00111101, 0x01000011, // 0070h - 0x01000001, 0x01000011, 0x00111101, 0x00000001, - 0x00000000, 0x00000000, 0x01011110, 0x01100001, // 0071h - 0x01000001, 0x01100001, 0x01011110, 0x01000000, - 0x00000000, 0x00000000, 0x00110001, 0x00001101, // 0072h - 0x00000011, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0073h - 0x00001110, 0x00110000, 0x01000001, 0x00111110, - 0x00000000, 0x00000100, 0x00000100, 0x01111111, // 0074h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0075h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0076h - 0x00100010, 0x00100010, 0x00010100, 0x00001000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0077h - 0x01001001, 0x00101010, 0x00101010, 0x00010100, - 0x00000000, 0x00000000, 0x00100001, 0x00010010, // 0078h - 0x00001100, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0079h - 0x00100010, 0x00011100, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111111, 0x00010000, // 007ah - 0x00001000, 0x00000100, 0x00000010, 0x00111111, - 0x00000000, 0x00001000, 0x00011110, 0x01100100, // 007bh - 0x00011000, 0x00100100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x00011110, 0x00000100, // 007ch - 0x00011110, 0x00110101, 0x00101101, 0x00010010, - 0x00000000, 0x00000000, 0x00000000, 0x00010001, // 007dh - 0x00100001, 0x00100001, 0x00000001, 0x00000010, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007eh - 0x00011110, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007fh - 0x00111110, 0x00010000, 0x00001100, 0x00110010, - 0x00000000, 0x00000000, 0x00000100, 0x00101111, // 0080h - 0x01000100, 0x00011110, 0x00100101, 0x00010110, - 0x00000000, 0x00000000, 0x00001010, 0x00011110, // 0081h - 0x00101011, 0x00100010, 0x00010100, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00011101, // 0082h - 0x00101011, 0x00101001, 0x00011001, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00111000, // 0083h - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00000000, 0x00000000, 0x00011100, // 0084h - 0x00100011, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000110, 0x01001001, 0x00110000, // 0085h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000100, 0x00111111, 0x00000100, // 0086h - 0x00111110, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000000, 0x00100001, 0x01000001, // 0087h - 0x01000001, 0x01000001, 0x00000001, 0x00000010, - 0x00000000, 0x00111100, 0x00000000, 0x00111110, // 0088h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00011100, 0x00000000, 0x00111110, // 0089h - 0x00010000, 0x00001000, 0x00010100, 0x01100010, - 0x00000000, 0x00100100, 0x01011111, 0x00000100, // 008ah - 0x00111110, 0x01000101, 0x01000101, 0x00100010, - 0x00000000, 0x00100010, 0x01001111, 0x01010010, // 008bh - 0x01010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x00000100, 0x00111110, 0x00001000, // 008ch - 0x00111110, 0x00010000, 0x00000010, 0x00111100, - 0x00000000, 0x00100000, 0x00011000, 0x00000110, // 008dh - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x00100000, 0x01111101, 0x00100001, // 008eh - 0x00100001, 0x00100001, 0x00100001, 0x00010010, - 0x00000000, 0x00011110, 0x00100000, 0x00000000, // 008fh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00001000, 0x01111111, 0x00010000, // 0090h - 0x00100000, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0091h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00010000, 0x01111111, 0x00011000, // 0092h - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 0093h - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x00111100, 0x00010000, 0x00001100, // 0094h - 0x01111111, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000100, 0x00011111, 0x00000100, // 0095h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00001000, 0x01111111, 0x00000100, // 0096h - 0x00111100, 0x01000010, 0x01000000, 0x00111100, - 0x00000000, 0x00000000, 0x00011100, 0x00100011, // 0097h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01111111, 0x00010000, 0x00001000, // 0098h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000010, 0x00110010, 0x00001100, // 0099h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00100100, 0x01001111, 0x01000010, // 009ah - 0x00010001, 0x00111100, 0x00010010, 0x00001100, - 0x00000000, 0x00000010, 0x01111010, 0x01000010, // 009bh - 0x00000010, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00100010, 0x00111110, 0x01010010, // 009ch - 0x01001011, 0x01101101, 0x01010101, 0x00110010, - 0x00000000, 0x00110010, 0x01001011, 0x01000110, // 009dh - 0x01000110, 0x01110010, 0x01001011, 0x00110010, - 0x00000000, 0x00011100, 0x00101010, 0x01001001, // 009eh - 0x01001001, 0x01000101, 0x01000101, 0x00110010, - 0x00000000, 0x00100001, 0x01111101, 0x00100001, // 009fh - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00000100, 0x00100011, 0x01100010, // 00a0h - 0x00100001, 0x00100001, 0x00010010, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a1h - 0x00000000, 0x00000100, 0x00001010, 0x00000100, - 0x00000000, 0x01110000, 0x00010000, 0x00010000, // 00a2h - 0x00010000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a3h - 0x00001000, 0x00001000, 0x00001000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a4h - 0x00000000, 0x00000010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00011000, // 00a5h - 0x00011000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x01111111, // 00a6h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00111111, 0x00100000, // 00a7h - 0x00010100, 0x00001100, 0x00000100, 0x00000010, - 0x00000000, 0x00000000, 0x00100000, 0x00100000, // 00a8h - 0x00010000, 0x00001111, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000100, 0x00111111, // 00a9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00aah - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00000000, 0x00010000, 0x00111111, // 00abh - 0x00011000, 0x00010100, 0x00010010, 0x00011001, - 0x00000000, 0x00000000, 0x00000010, 0x00111111, // 00ach - 0x00100010, 0x00010010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00adh - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00aeh - 0x00111110, 0x00100000, 0x00100000, 0x00111110, - 0x00000000, 0x00000000, 0x00100101, 0x00101010, // 00afh - 0x00101010, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00b0h - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x00101000, // 00b1h - 0x00011000, 0x00001000, 0x00001000, 0x00000100, - 0x00000000, 0x01000000, 0x00100000, 0x00011000, // 00b2h - 0x00010111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00001000, 0x01111111, 0x01000001, // 00b3h - 0x01000001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000000, 0x00111110, 0x00001000, // 00b4h - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00100000, 0x01111111, 0x00110000, // 00b5h - 0x00101000, 0x00100100, 0x00100010, 0x00110001, - 0x00000000, 0x00000100, 0x01111111, 0x01000100, // 00b6h - 0x01000100, 0x01000100, 0x01000010, 0x00100001, - 0x00000000, 0x00000100, 0x00111111, 0x00001000, // 00b7h - 0x01111111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x01111100, 0x01000100, 0x01000100, // 00b8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000010, 0x01111110, 0x00100010, // 00b9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00bah - 0x01000000, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 00bbh - 0x00100010, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000011, 0x00000100, 0x01000011, // 00bch - 0x01000100, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x01111111, 0x01000000, 0x00100000, // 00bdh - 0x00010000, 0x00011000, 0x00100100, 0x01000011, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00beh - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x01000001, 0x01000010, 0x01000000, // 00bfh - 0x00100000, 0x00100000, 0x00011000, 0x00000110, - 0x00000000, 0x01111110, 0x01000010, 0x01001110, // 00c0h - 0x01110001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x01100000, 0x00011110, 0x00010000, // 00c1h - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01000101, 0x01001010, 0x01001010, // 00c2h - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00c3h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000010, 0x00000010, 0x00000110, // 00c4h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x00010000, 0x00010000, 0x01111111, // 00c5h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111110, 0x00000000, // 00c6h - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000100, // 00c7h - 0x00101000, 0x00010000, 0x00101000, 0x01000110, - 0x00000000, 0x00001000, 0x01111111, 0x00100000, // 00c8h - 0x00010000, 0x00011100, 0x01101011, 0x00001000, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 00c9h - 0x00100000, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x00010010, 0x00100010, 0x00100010, // 00cah - 0x01000010, 0x01000010, 0x01000001, 0x01000001, - 0x00000000, 0x00000001, 0x00000001, 0x01111111, // 00cbh - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cch - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000100, 0x00001010, // 00cdh - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x01111111, // 00ceh - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cfh - 0x00100010, 0x00010100, 0x00001000, 0x00010000, - 0x00000000, 0x00001110, 0x01110000, 0x00001110, // 00d0h - 0x01110000, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00001000, 0x00001000, 0x00000100, // 00d1h - 0x00000100, 0x00100010, 0x01000010, 0x01111111, - 0x00000000, 0x01000000, 0x01000000, 0x00100100, // 00d2h - 0x00101000, 0x00010000, 0x00101100, 0x01000011, - 0x00000000, 0x01111111, 0x00000100, 0x01111111, // 00d3h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00d4h - 0x00100010, 0x00010100, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00d5h - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00d6h - 0x01111110, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00d7h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00d8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00001010, 0x00001010, 0x00001010, // 00d9h - 0x01001010, 0x01001010, 0x00101010, 0x00011001, - 0x00000000, 0x00000010, 0x00000010, 0x01000010, // 00dah - 0x01000010, 0x00100010, 0x00010010, 0x00001110, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dbh - 0x01000001, 0x01000001, 0x01000001, 0x01111111, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dch - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000011, 0x01000100, 0x01000000, // 00ddh - 0x01000000, 0x00100000, 0x00010000, 0x00001111, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00deh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00dfh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00011110, 0x00001000, 0x00000100, // 00e0h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x00000000, 0x00001100, 0x00010010, // 00e1h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x00100001, 0x01111101, // 00e2h - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00111100, 0x00010000, 0x00111100, // 00e3h - 0x00010000, 0x00011100, 0x00110010, 0x00001100, - 0x00000000, 0x00001110, 0x00101000, 0x00101000, // 00e4h - 0x00111110, 0x01100101, 0x00100101, 0x00010010, - 0x00000000, 0x00000100, 0x00101111, 0x01000100, // 00e5h - 0x00000110, 0x01000101, 0x01000101, 0x00111110, - 0x00000000, 0x00100010, 0x00100010, 0x00111110, // 00e6h - 0x01010010, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000100, 0x00011111, 0x00000010, // 00e7h - 0x00011111, 0x01000010, 0x01000010, 0x00111100, - 0x00000000, 0x00010010, 0x00111110, 0x01010011, // 00e8h - 0x01000010, 0x00100100, 0x00000100, 0x00000100, - 0x00000000, 0x00001000, 0x00111101, 0x01001011, // 00e9h - 0x01001001, 0x01001001, 0x00111000, 0x00000100, - 0x00000000, 0x00001000, 0x00111000, 0x00001000, // 00eah - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00011000, 0x00100000, 0x00000100, // 00ebh - 0x00111010, 0x01000110, 0x01000000, 0x00111000, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00ech - 0x01000110, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00edh - 0x01000011, 0x01001100, 0x01010010, 0x00111100, - 0x00000000, 0x00100010, 0x00110011, 0x00101010, // 00eeh - 0x00100110, 0x00100010, 0x00100011, 0x01000010, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00efh - 0x01000011, 0x01000000, 0x01000010, 0x00111100, - 0x00000000, 0x00000010, 0x00111011, 0x01000110, // 00f0h - 0x01000010, 0x01000011, 0x01000010, 0x00110010, - 0x00000000, 0x00000100, 0x00000100, 0x00000010, // 00f1h - 0x01000110, 0x01000101, 0x01000101, 0x00111001, - 0x00000000, 0x01010100, 0x01111111, 0x00100100, // 00f2h - 0x00100100, 0x00100100, 0x00100010, 0x00010001, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 00f3h - 0x00111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01011110, 0x01100010, 0x00100010, // 00f4h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010010, 0x01111110, 0x00100010, // 00f5h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 00f6h - 0x00100000, 0x00100000, 0x00100000, 0x00111111, - 0x00000000, 0x01010010, 0x01010010, 0x00111111, // 00f7h - 0x00010010, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01010011, 0x01010100, 0x00100011, // 00f8h - 0x00100100, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x01010000, 0x01011111, 0x00010000, // 00f9h - 0x00001000, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x01010010, 0x01111111, 0x00100010, // 00fah - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x01010001, 0x01010010, 0x00100000, // 00fbh - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01011110, 0x01010010, 0x00100110, // 00fch - 0x00111001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010000, 0x01011110, 0x00010000, // 00fdh - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x00100101, 0x01001010, 0x00101010, // 00feh - 0x00100000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x01011110, 0x01010000, 0x00111111, // 00ffh - 0x00001000, 0x00001000, 0x00001000, 0x00000110 -}; - - -/*---------------------------------------------------------------------------* - Palette data - *---------------------------------------------------------------------------*/ -const u32 d_PaletteData[8 * 16] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // black - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x001f0000, 0x00000000, 0x00000000, 0x00000000, // red - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03e00000, 0x00000000, 0x00000000, 0x00000000, // green - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7c000000, 0x00000000, 0x00000000, 0x00000000, // blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03ff0000, 0x00000000, 0x00000000, 0x00000000, // yellow - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7c1f0000, 0x00000000, 0x00000000, 0x00000000, // purple - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7fe00000, 0x00000000, 0x00000000, 0x00000000, // light blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00180000, 0x00000000, 0x00000000, 0x00000000, // dark red - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03000000, 0x00000000, 0x00000000, 0x00000000, // dark green - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x60000000, 0x00000000, 0x00000000, 0x00000000, // dark blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03180000, 0x00000000, 0x00000000, 0x00000000, // dark yellow - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x60180000, 0x00000000, 0x00000000, 0x00000000, // dark purple - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x63000000, 0x00000000, 0x00000000, 0x00000000, // dark light blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x56b50000, 0x00000000, 0x00000000, 0x00000000, // gray - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x2d6b0000, 0x00000000, 0x00000000, 0x00000000, // dark gray - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7fff0000, 0x00000000, 0x00000000, 0x00000000, // white - 0x00000000, 0x00000000, 0x00000000, 0x00000000 -}; - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CheckCardMode/src/font.h b/build/tests/CheckCardMode/src/font.h deleted file mode 100644 index b4a94093..00000000 --- a/build/tests/CheckCardMode/src/font.h +++ /dev/null @@ -1,36 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - demos.TWL - snd - extraFunc - File: font.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef FONT_H_ -#define FONT_H_ - -#ifdef __cplusplus -extern "C" { -#endif -/*===========================================================================*/ - -#include - -extern const u32 d_CharData[8 * 256]; -extern const u32 d_PaletteData[8 * 16]; - -/*===========================================================================*/ -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // FONT_H_ diff --git a/build/tests/CheckCardMode/src/hotswTypes.h b/build/tests/CheckCardMode/src/hotswTypes.h deleted file mode 100644 index 02d0843e..00000000 --- a/build/tests/CheckCardMode/src/hotswTypes.h +++ /dev/null @@ -1,134 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - HOTSW - include - File: type.h - - Copyright 2007-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - *---------------------------------------------------------------------------*/ -#ifndef __HOTSW_TYPES_H__ -#define __HOTSW_TYPES_H__ - -#include -#include -#include "romSpec.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -static inline void HOTSW_WaitCardCtrl(void) -{ - while( reg_MI_MCCNT1_A & REG_MI_MCCNT1_START_MASK ){} -} - -// Define ------------------------------------------------------------------- -// --- Boot Segment -#define BOOT_SEGMENT_SIZE 0x1000 - -// --- Secure Segment -#define SECURE_SEGMENT_START 0x4000 -#define SECURE_SEGMENT_SIZE 0x4000 -#define SECURE_SEGMENT_END (SECURE_SEGMENT_START + SECURE_SEGMENT_SIZE) - -// --- TWL Card -#define TWLCARD_BORDER_OFFSET 0x80000 - -// --- Page / Segment (Byte) -#define PAGE_SIZE 0x200 -#define ONE_SEGMENT_SIZE 0x1000 - -// --- Page / Segment (Word) -#define PAGE_WORD_SIZE 0x80 -#define ONE_SEGMENT_WORD_SIZE 0x400 - -// --- Rom Emulation -#define ROM_EMULATION_DATA_SIZE 0x20 - -// --- Thread -#define HOTSW_THREAD_STACK_SIZE (1024 * 2) -#define HOTSW_DMA_MSG_NUM 8 -#define HOTSW_INSERT_MSG_NUM 16 -#define HOTSW_PULLED_MSG_NUM 16 -#define HOTSW_CTRL_MSG_NUM 8 -#define HOTSW_MSG_BUFFER_NUM (HOTSW_INSERT_MSG_NUM + HOTSW_PULLED_MSG_NUM + HOTSW_CTRL_MSG_NUM) -#define HOTSW_POLLING_CTRL_BUFFER_NUM 4 - -// --- Card Control Reg 0 -#define HOTSW_E2PROM_CTRL_MASK 0x00ff - -// --- Card Control Reg 1 -#define START_FLG_MASK 0x80000000 -#define READY_FLG_MASK 0x00800000 - -#define LATENCY1_SHIFT 0 -#define LATENCY1_MASK 0x00001fff - -#define DS_SHIFT 13 -#define DS_MASK 0x00002000 - -#define SE_SHIFT 14 -#define SE_MASK 0x00004000 - -#define SCR_SHIFT 15 -#define SCR_MASK 0x00008000 - -#define LATENCY2_SHIFT 16 -#define LATENCY2_MASK 0x003f0000 - -#define CS_SHIFT 22 -#define CS_MASK 0x00400000 - -#define RDY_SHIFT 23 -#define RDY_MASK 0x00800000 - -#define PC_SHIFT 24 -#define PC_MASK 0x07000000 - -#define CT_SHIFT 27 -#define CT_MASK 0x08000000 - -#define TRM_SHIFT 28 -#define TRM_MASK 0x10000000 - -#define RESB_SHIFT 29 -#define RESB_MASK 0x20000000 - -#define WR_SHIFT 30 -#define WR_MASK 0x40000000 - -#define START_SHIFT 31 -#define START_MASK 0x80000000 - -#define SCRAMBLE_MASK 0x1040e000 // XNu֌W̃tO}XN -#define SECURE_COMMAND_SCRAMBLE_MASK 0x00406000 // CS SE DS̃}XN - -// --- Page Count -#define PAGE_0 0x0UL << PC_SHIFT -#define PAGE_1 0x1UL << PC_SHIFT -#define PAGE_2 0x2UL << PC_SHIFT -#define PAGE_4 0x3UL << PC_SHIFT -#define PAGE_8 0x4UL << PC_SHIFT -#define PAGE_16 0x5UL << PC_SHIFT -#define PAGE_32 0x6UL << PC_SHIFT -#define PAGE_STAT 0x7UL << PC_SHIFT - - -// union --------------------------------------------------------------------- -typedef union -{ - u64 dw; - u8 b[8]; -} Cmd64; - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif // __HOTSW_TYPES_H__ \ No newline at end of file diff --git a/build/tests/CheckCardMode/src/main.c b/build/tests/CheckCardMode/src/main.c deleted file mode 100644 index 4bd9f8d9..00000000 --- a/build/tests/CheckCardMode/src/main.c +++ /dev/null @@ -1,535 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - demos - CARD - hotswDebug - File: main.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - *---------------------------------------------------------------------------*/ - -#include -#include -#include "DEMO.h" -#include "hotswTypes.h" -#include "font.h" - -#define SDK_MAKERCODE '10' -#define DIGEST_HASH_BLOCK_SIZE_SHA1 (512/8) - -#define MY_TEMP_BUFFER_SIZE 0x80000 -#define GAME_FIELD_START_ADDRESS 0x8000 - -#define READY_MASK 0x00800000 -#define CARD_COMMAND_MASK 0x07000000 - -#define MY_ROMHEADER_TWL ((ROM_Header_Short *)HW_TWL_CARD_ROM_HEADER_BUF) -#define MY_ROMHEADER_NTR ((ROM_Header_Short *)HW_CARD_ROM_HEADER) - -// --------------------------------------------------------------- -// HMACSHA1̌ -static u8 s_digestDefaultKey[ DIGEST_HASH_BLOCK_SIZE_SHA1 ] = { - 0x21, 0x06, 0xc0, 0xde, - 0xba, 0x98, 0xce, 0x3f, - 0xa6, 0x92, 0xe3, 0x9d, - 0x46, 0xf2, 0xed, 0x01, - - 0x76, 0xe3, 0xcc, 0x08, - 0x56, 0x23, 0x63, 0xfa, - 0xca, 0xd4, 0xec, 0xdf, - 0x9a, 0x62, 0x78, 0x34, - - 0x8f, 0x6d, 0x63, 0x3c, - 0xfe, 0x22, 0xca, 0x92, - 0x20, 0x88, 0x97, 0x23, - 0xd2, 0xcf, 0xae, 0xc2, - - 0x32, 0x67, 0x8d, 0xfe, - 0xca, 0x83, 0x64, 0x98, - 0xac, 0xfd, 0x3e, 0x37, - 0x87, 0x46, 0x58, 0x24 -}; - -static u32 checkBuf[MY_TEMP_BUFFER_SIZE/sizeof(u32)] ATTRIBUTE_ALIGN(16); - -static ROM_Header_Short *rh; -static BOOL isTwlApplication; -static BOOL isTwlCard; -static BOOL flxhash, ltdhash, mirrorimage; -static u16 card_lock_id; - -static u16 screen[32 * 32] ATTRIBUTE_ALIGN(HW_CACHE_LINE_SIZE); - -// --------------------------------------------------------------- -static BOOL CheckHashValue(void* buf, u32 size, void* digest); -static void MY_LoadCard_arm7Static(void); -static void MY_LoadCard_arm7LtdStatic(void); -static void debugMessage(void); -static void ShowResult(void); - -static void SetCommand(Cmd64 *cndLE); -static void ReadIDGame(void); -static void ReadPageGame(u32 start_addr, void* buf, u32 size); -static void ReadCardData(void* dest, s32 offset, s32 length); -static void isGameModeForNTR(void); - -static void VBlankIntr (void); -static void PrintString (s16 x, s16 y, u8 palette, char *text, ...); -static void VolumeSwitchCallback(SNDEXResult result, void* arg); - -/*---------------------------------------------------------------------------* - Name: NitroMain - - Description: C Gg|Cg. - *---------------------------------------------------------------------------*/ -void NitroMain(void) -{ - CARDRomHeader *card_header = (void*)CARD_GetRomHeader(); - - OS_Init(); - OS_InitTick(); - CARD_Init(); - GX_Init(); - GX_DispOff(); - GXS_DispOff(); - - if ( card_header->maker_code == SDK_MAKERCODE ) - { - CARD_Enable(TRUE); - } - - /* \ݒ菉 */ - GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); - MI_CpuClearFast((void*)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE); - (void)GX_DisableBankForLCDC(); - MI_CpuFillFast((void*)HW_OAM, GX_LCD_SIZE_Y, HW_OAM_SIZE); - MI_CpuClearFast((void*)HW_PLTT, HW_PLTT_SIZE); - MI_CpuFillFast((void*)HW_DB_OAM, GX_LCD_SIZE_Y, HW_DB_OAM_SIZE); - MI_CpuClearFast((void*)HW_DB_PLTT, HW_DB_PLTT_SIZE); - GX_SetBankForBG(GX_VRAM_BG_128_A); - G2_SetBG0Control(GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0xf800, // SCR x[XubN 31 - GX_BG_CHARBASE_0x00000, // CHR x[XubN 0 - GX_BG_EXTPLTT_01); - G2_SetBG0Priority(0); - GX_SetGraphicsMode(GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D); - GX_SetVisiblePlane(GX_PLANEMASK_BG0); - GX_LoadBG0Char(d_CharData, 0, sizeof(d_CharData)); - GX_LoadBGPltt(d_PaletteData, 0, sizeof(d_PaletteData)); - MI_CpuClearFast((void*)screen, sizeof(screen)); - DC_FlushRange(screen, sizeof(screen)); - GX_LoadBG0Scr(screen, 0, sizeof(screen)); - - /* ݐݒ */ - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - /* LCD \Jn */ - GX_DispOn(); - GXS_DispOn(); - - PrintString(0, 0, 0xa, "***** Card Mode Check *****"); - - // J[hAv^Cv𔻕ʁBgRom Header Buffer ؑւ - if(MY_ROMHEADER_NTR->platform_code & PLATFORM_CODE_FLAG_TWL){ - PrintString(0, 2, 0xf, "- TWL Application -"); - isTwlApplication = TRUE; - rh = MY_ROMHEADER_TWL; - } - else{ - PrintString(0, 2, 0xf, "- NTR Application -"); - isTwlApplication = FALSE; - rh = MY_ROMHEADER_NTR; - } - - OS_Printf("Buf Adr : 0x%08x\n", checkBuf); - - // J[h^Cv̔ - isTwlCard = (*(vu32 *)(HW_BOOT_CHECK_INFO_BUF) & HOTSW_ROMID_TWLROM_MASK) ? TRUE : FALSE; - - // Frh̏IĂĂяo - debugMessage(); - - // tȌ - flxhash = FALSE; - ltdhash = FALSE; - mirrorimage = FALSE; - - // bNID擾Ă - card_lock_id = (u16)OS_GetLockID(); - - if(isTwlApplication){ - MY_LoadCard_arm7Static(); - MY_LoadCard_arm7LtdStatic(); - } - else{ - isGameModeForNTR(); - } - - ShowResult(); - - while(1){ - DEMO_DrawFlip(); - OS_WaitVBlankIntr(); - } -} - - -/*---------------------------------------------------------------------------* - Name: ShowResult - - Description: - *---------------------------------------------------------------------------*/ -static void ShowResult(void) -{ - PrintString(0, 13, 0xf, "-- Result --"); - - if(flxhash && ltdhash){ - if(isTwlCard){ - PrintString(0, 15, 0x6, "Game2 Mode"); - } - else{ - PrintString(0, 15, 0x5, "Game Mode"); - } - } - else if(mirrorimage){ - PrintString(0, 15, 0x5, "Game Mode"); - } - else{ - PrintString(0, 15, 0x1, "Unknown Mode"); - } -} - - -/*---------------------------------------------------------------------------* - Name: debugMessage - - Description: - *---------------------------------------------------------------------------*/ -static void debugMessage(void) -{ - PrintString(0, 4, 0xf, "amr7 NmlRomOfs : 0x%08x", rh->sub_rom_offset); - PrintString(0, 5, 0xf, "amr7 LtdRomOfs : 0x%08x", rh->sub_ltd_rom_offset); - - OS_TPrintf("amr7 NmlRomOfs : 0x%08x\n", rh->sub_rom_offset); - OS_TPrintf("amr7 NmlSize : 0x%08x\n", rh->sub_size); - OS_TPrintf("amr7 LtdRomOfs : 0x%08x\n", rh->sub_ltd_rom_offset); - OS_TPrintf("amr7 LtdSize : 0x%08x\n", rh->sub_ltd_size); -} - - -/*---------------------------------------------------------------------------* - Name: CheckHashValue - - Description: W[nbV`FbN - *---------------------------------------------------------------------------*/ -static BOOL CheckHashValue(void* buf, u32 size, void* digest) -{ - u8 sha1data[DIGEST_SIZE_SHA1]; - BOOL retval = TRUE; - - // NA - MI_CpuClear8(sha1data, sizeof(sha1data)); - - // ARM7풓W[Hashlƍ - SVC_CalcHMACSHA1( sha1data, - buf, - size, - s_digestDefaultKey, - sizeof(s_digestDefaultKey) ); - - return SVC_CompareSHA1( sha1data, digest ); -} - - -/*---------------------------------------------------------------------------* - Name: MY_LoadCard_arm7Static - - Description: ARM7풓W[ ǂݏoEnbV`FbN - *---------------------------------------------------------------------------*/ -static void MY_LoadCard_arm7Static(void) -{ - BOOL result; - u32* pBuf = checkBuf; - - CARD_LockRom(card_lock_id); - - ReadCardData(pBuf, (s32)rh->sub_rom_offset, (s32)rh->sub_size); - - CARD_UnlockRom(card_lock_id); - - result = CheckHashValue(pBuf, rh->sub_size, (void *)rh->sub_static_digest); - - if(result){ - flxhash = TRUE; - PrintString(0, 7, 0x8, "Flx Area : Accessible"); - } - else{ - flxhash = FALSE; - PrintString(0, 7, 0x1, "Flx Area : Not Accessible"); - } -} - - -/*---------------------------------------------------------------------------* - Name: MY_LoadCard_arm7LtdStatic - - Description: ARM7g풓W[ ǂݏoEnbV`FbN - *---------------------------------------------------------------------------*/ -static void MY_LoadCard_arm7LtdStatic(void) -{ - BOOL result; - u32* pBuf = checkBuf; - - CARD_LockRom(card_lock_id); - - ReadCardData(pBuf, (s32)rh->sub_ltd_rom_offset, (s32)rh->sub_ltd_size); - - CARD_UnlockRom(card_lock_id); - - result = CheckHashValue(pBuf, rh->sub_ltd_size, (void *)rh->sub_ltd_static_digest); - - if(result){ - ltdhash = TRUE; - PrintString(0, 9, 0x8, "Ltd Area : Accessible"); - } - else{ - ltdhash = FALSE; - PrintString(0, 9, 0x1, "Ltd Area : Not Accessible"); - } -} - - -/*---------------------------------------------------------------------------* - Name: isGameModeForNTR - - Description: Game[hǂ肷 - *---------------------------------------------------------------------------*/ -static void isGameModeForNTR(void) -{ - u32 buf1[PAGE_SIZE/sizeof(u32)]; - u32 buf2[PAGE_SIZE/sizeof(u32)]; - int result; - - /* Rom Header̈ǂŁAGamë̃C[WoĂGame[h */ - ReadCardData(buf1, (s32)0, (s32)PAGE_SIZE); - ReadCardData(buf2, (s32)GAME_FIELD_START_ADDRESS, (s32)PAGE_SIZE); - - result = MI_CpuComp8( buf1, buf2, PAGE_SIZE ); - - if(result){ - mirrorimage = FALSE; - PrintString(0, 7, 0x1, "Flx Area : Not Accessible"); - } - else{ - mirrorimage = TRUE; - PrintString(0, 7, 0x8, "Flx Area : Accessible"); - } -} - - -/*---------------------------------------------------------------------------* - Name: HOTSWi_SetCommand - - Description: ŗ^ꂽR}h̃GfBAςăWX^ɃZbg - *---------------------------------------------------------------------------*/ -static void SetCommand(Cmd64 *cndLE) -{ - Cmd64 cndBE; - - // rbOGfBAɒ - cndBE.b[7] = cndLE->b[0]; - cndBE.b[6] = cndLE->b[1]; - cndBE.b[5] = cndLE->b[2]; - cndBE.b[4] = cndLE->b[3]; - cndBE.b[3] = cndLE->b[4]; - cndBE.b[2] = cndLE->b[5]; - cndBE.b[1] = cndLE->b[6]; - cndBE.b[0] = cndLE->b[7]; - - // MCCMD WX^ݒ - reg_MI_MCCMD0_A = *(u32*)cndBE.b; - reg_MI_MCCMD1_A = *(u32*)&cndBE.b[4]; -} - - -/*---------------------------------------------------------------------------* - Name: ReadIDGame - - Description: Q[[hIDǂݍ - *---------------------------------------------------------------------------*/ -static void ReadIDGame(void) -{ - u32 id; - Cmd64 cndLE; - u32 rom_ctrl = *(vu32 *)(HW_CARD_ROM_HEADER + 0x60); - - rom_ctrl = rom_ctrl & ~CARD_COMMAND_MASK; - - // gGfBAō - cndLE.dw = HSWOP_G_OP_RD_ID; - - // MCCMD WX^ݒ - SetCommand(&cndLE); - - // MCCNT0 WX^ݒ - reg_MI_MCCNT0_A = (u16)((reg_MI_MCCNT0_A & 0x00ff) | REG_MI_MCCNT0_E_MASK); - - // MCCNT1 WX^ݒ - reg_MI_MCCNT1_A = rom_ctrl | START_MASK | PAGE_1; - - while(reg_MI_MCCNT1_A & START_MASK){ - while(!(reg_MI_MCCNT1_A & READY_MASK)){} - id = reg_MI_MCD1_A; - } - - OS_Printf("Card ID : 0x%08x\n", id); - - OS_SpinWait( 100 ); -} - - -/*---------------------------------------------------------------------------* - Name: ReadPageGame - - Description: Q[[hŁAw肳ꂽy[Wwobt@ɎwTCYǂݍ - - CT=150ns Pagecount=1page Latency=RomHeaderŎw̒l - *---------------------------------------------------------------------------*/ -static void ReadPageGame(u32 start_addr, void* buf, u32 size) -{ - u32 loop, counter=0; - u64 i, page; - Cmd64 cndLE; - u32 rom_ctrl = *(vu32 *)(HW_CARD_ROM_HEADER + 0x60); - - rom_ctrl = rom_ctrl & ~CARD_COMMAND_MASK; - page = (u32)(start_addr / PAGE_SIZE); - loop = (u32)(size / PAGE_SIZE); - loop = (size % PAGE_SIZE) ? loop + 1 : loop; - - for(i=0; i -#include - -#define HASH_PATH "/sign/DSHashTable.bin" - -/* - ̃Tv̓eXgpłACARD֐̑FS֐ - DHTCuĂOł -*/ - -#define ROM_PATH "/srl" - -#define DS_HASH_TABLE_NUMS 3000 -#define DS_HASH_TABLE_SIZE (sizeof(DHTHeader) + DS_HASH_TABLE_NUMS * sizeof(DHTDatabase)) - -/* - DHTt@Cǂݍݐ -*/ -static u8 dht_buffer[DS_HASH_TABLE_SIZE] ATTRIBUTE_ALIGN(32); -static DHTFile *const dht = (DHTFile*)dht_buffer; -/* - Phase2pobt@ -*/ -static DHTPhase2Work p2work; - -/* - ۂɂ̓AhXŒ -*/ -#include -static ROM_Header_Short rom_header ATTRIBUTE_ALIGN(32); // ĝ DHT_DS_HEADER_SIZE -static u8 rom_arm9[3*1024*1024] ATTRIBUTE_ALIGN(32); -static u8 rom_arm7[1024*1024] ATTRIBUTE_ALIGN(32); -#include - -/* - foCXANZXAPI -*/ -#if 1 -// FS (arg == FSFile*) -static BOOL ReadImage(void* dest, s32 offset, s32 length, void* arg) -{ - FSFile* fp = arg; - s32 result; - if ( !FS_SeekFile(fp, offset, FS_SEEK_SET) ) - { - OS_TPrintf("Cannot seek to the offset (%d bytes).\n", offset); - return FALSE; - } - result = FS_ReadFile(fp, dest, length); - if ( result != length ) - { - OS_TPrintf("Cannot read the data (%d bytes).\n", length); - return FALSE; - } - return TRUE; -} -static BOOL ReadImageEx(SVCHMACSHA1Context* ctx, s32 offset, s32 length, void* arg) -{ - if ( !ReadImage(p2work.buffer, offset, length, arg) ) - { - return FALSE; - } - DHT_CheckHashPhase2ExUpdate(ctx, p2work.buffer, length); - return TRUE; -} -#else -#ifdef SDK_ARM9 -#define PAGE_SIZE 512 -// CARD (arg == dma no) -static BOOL ReadImage(void* dest, s32 offset, s32 length, void* arg) -{ - u32 dma = (u32)arg; - CARD_ReadRom(dma, (void*)offset, dest, (u32)length); - return TRUE; -} -#else -// HOTSW (arg == CardBootData* cdb) -#include -#include -static BOOL ReadImage(void* dest, s32 offset, s32 length, void* arg) -{ - HotSwState retval; - if ( offset % 512 ) - { - static u8 page_buffer[512]; - u32 page_offset = (u32)(offset & -512); - u32 buffer_offset = (u32)(offset % 512); - u32 valid_length = 512 - buffer_offset; - retval = ReadPageGame((CardBootData*)arg, page_offset, page_buffer, 512); - if (retval != HOTSW_SUCCESS) - { - return FALSE; - } - MI_CpuCopy8(page_buffer + buffer_offset, dest, (length < valid_length ? length : valid_length)); - dest = (u8*)dest + valid_length; - offset += valid_length; - length -= valid_length; - if ( length < 0) - { - return TRUE; - } - } - retval = ReadPageGame((CardBootData*)arg, (u32)offset, dest, (u32)length); - return (retval == HOTSW_SUCCESS); -} -#endif -#endif - -static void VBlankIntr( void ) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); -} - -/* - ؖ{Ԃ̂Aۂɂ̓I[o[wbhɂȂȂ -*/ -static BOOL CheckValidation(FSFile* fp) -{ - const DHTDatabase *db; - s32 result; - - // wb_̓ǂݍ - result = FS_ReadFile(fp, &rom_header, DHT_DS_HEADER_SIZE); - if ( result != DHT_DS_HEADER_SIZE ) - { - OS_TPrintf("Cannot read ROM header.\n"); - return FALSE; - } - // ARM9 - if ( rom_header.main_size > sizeof(rom_arm9) ) - { - OS_TPrintf("Too large main size (%d > %d).\n", rom_header.main_size, sizeof(rom_arm9)); - return FALSE; - } - if ( !FS_SeekFile(fp, (s32)rom_header.main_rom_offset, FS_SEEK_SET) ) - { - OS_TPrintf("Cannot seek to ARM9 static.\n"); - return FALSE; - } - result = FS_ReadFile(fp, rom_arm9, (s32)rom_header.main_size); - if ( result != rom_header.main_size ) - { - OS_TPrintf("Cannot read ARM9 static.\n"); - return FALSE; - } - // ARM7 - if ( rom_header.sub_size > sizeof(rom_arm7) ) - { - OS_TPrintf("Too large sub size (%d > %d).\n", rom_header.sub_size, sizeof(rom_arm7)); - return FALSE; - } - if ( !FS_SeekFile(fp, (s32)rom_header.sub_rom_offset, FS_SEEK_SET) ) - { - OS_TPrintf("Cannot seek to ARM7 static.\n"); - return FALSE; - } - result = FS_ReadFile(fp, rom_arm7, (s32)rom_header.sub_size); - if ( result != rom_header.sub_size ) - { - OS_TPrintf("Cannot read ARM7 static.\n"); - return FALSE; - } - - // f[^x[X̌ - db = DHT_GetDatabase(dht, &rom_header); - if ( !db ) - { - return FALSE; - } -//OS_TPrintf("FOUND: 0x%08X: %.4s(%d)\n", db, db->game_code, db->rom_version); - // nbVvZ (1) - B”\Ȃ͂ - if ( !DHT_CheckHashPhase1(db->hash[0], &rom_header, rom_arm9, rom_arm7) ) - { - return FALSE; - } - // nbVvZ (2) - B͓ - if ( !DHT_CheckHashPhase2(db->hash[1], &rom_header, &p2work, ReadImage, fp) ) - { - // nbVvZ (2ex) - B͓ (sꍇĂ) - if ( !DHT_CheckHashPhase2Ex(db->hash[1], &rom_header, (DHTPhase2ExWork*)&p2work, ReadImage, ReadImageEx, fp) ) - { - return FALSE; - } - return FALSE; - } - // nbVvZ (2ex) - B͓ - if ( !DHT_CheckHashPhase2Ex(db->hash[1], &rom_header, (DHTPhase2ExWork*)&p2work, ReadImage, ReadImageEx, fp) ) - { - return FALSE; - } - - return TRUE; -} - -void TwlMain(void) -{ - OS_Init(); - OS_InitTick(); - - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - // 荞݋---------------------------- - (void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - - FS_Init(FS_DMA_NOT_USE); - { - FSFile file; - if ( !FS_OpenFileEx(&file, HASH_PATH, FS_FILEMODE_R) ) - { - OS_TPanic("Cannot open %s.\n", HASH_PATH); - } - // [h - if ( !DHT_PrepareDatabase(dht, &file) ) - { - OS_TPanic("Cannot prepare the database.\n"); - } - FS_CloseFile(&file); - } - - // { - { - FSFile dir; - FSDirectoryEntryInfo info; - BOOL result; - result = FS_OpenDirectory(&dir, ROM_PATH, FS_FILEMODE_R); - if ( !result ) - { - OS_TPanic("Cannot open " ROM_PATH ".\n"); - } - while ( FS_ReadDirectory(&dir, &info) ) - { - FSFile file; - OSTick begin; - char path[FS_ENTRY_LONGNAME_MAX+sizeof(ROM_PATH)+1]; - if ( info.attributes & FS_ATTRIBUTE_IS_DIRECTORY ) - { - OS_TPrintf("%s is directory.\n", info.longname); - continue; - } - STD_CopyString(path, ROM_PATH "/"); - STD_ConcatenateString(path, info.longname); - if (!FS_OpenFileEx(&file, path, FS_FILEMODE_R)) - { - OS_TPrintf("Cannot open %s.\n", path); - continue; - } - OS_TPrintf("\nTrying %s...\n", path); - begin = OS_GetTick(); - if ( !CheckValidation(&file) ) - { - OS_TPrintf("Failed. %d msec (includes loading static data).\n", (int)OS_TicksToMilliSeconds(OS_GetTick()-begin)); - } - else - { - OS_TPrintf("Success. %d msec (includes loading static data).\n", (int)OS_TicksToMilliSeconds(OS_GetTick()-begin)); - } - FS_CloseFile(&file); - } - FS_CloseDirectory(&dir); - } - - OS_TPrintf("\nDone.\n"); - OS_Terminate(); -} - diff --git a/build/tests/CheckPreloadParameters/Makefile b/build/tests/CheckPreloadParameters/Makefile deleted file mode 100644 index 87190067..00000000 --- a/build/tests/CheckPreloadParameters/Makefile +++ /dev/null @@ -1,40 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CheckPreloadParameters -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_PLATFORM = TWL - -SRCS = main.c -TARGET_BIN = main.tad -ROM_SPEC = main.rsf - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/CheckPreloadParameters/banner/Makefile b/build/tests/CheckPreloadParameters/banner/Makefile deleted file mode 100644 index e373c033..00000000 --- a/build/tests/CheckPreloadParameters/banner/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/gameIcon.bmp -BANNER_SPEC = banner_v3.bsf - -TARGETS = banner.bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) -BANNER_ICON_MIDDLE = $(addprefix $(BANNER_ICON_NAME), .nbfs .nbfc .nbfp) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_MIDDLE) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) $(BANNER_ICON_MIDDLE) - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/CheckPreloadParameters/banner/banner_v3.bsf b/build/tests/CheckPreloadParameters/banner/banner_v3.bsf deleted file mode 100644 index 8644921399440c435aab27e0fac04166dc047f85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 980 zcmc(e&1%9x6ot>$Lf>J)buA)v;j&`1MMRpm`!P`r#at7tJ*O*U4&8 zcsd#}gYmJ&uF*cv@%<~d9Tj*nTW6h)L5`9F~O}H@z=Nnwa)TNQ{GKzecX=Gj4 z-XI+e8CMltmwb({9JZG_BRAL$f89{eoD=-kWaa9SSrYL&vLUwZ9$!X$N1k;I-EYPy BkNE%q diff --git a/build/tests/CheckPreloadParameters/banner/icon/gameIcon.bmp b/build/tests/CheckPreloadParameters/banner/icon/gameIcon.bmp deleted file mode 100644 index 8ec56f1cb8439577aae80658921dc540a9bd6dfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmY+BKX21O7{(8T#0Z(20Y@2-Jk^e}L}G|L2);9H_b8K_SR3yWp%k)n8x z6xGKF0m-*QrKtA_XgndB(ttlf?eO}K5IoYI{k!+^H$S@4l?RHVW-$&!|7)>S<N4|DcCXFFICQ-#Dv5}pLUv$dfI6>C}}5vSarZL=O)xUDx*;9z#c;IsZRpWV1j z(3aUYFw{f7{OP?tq8-x4IK4a-!1L8-;2y9XiEtV3Ud3_8>X|u -#include - -void VBlankIntr(void); - -OSOwnerInfoEx s_owner; -static char *s_strCountry[ 256 ]; -static char *s_strRegion[ OS_TWL_REGION_MAX ]; -static char *s_strUserColor[ OS_FAVORITE_COLOR_MAX ]; -static char *s_strRatingOgn[ OS_TWL_PCTL_OGN_MAX ]; -static char *s_strLanguage[ OS_LANGUAGE_CODE_MAX ]; - - -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: main - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void TwlMain(void) -{ - char string[ 256 ]; - int srcLen, dstLen; - OS_Init(); - - //---- interrupt setting - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - OS_EnableIrqMask(OS_IE_V_BLANK); - OS_EnableIrq(); - GX_VBlankIntr(TRUE); - - OS_GetOwnerInfoEx( &s_owner ); - OS_TPrintf( "Language : %02x %s\n", s_owner.language, s_strLanguage[ s_owner.language ] ); - OS_TPrintf( "UserColor : %02x %s\n", s_owner.favoriteColor, s_strUserColor[ s_owner.favoriteColor ] ); - OS_TPrintf( "Birthday : %02d/%02d\n", s_owner.birthday.month, s_owner.birthday.day ); - { - MI_CpuClear8( string, sizeof(string) ); - srcLen = (int)s_owner.nickNameLength; - dstLen = sizeof(string); - STD_ConvertStringUnicodeToSjis( string, &dstLen, s_owner.nickName, &srcLen, NULL ); - OS_TPrintf( "Nickname : %s\n", string ); - - MI_CpuClear8( string, sizeof(string) ); - srcLen = (int)s_owner.commentLength; - dstLen = sizeof(string); - STD_ConvertStringUnicodeToSjis( string, &dstLen, s_owner.comment, &srcLen, NULL ); - OS_TPrintf( "Comment : %s\n", string ); - } - OS_TPrintf( "Country : %s\n", s_strCountry[ s_owner.country ] ); - - OS_TPrintf( "IsAgreeEULA : %s\n", OS_IsAgreeEULA() ? "Agree" : "Not agree" ); - OS_TPrintf( "AgreedEULAVersion : %d\n", OS_GetAgreedEULAVersion() ); - OS_TPrintf( "ROMHeaderEULAVersion : %d\n", OS_GetROMHeaderEULAVersion() ); - - OS_TPrintf( "AvailableWireless : %s\n", OS_IsAvailableWireless() ? "TRUE" : "FALSE" ); - PMi_SetWirelessLED( OS_IsAvailableWireless() ? PM_WIRELESS_LED_ON : PM_WIRELESS_LED_OFF ); - - { - const LCFGTWLParentalControl *pPC = (const LCFGTWLParentalControl *)OS_GetParentalControlInfoPtr(); - - OS_TPrintf( "ParentalControls :\n"); - OS_TPrintf( " isSetParentalControl : %s\n", pPC->flags.isSetParentalControl ? "TRUE" : "FALSE" ); - OS_TPrintf( " PictoChat : %s\n", pPC->flags.pictoChat ? "TRUE" : "FALSE" ); - OS_TPrintf( " DS Download : %s\n", pPC->flags.dsDownload ? "TRUE" : "FALSE" ); - OS_TPrintf( " Browser : %s\n", pPC->flags.browser ? "TRUE" : "FALSE" ); - OS_TPrintf( " WiiPoint : %s\n", pPC->flags.wiiPoint ? "TRUE" : "FALSE" ); - OS_TPrintf( " PhotoExchange : %s\n", pPC->flags.photoExchange ? "TRUE" : "FALSE" ); - OS_TPrintf( " UGC : %s\n", pPC->flags.ugc ? "TRUE" : "FALSE" ); - OS_TPrintf( " RatingOgn : %s\n", pPC->ogn < LCFG_TWL_PCTL_OGN_MAX ? s_strRatingOgn[ pPC->ogn ] : s_strRatingOgn[ LCFG_TWL_PCTL_OGN_MAX ] ); - OS_TPrintf( " RatingAge : %d\n", pPC->ratingAge ); - OS_TPrintf( " SecretQ ID : %d\n", pPC->secretQuestionID ); - OS_TPrintf( " Password : %s\n", pPC->password ); - MI_CpuClear8( string, sizeof(string) ); - srcLen = (int)pPC->secretAnswerLength; - dstLen = sizeof(string); - STD_ConvertStringUnicodeToSjis( string, &dstLen, pPC->secretAnswer, &srcLen, NULL ); - OS_TPrintf( " SecretAnswer : %s\n", string ); - } - - { - int i; - const u8 *p = OS_GetMovableUniqueIDPtr(); - OS_TPrintf( "MovableUniqueID :" ); - for( i = 0; i < OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN; i++ ) { - if( ( i & 0x0f ) == 0 ) { - OS_TPrintf( "\n" ); - } - OS_TPrintf( " %02x,", *p++ ); - } - OS_TPrintf( "\n" ); - } - OS_TPrintf( "ForceDisableWireless : %s\n", OS_IsForceDisableWireless() ? "TRUE" : "FALSE" ); - OS_TPrintf( "Region : %02x %s\n", OS_GetRegion(), ( OS_GetRegion() == 0xff ) ? "Invalid" : s_strRegion[ OS_GetRegion() ] ); - { - u8 string[ 16 ]; - OS_GetSerialNo( string ); - OS_TPrintf( "SerialNo : %s\n", string ); - } - - OS_TPrintf("***End of demo\n"); - OS_Terminate(); -} - - - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - - Description: main - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void VBlankIntr(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); -} - - - -static char *s_strRegion[] = { - "JAPAN", - "AMERICA", - "EUROPA", - "AUSTRALIA", - "CHINA", - "KOREA", -}; - -static char *s_strUserColor[] = { - "GRAY ", - "BROWN ", - "RED ", - "PINK ", - "ORANGE ", - "YELLOW ", - "LIME_GREEN", - "GREEN ", - "DARK_GREEN", - "SEA_GREEN ", - "TURQUOISE ", - "BLUE ", - "DARK_BLUE ", - "PURPLE ", - "VIOLET ", - "MAGENTA ", -}; - -static char *s_strLanguage[] = { - "JAPANESE", - "ENGLISH", - "FRENCH", - "GERMAN", - "ITALIAN", - "SPANISH", - "CHINESE", - "KOREAN", -}; - -static char *s_strRatingOgn[] = { - "CERO", - "ESRB", - "RESERVED2", - "USK", - "PEGI_GENERAL", - "RESERVED5", - "PEGI_PORTUGAL", - "PEGI_BBFC", - "OFLC", - "GRB", - "RESERVED_A", - "RESERVED_B", - "RESERVED_C", - "RESERVED_D", - "RESERVED_E", - "UNKNOWN", -}; - -static char *s_strCountry[] = { - "UNDEFINED ", // ݒ - "JAPAN ", // { - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "Anguilla ", // AM - "ANTIGUA_AND_BARBUDA", // AeBOAEo[u[_ - "ARGENTINA ", // A[` - "ARUBA", // Ao - "BAHAMAS", // on} - "BARBADOS", // oohX - "BELIZE", // x[Y - "BOLIVIA", // {rA - "BRAZIL", // uW - "BRITISH_VIRGIN_ISLANDS", // p̃@[W - "CANADA", // Ji_ - "CAYMAN_ISLANDS", // PC} - "CHILE ", // ` - "COLOMBIA", // RrA - "COSTA_RICA", // RX^J - "DOMINICA", // h~jJ - "DOMINICAN_REPUBLIC", // h~jJa - "ECUADOR", // GNAh - "EL_SALVADOR", // GToh - "FRENCH_GUIANA", // tX̃MAi - "GRENADA", // Oi_ - "GUADELOUPE", // OAh[v - "GUATEMALA ", // OAe} - "GUYANA", // KCAi - "HAITI", // nC` - "HONDURAS", // zWX - "JAMAICA", // W}CJ - "MARTINIQUE", // }eBj[N - "MEXICO", // LVR - "MONTSERRAT", // gZg - "NETHERLANDS_ANTILLES", // I_̃AeB - "NICARAGUA", // jJOA - "PANAMA ", // pi} - "PARAGUAY", // pOAC - "PERU", // y[ - "ST_KITTS_AND_NEVIS", // ZgLbcElCrX - "ST_LUCIA", // ZgVA - "ST_VINCENT_AND_THE_GRENADINES", // ZgrZgEOifB[ - "SURINAME", // Xi - "TRINIDAD_AND_TOBAGO", // gj_[hEgoS - "TURKS_AND_CAICOS_ISLANDS", // ^[NXEJCRX - "UNITED_STATES", // AJ - "URUGUAY ", // EOAC - "US_VIRGIN_ISLANDS", // ė̃o[W - "VENEZUELA", // xlYG - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "ALBANIA ", // AojA - "AUSTRALIA", // I[XgA - "AUSTRIA", // I[XgA - "BELGIUM", // xM[ - "BOSNIA_AND_HERZEGOVINA", // {XjAEwcFSri - "BOTSWANA", // {ci - "BULGARIA ", // uKA - "CROATIA", // NA`A - "CYPRUS", // LvX - "CZECH_REPUBLIC", // `FR - "DENMARK", // f}[N - "ESTONIA", // GXgjA - "FINLAND", // tBh - "FRANCE", // tX - "GERMANY", // hCc - "GREECE", // MV - "HUNGARY ", // nK[ - "ICELAND", // ACXh - "IRELAND", // ACh - "ITALY", // C^A - "LATVIA", // grA - "LESOTHO", // \g - "LIECHTENSTEIN", // qeV^C - "LITHUANIA", // gAjA - "LUXEMBOURG", // NZuN - "MACEDONIA", // }PhjA - "MALTA ", // }^ - "MONTENEGRO", // elO - "MOZAMBIQUE", // Ur[N - "NAMIBIA", // i~rA - "NETHERLANDS", // I_ - "NEW_ZEALAND", // j[W[h - "NORWAY", // mEF[ - "POLAND", // |[h - "PORTUGAL", // |gK - "ROMANIA", // [}jA - "RUSSIA ", // VA - "SERBIA", // ZrA - "SLOVAKIA", // XoLA - "SLOVENIA", // XxjA - "SOUTH_AFRICA", // AtJ - "SPAIN", // XyC - "SWAZILAND", // XWh - "SWEDEN", // XEF[f - "SWITZERLAND", // XCX - "TURKEY", // gR - "UNITED_KINGDOM ", // CMX - "ZAMBIA", // UrA - "ZIMBABWE", // WouG - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "TAIWAN ", // p - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "SOUTH_KOREA ", // ؍ - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "HONG_KONG ", // zR - "MACAU", // }JI - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "INDONESIA ", // ChlVA - "SINGAPORE ", // VK|[ - "THAILAND ", // ^C - "PHILIPPINES", // tBs - "MALAYSIA", // }[VA - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "CHINA ", // - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UAE ", // Au񒷍AM - "INDIA ", // Ch - "EGYPT ", // GWvg - "OMAN", // I}[ - "QATAR", // J^[ - "KUWAIT", // NEF[g - "SAUDI_ARABIA", // TEWArA - "SYRIA", // VA - "BAHRAIN", // o[[ - "JORDAN", // _ - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "OTHERS ", - "UNKNOWN ", -}; - diff --git a/build/tests/CheckSharedFont/Makefile b/build/tests/CheckSharedFont/Makefile deleted file mode 100644 index 2087d1e2..00000000 --- a/build/tests/CheckSharedFont/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - FS - overlay -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TARGET_BIN = main.srl - -SRCS = main.c loadSharedFont.c - -LLIBRARIES += libsharedfont$(TWL_LIBSUFFIX).a libna$(TWL_LIBSUFFIX).a - -ROM_SPEC = ROM-TS_nand.rsf - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/CheckSharedFont/ROM-TS_nand.rsf b/build/tests/CheckSharedFont/ROM-TS_nand.rsf deleted file mode 100644 index 546adb61..00000000 --- a/build/tests/CheckSharedFont/ROM-TS_nand.rsf +++ /dev/null @@ -1,263 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "MY APP NAME" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile ./etc/myGameBanner.bnr - BannerFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess FALSE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - #NANDAccess FALSE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - # - # Disable debug [TRUE/FALSE] - # - DisableDebug FALSE - - # - # Agree EULA [TRUE/FALSE] - # - #AgreeEULA FALSE - - # - # Agree EULA version [0 - 255] - # - #AgreeEULAVersion 0 - - ### - #### END -} - -AppendProperty -{ - # - # Boot allowed Media: [GameCard] - # - Media NAND - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - #GameCode ABCJ - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Use Shared2 file index: [0-65535] - #Shared2FileIndex 0 - - # - # Use Shared2 file size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - #Shared2FileSize 0K - - # - # Game card power on: [TRUE/FALSE] - # - #GameCardOn FALSE -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(MAKEROM_ROMROOT) - Root / - File $(MAKEROM_ROMFILES) -} - -Rating -{ - # - # Permited age to play for each rating organization [0 - 31, ALWAYS, FREE] - # - # Supported organization - # - CERO (OGN0) : for Japan - # - ESRB (OGN1) : for North America - # - BBFC (OGN2) : obsolete organization - # - USK (OGN3) : for German - # - PEGI_GEN (OGN4) : for Europe - # - PEGI_FINLAND (OGN5) : obsolete organization - # - PEGI_PRT (OGN6) : for Portugal - # - PEGI_BBFC (OGN7) : for UK - # - OFLC (OGN8) : for Australia and NewZealand - # - GRB (OGN9) : for Korea - # - OGN10 : reserved - # - OGN11 : reserved - # - OGN12 : reserved - # - OGN13 : reserved - # - OGN14 : reserved - # - OGN15 : reserved - # - # Available age [ 0 - 31 / ALWAYS / FREE ] - - CERO FREE -# ESRB FREE -# USK FREE -# PEGI_GEN FREE -# PEGI_PRT FREE -# PEGI_BBFC FREE -# OFLC FREE -# GRB FREE -} diff --git a/build/tests/CheckSharedFont/src/loadSharedFont.c b/build/tests/CheckSharedFont/src/loadSharedFont.c deleted file mode 100644 index 6d858c85..00000000 --- a/build/tests/CheckSharedFont/src/loadSharedFont.c +++ /dev/null @@ -1,147 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: loadSharedFont.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "loadSharedFont.h" - -// extern data----------------------------------------------------------------- - -// define data----------------------------------------------------------------- -#define FONT_LOAD_THREAD_PRIO 13 -#define THREAD_STACK_SIZE 1024 - -// function's prototype------------------------------------------------------- - -// global variable------------------------------------------------------------- -BOOL g_isSucceededLoad[ OS_SHARED_FONT_CN_KR_MAX + 1 ]; - -const char *str_fontname[ OS_SHARED_FONT_CN_KR_MAX + 1 ] = { - "SHARE_FONT_WW_L", - "SHARE_FONT_WW_M", - "SHARE_FONT_WW_S", - "SHARE_FONT_CN_L", - "SHARE_FONT_CN_M", - "SHARE_FONT_CN_S", - "SHARE_FONT_KR_L", - "SHARE_FONT_KR_M", - "SHARE_FONT_KR_S", - "SHARE_FONT_CN_KR_MAX", -}; - -// static variable------------------------------------------------------------- -static u64 s_fontLoadThreadStack[THREAD_STACK_SIZE / sizeof(u64)]; -static OSThread s_fontLoadThread; -static OSTick s_fontLoadStartTick; -static u8 *s_pFontBuffer[ OS_SHARED_FONT_CN_KR_MAX + 1 ]; // ǂݍ݂̓eXgȂ̂Ń[hstaticϐɂĂB -static BOOL s_isStarted = FALSE; - -// const data------------------------------------------------------------------ - - -// ============================================================================ -// LtHg[h -// ============================================================================ -BOOL LoadSharedFontInit( void ) -{ - u8 *pBuffer; - int size; - - s_fontLoadStartTick = OS_GetTick(); - - // [hXbh - OS_CreateThread(&s_fontLoadThread, - LoadSharedFontThread, - NULL, - s_fontLoadThreadStack + THREAD_STACK_SIZE / sizeof(u64), - THREAD_STACK_SIZE, FONT_LOAD_THREAD_PRIO); - - // tHg[h - if( !OS_InitSharedFont() ) { - OS_TPrintf( "OS_InitSharedFont failed.\n" ); - return FALSE; - } - size = OS_GetSharedFontTableSize(); - if( size < 0 ) { - OS_TPrintf( "OS_GetSharedTableSize failed.\n" ); - return FALSE; - } - - pBuffer = OS_Alloc( (u32)size ); - if( pBuffer == NULL ) { - OS_TPrintf( "malloc failed.\n" ); - return FALSE; - } - if( !OS_LoadSharedFontTable( pBuffer ) ) { - OS_TPrintf( "OS_LoadSharedTable failed.\n" ); - return FALSE; - } - - // [hXbhN - OS_WakeupThreadDirect(&s_fontLoadThread); - s_isStarted = TRUE; - return TRUE; -} - - -void LoadSharedFontThread( void *arg ) -{ -#pragma unused(arg) - BOOL retval = TRUE; - OSSharedFontIndex i; - - for( i = OS_SHARED_FONT_WW_L; i < OS_SHARED_FONT_CN_KR_MAX + 1; i++ ) { - int size; - - OS_TPrintf( "%s read.\n", str_fontname[ i ] ); - - size = OS_GetSharedFontSize( i ); - if( size < 0 ) { - OS_TPrintf( " get font size failed.\n" ); - retval = FALSE; - } - - // FS̃LbVȂ̂ŁAƂ肠ACgƂĂB - size = MATH_ROUNDUP( size, 32 ); - - s_pFontBuffer[ i ] = OS_Alloc( (u32)size ); - if( s_pFontBuffer[ i ] == NULL ) { - OS_TPrintf( " malloc failed.\n" ); - retval = FALSE; - } - - if( OS_LoadSharedFont( i, s_pFontBuffer[ i ] ) ) { - OS_TPrintf( " load succeeded.\n" ); - g_isSucceededLoad[ i ] = TRUE; - }else { - OS_TPrintf( " load failed.\n" ); - g_isSucceededLoad[ i ] = FALSE; - retval = FALSE; - } - } - OS_TPrintf( "Shared Font load time = %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - s_fontLoadStartTick ) ); -} - - -BOOL IsFinishedLoadSharedFont( void ) -{ - if( s_isStarted ) { - return OS_IsThreadTerminated( &s_fontLoadThread ); - }else { - return TRUE; - } -} - diff --git a/build/tests/CheckSharedFont/src/loadSharedFont.h b/build/tests/CheckSharedFont/src/loadSharedFont.h deleted file mode 100644 index fb350e47..00000000 --- a/build/tests/CheckSharedFont/src/loadSharedFont.h +++ /dev/null @@ -1,42 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: loadSharedFont.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __LOAD_SHARED_FONT_H__ -#define __LOAD_SHARED_FONT_H__ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// define data------------------------------------------------------- -// global variables-------------------------------------------------- -extern BOOL g_isSucceededLoad[ OS_SHARED_FONT_CN_KR_MAX + 1 ]; -extern const char *str_fontname[ OS_SHARED_FONT_CN_KR_MAX + 1 ]; - -// function---------------------------------------------------------- -BOOL LoadSharedFontInit( void ); -void LoadSharedFontThread( void *arg ); -BOOL IsFinishedLoadSharedFont( void ); - -#ifdef __cplusplus -} -#endif - -#endif // __LOAD_SHARED_FONT_H__ diff --git a/build/tests/CheckSharedFont/src/main.c b/build/tests/CheckSharedFont/src/main.c deleted file mode 100644 index 0d2f9185..00000000 --- a/build/tests/CheckSharedFont/src/main.c +++ /dev/null @@ -1,98 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - demos - FS - overlay - File: main.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - - -#include - -#include "DEMO.h" -#include "loadSharedFont.h" - -/*---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: NitroMain - - Description: AvP[VCGg - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void NitroMain(void) -{ - - OS_Init(); - OS_InitTick(); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - { - OSHeapHandle hh; - void *tmp; - tmp = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetArenaLo(OS_ARENA_MAIN, tmp); - hh = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - if (hh < 0) - { - OS_TPanic("ARM9: Fail to create heap...\n"); - } - (void)OS_SetCurrentHeap(OS_ARENA_MAIN, hh); - } - - DEMOInitCommon(); - DEMOInitVRAM(); - DEMOInitDisplayBitmap(); - DEMOHookConsole(); - - DEMOSetBitmapTextColor(GX_RGBA(31, 31, 0, 1)); - DEMOSetBitmapGroundColor(DEMO_RGB_CLEAR); - DEMOStartDisplay(); - - FS_Init(FS_DMA_NOT_USE); - - OS_TPrintf("--------------------------------\n" - "Shared Font sample.\n"); - - if( LoadSharedFontInit() ) { - - while( !IsFinishedLoadSharedFont() ) { - OS_WaitVBlankIntr(); - } - - // ʕ\ - { - int i; - int ox = 10; - int oy = 60; - DEMOFillRect(0, 0, GX_LCD_SIZE_X, GX_LCD_SIZE_Y, DEMO_RGB_CLEAR); - DEMOSetBitmapTextColor(GX_RGBA(0, 31, 0, 1)); - DEMOSetBitmapTextColor(GX_RGBA(31, 31, 31, 1)); - DEMODrawFrame(ox, oy, 240, 10 + ( OS_SHARED_FONT_CN_KR_MAX + 1 ) * 10, GX_RGBA( 0, 31, 0, 1)); - for (i = 0; i < OS_SHARED_FONT_CN_KR_MAX + 1; ++i) - { - DEMODrawText(ox + 10, oy + 5 + i * 10, "%s load %s", - str_fontname[ i ], g_isSucceededLoad[ i ] ? "suceeded" : "failed"); - } - } - DEMO_DrawFlip(); - OS_WaitVBlankIntr(); - } - - OS_Terminate(); -} - - diff --git a/build/tests/CreateDevKp/ARM9/Makefile b/build/tests/CreateDevKp/ARM9/Makefile deleted file mode 100644 index d776bcac..00000000 --- a/build/tests/CreateDevKp/ARM9/Makefile +++ /dev/null @@ -1,60 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 0 -TARGET_NAME = CreateDevKP -TARGET_BIN = $(TARGET_NAME).srl -TITLEID_LO = CDKP -#TARGET_TAD = $(BINDIR)/$(TITLEID_LO).$(TWL_BUILD_DIR)$(CODEGEN_ARCH).tad - -ROM_SPEC = main.rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/CreateDevKp/ARM9/main.rsf b/build/tests/CreateDevKp/ARM9/main.rsf deleted file mode 100644 index af290caa..00000000 --- a/build/tests/CreateDevKp/ARM9/main.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_0.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - NANDAccess TRUE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - #AppType USER - AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - #Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - #Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/CreateDevKp/ARM9/src/RomTypeTest.c b/build/tests/CreateDevKp/ARM9/src/RomTypeTest.c deleted file mode 100644 index ec236dca..00000000 --- a/build/tests/CreateDevKp/ARM9/src/RomTypeTest.c +++ /dev/null @@ -1,143 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: DS_Chat.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "misc.h" -#include "RomTypeTest.h" - -// define data------------------------------------------ -#define RETURN_BUTTON_TOP_X 2 -#define RETURN_BUTTON_TOP_Y 21 -#define RETURN_BUTTON_BOTTOM_X ( RETURN_BUTTON_TOP_X + 8 ) -#define RETURN_BUTTON_BOTTOM_Y ( RETURN_BUTTON_TOP_Y + 2 ) - -#define ENABLE_CONTENT 0 -#define ENABLE_SHARED2 0 - -#if (ENABLE_CONTENT == 1) -#define CTRUE TRUE -#else -#define CTRUE FALSE -#endif - -#if (ENABLE_SHARED2 == 1) -#define STRUE TRUE -#else -#define STRUE FALSE -#endif - -#define TEST_NUM 15 - -typedef enum AccessPermission { - PERMISSION_NA = 0, - PERMISSION_RO, - PERMISSION_RW, - PERMISSION_ERROR, - PERMISSION_MAX -} -AccessPermission; - -// extern data------------------------------------------ - -// function's prototype declaration--------------------- -static AccessPermission RWExTestCore( char *path, char *testfile ); -static AccessPermission SRLTest( void ); -static AccessPermission ContentTest( void ); -static void FinalizeRWTest( FSFile *file, char* filename ); -static AccessPermission RWTestCore( char *path, char *testfile ); -static AccessPermission RWTest( char *path ); -static void TestFSPermission( void ); - -// global variable ------------------------------------- -RTCDrawProperty g_rtcDraw = { - TRUE, RTC_DATE_TOP_X, RTC_DATE_TOP_Y, RTC_TIME_TOP_X, RTC_TIME_TOP_Y -}; - -// static variable ------------------------------------- - -// const data ----------------------------------------- - -static BOOL CreateFile( void ) -{ - int len; - FSFile file[1]; - - FS_InitFile( file ); - - // t@C쐬eXg - if ( FS_CreateFile("nand:/sys/dev.kp", FS_PERMIT_R | FS_PERMIT_W) ) - { - // t@CI[v - if ( !FS_OpenFileEx( file, "nand:/sys/dev.kp", FS_FILEMODE_W ) ) - { - // t@CI[vs - OS_TPrintf("%s:open failed.\n","nand:/sys/dev.kp"); - return FALSE; - } - // t@CCg - len = FS_WriteFile( file, "test", 5); - if( len != 5 ) - { - // Cgs - OS_TPrintf("%s:write failed.\n","nand:/sys/dev.kp"); - return FALSE; - } - // t@CN[Y - if( !FS_CloseFile( file ) ) - { - // N[Ys - OS_TPrintf("%s:close failed.\n","nand:/sys/dev.kp"); - return FALSE; - } - }else - { - OS_TPrintf("%s:create failed.\n","nand:/sys/dev.kp"); - return FALSE; - } - - return TRUE; -} - -// eXgvȌ -void RomTypeTestInit( void ) -{ - BOOL res; - - GX_DispOff(); - GXS_DispOff(); - NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); - - PrintfSJIS( 1 * 8, 9 * 8, TXT_COLOR_BLACK, "CreateFile"); - - GXS_SetVisiblePlane( GX_PLANEMASK_BG0 ); - GX_DispOn(); - GXS_DispOn(); - - res = CreateFile(); - - if(res) - { - PutStringUTF16( 1 * 8, 11 * 8, TXT_COLOR_BLACK, (const u16 *)L"Succeed." ); - }else - { - PutStringUTF16( 1 * 8, 11 * 8, TXT_COLOR_BLACK, (const u16 *)L"NG." ); - } - -} - - diff --git a/build/tests/CreateDevKp/ARM9/src/RomTypeTest.h b/build/tests/CreateDevKp/ARM9/src/RomTypeTest.h deleted file mode 100644 index 39905e52..00000000 --- a/build/tests/CreateDevKp/ARM9/src/RomTypeTest.h +++ /dev/null @@ -1,35 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: RomTypeTest.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __ROM_TYPE_TEST_H__ -#define __ROM_TYPE_TEST_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -// define data---------------------------------------------------------- - -void RomTypeTestInit( void ); - -#ifdef __cplusplus -} -#endif - -#endif // __ROM_TYPE_TEST_H__ diff --git a/build/tests/CreateDevKp/ARM9/src/main.c b/build/tests/CreateDevKp/ARM9/src/main.c deleted file mode 100644 index 4b651a3c..00000000 --- a/build/tests/CreateDevKp/ARM9/src/main.c +++ /dev/null @@ -1,85 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: main.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "misc.h" -#include "RomTypeTest.h" - -// extern data----------------------------------------------------------------- - -// define data----------------------------------------------------------------- - -// function's prototype------------------------------------------------------- -static void INTR_VBlank( void ); - -// global variable------------------------------------------------------------- - -// static variable------------------------------------------------------------- - -// const data------------------------------------------------------------------ - - -// ============================================================================ -// function's description -// ============================================================================ -void TwlMain(void) -{ - - // ---------------------------------- - OS_Init(); - - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - GX_Init(); - GX_SetPower(GX_POWER_ALL); // eWbN p[ON - - // 荞݋---------------------------- - (void)OS_SetIrqFunction(OS_IE_V_BLANK, INTR_VBlank); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - - // foCX------------------------------- - TP_Init(); - (void)RTC_Init(); - - // VXȅ------------------ - InitAllocator(); - - InitBG(); - RomTypeTestInit(); - // C[v---------------------------- - while(1){ - OS_WaitIrq(1, OS_IE_V_BLANK); // VuN荞ݑ҂ - - ReadKeyPad(); // L[͂̎擾 - ReadTP(); // TP͂̎擾 - - } -} - - -// ============================================================================ -// 荞ݏ -// ============================================================================ - -// VuN荞 -static void INTR_VBlank(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); // VuN`FbÑZbg -} - diff --git a/build/tests/CreateDevKp/Makefile b/build/tests/CreateDevKp/Makefile deleted file mode 100644 index 66754bca..00000000 --- a/build/tests/CreateDevKp/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS = banner ARM9 - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/CreateDevKp/banner/Makefile b/build/tests/CreateDevKp/banner/Makefile deleted file mode 100644 index 97c32d52..00000000 --- a/build/tests/CreateDevKp/banner/Makefile +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 0 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/CreateDevKp/banner/icon/gameIcon.bmp b/build/tests/CreateDevKp/banner/icon/gameIcon.bmp deleted file mode 100644 index 5fe5ee2cc7d6733ec1a54bedea3d1c7efc25c130..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmY+Bu}k|v6vv+;IR13+U`hp{P_QX=>(I-nf#Th!L($%5DJTha5`L6s@6ybjn%yN? zRVW_*0osgCYX1V0`n@z_{lZ=Hx%bU`@A8@_&L(AYupeOU!w*rG$gwV8ui2t-`7iaqoEDpxIr^P)f#UzZs0(QsSQt*9@9H z*U3v5MlA`>$3ypd0Ws4kX6(5P%~hCrn6d8-ZIr0!CTmG}KJ`8Ox(K$a)mjo=1^(DR zlKT~IHO*QIp87UQG{g@FzWx6i%$v+YJPf8_r_m8j%SxZFq9Ev^d_#&;uyeTxf$IPUVA8!~?UxO+tjABKw#Pv@%p@SbJx+)K&RSUtYI zM^R?D(L7gj@riN8O5JOQK|)+$ERN>6Qcw6G>w%}RDy5=41OJE4wek$NdgyDSZ$-Qi AC;$Ke diff --git a/build/tests/CreateDevKp/banner/icon/msk_pictchat_icon.bin b/build/tests/CreateDevKp/banner/icon/msk_pictchat_icon.bin deleted file mode 100644 index 5b2734aa29fe5a7cc1474fd910a9f00b579e0a4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4480 zcmeHKJ#Q015Ou!H6)6~qMFFxP5(P>HS0O5hMMHJPrU*((r$~Vi#T7C5Z_VA>o4@S`d;40Nt*5jG@JWUM3#MJ4q~&_3TU_60<<4u z(vY8HU>0jS59BGzd6q4m1s*wsXtfRkNWu_4eh7W8EL(0>N)YKXU{^PsxCBni8~dtE^N z*MIc&54F!dKx>~K`psO>Hq@jT>VJXPnuMqR=w!(H&sUu*LVVkbMD3$@RE zpji979$f#nKJ)r_{p)jD($%l6f6d;P?^FMUcw7Iv_tW>Qf9^ACsM}ze+iTqa1#7^< ztk#7{2T|HBg@zQz5Vb_Hs1$jW{ImiE#gy3bEM|~ELTKJz-XMoV z>%a)k01LMQ5Izd}3(kOn^{>yPI-@C9gGa7=;FY3>!3|aat{2x47a=p+e*M4#k4&T; zn~&>?^-ukU_3xCjKl4kh4;uBiHw!dh9k_aww`YH!{huK>Nq@ZQV7T^?y>riRCxUZP zpxMB&xEfM_?LP~K8O;>9@-~3ZhSmRkzkduD^l$hjcej{~sTpJU(0NHom2wJ~ZAfu0CJ+wfuc?XW{m%2P@s>wT03@ vZsoCPTro5DtQ5^h6V=kWJCo5=wbavUBATz3s^#*nGVr<_O+}N{E6vnzcJN>n diff --git a/build/tests/CreateDevKp/banner/test-utf16_0_v3.TWL.bsf b/build/tests/CreateDevKp/banner/test-utf16_0_v3.TWL.bsf deleted file mode 100644 index 347fe36264d98ebbb285252bd11a0f7a137bcf3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 594 zcmajc%L;-}5C-6XYtTCgZEVp6S_JL7Sr&w3w2dxOQdy)#Phb5rrwg>`a5y@SpJ!(9 zaWA2R2tHg?bh&(9BISy4VK%~<(VCHu1P8`N6m-v3WXztZTX4|$ylXR);7Aehy2Mta z6dT@eYMW}mF67xcSHLg7%0d0dy}OWl3Hy@THP* zWFIb9mvhFdWAqqZG3GfkWgnBj##2#N>tkxMB8(mIyMMJkh%h$5%wk0t8(C)Z_&39s P?OJCOVa^>|tq5bEVeVM0 diff --git a/build/tests/CustomSystemUpdater/ARM7.TWL/Makefile b/build/tests/CustomSystemUpdater/ARM7.TWL/Makefile deleted file mode 100644 index 3aec1362..00000000 --- a/build/tests/CustomSystemUpdater/ARM7.TWL/Makefile +++ /dev/null @@ -1,74 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - armadillo.TWL -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL -override TWL_PROC = ARM7 -override TWL_ARCHGEN = LIMITED -##override TWL_PLATFORM = TS -TWL_NO_STD_PCHDR = True -override TARGET_CODEGEN = ARM - -ifndef TWLSDK_NOCRYPTO -#---------------------------------------------------------------------------- - -SRCS = main.c \ - kami_pxi.c \ - formatter.c - -TARGET_NAME = armadillo - -TARGET_NEF = $(TARGET_NAME).tef -LCFILE_SPEC = $(TARGET_NAME).lsf -LCFILE_TEMPLATE = $(ROOT)/build/components/$(TARGET_NAME).TWL/$(TARGET_NAME).lcf.template -LDRES_TEMPLATE = $(ROOT)/build/components/$(TARGET_NAME).TWL/$(TARGET_NAME).response.template - -CRT0_O = crt0.SCR.TWL.o - -# X^bNsh~ׁ̈ACCWJɃRpC -CCFLAGS_OPT = -O4 -inline off - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -MACRO_FLAGS += -DSDK_ARM7COMP_LTD -DSDK_SEA - -MAKELCF_FLAGS += -DISDBG_LIBS_TWL='$(if $(ISDBG_LIBS_TWL),$(ISDBG_LIBS_TWL),libstubsistd_sp$(TWL_LIBSUFFIX).a)' \ - -DISDBG_LIBS_NITRO='libstubsisd_sp$(TWL_LIBSUFFIX).a' - -LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include \ - ../common/include \ - ../../../systemMenu_tools/common/ARM7/include \ - -SRCDIR += ../../../systemMenu_tools/common/ARM7/src - -LLIBRARIES += libwl_sp$(TWL_LIBSUFFIX).a \ - libsdio_sp$(TWL_LIBSUFFIX).a \ - libathdrv_sp$(TWL_LIBSUFFIX).a \ - libwpa_sp$(TWL_LIBSUFFIX).a \ - -LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES) - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -endif #ifndef TWLSDK_NOCRYPTO - -#===== End of Makefile ===== diff --git a/build/tests/CustomSystemUpdater/ARM7.TWL/armadillo.lsf b/build/tests/CustomSystemUpdater/ARM7.TWL/armadillo.lsf deleted file mode 100644 index 177f5206..00000000 --- a/build/tests/CustomSystemUpdater/ARM7.TWL/armadillo.lsf +++ /dev/null @@ -1,86 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - armadillo.TWL -# File: armadillo.lsf -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# Nitro LCF SPEC FILE -# -#-------- -Static $(TARGET_NAME) -{ - Address 0x02380000 - StackSize 1024 1024 - - Library $(CRT0_O) -} - -#-------- -Ltdautoload SCRWRAM -{ - Address 0x03740000 - - Library libsubpsyscall.a - Library libsyscall_sp.twl.a - Library $(CW_LIBS) - Library $(ISDBG_LIBS_TWL) - Library $(ISDBG_LIBS_NITRO) - - Object * (.etable) - Object $(OBJDIR)/main.o - Object $(OBJDIR)/kami_pxi.o - Object $(OBJDIR)/formatter.o - - Library libsea_sp$(LIBSUFFIX).a - Library libcrypto_sp$(LIBSUFFIX).a - - Library libos_sp$(LIBSUFFIX).a - Library libmi_sp$(LIBSUFFIX).a - Library libstd_sp$(LIBSUFFIX).a - Library libmath_sp$(LIBSUFFIX).a - Library libpxi_sp$(LIBSUFFIX).a - Library libexi_sp$(LIBSUFFIX).a - Library libi2c_sp$(LIBSUFFIX).a - Library libsdio_sp$(LIBSUFFIX).a - Library libpad_sp$(LIBSUFFIX).a - Library libscfg_sp$(LIBSUFFIX).a - Library libmcu_sp$(LIBSUFFIX).a - Library libcdc_sp$(LIBSUFFIX).a - Library libsnd_sp$(LIBSUFFIX).a - Library libsndex_sp$(LIBSUFFIX).a - Library libspi_sp$(LIBSUFFIX).a - Library libpm_sp$(LIBSUFFIX).a - Library libtp_sp$(LIBSUFFIX).a - Library libtpex_sp$(LIBSUFFIX).a - Library libmic_sp$(LIBSUFFIX).a - Library libmicex_sp$(LIBSUFFIX).a - Library libnvram_sp$(LIBSUFFIX).a - Library librtc_sp$(LIBSUFFIX).a - Library libfatfs_sp$(LIBSUFFIX).a -# Library libwm_sp$(LIBSUFFIX).a -# Library libnwm_sp$(LIBSUFFIX).a - Library libwvr_sp$(LIBSUFFIX).a - Library libwl_sp$(LIBSUFFIX).a - Library libwpa_sp$(LIBSUFFIX).a - Library libathdrv_sp$(LIBSUFFIX).a - Library libfs_sp$(LIBSUFFIX).a - Library libcard_sp$(LIBSUFFIX).a - Library libcamera_sp$(LIBSUFFIX).a - - Object * (.wram) - Object * (.ltdwram) - Object * (.rsvwram) - Object * (.main) - Object * (.ltdmain) -} diff --git a/build/tests/CustomSystemUpdater/ARM7.TWL/include/kami_pxi.h b/build/tests/CustomSystemUpdater/ARM7.TWL/include/kami_pxi.h deleted file mode 100644 index cbce8090..00000000 --- a/build/tests/CustomSystemUpdater/ARM7.TWL/include/kami_pxi.h +++ /dev/null @@ -1,44 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_pxi.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef TWL_CAMERA_TEST_CAMERATEST_H_ -#define TWL_CAMERA_TEST_CAMERATEST_H_ - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -void KamiPxiInit( void ); - -/*===========================================================================*/ - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* TWL_CAMERA_TEST_CAMERATEST_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/ARM7.TWL/src/kami_pxi.c b/build/tests/CustomSystemUpdater/ARM7.TWL/src/kami_pxi.c deleted file mode 100644 index c3caa3f1..00000000 --- a/build/tests/CustomSystemUpdater/ARM7.TWL/src/kami_pxi.c +++ /dev/null @@ -1,262 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_pxi.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "kami_pxi.h" -#include "fifo.h" -#include "twl/cdc.h" -#include "formatter.h" -#include -#include -#include -#include -#include - -typedef unsigned char byte; /* Don't change */ -typedef unsigned short word; /* Don't change */ -typedef unsigned long dword; /* Don't change */ -#define BOOLEAN int - -extern BOOL FATFSi_nandRtfsIo( int driveno, dword block, void* buffer, word count, BOOLEAN reading); -extern BOOL sdmcFormatNandLog( BOOL verify_flag); - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -#define KAMITEST_MESSAGE_ARRAY_MAX 4 // XbhpbZ[WL[̃TCY -#define KAMITEST_THREAD_STACK_SIZE 2048 // Xbh̃X^bNTCY - -#define KAMITEST_THREAD_PRIORITY 6 - -// ACgăRs[ -#define KAMI_UNPACK_U16(d, s) \ - (*(d) = (u16)((((u8*)s)[0] << 0) | (((u8*)s)[1] << 8))) -#define KAMI_UNPACK_U32(d, s) \ - (*(d) = (u32)((((u8*)s)[0] << 0) | (((u8*)s)[1] << 8) | (((u8*)s)[2] << 16) | (((u8*)s)[3] << 24))) - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ -typedef struct KamiWork -{ - BOOL result; - u32 total; - u32 current; - KamiCommand command; - u8 data[KAMITEST_PXI_DATA_SIZE_MAX]; // 㑱f[^i[p - - OSMessageQueue msgQ; // XbhpbZ[WL[ - OSMessage msgArray[KAMITEST_MESSAGE_ARRAY_MAX]; - // bZ[Wi[obt@ - OSThread thread; // KAMIpXbh - u64 stack[KAMITEST_THREAD_STACK_SIZE / sizeof(u64)]; - // KAMIpXbh̃X^bN -} -KamiWork; - -/*---------------------------------------------------------------------------* - ÓIϐ` - *---------------------------------------------------------------------------*/ -static BOOL kamiInitialized; -static KamiWork kamiWork; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err); -static void KamiReturnResult(KamiCommand command, KAMIPxiResult result); -static void KamiReturnResultEx(KamiCommand command, KAMIPxiResult result, u8 size, u8* data); -static void KamiThread(void *arg); - -void KamiPxiInit(void) -{ - if (kamiInitialized) - { - return; - } - kamiInitialized = TRUE; - - PXI_Init(); - PXI_SetFifoRecvCallback(PXI_FIFO_TAG_KAMITEST, KamiPxiCallback); - - OS_InitMessageQueue(&kamiWork.msgQ, kamiWork.msgArray, KAMITEST_MESSAGE_ARRAY_MAX); - OS_CreateThread(&kamiWork.thread, KamiThread, 0, - (void *)(kamiWork.stack + (KAMITEST_THREAD_STACK_SIZE / sizeof(u64))), - KAMITEST_THREAD_STACK_SIZE, KAMITEST_THREAD_PRIORITY); - OS_WakeupThreadDirect(&kamiWork.thread); -} - -static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err) -{ -#pragma unused( tag ) - if (err) - { - return; - } - if (data & KAMITEST_PXI_START_BIT) // 擪f[^ - { - kamiWork.total = (u8)((data & KAMITEST_PXI_DATA_NUMS_MASK) >> KAMITEST_PXI_DATA_NUMS_SHIFT); - kamiWork.current = 0; - kamiWork.command = (KamiCommand)((data & KAMITEST_PXI_COMMAND_MASK) >> KAMITEST_PXI_COMMAND_SHIFT); - kamiWork.data[kamiWork.current++] = (u8)((data & KAMITEST_PXI_1ST_DATA_MASK) >> KAMITEST_PXI_1ST_DATA_SHIFT); - } - else // 㑱f[^ - { - kamiWork.data[kamiWork.current++] = (u8)((data & 0xFF0000) >> 16); - kamiWork.data[kamiWork.current++] = (u8)((data & 0x00FF00) >> 8); - kamiWork.data[kamiWork.current++] = (u8)((data & 0x0000FF) >> 0); - } - if (kamiWork.current >= kamiWork.total) - { - switch (kamiWork.command) - { - case KAMI_EXE_FORMAT: - case KAMI_NAND_IO: - case KAMI_CLEAR_NAND_ERRORLOG: - case KAMI_GET_IS_TOOL_TYPE: - if (!OS_SendMessage(&kamiWork.msgQ, NULL, OS_MESSAGE_NOBLOCK)) - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_FATAL_ERROR); - } - break; - - default: - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_INVALID_COMMAND); - } - } -} - -static void KamiReturnResult(KamiCommand command, KAMIPxiResult result) -{ - u32 pxiData = (u32)(KAMITEST_PXI_START_BIT | KAMITEST_PXI_RESULT_BIT | - ((command << KAMITEST_PXI_COMMAND_SHIFT) & KAMITEST_PXI_COMMAND_MASK) | - ((1 << KAMITEST_PXI_DATA_NUMS_SHIFT) & KAMITEST_PXI_DATA_NUMS_MASK) | - ((result << KAMITEST_PXI_1ST_DATA_SHIFT) & KAMITEST_PXI_1ST_DATA_MASK)); - while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - } -} - -static void KamiReturnResultEx(KamiCommand command, KAMIPxiResult result, u8 size, u8* data) -{ - u32 pxiData = (u32)(KAMITEST_PXI_START_BIT | KAMITEST_PXI_RESULT_BIT | - ((command << KAMITEST_PXI_COMMAND_SHIFT) & KAMITEST_PXI_COMMAND_MASK) | - (((size+1) << KAMITEST_PXI_DATA_NUMS_SHIFT) & KAMITEST_PXI_DATA_NUMS_MASK) | - ((result << KAMITEST_PXI_1ST_DATA_SHIFT) & KAMITEST_PXI_1ST_DATA_MASK)); - int i; - while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - } - for (i = 0; i < size; i+= 3) - { - pxiData = (u32)((data[i] << 16) | (data[i+1] << 8) | data[i+2]); - while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - } - } -} - -static void KamiThread(void *arg) -{ -#pragma unused( arg ) - OSMessage msg; - BOOL result; - - while (TRUE) - { - (void)OS_ReceiveMessage(&kamiWork.msgQ, &msg, OS_MESSAGE_BLOCK); - switch (kamiWork.command) - { - case KAMI_EXE_FORMAT: - { - result = ExeFormat((FormatMode)kamiWork.data[0]); // Quick or Full - if (result) - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_TRUE); - } - else - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_FALSE); - } - } - break; - - case KAMI_NAND_IO: - { - BOOL is_read; - u32 block; - void* buffer; - u32 count; - - is_read = (BOOL)kamiWork.data[0]; - KAMI_UNPACK_U32(&block, &kamiWork.data[1]); - KAMI_UNPACK_U32((u32 *)(&buffer), &kamiWork.data[5]); - KAMI_UNPACK_U32(&count, &kamiWork.data[9]); - - result = FATFSi_nandRtfsIo( 0, block, buffer, (u16)count, is_read ); - if (result) - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_TRUE); - } - else - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_FALSE); - } - } - break; - - case KAMI_CLEAR_NAND_ERRORLOG: - { - if (sdmcFormatNandLog(TRUE)) - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS); - } - else - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_FALSE); - } - } - break; - - case KAMI_GET_IS_TOOL_TYPE: - { - IsToolType type = IS_TOOL_TYPE_ERROR; - u8 temp = I2C_ReadRegister( I2C_SLAVE_DEBUGGER, 0); - if (temp != (u8)(-1)) // ԔALv`ȊO͒ʐMG[ - { - if (temp == 0x44) - { - type = IS_TOOL_TYPE_DEBUGGER; - } - else if (temp == 0x43) - { - type = IS_TOOL_TYPE_CAPTURE; - } - } - - KamiReturnResultEx(kamiWork.command, KAMI_PXI_RESULT_SUCCESS, sizeof(IsToolType), (u8*)&type); - } - break; - - default: - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_INVALID_COMMAND); - } - } -} - -#include diff --git a/build/tests/CustomSystemUpdater/ARM7.TWL/src/main.c b/build/tests/CustomSystemUpdater/ARM7.TWL/src/main.c deleted file mode 100644 index a68e6750..00000000 --- a/build/tests/CustomSystemUpdater/ARM7.TWL/src/main.c +++ /dev/null @@ -1,576 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - components - armadillo.TWL - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "nvram_sp.h" -#include "kami_pxi.h" - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -/* eXbhDx */ -#define THREAD_PRIO_SPI 2 -#define THREAD_PRIO_MCU 4 // b -#define THREAD_PRIO_SND 6 -#define THREAD_PRIO_NWM_EVENT 7 -#define THREAD_PRIO_NWM_SDIO 8 -#define THREAD_PRIO_FATFS 8 -#define THREAD_PRIO_NWM_COMMAND 9 -#define THREAD_PRIO_NWM_WPA 10 -#define THREAD_PRIO_HOTSW 11 -#define THREAD_PRIO_AES 12 -#define THREAD_PRIO_SEA 12 -#define THREAD_PRIO_RTC 12 -#define THREAD_PRIO_SNDEX 14 -#define THREAD_PRIO_FS 15 -/* OS_THREAD_LAUNCHER_PRIORITY 16 */ - -/* ROM o^GÅgR[h */ -#define ROMHEADER_FOR_CHINA_BIT 0x80 -#define ROMHEADER_FOR_KOREA_BIT 0x40 - -/* gp DMA ԍ */ -#define DMA_NO_FATFS FATFS_DMA_4 // = 0 -#define DMA_NO_NWM 3 - -/* J[h`^OJE^ */ -#define CHATTERING_COUNTER 0x1988 // 100ms (0x1988 * 15.3us = 100000us) - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void PrintDebugInfo(void); -static OSHeapHandle InitializeAllocateSystem(void); -static void InitializeFatfs(void); - -static void ReadUserInfo(void); -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -static BOOL IsValidConfigEx(void); -static u16 GetRomValidLanguage(void); -static s32 CheckCorrectNCDEx(NVRAMConfigEx* ncdsp); -#else -static s32 CheckCorrectNCD(NVRAMConfig* ncdsp); -#endif -static void VBlankIntr(void); - -/*---------------------------------------------------------------------------* - Name: TwlSpMain - Description: NxN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -void -TwlSpMain(void) -{ - OSHeapHandle heapHandle; - - /* OS */ - OS_Init(); - PrintDebugInfo(); - - /* NVRAM 烆[U[ǂݏo */ - ReadUserInfo(); - - /* q[v̈ݒ */ - heapHandle = InitializeAllocateSystem(); - - /* {^̓T[` */ - (void)PAD_InitXYButton(); - - /* ݋ */ - (void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - /* eCu */ - AES_Init(THREAD_PRIO_AES); // AES - SEA_Init(THREAD_PRIO_SEA); // SEA - FS_Init(FS_DMA_NOT_USE); // FS for CARD - FS_CreateReadServerThread(THREAD_PRIO_FS); // FS for CARD - InitializeFatfs(); // FAT-FS -// InitializeNwm(heapHandle); // TWL - MCU_InitIrq(THREAD_PRIO_MCU); // }CR - CDC_InitLib(); // CODECCu - CAMERA_Init(); // J - - SND_Init(THREAD_PRIO_SND); // TEh - SNDEX_Init(THREAD_PRIO_SNDEX); // TEhg - RTC_Init(THREAD_PRIO_RTC); // RTC -// WVR_Begin(heapHandle); // NITRO - SPI_Init(THREAD_PRIO_SPI); - -/////////////// -#ifndef NAND_INITIALIZER_LIMITED_MODE - KamiPxiInit(); -#endif -/////////////// - - while (TRUE) - { - OS_Halt(); - - /* \tgEFAZbgv͊ĎȂ */ - /* AGB J[gbW̑}`FbN͍sȂ */ - /* DS J[h̑}`FbN͍sȂ */ - } -} - -/*---------------------------------------------------------------------------* - Name: PrintDebugInfo - Description: ARM7 R|[lg̏fobOo͂B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -PrintDebugInfo(void) -{ - OS_TPrintf("ARM7: This component is running on TWL.\n"); - OS_TPrintf("ARM7: This component is \"armadillo.TWL\".\n"); -} - -/*---------------------------------------------------------------------------* - Name: InitializeAllocateSystem - Description: ăVXeB - Arguments: None. - Returns: OSHeapHandle - WRAM A[iɊmۂꂽq[ṽnhԂB - *---------------------------------------------------------------------------*/ -static OSHeapHandle -InitializeAllocateSystem(void) -{ - OSHeapHandle hh; - void* subLo = (void*)OS_GetWramSubArenaLo(); - void* subHi = (void*)OS_GetWramSubArenaHi(); - void* privLo = (void*)OS_GetWramSubPrivArenaLo(); - void* privHi = (void*)OS_GetWramSubPrivArenaHi(); - - if (((u32)privLo == HW_PRV_WRAM) && ((u32)subHi == HW_PRV_WRAM) && ((u32)subLo < HW_PRV_WRAM)) - { - /* SUB A[i SUBPRIV A[iɋz */ - OS_SetWramSubArenaHi(subLo); - OS_SetWramSubPrivArenaLo(subLo); - privLo = subLo; - } - - /* A[i 0 NA */ - MI_CpuClear8(privLo, (u32)privHi - (u32)privLo); - - /* q[v쐬 */ - privLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, privLo, privHi, 1); - hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, privLo, privHi); - if (hh < 0) - { - OS_Panic("ARM7: Failed to create heap.\n"); - } - - /* Jgq[vɐݒ */ - (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - /* q[vTCY̊mF */ - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - if (heapSize <= 0) - { - OS_Panic("ARM7: Failed to create heap.\n"); - } - OS_TPrintf("ARM7: heap size [%d]\n", heapSize); - } - - return hh; -} - -/*---------------------------------------------------------------------------* - Name: InitializeFatfs - Description: FATFSCuBFATFS֐ŃXbhx~ - ׁAx~삷_~[̃Xbh𗧂ĂB - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeFatfs(void) -{ - // FATFSCȕ - if(!FATFS_Init( FATFS_DMA_4, FATFS_DMA_5, THREAD_PRIO_FATFS)) - { - // do nothing - } -} - -//#ifdef WM_PRECALC_ALLOWEDCHANNEL -//extern u16 WMSP_GetAllowedChannel(u16 bitField); -//#endif -/*---------------------------------------------------------------------------* - Name: ReadUserInfo - - Description: NVRAM烆[U[ǂݏoAL̈ɓWJB - ~[OĂobt@Ăꍇ́A - L̈̃[U[i[ꏊNAB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void ReadUserInfo(void) -{ - s32 offset; -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - NVRAMConfigEx temp[2]; -#else - NVRAMConfig temp[2]; -#endif - s32 check; - u8 *p = OS_GetSystemWork()->nvramUserInfo; - - // ItZbgǂݏo -#ifdef NVRAM_CONFIG_CONST_ADDRESS - offset = NVRAM_CONFIG_DATA_ADDRESS_DUMMY; -#else - NVRAM_ReadDataBytes(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_CONFIG_DATA_OFFSET_SIZE, - (u8 *)(&offset)); - offset <<= NVRAM_CONFIG_DATA_OFFSET_SHIFT; -#endif - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfigEx), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfigEx), - (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCDEx(temp); -#else - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfig), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfig), (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCD(temp); -#endif - - if (check >= 3) - { - // AvP[V̋N} - MI_CpuFill32(p, 0xffffffff, sizeof(NVRAMConfig)); - } - else if (check) - { - s32 i; - - // jbNl[␳ - if (temp[check - 1].ncd.owner.nickname.length < NVRAM_CONFIG_NICKNAME_LENGTH) - { - for (i = NVRAM_CONFIG_NICKNAME_LENGTH; - i > temp[check - 1].ncd.owner.nickname.length; i--) - { - temp[check - 1].ncd.owner.nickname.str[i - 1] = 0x0000; - } - } - // Rg␳ - if (temp[check - 1].ncd.owner.comment.length < NVRAM_CONFIG_COMMENT_LENGTH) - { - for (i = NVRAM_CONFIG_COMMENT_LENGTH; i > temp[check - 1].ncd.owner.comment.length; - i--) - { - temp[check - 1].ncd.owner.comment.str[i - 1] = 0x0000; - } - } - // L̈ɃXgA - MI_CpuCopy32(&temp[check - 1], p, sizeof(NVRAMConfig)); - } - else - { - // L̈NA - MI_CpuClear32(p, sizeof(NVRAMConfig)); - } - - // MACAhX[U[̌ɓWJ - { - u8 wMac[6]; - - // NVRAMMACAhXǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_MACADDRESS_ADDRESS, 6, wMac); - // WJAhXvZ - p = (u8 *)((u32)p + ((sizeof(NVRAMConfig) + 3) & ~0x00000003)); - // L̈ɓWJ - MI_CpuCopy8(wMac, p, 6); - } -/* -#ifdef WM_PRECALC_ALLOWEDCHANNEL - // gp”\`lgpƒ`lvZ - { - u16 enableChannel; - u16 allowedChannel; - - // gp”\`lǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_ENABLECHANNEL_ADDRESS, 2, (u8 *)(&enableChannel)); - // gpƒ`lvZ - allowedChannel = WMSP_GetAllowedChannel((u16)(enableChannel >> 1)); - // WJAhXvZ(MACAhX̌2oCg) - p = (u8 *)((u32)p + 6); - // L̈ɓWJ - *((u16 *)p) = allowedChannel; - } -#endif -*/ -} - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -/*---------------------------------------------------------------------------* - Name: IsValidConfigEx - - Description: [U[񂪊gRtBOɑΉĂ邩ǂ𒲍B - - Arguments: None. - - Returns: BOOL - g[U[񂪗LȏꍇTRUEԂB - łꍇFALSEԂB - *---------------------------------------------------------------------------*/ -static BOOL IsValidConfigEx(void) -{ - u8 ipl2_type; - - NVRAM_ReadDataBytes(NVRAM_CONFIG_IPL2_TYPE_ADDRESS, NVRAM_CONFIG_IPL2_TYPE_SIZE, &ipl2_type); - if (ipl2_type == NVRAM_CONFIG_IPL2_TYPE_NORMAL) - { - return FALSE; - } - if (ipl2_type & NVRAM_CONFIG_IPL2_TYPE_EX_MASK) - { - return TRUE; - } - return FALSE; -} - -/*---------------------------------------------------------------------------* - Name: GetRomValidLanguage - - Description: ROMo^GȀ񂩂AgR[h̑Ήrbg}bv - Ɋւ𒊏oB - - Arguments: None. - - Returns: u16 - DSJ[hA }`u[goCiΉĂ - R[h̃rbg}bvԂBDSJ[hg - R[hɑΉĂȂꍇ 0 ԂB - *---------------------------------------------------------------------------*/ -static u16 GetRomValidLanguage(void) -{ - u16 ret = 0x0000; - u8 langBit = OS_GetSystemWork()->rom_header[0x1d]; - - // ROMo^GÅgR[hmF - if (langBit == ROMHEADER_FOR_CHINA_BIT) - { - // for CHINA - ret |= (0x0001 << NVRAM_CONFIG_LANG_CHINESE); - } - else if (langBit == ROMHEADER_FOR_KOREA_BIT) - { - // for KOREA - ret |= (0x0001 << NVRAM_CONFIG_LANG_HANGUL); - } - return ret; -} - -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCDEx - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - 3: Av̋N}ׂB - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCDEx(NVRAMConfigEx * ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // IPLgR[hɑΉĂ邩 - if (IsValidConfigEx()) - { - // IPLgR[hɑΉĂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - calc_crc = - SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd_ex), sizeof(NVRAMConfigDataEx)); - if ((ncdsp[i].crc16_ex == calc_crc) - && ((0x0001 << ncdsp[i].ncd_ex.language) & - (ncdsp[i].ncd_ex.valid_language_bitmap))) - { - // gf[^p CRC Aݒ茾R[hΉR[hɊ܂܂ꍇɐƔf - if (rom_valid_language & ncdsp[i].ncd_ex.valid_language_bitmap) - { - // gR[hŒʏ팾R[h㏑ - ncdsp[i].ncd.option.language = ncdsp[i].ncd_ex.language; - } - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE) & ~ncdsp[i]. - ncd_ex.valid_language_bitmap) - { - // ROM o^GA""gR[hݒ肳Ă邪A - // IPL2̑ΉR[h""gR[h܂܂Ȃꍇ͋N} - return 3; - } - crc_flag |= (1 << i); - } - } - } - } - else - { - // IPLgR[hɑΉĂȂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE)) - { - // ROM o^GA""gR[hݒ肳Ăꍇ͋N} - return 3; - } - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - crc_flag |= (1 << i); - } - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} - -#else -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCD - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCD(NVRAMConfig *ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // e~[f[^CRC & saveCount`FbN - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRCAsaveCountl0x80̃f[^𐳓ƔfB - crc_flag |= (1 << i); - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} -#endif - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - Description: V uN荞݃xN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -extern BOOL PMi_Initialized; -extern void PM_SelfBlinkProc(void); - -static void -VBlankIntr(void) -{ - if (PMi_Initialized) - { - PM_SelfBlinkProc(); - } -} diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/ARM9-TS.lsf b/build/tests/CustomSystemUpdater/ARM9.TWL/ARM9-TS.lsf deleted file mode 100644 index 35e3fba0..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/ARM9-TS.lsf +++ /dev/null @@ -1,57 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: SystemUpdater -# File: ARM9-TS.lsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL LCF SPEC FILE -# - -Static $(TARGET_NAME) -{ - Address $(ADDRESS_STATIC) - Object $(OBJS_STATIC) - Library $(LLIBS) $(GLIBS) $(CW_LIBS) - StackSize 4096 4096 -} - -Autoload ITCM -{ - Address $(ADDRESS_ITCM) - Object * (.itcm) - Object $(OBJS_AUTOLOAD) (.text) - Object $(OBJS_AUTOLOAD) (.rodata) - Object $(OBJS_AUTOLOAD) (.init) - Object $(OBJS_AUTOLOAD) (.ctor) - Object $(OBJS_AUTOLOAD) (.sinit) -} - -Autoload DTCM -{ - Address $(ADDRESS_DTCM) - Object * (.dtcm) - Object $(OBJS_AUTOLOAD) (.data) - Object $(OBJS_AUTOLOAD) (.sdata) - Object $(OBJS_AUTOLOAD) (.bss) - Object $(OBJS_AUTOLOAD) (.sbss) -} - -Ltdautoload LTDMAIN -{ - # NITRO/TWL L̃I[o[C݂ꍇ́Aɂ̌ɔzuKv܂B - After $(TARGET_NAME) - Object * (.ltdmain) - Object $(OBJS_LTDAUTOLOAD) - Library $(LLIBS_EX) $(GLIBS_EX) -} diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/Makefile b/build/tests/CustomSystemUpdater/ARM9.TWL/Makefile deleted file mode 100644 index 08a2e0c7..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/Makefile +++ /dev/null @@ -1,150 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: SystemUpdater -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -#============================================================================ -#ig݂sꍇ́ATwlIPL/build/buildtools/commondefs"FIRM_USE_PRODUCT_KEYS=TRUE"LɂĂB -#============================================================================ - -# COMPILE SWITCH for build SystemUpdater -IGNORE_VERSION_CHECK ?= TRUE - -# MAKEROM SWITCH for build SystemUpdater -SYSM_DISABLE_DEBUG ?= TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -#TARGET_CODEGEN = THUMB - -TITLEID_LO = 0SUA -#TARGET_TAD = - -TARGET_BIN = CustomSystemUpdater_$(SYSM_REGION).srl -LCFILE_SPEC = ARM9-TS.lsf -ROM_SPEC = main.rsf - -MAKEROM_ARM7_BASE = ../ARM7.TWL/bin/$(TWL_BUILDTYPE_ARM7)/armadillo -MAKEROM_ARM7 = $(MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - -SRCS = main.c \ - font_data.c \ - graphics.c \ - kami_font.c \ - import.c \ - hwi.c \ - kami_pxi.c \ - kami_write_nandfirm.c \ - hw_info.c \ - keypad.c \ - kami_copy_file.c \ - debugger_hw_reset_control.c \ - debugger_card_rom.c - -LINCLUDES = include \ - ../common/include \ - $(ROOT)/build/libraries/lcfg/ARM9.TWL/include \ - $(ROOT)/build/libraries/fs/common/include \ - ../../../systemMenu_tools/common/ARM9/include \ - -SRCDIR = src \ - ../../../systemMenu_tools/HWInfoWriter/ARM9/src \ - ../../../systemMenu_tools/common/ARM9/src \ - -#LCFILE = # using default - -DATA_ROOT = ../data -ROMSET_FILE = ../romset -ROM_CHECKER = ../romchecker.rb - -SUMAKER = ../sumaker.rb custom -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ifneq ($(TWL_IPL_RED_PRIVATE_ROOT),) -ifdef FIRM_USE_PRODUCT_KEYS -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo.der' \ - -DHWID_PRIVKEY='private_HWID.der' -else -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo_dev.der' \ - -DHWID_PRIVKEY='private_HWID_dev.der' -endif -endif - -ifeq ($(IGNORE_VERSION_CHECK),TRUE) -MACRO_FLAGS += -DIGNORE_VERSION_CHECK -endif - - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \ - -DPRIVKEY_PATH='$(TWL_KEYSDIR)/rsa' \ - -DCARD_REGION='$(CARD_REGION)' \ - -DDISABLE_DEBUG='$(SYSM_DISABLE_DEBUG)' - -MAKETAD_FLAGS += -s - -SYSMENU_LIBS = \ - libnamut$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - liblcfg$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = -INSTALL_TARGETS = $(BINDIR)/$(TARGET_BIN) -#INSTALL_DIR = $(SDK_NMENU_DATADIR) -INSTALL_DIR = ../bin - -#---------------------------------------------------------------------------- - - -#include $(ROMSET_FILE) - -.PHONY: build_time check_rom sumaker - -check_rom: -ifeq ($(DISABLE_ROMCHECK),) - $(ROM_CHECKER) $(ROMSET) $(SYSM_REGION) - $(ROM_CHECKER) $(ROMSET) VERUP -endif -#ifeq ($(DISABLE_ROMCHECK),) -# $(ROM_CHECKER) $(DATA_ROOT)/$(ROMSET) -#endif - -build_time: - echo -n "#define BUILD_TIME \"`date \"+%Y/%m/%d %H:%M:%S\"`\"" > include/build_time.h - -sumaker: - $(SUMAKER) $(ROMSET) $(SYSM_REGION) - -do-build: sumaker check_rom build_time $(TARGETS) - -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/include/graphics.h b/build/tests/CustomSystemUpdater/ARM9.TWL/include/graphics.h deleted file mode 100644 index f76dfeb1..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/include/graphics.h +++ /dev/null @@ -1,48 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: SystemUpdater - File: graphics.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef GRAPHICS_H_ -#define GRAPHICS_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -void InitGraphics(void); -void DrawLine(s16 sx, s16 sy, s16 ex, s16 ey, GXRgb color); -void DrawQuad(s16 sx, s16 sy, s16 ex, s16 ey, GXRgb color); -void DrawResult(BOOL result); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* GRAPHICS_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/include/hw_info.h b/build/tests/CustomSystemUpdater/ARM9.TWL/include/hw_info.h deleted file mode 100644 index 1c43c56e..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/include/hw_info.h +++ /dev/null @@ -1,71 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: process_hw_info.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef HW_INFO_H_ -#define HW_INFO_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: HWŜ̃Cg - - Description: - - Arguments: region : - wirelessForceOff : OFFȂTRUEw - - Returns: None. - *---------------------------------------------------------------------------*/ -BOOL WriteHWInfoFile( u8 region, BOOL wirelessForceOff ); - - -/*---------------------------------------------------------------------------* - Name: HWInfot@C̍폜 - - Description: - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -BOOL DeleteHWInfoFile( void ); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* HW_INFO_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/include/import.h b/build/tests/CustomSystemUpdater/ARM9.TWL/include/import.h deleted file mode 100644 index 8c04f1f6..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/include/import.h +++ /dev/null @@ -1,49 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: SystemUpdater - File: import.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef PROCESS_IMPORT_H_ -#define PROCESS_IMPORT_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -s32 kamiImportTad(int no, int total, const char* path); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* PROCESS_IMPORT_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_copy_file.h b/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_copy_file.h deleted file mode 100644 index d2fb008c..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_copy_file.h +++ /dev/null @@ -1,41 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - SystemUpdater - File: kami_copy_file.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef KAMI_COPY_FILE_H_ -#define KAMI_COPY_FILE_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -BOOL kamiCopyFile(char* srcPath, char* dstPath); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* KAMI_COPY_FILE_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_font.h b/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_font.h deleted file mode 100644 index ad5095e2..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_font.h +++ /dev/null @@ -1,94 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_font.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef KAMI_FONT_H_ -#define KAMI_FONT_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -extern u8 prog_state; -enum -{ STATE_NONE, STATE_SELECT, STATE_KS_PARENTINIT, STATE_KS_PARENT, STATE_KS_CHILDINIT, - STATE_KS_CHILDSCAN, STATE_KS_CHILD -}; -extern OSHeapHandle heapHandle; // Heapnh; - -extern const u16 BgScDataMain[32 * 24]; -extern const u16 BgScDataSub[32 * 24]; -extern const u32 sampleCharData[8 * 0x100]; -extern const u16 PlttDataObj[16][16]; -extern const u16 PlttDataMain[16][16]; -extern const u16 PlttDataSub[16][16]; - -void kamiFontInit(void); -void kamiFontClear(void); -void kamiFontClearMain(void); -void kamiFontPut(u16 x, u16 y, u16 color, u16 no); -void kamiFontPrintf(s16 x, s16 y, u8 color, char *text, ...); -void kamiFontPrintfMain(s16 x, s16 y, u8 color, char *text, ...); -void kamiFontFill(s16 x, s16 y, u8 color, s16 value, s32 length); -void kamiFontFillChar(int lineNo, u8 color1, u8 color2); -void kamiFontLoadScreenData(void); -void kamiFontPrintfConsole(u8 color, const char *text, ...); -void kamiFontPrintfConsoleEx(u8 color, const char *text, ...); - -// ʃR\[ppbg -#define CONSOLE_ORANGE 0 -#define CONSOLE_RED 1 -#define CONSOLE_GREEN 2 - -// ʃtHgppbg -#define FONT_COLOR_BLACK 0 -#define FONT_COLOR_RED 1 -#define FONT_COLOR_GREEN 2 -#define FONT_COLOR_BLUE 3 -#define FONT_COLOR_YELLOW 4 -#define FONT_COLOR_CYAN 5 -#define FONT_COLOR_PURPLE 6 - -// ʔwippbg -#define BG_COLOR_TRANS 0 -#define BG_COLOR_WHITE 1 -#define BG_COLOR_BLACK 2 -#define BG_COLOR_GRAY 3 -#define BG_COLOR_PURPLE 4 -#define BG_COLOR_PINK 5 -#define BG_COLOR_BLUE 6 -#define BG_COLOR_GREEN 7 -#define BG_COLOR_VIOLET 8 -#define BG_COLOR_RED 9 -#define BG_COLOR_YELLOW 10 - -#define BG_COLOR_NONE 0xff - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* KAMI_FONT_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_pxi.h b/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_pxi.h deleted file mode 100644 index c05de9d4..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_pxi.h +++ /dev/null @@ -1,89 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_pxi.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef TWL_KAMI_TEST_KAMITEST_H_ -#define TWL_KAMI_TEST_KAMITEST_H_ - -#include "fifo.h" - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -// ʒ` -typedef enum KAMIResult -{ - KAMI_RESULT_SUCCESS = 0, - KAMI_RESULT_SUCCESS_TRUE = 0, - KAMI_RESULT_SUCCESS_FALSE, - KAMI_RESULT_INVALID_COMMAND, - KAMI_RESULT_INVALID_PARAMETER, - KAMI_RESULT_ILLEGAL_STATUS, - KAMI_RESULT_BUSY, - KAMI_RESULT_FATAL_ERROR, - KAMI_RESULT_SEND_ERROR, - KAMI_RESULT_MAX -} -KAMIResult; - - -typedef enum { - FORMAT_MODE_QUICK, // QuicktH[}bg - FORMAT_MODE_FULL // FulltH[}bg(ep[eBV0xFFŖ߂j -} FormatMode; - -// R[obN -typedef void (*KAMICallback)(KAMIResult result, void *arg); - - -void KamiPxiInit( void ); - -KAMIResult ExeFormatAsync(FormatMode format_mode, KAMICallback callback); -KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read); -KAMIResult kamiClearNandErrorLog( void ); -KAMIResult kamiGetIsToolType( IsToolType *pType ); - -// (dv) -// ARM7ǂݏ邽߃[hOInvalidateACgO̓tbVĂB -// -static KAMIResult kamiNandRead(u32 block, void* buffer, u32 count) -{ - return kamiNandIo(block, buffer, count, TRUE); -} -static KAMIResult kamiNandWrite(u32 block, void* buffer, u32 count) -{ - return kamiNandIo(block, buffer, count, FALSE); -} - -/*===========================================================================*/ - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* TWL_KAMI_TEST_KAMITEST_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_write_nandfirm.h b/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_write_nandfirm.h deleted file mode 100644 index 90fe68bd..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_write_nandfirm.h +++ /dev/null @@ -1,52 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_write_nandfirm.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef KAMI_WRITE_NAND_FIRM -#define KAMI_WRITE_NAND_FIRM - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -typedef void* (*KAMIAlloc)(u32 size); -typedef void (*KAMIFree)(void* ptr); - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFunc); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* KAMI_WRITE_NAND_FIRM */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/include/keypad.h b/build/tests/CustomSystemUpdater/ARM9.TWL/include/keypad.h deleted file mode 100644 index 2f5a1602..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/include/keypad.h +++ /dev/null @@ -1,48 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: keypad.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef KAMI_KEY_PAD_H_ -#define KAMI_KEY_PAD_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -void kamiPadRead(void); -BOOL kamiPadIsTrigger(u16 key); -BOOL kamiPadIsRepeatTrigger(u16 key); -BOOL kamiPadIsPress(u16 key); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* KAMI_KEY_PAD_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/src/font_data.c b/build/tests/CustomSystemUpdater/ARM9.TWL/src/font_data.c deleted file mode 100644 index 54031a91..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/src/font_data.c +++ /dev/null @@ -1,734 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: SystemUpdater - File: font_data.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include - -/*---------------------- afXN[ ---------------------------*/ - -const u16 BgScDataMain[32 * 24] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -const u16 BgScDataSub[32 * 24] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -/*---------------------- pbgf[^ ---------------------------*/ -#define RGB555(r,g,b) (b<<10|g<<5|r) - -const u16 PlttDataObj[16][16] = { - {RGB555( 0, 0, 0), RGB555(31, 10, 0), RGB555(31, 0, 0), RGB555(5, 5, 20),}, // Black - {RGB555(31, 31, 31), RGB555(31, 0, 0), RGB555(31, 0, 0), RGB555(31, 0, 0),}, // Red - {RGB555(31, 31, 31), RGB555(0, 31, 0), RGB555(0, 31, 0), RGB555(0, 31, 0),}, // Green - {RGB555(31, 31, 31), RGB555(0, 0, 31), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue - {RGB555(31, 31, 31), RGB555(31, 31, 0), RGB555(31, 31, 0), RGB555(31, 31, 0),}, // Yellow - {RGB555(31, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31),}, // Cyan - {RGB555(31, 31, 31), RGB555(31, 0, 31), RGB555(31, 0, 31), RGB555(31, 0, 31),}, // Purple - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White -}; - -// ʃR\[pbg -const u16 PlttDataMain[16][16] = { - {RGB555(31, 31, 31), RGB555(31, 10, 0), RGB555(0, 0, 0), RGB555(0, 0, 0),}, // Orange - {RGB555(31, 31, 31), RGB555(31, 0, 0), RGB555(31, 0, 0), RGB555(31, 0, 0),}, // Red - {RGB555(31, 31, 31), RGB555(0, 31, 0), RGB555(0, 31, 0), RGB555(0, 31, 0),}, // Green - {RGB555(31, 31, 31), RGB555(0, 0, 31), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue - {RGB555(31, 31, 31), RGB555(31, 31, 0), RGB555(31, 31, 0), RGB555(31, 31, 0),}, // Yellow - {RGB555(31, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31),}, // Cyan - {RGB555(31, 31, 31), RGB555(31, 0, 31), RGB555(31, 0, 31), RGB555(31, 0, 31),}, // Purple - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555( 5, 5, 5), RGB555( 5, 5, 5), RGB555( 5, 5, 5), RGB555(31, 31, 31),}, // Black -}; - -// ʃR\[pbg -const u16 PlttDataSub[16][16] = { - {RGB555(31, 31, 31), RGB555( 0, 0, 0), RGB555(25, 25, 25), RGB555(31, 31, 31),}, // Black - {RGB555(31, 31, 31), RGB555(21, 0, 0), RGB555(31, 0, 0), RGB555(31, 0, 0),}, // Red - {RGB555(31, 31, 31), RGB555( 0, 21, 0), RGB555(0, 31, 0), RGB555(0, 31, 0),}, // Green - {RGB555(31, 31, 31), RGB555( 0, 0, 21), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue - {RGB555(31, 31, 31), RGB555(21, 21, 0), RGB555(31, 31, 0), RGB555(31, 31, 0),}, // Yellow - {RGB555(31, 31, 31), RGB555(0, 21, 21), RGB555(0, 31, 31), RGB555(0, 31, 31),}, // Cyan - {RGB555(31, 31, 31), RGB555(21, 0, 21), RGB555(31, 0, 31), RGB555(31, 0, 31),}, // Purple - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(20, 20, 20), RGB555(20, 20, 20), RGB555(20, 20, 20),}, // Gray - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - - // wiJ[͂16ԃpbg - // D ނ炳 sN ݂ Ž - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555( 0, 0, 0), RGB555(20, 20, 20), RGB555(31, 15, 31), RGB555(31, 20, 20), RGB555(20, 29, 31), RGB555(20, 31, 20), RGB555(21, 21, 31), RGB555(31, 0, 0), RGB555(31, 31, 10), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), } // White -}; - -/*---------------------- LN^f[^ -------------------------*/ - -const u32 sampleCharData[8 * 0x100] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0000h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11111111, 0x11111111, // 0001h use for import progress bar - 0x11111111, 0x11111111, 0x00000000, 0x00000000, - 0x00000000, 0x01011010, 0x01010010, 0x00010010, // 0002h - 0x00100010, 0x00100010, 0x00100001, 0x00100001, - 0x00000000, 0x01010001, 0x01010001, 0x01111111, // 0003h - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 0004h - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01010000, 0x01010100, 0x00001010, // 0005h - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011000, 0x01011000, 0x01111111, // 0006h - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01010010, 0x01101111, 0x01010010, // 0007h - 0x00010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x01010010, 0x01011111, 0x00000100, // 0008h - 0x00011111, 0x00001000, 0x00000001, 0x00011110, - 0x00000000, 0x01010000, 0x01011000, 0x00000110, // 0009h - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x01010000, 0x01111101, 0x00010001, // 000ah - 0x00010001, 0x00010001, 0x00010001, 0x00001010, - 0x00000000, 0x01010000, 0x01011110, 0x00100000, // 000bh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010100, 0x01011111, 0x00001000, // 000ch - 0x00010000, 0x00000001, 0x00000001, 0x00011110, - 0x00000000, 0x01010001, 0x01010001, 0x00000001, // 000dh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00011000, // 000eh - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x01010010, 0x01111111, 0x00010010, // 000fh - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00001110, 0x01010100, 0x01010010, // 0010h - 0x00111111, 0x00000100, 0x00000100, 0x00011000, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 0011h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x01010100, 0x01011111, 0x00000010, // 0012h - 0x00011110, 0x00100001, 0x00100000, 0x00011110, - 0x00000000, 0x01010000, 0x01011100, 0x00100011, // 0013h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00010000, // 0014h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x01010010, 0x01010010, 0x00001100, // 0015h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010001, 0x01111101, 0x00010001, // 0016h - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01010100, 0x01010011, 0x01110010, // 0017h - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01011110, 0x01011000, 0x00000100, // 0018h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01010000, 0x01011100, 0x00010010, // 0019h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011101, 0x01010001, 0x00111101, // 001ah - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x01110001, 0x01011101, 0x00110001, // 001bh - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01110100, 0x01010011, 0x00110010, // 001ch - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01101110, 0x01011000, 0x00100100, // 001dh - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01110000, 0x01011100, 0x00110010, // 001eh - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x01010001, 0x00111101, // 001fh - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0020h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 0021h - 0x00001000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x01101100, 0x01001000, 0x00100100, // 0022h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00100100, 0x01111111, 0x00100100, // 0023h - 0x00100100, 0x01111111, 0x00010010, 0x00010010, - 0x00000000, 0x00001000, 0x01111110, 0x00001001, // 0024h - 0x00111110, 0x01001000, 0x00111111, 0x00001000, - 0x00000000, 0x01000010, 0x00100101, 0x00010010, // 0025h - 0x00001000, 0x00100100, 0x01010010, 0x00100001, - 0x00000000, 0x00001110, 0x00010001, 0x00001001, // 0026h - 0x01000110, 0x00101001, 0x00110001, 0x01001110, - 0x00000000, 0x00011000, 0x00010000, 0x00001000, // 0027h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01110000, 0x00001000, 0x00000100, // 0028h - 0x00000100, 0x00000100, 0x00001000, 0x01110000, - 0x00000000, 0x00000111, 0x00001000, 0x00010000, // 0029h - 0x00010000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x00001000, 0x01001001, 0x00101010, // 002ah - 0x00011100, 0x00101010, 0x01001001, 0x00001000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 002bh - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002ch - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002dh - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002eh - 0x00000000, 0x00000000, 0x00000000, 0x00001100, - 0x00000000, 0x01000000, 0x00100000, 0x00010000, // 002fh - 0x00001000, 0x00000100, 0x00000010, 0x00000001, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0030h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00011100, 0x00010000, 0x00010000, // 0031h - 0x00010000, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0032h - 0x00111110, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0033h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00100000, 0x00110000, 0x00101000, // 0034h - 0x00100100, 0x00100010, 0x01111111, 0x00100000, - 0x00000000, 0x01111111, 0x00000001, 0x00111111, // 0035h - 0x01000000, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x00000001, 0x00111111, // 0036h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00100000, 0x00100000, // 0037h - 0x00010000, 0x00010000, 0x00001000, 0x00001000, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0038h - 0x00111110, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0039h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003ah - 0x00000000, 0x00000000, 0x00001100, 0x00000000, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003bh - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x01100000, 0x00011000, 0x00000110, // 003ch - 0x00000001, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00000000, 0x01111111, 0x00000000, // 003dh - 0x00000000, 0x00000000, 0x01111111, 0x00000000, - 0x00000000, 0x00000011, 0x00001100, 0x00110000, // 003eh - 0x01000000, 0x00110000, 0x00001100, 0x00000011, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 003fh - 0x00110000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x00011100, 0x00100010, 0x01001001, // 0040h - 0x01010101, 0x01010101, 0x01010101, 0x00111010, - 0x00000000, 0x00001000, 0x00010100, 0x00010100, // 0041h - 0x00100010, 0x00111110, 0x01000001, 0x01000001, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0042h - 0x00111111, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0043h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x00011111, 0x00100001, 0x01000001, // 0044h - 0x01000001, 0x01000001, 0x00100001, 0x00011111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0045h - 0x01111111, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0046h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0047h - 0x01111001, 0x01000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0048h - 0x01111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x00001000, 0x00001000, // 0049h - 0x00001000, 0x00001000, 0x00001000, 0x00111110, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 004ah - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01100001, 0x00011001, 0x00000101, // 004bh - 0x00000011, 0x00000101, 0x00011001, 0x01100001, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 004ch - 0x00000001, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01000001, 0x01100011, 0x01010101, // 004dh - 0x01001001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x01000001, 0x01000011, 0x01000101, // 004eh - 0x01001001, 0x01010001, 0x01100001, 0x01000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 004fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0050h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 0051h - 0x01000001, 0x01011001, 0x00100010, 0x01011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0052h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x01000001, 0x00000001, // 0053h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00001000, 0x00001000, // 0054h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0055h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01000001, 0x01000001, 0x00100010, // 0056h - 0x00100010, 0x00010100, 0x00010100, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0057h - 0x01001001, 0x01010101, 0x01100011, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0058h - 0x00001000, 0x00010100, 0x00100010, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0059h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01111111, 0x00100000, 0x00010000, // 005ah - 0x00001000, 0x00000100, 0x00000010, 0x01111111, - 0x00000000, 0x01111100, 0x00000100, 0x00000100, // 005bh - 0x00000100, 0x00000100, 0x00000100, 0x01111100, - 0x00000000, 0x00100010, 0x00010100, 0x00111110, // 005ch - 0x00001000, 0x00111110, 0x00001000, 0x00001000, - 0x00000000, 0x00011111, 0x00010000, 0x00010000, // 005dh - 0x00010000, 0x00010000, 0x00010000, 0x00011111, - 0x00000000, 0x00001000, 0x00010100, 0x00100010, // 005eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005fh - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x00010000, 0x00001000, 0x00011000, // 0060h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00011110, 0x00100001, // 0061h - 0x00111110, 0x00100001, 0x00100001, 0x01011110, - 0x00000000, 0x00000001, 0x00000001, 0x00111111, // 0062h - 0x01000001, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00000000, 0x00111100, 0x01000010, // 0063h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000000, 0x01000000, 0x01111110, // 0064h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0065h - 0x01111111, 0x00000001, 0x01000001, 0x00111110, - 0x00000000, 0x00110000, 0x00001000, 0x00001000, // 0066h - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x01111110, 0x01000001, // 0067h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0068h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00001000, 0x00000000, 0x00001000, // 0069h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00100000, 0x00000000, 0x00100000, // 006ah - 0x00100000, 0x00100001, 0x00100001, 0x00011110, - 0x00000000, 0x00000001, 0x00000001, 0x01100001, // 006bh - 0x00011001, 0x00000111, 0x00011001, 0x01100001, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 006ch - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00110111, 0x01001001, // 006dh - 0x01001001, 0x01001001, 0x01001001, 0x01001001, - 0x00000000, 0x00000000, 0x00111111, 0x01000001, // 006eh - 0x01000001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00000000, 0x00011100, 0x00100010, // 006fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00000000, 0x00111101, 0x01000011, // 0070h - 0x01000001, 0x01000011, 0x00111101, 0x00000001, - 0x00000000, 0x00000000, 0x01011110, 0x01100001, // 0071h - 0x01000001, 0x01100001, 0x01011110, 0x01000000, - 0x00000000, 0x00000000, 0x00110001, 0x00001101, // 0072h - 0x00000011, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0073h - 0x00001110, 0x00110000, 0x01000001, 0x00111110, - 0x00000000, 0x00000100, 0x00000100, 0x01111111, // 0074h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0075h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0076h - 0x00100010, 0x00100010, 0x00010100, 0x00001000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0077h - 0x01001001, 0x00101010, 0x00101010, 0x00010100, - 0x00000000, 0x00000000, 0x00100001, 0x00010010, // 0078h - 0x00001100, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0079h - 0x00100010, 0x00011100, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111111, 0x00010000, // 007ah - 0x00001000, 0x00000100, 0x00000010, 0x00111111, - 0x00000000, 0x00001000, 0x00011110, 0x01100100, // 007bh - 0x00011000, 0x00100100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x00011110, 0x00000100, // 007ch - 0x00011110, 0x00110101, 0x00101101, 0x00010010, - 0x00000000, 0x00000000, 0x00000000, 0x00010001, // 007dh - 0x00100001, 0x00100001, 0x00000001, 0x00000010, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007eh - 0x00011110, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007fh - 0x00111110, 0x00010000, 0x00001100, 0x00110010, - 0x00000000, 0x00000000, 0x00000100, 0x00101111, // 0080h - 0x01000100, 0x00011110, 0x00100101, 0x00010110, - 0x00000000, 0x00000000, 0x00001010, 0x00011110, // 0081h - 0x00101011, 0x00100010, 0x00010100, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00011101, // 0082h - 0x00101011, 0x00101001, 0x00011001, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00111000, // 0083h - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00000000, 0x00000000, 0x00011100, // 0084h - 0x00100011, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000110, 0x01001001, 0x00110000, // 0085h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000100, 0x00111111, 0x00000100, // 0086h - 0x00111110, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000000, 0x00100001, 0x01000001, // 0087h - 0x01000001, 0x01000001, 0x00000001, 0x00000010, - 0x00000000, 0x00111100, 0x00000000, 0x00111110, // 0088h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00011100, 0x00000000, 0x00111110, // 0089h - 0x00010000, 0x00001000, 0x00010100, 0x01100010, - 0x00000000, 0x00100100, 0x01011111, 0x00000100, // 008ah - 0x00111110, 0x01000101, 0x01000101, 0x00100010, - 0x00000000, 0x00100010, 0x01001111, 0x01010010, // 008bh - 0x01010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x00000100, 0x00111110, 0x00001000, // 008ch - 0x00111110, 0x00010000, 0x00000010, 0x00111100, - 0x00000000, 0x00100000, 0x00011000, 0x00000110, // 008dh - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x00100000, 0x01111101, 0x00100001, // 008eh - 0x00100001, 0x00100001, 0x00100001, 0x00010010, - 0x00000000, 0x00011110, 0x00100000, 0x00000000, // 008fh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00001000, 0x01111111, 0x00010000, // 0090h - 0x00100000, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0091h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00010000, 0x01111111, 0x00011000, // 0092h - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 0093h - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x00111100, 0x00010000, 0x00001100, // 0094h - 0x01111111, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000100, 0x00011111, 0x00000100, // 0095h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00001000, 0x01111111, 0x00000100, // 0096h - 0x00111100, 0x01000010, 0x01000000, 0x00111100, - 0x00000000, 0x00000000, 0x00011100, 0x00100011, // 0097h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01111111, 0x00010000, 0x00001000, // 0098h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000010, 0x00110010, 0x00001100, // 0099h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00100100, 0x01001111, 0x01000010, // 009ah - 0x00010001, 0x00111100, 0x00010010, 0x00001100, - 0x00000000, 0x00000010, 0x01111010, 0x01000010, // 009bh - 0x00000010, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00100010, 0x00111110, 0x01010010, // 009ch - 0x01001011, 0x01101101, 0x01010101, 0x00110010, - 0x00000000, 0x00110010, 0x01001011, 0x01000110, // 009dh - 0x01000110, 0x01110010, 0x01001011, 0x00110010, - 0x00000000, 0x00011100, 0x00101010, 0x01001001, // 009eh - 0x01001001, 0x01000101, 0x01000101, 0x00110010, - 0x00000000, 0x00100001, 0x01111101, 0x00100001, // 009fh - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00000100, 0x00100011, 0x01100010, // 00a0h - 0x00100001, 0x00100001, 0x00010010, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a1h - 0x00000000, 0x00000100, 0x00001010, 0x00000100, - 0x00000000, 0x01110000, 0x00010000, 0x00010000, // 00a2h - 0x00010000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a3h - 0x00001000, 0x00001000, 0x00001000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a4h - 0x00000000, 0x00000010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00011000, // 00a5h - 0x00011000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x01111111, // 00a6h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00111111, 0x00100000, // 00a7h - 0x00010100, 0x00001100, 0x00000100, 0x00000010, - 0x00000000, 0x00000000, 0x00100000, 0x00100000, // 00a8h - 0x00010000, 0x00001111, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000100, 0x00111111, // 00a9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00aah - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00000000, 0x00010000, 0x00111111, // 00abh - 0x00011000, 0x00010100, 0x00010010, 0x00011001, - 0x00000000, 0x00000000, 0x00000010, 0x00111111, // 00ach - 0x00100010, 0x00010010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00adh - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00aeh - 0x00111110, 0x00100000, 0x00100000, 0x00111110, - 0x00000000, 0x00000000, 0x00100101, 0x00101010, // 00afh - 0x00101010, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00b0h - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x00101000, // 00b1h - 0x00011000, 0x00001000, 0x00001000, 0x00000100, - 0x00000000, 0x01000000, 0x00100000, 0x00011000, // 00b2h - 0x00010111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00001000, 0x01111111, 0x01000001, // 00b3h - 0x01000001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000000, 0x00111110, 0x00001000, // 00b4h - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00100000, 0x01111111, 0x00110000, // 00b5h - 0x00101000, 0x00100100, 0x00100010, 0x00110001, - 0x00000000, 0x00000100, 0x01111111, 0x01000100, // 00b6h - 0x01000100, 0x01000100, 0x01000010, 0x00100001, - 0x00000000, 0x00000100, 0x00111111, 0x00001000, // 00b7h - 0x01111111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x01111100, 0x01000100, 0x01000100, // 00b8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000010, 0x01111110, 0x00100010, // 00b9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00bah - 0x01000000, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 00bbh - 0x00100010, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000011, 0x00000100, 0x01000011, // 00bch - 0x01000100, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x01111111, 0x01000000, 0x00100000, // 00bdh - 0x00010000, 0x00011000, 0x00100100, 0x01000011, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00beh - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x01000001, 0x01000010, 0x01000000, // 00bfh - 0x00100000, 0x00100000, 0x00011000, 0x00000110, - 0x00000000, 0x01111110, 0x01000010, 0x01001110, // 00c0h - 0x01110001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x01100000, 0x00011110, 0x00010000, // 00c1h - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01000101, 0x01001010, 0x01001010, // 00c2h - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00c3h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000010, 0x00000010, 0x00000110, // 00c4h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x00010000, 0x00010000, 0x01111111, // 00c5h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111110, 0x00000000, // 00c6h - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000100, // 00c7h - 0x00101000, 0x00010000, 0x00101000, 0x01000110, - 0x00000000, 0x00001000, 0x01111111, 0x00100000, // 00c8h - 0x00010000, 0x00011100, 0x01101011, 0x00001000, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 00c9h - 0x00100000, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x00010010, 0x00100010, 0x00100010, // 00cah - 0x01000010, 0x01000010, 0x01000001, 0x01000001, - 0x00000000, 0x00000001, 0x00000001, 0x01111111, // 00cbh - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cch - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000100, 0x00001010, // 00cdh - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x01111111, // 00ceh - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cfh - 0x00100010, 0x00010100, 0x00001000, 0x00010000, - 0x00000000, 0x00001110, 0x01110000, 0x00001110, // 00d0h - 0x01110000, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00001000, 0x00001000, 0x00000100, // 00d1h - 0x00000100, 0x00100010, 0x01000010, 0x01111111, - 0x00000000, 0x01000000, 0x01000000, 0x00100100, // 00d2h - 0x00101000, 0x00010000, 0x00101100, 0x01000011, - 0x00000000, 0x01111111, 0x00000100, 0x01111111, // 00d3h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00d4h - 0x00100010, 0x00010100, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00d5h - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00d6h - 0x01111110, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00d7h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00d8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00001010, 0x00001010, 0x00001010, // 00d9h - 0x01001010, 0x01001010, 0x00101010, 0x00011001, - 0x00000000, 0x00000010, 0x00000010, 0x01000010, // 00dah - 0x01000010, 0x00100010, 0x00010010, 0x00001110, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dbh - 0x01000001, 0x01000001, 0x01000001, 0x01111111, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dch - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000011, 0x01000100, 0x01000000, // 00ddh - 0x01000000, 0x00100000, 0x00010000, 0x00001111, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00deh 0 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00dfh 1 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00011110, 0x00001000, 0x00000100, // 00e0h 2 - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x00000000, 0x00001100, 0x00010010, // 00e1h 3 - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x00100001, 0x01111101, // 00e2h 4 - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00111100, 0x00010000, 0x00111100, // 00e3h 5 - 0x00010000, 0x00011100, 0x00110010, 0x00001100, - 0x00000000, 0x00001110, 0x00101000, 0x00101000, // 00e4h 6 - 0x00111110, 0x01100101, 0x00100101, 0x00010010, - 0x00000000, 0x00000100, 0x00101111, 0x01000100, // 00e5h 7 - 0x00000110, 0x01000101, 0x01000101, 0x00111110, - 0x00000000, 0x00100010, 0x00100010, 0x00111110, // 00e6h 8 - 0x01010010, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000100, 0x00011111, 0x00000010, // 00e7h 9 - 0x00011111, 0x01000010, 0x01000010, 0x00111100, - 0x00000000, 0x00010010, 0x00111110, 0x01010011, // 00e8h 10 - 0x01000010, 0x00100100, 0x00000100, 0x00000100, - 0x00000000, 0x00001000, 0x00111101, 0x01001011, // 00e9h 11 - 0x01001001, 0x01001001, 0x00111000, 0x00000100, - 0x00000000, 0x00001000, 0x00111000, 0x00001000, // 00eah 12 - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00011000, 0x00100000, 0x00000100, // 00ebh 13 - 0x00111010, 0x01000110, 0x01000000, 0x00111000, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00ech 14 - 0x01000110, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00edh 15 - 0x01000011, 0x01001100, 0x01010010, 0x00111100, - 0x00000000, 0x00100010, 0x00110011, 0x00101010, // 00eeh 16 - 0x00100110, 0x00100010, 0x00100011, 0x01000010, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00efh 17 - 0x01000011, 0x01000000, 0x01000010, 0x00111100, - 0x00000000, 0x00000010, 0x00111011, 0x01000110, // 00f0h 18 - 0x01000010, 0x01000011, 0x01000010, 0x00110010, - 0x00000000, 0x00000100, 0x00000100, 0x00000010, // 00f1h 19 - 0x01000110, 0x01000101, 0x01000101, 0x00111001, - 0x00000000, 0x01010100, 0x01111111, 0x00100100, // 00f2h 20 - 0x00100100, 0x00100100, 0x00100010, 0x00010001, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 00f3h 21 - 0x00111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01011110, 0x01100010, 0x00100010, // 00f4h 22 - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010010, 0x01111110, 0x00100010, // 00f5h 23 - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - - 0x33330000, - 0x33330000, - 0x33000000, - 0x33000000, // 00f6h - 0x33000000, - 0x33000000, - 0x33330000, - 0x33330000, - - - 0x00020000, // 00f7h - 0x00020000, - 0x00020000, - 0x22222222, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - - 0x00000000, // 00f8h - 0x00000000, - 0x00000000, - 0x00000000, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - - 0x11111111, // 00f9h - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - - 0x11111111, // 00fah - 0x11111111, - 0x11111111, - 0x11111111, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - - 0x00000000, // 00fbh - 0x00000000, - 0x00000000, - 0x22222222, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - - 0x00020000, // 00fch - 0x00020000, - 0x00020000, - 0x22222222, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - - 0x00020000, // 00fdh - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - - 0x00000000, // 00feh - 0x00000000, - 0x00000000, - 0x22222222, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - - 0x00020000, - 0x00220000, - 0x02122222, - 0x21111112, - 0x21111112, - 0x02122222, - 0x00220000, - 0x00020000, - - - -/* - 0x00022222, - 0x00002112, - 0x00021112, - 0x00211122, - 0x02111202, - 0x21112000, - 0x02120000, - 0x00200000, -*/ - -/* - 0x00000000, 0x01011110, 0x01010000, 0x00111111, // 00ffh - 0x00001000, 0x00001000, 0x00001000, 0x00000110 -*/ -}; - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/src/graphics.c b/build/tests/CustomSystemUpdater/ARM9.TWL/src/graphics.c deleted file mode 100644 index 0064e83d..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/src/graphics.c +++ /dev/null @@ -1,199 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: SystemUpdater - File: praphics.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -//#include -#include -#include "kami_font.h" -#include "graphics.h" - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: InitGraphics - - Description: \̏ - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void -InitGraphics(void) -{ - GX_DispOff(); - GXS_DispOff(); - - //---- VRAM NA - GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); - MI_CpuClearFast((void *)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE); - - //---- OAMƃpbgNA - MI_CpuFillFast((void *)HW_OAM, 192, HW_OAM_SIZE); - MI_CpuClearFast((void *)HW_PLTT, HW_PLTT_SIZE); - MI_CpuFillFast((void *)HW_DB_OAM, 192, HW_DB_OAM_SIZE); - MI_CpuClearFast((void *)HW_DB_PLTT, HW_DB_PLTT_SIZE); - - //---- naioN̐ݒ - GX_SetBankForOBJ(GX_VRAM_OBJ_128_A); - GX_SetBankForSubOBJ(GX_VRAM_SUB_OBJ_128_D); - - //---- afoN̐ݒ - GX_SetBankForBG(GX_VRAM_BG_128_B); - GX_SetBankForSubBG(GX_VRAM_SUB_BG_128_C); - - //---- \[hݒ - GX_SetGraphicsMode (GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_3D); - GX_SetVisiblePlane (GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_OBJ); - GXS_SetVisiblePlane(GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_OBJ); - - //---- 3D - G3X_Init(); - G3X_InitMtxStack(); - G2_SetBG0Priority(3); - G3X_AlphaTest(FALSE, 0); - G3X_AntiAlias(TRUE); - G3X_EdgeMarking(FALSE); - G3X_SetFog(FALSE, (GXFogBlend)0, (GXFogSlope)0, 0); - G3X_SetClearColor(0, 0, 0x7fff, 63, FALSE); - G3_ViewPort(0, 0, 255, 191); - G3_MtxMode(GX_MTXMODE_POSITION_VECTOR); - - //---- 32KoCgOBJ2D}bv[hŎgp - GX_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_2D); - - // XN[ItZbgyуLN^[ItZbg̐ݒ - GX_SetBGScrOffset(GX_BGSCROFFSET_0x00000); - GX_SetBGCharOffset(GX_BGCHAROFFSET_0x10000); - - G2_SetBG1Control( - GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0x0000 , - GX_BG_CHARBASE_0x00000, - GX_BG_EXTPLTT_01 - ); - - G2S_SetBG0Control( - GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0x0000 , - GX_BG_CHARBASE_0x04000, - GX_BG_EXTPLTT_01 - ); - - G2S_SetBG1Control( - GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0x2000 , - GX_BG_CHARBASE_0x04000, - GX_BG_EXTPLTT_01 - ); - - G2_BG1Mosaic(FALSE); - G2S_BG1Mosaic(FALSE); - - //---- f[^[h - GX_LoadOBJ ( sampleCharData, 0, sizeof(sampleCharData)); - GX_LoadBG1Char( sampleCharData, 0, sizeof(sampleCharData)); - GX_LoadBGPltt ( PlttDataMain, 0, sizeof(PlttDataMain)); - GX_LoadBG1Scr ( BgScDataMain, 0, sizeof(BgScDataMain)); - GX_LoadOBJPltt( PlttDataObj, 0, sizeof(PlttDataObj)); - - GXS_LoadOBJ ( sampleCharData, 0, sizeof(sampleCharData)); - GXS_LoadBG0Char( sampleCharData, 0, sizeof(sampleCharData)); - GXS_LoadBGPltt ( PlttDataSub, 0, sizeof(PlttDataSub)); - GXS_LoadBG0Scr ( BgScDataSub, 0, sizeof(BgScDataSub)); - GXS_LoadOBJPltt( PlttDataObj, 0, sizeof(PlttDataObj)); - - GX_DispOn(); - GXS_DispOn(); -} - -/*---------------------------------------------------------------------------* - Name: DrawLine - - Description: Op|SŐ` - - Arguments: sx - `悷̊Jn_̂W - sy - `悷̊Jn_̂W - ex - `悷̏I_̂W - ey - `悷̏I_̂W - color - `悷̐F - - Returns: None. - *---------------------------------------------------------------------------*/ -void -DrawLine(s16 sx, s16 sy, s16 ex, s16 ey, GXRgb color) -{ - fx16 fsx = (fx16)(((sx - 128) * 0x1000) / 128); - fx16 fsy = (fx16)(((96 - sy) * 0x1000) / 96); - fx16 fex = (fx16)(((ex - 128) * 0x1000) / 128); - fx16 fey = (fx16)(((96 - ey) * 0x1000) / 96); - - G3_Begin(GX_BEGIN_TRIANGLES); - { - G3_Color( color ); - G3_Vtx(fsx, fsy, 0); - G3_Color( color ); - G3_Vtx(fex, fey, 0); - G3_Color( color ); - G3_Vtx(fsx, fsy, 1); - } - G3_End(); -} - -/*---------------------------------------------------------------------------* - Name: DrawQuad - - Description: lp|S` - - Arguments: sx - `悷̊Jn_̂W - sy - `悷̊Jn_̂W - ex - `悷̏I_̂W - ey - `悷̏I_̂W - color - `悷̐F - - Returns: None. - *---------------------------------------------------------------------------*/ -void -DrawQuad(s16 sx, s16 sy, s16 ex, s16 ey, GXRgb color) -{ - fx16 fsx = (fx16)(((sx - 128) * 0x1000) / 128); - fx16 fsy = (fx16)(((96 - sy) * 0x1000) / 96); - fx16 fex = (fx16)(((ex - 128) * 0x1000) / 128); - fx16 fey = (fx16)(((96 - ey) * 0x1000) / 96); - - G3_Begin(GX_BEGIN_QUADS); - { - G3_Color( color ); - G3_Vtx(fsx, fsy, 0); - - G3_Color( color ); - G3_Vtx(fex, fsy, 0); - - G3_Color( color ); - G3_Vtx(fex, fey, 0); - - G3_Color( color ); - G3_Vtx(fsx, fey, 0); - } - G3_End(); -} - diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/src/hw_info.c b/build/tests/CustomSystemUpdater/ARM9.TWL/src/hw_info.c deleted file mode 100644 index ed50cbac..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/src/hw_info.c +++ /dev/null @@ -1,147 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - SystemUpdater - File: hw_info.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include "kami_font.h" -#include "kami_pxi.h" -#include "hwi.h" -#include "hw_info.h" -// -#include "TWLHWInfo_api.h" -#include "TWLSettings_api.h" -// -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - ֐錾 - *---------------------------------------------------------------------------*/ - -BOOL WriteHWNormalInfoFile( void ); -BOOL WriteHWSecureInfoFile( u8 region ); -BOOL DeleteHWInfoFile( void ); - -/*---------------------------------------------------------------------------* - Name: HWŜ̃Cg - - Description: - - Arguments: region : - - Returns: None. - *---------------------------------------------------------------------------*/ - -BOOL WriteHWInfoFile( u8 region, BOOL wirelessForceOff ) -{ - static const char *pMsgSecureWriting = "Writing Secure File..."; - static const char *pMsgNormalWriting = "Writing Normal File..."; - static const char *pMsgSignWriting = "Writing Sign File..."; - static const char *pMsgSucceeded = "Success!\n"; - static const char *pMsgFailed = "Failed!\n"; - u32 installedSoftBoxCount = 0; - BOOL result = TRUE; - - // ZLAt@C̃Cg - if( HWI_WriteHWSecureInfoFile( region, NULL, wirelessForceOff ) ) { // Ƃ肠͗LŁB -// kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSucceeded ); - }else { - kamiFontPrintfConsoleEx(CONSOLE_RED, pMsgFailed ); - result = FALSE; - } - - // m[}t@C̃Cg(ڍs”\ȃj[NID̂߂ɃZLAt@Čŏށj - if( HWI_WriteHWNormalInfoFile() ) { -// kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSucceeded ); - }else { - kamiFontPrintfConsoleEx(CONSOLE_RED, pMsgFailed ); - result = FALSE; - } - - // HWIDt@C̃Cg - if( HWI_WriteHWIDSignFile() ) { -// kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSucceeded ); - }else { - kamiFontPrintfConsoleEx(CONSOLE_RED, pMsgFailed ); - result = FALSE; - } - - // CFGf[^̏C - if (!HWI_ModifyLanguage( region )) - { - kamiFontPrintfConsoleEx(CONSOLE_RED, "Fail! Write TWLSettings\n" ); - result = FALSE; - } - - return result; -} - -/*---------------------------------------------------------------------------* - Name: HWInfot@C̍폜 - - Description: - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ - -BOOL DeleteHWInfoFile( void ) -{ - static const char *pMsgNormalDeleting = "Deleting Normal File..."; - static const char *pMsgSecureDeleting = "Deteting Secure File..."; - static const char *pMsgSucceeded = "Success!\n"; - static const char *pMsgFailed = "Failed!\n"; - BOOL result = TRUE; - - // m[}t@C - kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgNormalDeleting ); - if( HWI_DeleteHWNormalInfoFile() ) { - OS_TPrintf( "%s delete succeeded.\n", (char *)LCFG_TWL_HWINFO_NORMAL_PATH ); - kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSucceeded ); - }else { - OS_TPrintf( "%s delete failed.\n", (char *)LCFG_TWL_HWINFO_NORMAL_PATH ); - kamiFontPrintfConsoleEx(CONSOLE_RED, pMsgFailed ); - result = FALSE; - } - - // ZLAt@C - kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSecureDeleting ); - if( HWI_DeleteHWSecureInfoFile() ) { - OS_TPrintf( "%s delete succeeded.\n", (char *)LCFG_TWL_HWINFO_SECURE_PATH ); - kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSucceeded ); - }else { - OS_TPrintf( "%s delete failed.\n", (char *)LCFG_TWL_HWINFO_SECURE_PATH ); - kamiFontPrintfConsoleEx(CONSOLE_RED, pMsgFailed ); - result = FALSE; - } - - return result; -} diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/src/import.c b/build/tests/CustomSystemUpdater/ARM9.TWL/src/import.c deleted file mode 100644 index b422e173..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/src/import.c +++ /dev/null @@ -1,194 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: SystemUpdater - File: process_import.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include "kami_font.h" -#include "import.h" -#include "hw_info.h" -#include "TWLHWInfo_api.h" -#include "graphics.h" - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define THREAD_STACK_SIZE (16*1024) - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static u32 sCurrentProgress; -static vu8 sNowImport = FALSE; -static vu8 sProgress = FALSE; -static u8 sStack[THREAD_STACK_SIZE]; - -/*---------------------------------------------------------------------------* - ֐錾 - *---------------------------------------------------------------------------*/ - -static void ProgressThread(void* arg); -static void Destructor(void* arg); -void ProgressDraw(f32 ratio); - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: kamiImportTad - - Description: .tad t@CC|[g - - Arguments: no - - Returns: None. - *---------------------------------------------------------------------------*/ - -s32 kamiImportTad(int no, int total, const char* path) -{ - NAMTadInfo tadInfo; - OSThread thread; - s32 nam_result; - - kamiFontPrintfMain( 4, 9, 8, "Now Updating... %d / %d", no, total ); - kamiFontLoadScreenData(); - - // tadt@C̏擾 - nam_result = NAM_ReadTadInfo(&tadInfo, path); - if ( nam_result != NAM_OK ) - { - return nam_result; - } - - // ES̎dlŌ e-ticket ƐV e-ticket gC|[głȂ - // bΉƂĊY^CgS폜ĂC|[g - nam_result = NAM_DeleteTitleCompletely(tadInfo.titleInfo.titleId); - if ( nam_result != NAM_OK ) - { - kamiFontPrintfConsole(CONSOLE_RED, "Fail! RetCode=%x\n", nam_result); - return FALSE; - } - - // C|[gJntO𗧂Ă - sNowImport = TRUE; - - // iXbh쐬 - MI_CpuClear8(sStack, THREAD_STACK_SIZE); - OS_CreateThread(&thread, ProgressThread, NULL, - (void*)((u32)sStack + THREAD_STACK_SIZE), THREAD_STACK_SIZE, OS_GetCurrentThread()->priority - 1); - OS_WakeupThreadDirect(&thread); - - // ImportJn - nam_result = NAM_ImportTad( path ); - - // C|[gJntO - sNowImport = FALSE; - - // iXbh̎͏I҂ - while (sProgress){}; - - // InstalledSoftBoxCount, FreeSoftBoxCount ̒l݂NAND̏Ԃɍ킹čXV܂B - (void)NAMUT_UpdateSoftBoxCount(); - - return nam_result; -} - -/*---------------------------------------------------------------------------* - Name: ProgressThread - - Description: .tad t@CC|[g̐i\XbhB - i100%ɒBƏ𔲂B - - Arguments: arg - gpȂB - - Returns: None. - *---------------------------------------------------------------------------*/ - -static void ProgressThread(void* /*arg*/) -{ - u32 currentSize; - u32 totalSize = 0; - u32 totalSizeBk = 0; - - sProgress = TRUE; - - while (sNowImport) - { - NAM_GetProgress(¤tSize, &totalSize); - - if ((totalSize > 0 && totalSize == currentSize) || totalSizeBk > totalSize) - { - // ɃC|[gI - ProgressDraw((f32)1.0); - break; - } - else if (totalSize > 0) - { - ProgressDraw((f32)currentSize/totalSize); - } - - totalSizeBk = totalSize; - - // VuN҂ - OS_WaitVBlankIntr(); - } - - sProgress = FALSE; -} - -/*---------------------------------------------------------------------------* - Name: ProgressDraw - - Description: C|[g̐i\܂ - - Arguments: - - Returns: None. - *---------------------------------------------------------------------------*/ - -void ProgressDraw(f32 ratio) -{ - s16 x = (s16)(30 + (226 - 30)*ratio); - - // 3D - G3X_Reset(); - G3_Identity(); - G3_PolygonAttr(GX_LIGHTMASK_NONE, GX_POLYGONMODE_DECAL, GX_CULL_NONE, 0, 31, 0); - - // O[o[ - DrawQuad( 30, 90, x, 95, GX_RGB(12, 25, 12)); - - // O[o[ - DrawQuad( 30, 90, 226, 95, GX_RGB(28, 28, 28)); - - // O[_CAO - DrawQuad( 20, 60, 236, 110, GX_RGB(25, 25, 25)); - - // 3DXbv - G3_SwapBuffers(GX_SORTMODE_AUTO, GX_BUFFERMODE_W); -} diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_copy_file.c b/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_copy_file.c deleted file mode 100644 index c9365276..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_copy_file.c +++ /dev/null @@ -1,105 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_copy_file.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include "kami_font.h" -#include "kami_copy_file.h" - -/*---------------------------------------------------------------------------* - }N - *---------------------------------------------------------------------------*/ - -#define ROUND_UP(value, alignment) \ - (((u32)(value) + (alignment-1)) & ~(alignment-1)) - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -BOOL kamiCopyFile(char* srcPath, char* dstPath) -{ - FSFile file; - BOOL open_is_ok; - BOOL read_is_ok; - void* pTempBuf; - u32 file_size; - u32 alloc_size; - BOOL result = TRUE; - - // ROMt@CI[v - FS_InitFile(&file); - open_is_ok = FS_OpenFile(&file, srcPath); - if (!open_is_ok) - { - OS_Printf("FS_OpenFile(\"%s\") ... ERROR!\n", srcPath); - return FALSE; - } - - // ROMt@C[h - file_size = FS_GetFileLength(&file) ; - alloc_size = ROUND_UP(file_size, 32) ; - pTempBuf = OS_Alloc( alloc_size ); - SDK_NULL_ASSERT(pTempBuf); - DC_InvalidateRange(pTempBuf, alloc_size); - read_is_ok = FS_ReadFile( &file, pTempBuf, (s32)file_size ); - if (!read_is_ok) - { - kamiFontPrintfConsoleEx(CONSOLE_RED, "FS_ReadFile(\"%s\") ... ERROR!\n", srcPath); - FS_CloseFile(&file); - OS_Free(pTempBuf); - return FALSE; - } - - // ROMt@CN[Y - FS_CloseFile(&file); - - // UΏۃf[^폜 - (void)FS_DeleteFile(dstPath); - - // ^[Qbgt@C쐬 - if (!FS_CreateFile(dstPath, FS_PERMIT_R | FS_PERMIT_W)) - { - kamiFontPrintfConsoleEx(CONSOLE_RED, "FS_CreateFile(%s) failed.\n", dstPath); - result = FALSE; - } - else - { - // ^[Qbgt@CI[v - FS_InitFile(&file); - open_is_ok = FS_OpenFileEx(&file, dstPath, FS_FILEMODE_W); - if (!open_is_ok) - { - kamiFontPrintfConsoleEx(CONSOLE_RED, "FS_OpenFile(%s) failed.\n", dstPath); - result = FALSE; - } - // nand:sys/TWLFontTable.dat - else if (FS_WriteFile(&file, pTempBuf, (s32)file_size) == -1) - { - kamiFontPrintfConsoleEx(CONSOLE_RED, "FS_WritFile() failed.\n"); - result = FALSE; - } - (void)FS_CloseFile(&file); - } - - OS_Free(pTempBuf); - - return result; -} - diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_font.c b/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_font.c deleted file mode 100644 index fb3818b6..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_font.c +++ /dev/null @@ -1,407 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_font.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "kami_font.h" - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define SCREEN_DATA_COLOR_PLTT_SHIFT 12 -#define NUM_OF_PRINT_TARGET 2 - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static u8 sXPos; -static u8 sYPos; - -static u32 sBackColorCharData[24*8]; - -static u16 sFontScreenDataMain[32 * 24] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,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 u16 sFontScreenDataSub[24*32] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,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 u16 sBackColorScreenData[32 * 24] = { - 0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de, - 0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df, - 0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0, - 0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1, - 0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2, - 0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3, - 0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4, - 0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5, - 0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6, - 0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7, - 0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8, - 0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9, - 0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea, - 0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb, - 0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec, - 0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed, - 0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee, - 0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef, - 0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0, - 0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1, - 0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2, - 0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3, - 0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4, - 0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5, -}; - -/*---------------------------------------------------------------------------* - ֐錾 - *---------------------------------------------------------------------------*/ - -static void kamiFontReturnConsole( void ); - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: - - Description: - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontInit(void) -{ - // wipLN^f[^ - MI_CpuCopy32( &sampleCharData[8 * 0xde], sBackColorCharData, sizeof(sBackColorCharData) ); - - // wipXN[f[^Zbg - DC_FlushRange ( sBackColorScreenData, sizeof(sBackColorScreenData) ); - GXS_LoadBG1Scr ( sBackColorScreenData, 0, sizeof(sBackColorScreenData) ); -} - -/*---------------------------------------------------------------------------* - Name: - - Description: - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontLoadScreenData(void) -{ - DC_FlushRange ( sFontScreenDataMain, sizeof(sFontScreenDataMain) ); - GX_LoadBG0Scr ( sFontScreenDataMain, 0, sizeof(sFontScreenDataMain) ); - - DC_FlushRange ( sFontScreenDataSub, sizeof(sFontScreenDataSub) ); - GXS_LoadBG0Scr ( sFontScreenDataSub, 0, sizeof(sFontScreenDataSub) ); - - // wiLN^f[^ - DC_FlushRange( sBackColorCharData, sizeof(sBackColorCharData) ); - GXS_LoadBG0Char( sBackColorCharData, 0xde*32, sizeof(sBackColorCharData) ); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontClear - - Description: zXN[NA - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontClear(void) -{ - MI_CpuClear8( sFontScreenDataSub, sizeof(sFontScreenDataSub) ); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontClearMain - - Description: zXN[NA - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontClearMain(void) -{ - MI_CpuClear8( sFontScreenDataMain, sizeof(sFontScreenDataMain) ); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintf - - Description: zXN[ɕzuB32܂ŁB - - Arguments: x - ̐擪zu x W( ~ 8 hbg )B - y - ̐擪zu y W( ~ 8 hbg )B - color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintf(s16 x, s16 y, u8 color, char *text, ...) -{ - va_list vlist; - char temp[32 + 2]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - *(u16 *)(&temp[32]) = 0x0000; - for (i = 0;temp[i] != 0x00; i++) - { - sFontScreenDataSub[((y * 32) + x + i) % (24 * 32)] = - (u16)((color << SCREEN_DATA_COLOR_PLTT_SHIFT) | temp[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintf - - Description: zXN[ɕzuB32܂ŁB - - Arguments: x - ̐擪zu x W( ~ 8 hbg )B - y - ̐擪zu y W( ~ 8 hbg )B - color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintfMain(s16 x, s16 y, u8 color, char *text, ...) -{ - va_list vlist; - char temp[32 + 2]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - *(u16 *)(&temp[32]) = 0x0000; - for (i = 0;temp[i] != 0x00; i++) - { - sFontScreenDataMain[((y * 32) + x + i) % (24 * 32)] = - (u16)((color << SCREEN_DATA_COLOR_PLTT_SHIFT) | temp[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontFillChar - - Description: zXN[ - - Arguments: x - ̐擪zu x W( ~ 8 hbg )B - y - ̐擪zu y W( ~ 8 hbg )B - color - ̐FpbgԍŎwB - value - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontFillChar(int lineNo, u8 color1, u8 color2) -{ - s32 i; - u32 line; - int charNo = 0xde + lineNo; - - if (color1 < 0x10) - { - line = (u32)(0x11111111 * color1); - - for (i = 0;i<4; i++) - { - sBackColorCharData[8 * lineNo + i] = line; - } - } - - if (color2 < 0x10) - { - line = (u32)(0x11111111 * color2); - - for (i = 4;i<8; i++) - { - sBackColorCharData[8 * lineNo + i] = line; - } - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintfConsole - - Description: zR\[ɕzuB256܂ŁB - - Arguments: color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintfConsole(u8 color, const char *text, ...) -{ - va_list vlist; - char temp[256 + 2]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 256, text, vlist); - va_end(vlist); - - // I[lj - *(u16 *)(&temp[256]) = 0x0000; - - for(i=0; temp[i] != 0x00; i++) - { - if (temp[i] == 0x0A) - { - // sR[h - kamiFontReturnConsole(); - } - else - { - // ꕶ - sFontScreenDataMain[((sYPos * 32) + sXPos) % (24 * 32)] = - (u16)((color << SCREEN_DATA_COLOR_PLTT_SHIFT) | temp[i]); - - // XWE[ɓBꍇ͉s - if (++sXPos >= 32) - { - kamiFontReturnConsole(); - } - } - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintfConsoleEx - - Description: zR\[ɕzuB256܂ŁB - OS_Printf‚łɎsB - - Arguments: color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintfConsoleEx(u8 color, const char *text, ...) -{ - va_list vlist; - char temp[256 + 2]; - - va_start(vlist, text); - (void)vsnprintf(temp, 256, text, vlist); - va_end(vlist); - - kamiFontPrintfConsole(color, temp); - OS_TPrintf(temp); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontReturnConsole - - Description: zR\[ɂss - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -kamiFontReturnConsole( void ) -{ - sXPos = 0; - if (sYPos < 23) - { - // ̍s - sYPos++; - } - else - { - // ɍŏIsɓBĂꍇVtgs - MI_CpuCopy32( &sFontScreenDataMain[32], sFontScreenDataMain, sizeof(u16)*32*23 ); - MI_CpuClear32( &sFontScreenDataMain[32*23], sizeof(u16)*32); - } -} - diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_pxi.c b/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_pxi.c deleted file mode 100644 index f3ce7f2a..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_pxi.c +++ /dev/null @@ -1,370 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_pxi.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "kami_pxi.h" -#include "fifo.h" - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -// l߂ăRs[ -#define KAMI_PACK_U16(d, s) \ - ((d)[0] = (u8)((*((u16*)s) >> 0) & 0xFF), \ - (d)[1] = (u8)((*((u16*)s) >> 8) & 0xFF)) - -#define KAMI_PACK_U32(d, s) \ - ((d)[0] = (u8)((*((u32*)s) >> 0) & 0xFF), \ - (d)[1] = (u8)((*((u32*)s) >> 8) & 0xFF), \ - (d)[2] = (u8)((*((u32*)s) >> 16) & 0xFF), \ - (d)[3] = (u8)((*((u32*)s) >> 24) & 0xFF)) - - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ -typedef struct KamiWork -{ - BOOL lock; - - KamiCommand command; - KAMIPxiResult result; - KAMICallback callback; - void* arg; - - u32 total; - u32 current; - u8* data; -} -KamiWork; - -/*---------------------------------------------------------------------------* - ÓIϐ` - *---------------------------------------------------------------------------*/ -static BOOL kamiInitialized; -static KamiWork kamiWork; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static BOOL KamiSendPxiCommand(KamiCommand command, u8 size, u8 data); -static void KamiSendPxiData(u8 *pData); -static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err); -static void KamiDone(KAMIResult result); -static void KamiWaitBusy(void); - - -void KamiPxiInit( void ) -{ - kamiWork.lock = FALSE; - - PXI_Init(); - while ( !PXI_IsCallbackReady(PXI_FIFO_TAG_KAMITEST, PXI_PROC_ARM7 )) - { - } - PXI_SetFifoRecvCallback(PXI_FIFO_TAG_KAMITEST, KamiPxiCallback); - if ( 0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, KAMITEST_PXI_START_BIT | (KAMI_TEST_COMMAND << KAMITEST_PXI_COMMAND_SHIFT), 0)) - { - return; - } -} - -/*---------------------------------------------------------------------------* - Name: tH[}bgs֐ - - Description: - - Arguments: FormatMode - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult ExeFormatAsync(FormatMode format_mode, KAMICallback callback) -{ - OSIntrMode enabled; - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = callback; - kamiWork.arg = 0; - kamiWork.data = 0; - - if (KamiSendPxiCommand(KAMI_EXE_FORMAT, 1, format_mode) == FALSE) - { - return KAMI_RESULT_SEND_ERROR; - } - return KAMI_RESULT_SUCCESS; -} - -/*---------------------------------------------------------------------------* - Name: NANDANZX֐ - - Description: - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read) -{ - OSIntrMode enabled; - u8 data[12]; - int i; - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = 0; - - // f[^쐬 - KAMI_PACK_U32(&data[0], &block); - KAMI_PACK_U32(&data[4], &buffer); - KAMI_PACK_U32(&data[8], &count); - - if (KamiSendPxiCommand(KAMI_NAND_IO, 12, (u8)is_read)) - { - for (i = 0; i < 12; i+=3) - { - KamiSendPxiData(&data[i]); - } - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiClearNandErrorLog - - Description: NVRAMNANDG[NA܂B - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiClearNandErrorLog( void ) -{ - OSIntrMode enabled; - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = 0; - - if (KamiSendPxiCommand(KAMI_CLEAR_NAND_ERRORLOG, 0, (u8)0)) - { - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiGetIsToolType - - Description: IS-TWL-DEBUGGER or CAPTURE 擾܂iŁj - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiGetIsToolType( IsToolType *pType ) -{ - OSIntrMode enabled; - - if (pType == NULL) - { - return KAMI_RESULT_INVALID_PARAMETER; - } - - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = (u8*)pType; - (void)OS_RestoreInterrupts(enabled); - - if (KamiSendPxiCommand(KAMI_GET_IS_TOOL_TYPE, 0, 0)) - { - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - PXI֘A - *---------------------------------------------------------------------------*/ - -static BOOL KamiSendPxiCommand(KamiCommand command, u8 size, u8 data) -{ - u32 pxiData = (u32)(KAMITEST_PXI_START_BIT | - ((command << KAMITEST_PXI_COMMAND_SHIFT) & KAMITEST_PXI_COMMAND_MASK) | - ((size << KAMITEST_PXI_DATA_NUMS_SHIFT) & KAMITEST_PXI_DATA_NUMS_MASK) | - ((data << KAMITEST_PXI_1ST_DATA_SHIFT) & KAMITEST_PXI_1ST_DATA_MASK)); - if (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - return FALSE; - } - return TRUE; -} - -static void KamiSendPxiData(u8 *pData) -{ - u32 pxiData = (u32)((pData[0] << 16) | (pData[1] << 8) | pData[2]); - while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - } -} - -static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err) -{ -#pragma unused( tag ) - if (err) - { - KamiDone(KAMI_RESULT_FATAL_ERROR); - return; - } - if (data & KAMITEST_PXI_START_BIT) // 擪f[^ - { - if (data & KAMITEST_PXI_RESULT_BIT) - { - kamiWork.total = (u8)((data & KAMITEST_PXI_DATA_NUMS_MASK) >> KAMITEST_PXI_DATA_NUMS_SHIFT); - kamiWork.current = 0; - kamiWork.command = (KamiCommand)((data & KAMITEST_PXI_COMMAND_MASK) >> KAMITEST_PXI_COMMAND_SHIFT); - kamiWork.result = (KAMIPxiResult)((data & KAMITEST_PXI_1ST_DATA_MASK) >> KAMITEST_PXI_1ST_DATA_SHIFT); - } - else // m̃f[^ - { - KamiDone(KAMI_RESULT_FATAL_ERROR); - return; - } - } - else // 㑱f[^ - { - if (kamiWork.data == NULL) - { - KamiDone(KAMI_RESULT_FATAL_ERROR); - return; - } - if (kamiWork.current < kamiWork.total-1) - { - kamiWork.data[kamiWork.current++] = (u8)((data & 0xFF0000) >> 16); - } - if (kamiWork.current < kamiWork.total-1) - { - kamiWork.data[kamiWork.current++] = (u8)((data & 0x00FF00) >> 8); - } - if (kamiWork.current < kamiWork.total-1) - { - kamiWork.data[kamiWork.current++] = (u8)((data & 0x0000FF) >> 0); - } - } - if (kamiWork.current == kamiWork.total-1) - { - KAMIResult result; - switch (kamiWork.result) - { - case KAMI_PXI_RESULT_SUCCESS: // alias KAMI_PXI_RESULT_SUCCESS_TRUE - result = KAMI_RESULT_SUCCESS; // alias KAMI_RESULT_SUCCESS_TRUE - break; - case KAMI_PXI_RESULT_SUCCESS_FALSE: - result = KAMI_RESULT_SUCCESS_FALSE; - break; - case KAMI_PXI_RESULT_INVALID_COMMAND: - result = KAMI_RESULT_INVALID_COMMAND; - break; - case KAMI_PXI_RESULT_INVALID_PARAMETER: - result = KAMI_RESULT_INVALID_PARAMETER; - break; - case KAMI_PXI_RESULT_ILLEGAL_STATUS: - result = KAMI_RESULT_ILLEGAL_STATUS; - break; - case KAMI_PXI_RESULT_BUSY: - result = KAMI_RESULT_BUSY; - break; - default: - result = KAMI_RESULT_FATAL_ERROR; - } - KamiDone(result); - return; - } -} - -extern void PXIi_HandlerRecvFifoNotEmpty(void); -static void KamiWaitBusy(void) -{ - volatile BOOL *p = &kamiWork.lock; - - while (*p) - { - if (OS_GetCpsrIrq() == OS_INTRMODE_IRQ_DISABLE) - { - PXIi_HandlerRecvFifoNotEmpty(); - } - } -} - -static void KamiDone(KAMIResult result) -{ - KAMICallback callback = kamiWork.callback; - void* arg = kamiWork.arg; - kamiWork.callback = NULL; - kamiWork.arg = NULL; - if (kamiWork.lock) - { - kamiWork.lock = FALSE; - } - if (callback) - { - callback(result, arg); - } -} diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_write_nandfirm.c b/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_write_nandfirm.c deleted file mode 100644 index cac9c5ee..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_write_nandfirm.c +++ /dev/null @@ -1,332 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_write_nandfirm.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include "kami_font.h" -#include "kami_pxi.h" - -#include -#include "kami_write_nandfirm.h" - -/*---------------------------------------------------------------------------* - }N` - *---------------------------------------------------------------------------*/ - -// NANDt@[݂̍ۂNVRAM̖蓖ė̈{\̈ONAꍇ͒`܂iJpj -//#define CLEAR_NON_ASIGNED_AREA_AND_RESERVED_AREA_ALL - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define NAND_BLOCK_BYTE 0x200 -#define NAND_FIRM_START_OFFSET 0x200 -#define NAND_FIRM_START_OFFSET_IN_FILE 0x200 - -#define NVRAM_PAGE_SIZE 0x100 -#define NVRAM_NORFIRM_RESERVED_ADDRESS 0x200 -#define NVRAM_NORFIRM_NANDBOOT_FLAG_OFFSET 0xff -#define NVRAM_NORFIRM_NANDBOOT_FLAG 0x80 - -#define NVRAM_NON_ASIGNED_AREA_ADDRESS 0x300 - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static u8 sNvramPageSizeBuffer[NVRAM_PAGE_SIZE] ATTRIBUTE_ALIGN(32); // ARM7ANZX邽߃X^bNł͑ʖ -static u32 sReservedAreaEndAddress; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -void kamiEraseNandfirmVersion( u32 nandfirmsize ); - -/*---------------------------------------------------------------------------* - Name: kamiWriteNandfirm - - Description: - - Arguments: no - - Returns: None. - *---------------------------------------------------------------------------*/ -BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFunc) -{ - FSFile file; - - BOOL open_is_ok; - BOOL read_is_ok; - u8* pTempBuf; - u32 file_size; - u32 nandfirm_size; - u32 alloc_size; - u32 write_block; - BOOL result = TRUE; - u16 crc_w1, crc_w2; - u16 crc_r1, crc_r2; - u16 crc_norfirm_reserved_area_w, crc_norfirm_reserved_area_r; -#ifdef CLEAR_NON_ASIGNED_AREA_AND_RESERVED_AREA_ALL - u32 write_offset; -#endif // CLEAR_NON_ASIGNED_AREA_AND_RESERVED_AREA_ALL - - // .nandt@CI[v - FS_InitFile(&file); - open_is_ok = FS_OpenFile(&file, pFullPath); - if (!open_is_ok) - { - OS_Warning("Failure! FS_OpenFile"); - return FALSE; - } - - // TCY`FbN - file_size = FS_GetFileLength(&file) ; - if (file_size > (800*1024)) - { - kamiFontPrintfConsoleEx(1, "too big file size!\n"); - FS_CloseFile(&file); - return FALSE; - } - - nandfirm_size = file_size - NAND_FIRM_START_OFFSET_IN_FILE; - - // obt@m - // ݂ubNP(512byte)ł邱Ƃl512ACgm - alloc_size = MATH_ROUNDUP(file_size, 512); - pTempBuf = allocFunc( alloc_size ); - if (pTempBuf == NULL) - { - kamiFontPrintfConsoleEx(1, "Fail Alloc()!\n"); - FS_CloseFile(&file); - return FALSE; - } - - MI_CpuClear8( pTempBuf, alloc_size ); - - // .nandt@C[h - DC_FlushRange(pTempBuf, alloc_size); - read_is_ok = FS_ReadFile( &file, pTempBuf, (s32)file_size ); - DC_FlushRange(pTempBuf, file_size); - if (!read_is_ok) - { - kamiFontPrintfConsoleEx(1, "Fail FS_ReadFile!\n"); - FS_CloseFile(&file); - freeFunc(pTempBuf); - return FALSE; - } - - // t@CN[Y - FS_CloseFile(&file); - - // ݑOCRCvZ - crc_w1 = SVC_GetCRC16( 0xffff, pTempBuf, sizeof(NORHeaderDS) ); - crc_w2 = SVC_GetCRC16( 0xffff, pTempBuf+NAND_FIRM_START_OFFSET_IN_FILE, nandfirm_size ); - - // ܂NORHeaderDS̈ށi40byte?j - if (NVRAMi_Write(0, sizeof(NORHeaderDS), (void*)pTempBuf) != NVRAM_RESULT_SUCCESS) - { - kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n"); - result = FALSE; - } - - // CRCvẐŔÔ߂ɃNAĂ烊[h - MI_CpuClear8( pTempBuf, sizeof(NORHeaderDS) ); - DC_FlushRange(pTempBuf, sizeof(NORHeaderDS)); - - // CRC`FbN̂Nvram烊[h - if (NVRAMi_Read(0, sizeof(NORHeaderDS), pTempBuf) != NVRAM_RESULT_SUCCESS) - { - kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Read()!\n"); - } - DC_FlushRange(pTempBuf, sizeof(NORHeaderDS)); - - // ݌CRCvZ - crc_r1 = SVC_GetCRC16( 0xffff, pTempBuf, sizeof(NORHeaderDS) ); - - // NVRAM擪CRCr - if ( crc_w1 != crc_r1 ) - { - freeFunc(pTempBuf); - kamiFontPrintfConsoleEx(1, "Fail! CRC check %x!=%x\n", crc_w1, crc_r1); - return FALSE; - } - - // nandfirm NtO𗧂Ă - MI_CpuClear8( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE ); - sNvramPageSizeBuffer[NVRAM_NORFIRM_NANDBOOT_FLAG_OFFSET] = NVRAM_NORFIRM_NANDBOOT_FLAG; - DC_FlushRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE); - - // NORt@[U[ü̏݃f[^CRCvZ - crc_norfirm_reserved_area_w = SVC_GetCRC16( 0xffff, sNvramPageSizeBuffer, NVRAM_PAGE_SIZE ); - - if (NVRAMi_Write(NVRAM_NORFIRM_RESERVED_ADDRESS, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS) - { - kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n"); - result = FALSE; - } - - // CRCvẐŔÔ߂ɃNAĂ烊[h - MI_CpuClear8( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE ); - - // ǂݍ݂ARM7ڃɏo - DC_FlushRange(sNvramPageSizeBuffer, NVRAM_PAGE_SIZE); - - if (NVRAMi_Read(NVRAM_NORFIRM_RESERVED_ADDRESS, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS) - { - kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Read()\n"); - result = FALSE; - } - - // ݌CRCvZ - DC_FlushRange(sNvramPageSizeBuffer, NVRAM_PAGE_SIZE); - crc_norfirm_reserved_area_r = SVC_GetCRC16( 0xffff, sNvramPageSizeBuffer, NVRAM_PAGE_SIZE ); - - // NORt@[U[üCRCr - if ( crc_norfirm_reserved_area_w != crc_norfirm_reserved_area_r ) - { - kamiFontPrintfConsoleEx(1, "Fail! Norfirm Reserved Area CRC check %x!=%x\n", crc_norfirm_reserved_area_w, crc_norfirm_reserved_area_r); - result = FALSE; - } - -#ifdef CLEAR_NON_ASIGNED_AREA_AND_RESERVED_AREA_ALL - DC_InvalidateRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE ); - // 蓖ė̈{\̈ONA܂iJpj - if (NVRAMi_Read(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_PAGE_SIZE, &sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS) - { - kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Read()\n"); - result = FALSE; - } - sReservedAreaEndAddress = (u32)(*(u16 *)sNvramPageSizeBuffer << NVRAM_CONFIG_DATA_OFFSET_SHIFT) - 0xA00;// TWL WiFiݒ + NTR WiFiݒ - //OS_Printf("end = %x\n", sReservedAreaEndAddress); - - MI_CpuFill8( sNvramPageSizeBuffer, 0x00, NVRAM_PAGE_SIZE ); - DC_FlushRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE ); - - for (write_offset=NVRAM_NON_ASIGNED_AREA_ADDRESS; write_offset < sReservedAreaEndAddress; write_offset += NVRAM_PAGE_SIZE) - { - if (NVRAMi_Write(write_offset, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS) - { - kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n"); - result = FALSE; - } - } - //OS_Printf("write_offset = %x\n", write_offset); -#else - // 蓖ė̈擪256byte{\̈ONA܂ - - MI_CpuFill8( sNvramPageSizeBuffer, 0x00, NVRAM_PAGE_SIZE ); - DC_FlushRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE ); - - if (NVRAMi_Write(NVRAM_NON_ASIGNED_AREA_ADDRESS, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS) - { - kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n"); - result = FALSE; - } - - DC_InvalidateRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE ); - if (NVRAMi_Read(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_PAGE_SIZE, &sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS) - { - kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Read()\n"); - result = FALSE; - } - sReservedAreaEndAddress = (u32)(*(u16 *)sNvramPageSizeBuffer << NVRAM_CONFIG_DATA_OFFSET_SHIFT) - 0xA00;// TWL WiFiݒ + NTR WiFiݒ - - MI_CpuFill8( sNvramPageSizeBuffer, 0x00, NVRAM_PAGE_SIZE ); - DC_FlushRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE ); - - if (NVRAMi_Write(sReservedAreaEndAddress - 0x100, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS) - { - kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n"); - result = FALSE; - } -#endif - - // NANDÕNA - if (kamiClearNandErrorLog() != KAMI_RESULT_SUCCESS) - { - kamiFontPrintfConsoleEx(1, "Fail kamiClearNandErrorLog()\n"); - result = FALSE; - } - - // nandfirmo[W̏ifobOpj - kamiEraseNandfirmVersion(nandfirm_size); - -// kamiFontPrintfConsoleEx(0, "NAND Firm Import Start!\n"); - - // NAND - write_block = nandfirm_size/NAND_BLOCK_BYTE + (nandfirm_size % NAND_BLOCK_BYTE != 0); - kamiNandWrite( NAND_FIRM_START_OFFSET/NAND_BLOCK_BYTE, pTempBuf+NAND_FIRM_START_OFFSET, write_block ); // ubNPʁAoCgPʁAubNP - kamiFontLoadScreenData(); - - // CRCvẐŔÔ߂ɃNAĂ烊[h - MI_CpuClear8( pTempBuf, nandfirm_size ); - DC_FlushRange(pTempBuf, nandfirm_size); - - // CRC`FbN̂Nand烊[h - if (kamiNandRead(NAND_FIRM_START_OFFSET/NAND_BLOCK_BYTE, pTempBuf, write_block ) == KAMI_RESULT_SEND_ERROR) - { - kamiFontPrintfConsoleEx(1, "kamiNandRead ... %s!\n", "ERROR"); - } - DC_FlushRange(pTempBuf, nandfirm_size); - - // ݌CRCvZ - crc_r2 = SVC_GetCRC16( 0xffff, pTempBuf, nandfirm_size ); - - // NANDɂ‚ĂCRC`FbN - if (crc_w2 == crc_r2) - { -// kamiFontPrintfConsoleEx(0, "Success! CRC check %x==%x\n", crc_w2, crc_r2); - } - else - { - result = FALSE; - kamiFontPrintfConsoleEx(1, "Fail! CRC check %x!=%x\n", crc_w2, crc_r2); - } - - // - freeFunc(pTempBuf); - - return result; -} - -/*---------------------------------------------------------------------------* - Name: kamiEraseNandfirmVersion - - Description: nandfirm̃o[W܂BifobOpj - - Arguments: no - - Returns: None. - *---------------------------------------------------------------------------*/ -void kamiEraseNandfirmVersion( u32 nandfirmsize ) -{ - u8 buffer[NAND_BLOCK_BYTE]; - u32 blockNo; - - if ((nandfirmsize % NAND_BLOCK_BYTE)==0) - { - blockNo = NAND_FIRM_START_OFFSET/NAND_BLOCK_BYTE + nandfirmsize/NAND_BLOCK_BYTE; - MI_CpuClear8( buffer, NAND_BLOCK_BYTE ); - DC_FlushRange(buffer, NAND_BLOCK_BYTE); - kamiNandWrite( blockNo, buffer, 1 ); // ubNPʁAoCgPʁAubNP - } -} diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/src/keypad.c b/build/tests/CustomSystemUpdater/ARM9.TWL/src/keypad.c deleted file mode 100644 index 155c4bc2..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/src/keypad.c +++ /dev/null @@ -1,85 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: keypad.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "keypad.h" - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define KEY_REPEAT_TRIGGER_START 20 -#define KEY_REPEAT_TRIGGER_TERM 5 - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static u16 Cont; -static u16 Trg; -static u16 Release; -static u16 RepeatTrg; -static u8 key = 60; - -static int repeat_counter; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -void -kamiPadRead(void) -{ - u16 ReadData; - - ReadData = PAD_Read(); - Trg = (u16)(ReadData & (ReadData ^ Cont)); - Release = (u16)(Cont & (ReadData ^ Cont)); - Cont = ReadData; - - RepeatTrg = Trg; - if (++repeat_counter > (KEY_REPEAT_TRIGGER_START + KEY_REPEAT_TRIGGER_TERM)) - { - repeat_counter = KEY_REPEAT_TRIGGER_START; - } - if (repeat_counter == KEY_REPEAT_TRIGGER_START) - { - RepeatTrg = ReadData; - } - if (!ReadData) - { - repeat_counter = 0; - } -} - -BOOL -kamiPadIsTrigger(u16 key) -{ - return (Trg & key)? TRUE : FALSE; -} - -BOOL -kamiPadIsRepeatTrigger(u16 key) -{ - return (RepeatTrg & key)? TRUE : FALSE; -} - -BOOL -kamiPadIsPress(u16 key) -{ - return (Cont & key)? TRUE : FALSE; -} - diff --git a/build/tests/CustomSystemUpdater/Makefile b/build/tests/CustomSystemUpdater/Makefile deleted file mode 100644 index 9ae3341f..00000000 --- a/build/tests/CustomSystemUpdater/Makefile +++ /dev/null @@ -1,123 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: SystemUpdater -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL -override TARGET_CODEGEN = THUMB -override TWL_ARCHGEN = LIMITED - - -TARGET_FIRM = SYSTEMMENU - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -#.PHONY: no_rom_set -#no_rom_set: -# echo "Usage: make ROMSET=dirname" -# -#ifeq ($(ROMSET),) -# no_rom_set -#endif -# - -# [Ww肳ĂȂS -ifeq ($(REGION),) - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -do-build: do-something -clean: do-something -clobber: do-something -install: do-something -do-build: MY_GOAL= -clean: MY_GOAL=clean -clobber: MY_GOAL=clobber -install: MY_GOAL=install - -do-something: - -$(REMAKE) TWLSDK_PLATFORM=TWL REGION=JPN ROMSET=$(ROMSET) DISABLE_ROMCHECK=$(DISABLE_ROMCHECK) SKIP_SUBDIR=FALSE $(MY_GOAL) - -rm `find . -name "*autogen*"` - -$(REMAKE) TWLSDK_PLATFORM=TWL REGION=AUS ROMSET=$(ROMSET) DISABLE_ROMCHECK=$(DISABLE_ROMCHECK) SKIP_SUBDIR=FALSE $(MY_GOAL) - -rm `find . -name "*autogen*"` - -$(REMAKE) TWLSDK_PLATFORM=TWL REGION=USA ROMSET=$(ROMSET) DISABLE_ROMCHECK=$(DISABLE_ROMCHECK) SKIP_SUBDIR=FALSE $(MY_GOAL) - -rm `find . -name "*autogen*"` - -$(REMAKE) TWLSDK_PLATFORM=TWL REGION=EUR ROMSET=$(ROMSET) DISABLE_ROMCHECK=$(DISABLE_ROMCHECK) SKIP_SUBDIR=FALSE $(MY_GOAL) -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -else - -LAUNCHER_DIR = $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/Launcher -MACHINESETTINGS_DIR = $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/MachineSettings -WLANFIRM_DIR = $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/wlanfirm -DS_HASH_TABLE = $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/DSHashTable -SHARED_FONT_DIR = $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/sharedFont -NANDFIRM_DIR = $(TWL_IPL_RED_ROOT)/build/nandfirm/menu-launcher - - - -# f[^gpꍇTRUEw -SKIP_CREATE_DATA = TRUE - -ifeq ($(SKIP_CREATE_DATA),FALSE) -SUBDIRS = $(LAUNCHER_DIR) \ - $(MACHINESETTINGS_DIR) \ - $(WLANFIRM_DIR) \ - $(DS_HASH_TABLE) \ - $(SHARED_FONT_DIR) \ - $(NANDFIRM_DIR) \ - data \ - banner \ - ARM7.TWL \ - ARM9.TWL -else -SUBDIRS = banner \ - ARM7.TWL \ - ARM9.TWL -endif - -# CustomSystemUpdater -export SYSM_REGION = $(REGION) -export ROMSET := $(ROMSET) -export DISABLE_ROMCHECK := $(DISABLE_ROMCHECK) - -# COMPILE SWITCH for build SystemMenu - -export SYSM_UPDATER_RELEASE = TRUE - -export SYSM_DO_NOT_SHOW_LAUNCHER = TRUE -export SYSM_DISABLE_WDS_SCAN = FALSE -export SYSM_IGNORE_WLFIRM_SIGNCHECK = FALSE -export SYSM_DISABLE_WLFIRM_LOAD = FALSE -export SYSM_DISABLE_INITIAL_SETTINGS = TRUE -export SYSM_OUTSIDE_UI = TRUE - -export SYSM_BUILD_FOR_PRODUCTION_TEST = FALSE - -# MAKEROM SWITCH for build SystemMenu -export SYSM_DISABLE_DEBUG = FALSE -export SYSM_USE_WLANFIRM_LOCAL_PUBKEY = FALSE - - -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -endif - -#===== End of Makefile ===== diff --git a/build/tests/CustomSystemUpdater/banner/Makefile b/build/tests/CustomSystemUpdater/banner/Makefile deleted file mode 100644 index e373c033..00000000 --- a/build/tests/CustomSystemUpdater/banner/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/gameIcon.bmp -BANNER_SPEC = banner_v3.bsf - -TARGETS = banner.bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) -BANNER_ICON_MIDDLE = $(addprefix $(BANNER_ICON_NAME), .nbfs .nbfc .nbfp) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_MIDDLE) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) $(BANNER_ICON_MIDDLE) - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/CustomSystemUpdater/banner/banner_AUS.bnr b/build/tests/CustomSystemUpdater/banner/banner_AUS.bnr deleted file mode 100644 index 4828a00dfa47779df1c47df15a129ef9553e22ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9152 zcmeI2Pm3Kz6vaD9=aJJfI9_HdxAt$-e8lZip5I#R<;~aTg3B(RZ4;fMEE*O4NGSoaRmJI6TaRpqfBGAX*WB^ zj=Fr>5^uR`TPE26%eC4l)9+roc3%1ojGnbrXU$bOWL3L*FP~Ro}mI`_AD9cJ$+|U+%fC|26;D z^S?g-*608K@$cVN{@cB-ecgd|2i6@}cVOLtbq6lC1MAF=vFOCFIMG5+=6^oO$k zS^Lo!G(0;SaNGuLHpTttWBJK^18%}myB{~jBOT=5={vb+M;GhHxch-LxK}5?u7KPd zy}@|K8&qDV6R**&KVQr2E3%HxI#%T_;VkBh#T$%xgRx1mYr1se4bnCHgV=5ZCR_IC zidUEGaXQ?)O=~!Wd(b`Y@&)(2L0NdrCC^TvJkuY{yl^uWIO7kBPak~3-41^cFr~1k zjczXJ4@#fnM^ek1O=zD6^wjmFuQ+|%N)-JZv zL8*fNo)bQL_Sgwvw!ORD;7Pj2Swu5K#Fl$f4aF}&m5dTc<8$Ko+UmfS zK4W~A^K@&N&N0v#9soZK8GcQhUUd+pgniT&f?j|CgG=#T)R`6XTZl2n2cO{%J=`Hf z9GU+l=U7uc{P5HS<_P2DQ$;uvK?aMHi%laRGbJKR4L!P29(`8cD z=U@7NyLA4ykKt)S1grk+!N24AU$juJu_(s{pZ_FruSD*b^e;T8>YD!J-`;0G|Nrd& X11{z&T%Az|)xouc>jyXfsTKbLC^*cG diff --git a/build/tests/CustomSystemUpdater/banner/banner_EUR.bnr b/build/tests/CustomSystemUpdater/banner/banner_EUR.bnr deleted file mode 100644 index c4d8d0fceb52204c100799a992e5530395460a5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9152 zcmeI2KZ_+r6vcaY4aTq|M^IH03lkMpX#ZdILnb#C>*>A7+3wWD|LJ->7R zmtwIzr1WOiTTBSizH8gI4;BQ)3C|008icqQH^n2P<2b&iZ${)=uwb?G7+eW$&!Ds( ztx1IiSsSTZ`Uh{Ceub8{0G~y5@@1(SON0jm_*#oKOJ^Nn0Q~e5zTPckoW^X^Y<7+v z_4sMVc*9lGFv$j3s?|oxzkBK0dFj_Xnxx$98?5M79SLE)ADZd;bM+m<;L~*ulld~zn=f~`L{m* z|BrwFuJYgRb?xg8tUIvoz`6tL4y-$Hu^o^{ko<_%A6oK=v7zAY&OOH_hb3Vd;@O6QM(_P8@$1A#v4># z#=Y0*)}OCs_7zx1Yb~pCmv9#I#o`SHyunb%(AI4X*&C#5@&~cqdc3{l(T!eRs)y-t z?>3F$5Kf?b+T{yQyg^xb%q6Q(p!}gfn0Vo4DsaXh6rVo$gu5O7AYe*iqK#eLACx|$ zA4x55Hlls((Nou1UuV>pcA5Q_y5MwN&BP>!4B|09+XE&*ljz8t;$`e9(1cAq$1`(5&eH#2|OHcTeKtsF=maaz@W?=M6D;rY*I_j*5|8tgd|C%eyi)7d|D z{uK^D?+&EBK4DpZy18G^9GpLR=sI~%puEd@fZR;hGB=$_J34>a!M$YpH{1%+|7Fg9<|GIF-N0P`qwPsyzL0K{ydX28)xVP}ae=jC^J{70vvNs%hrF1C=B1IkPw~6OHQ`_U?((@HOz} zQG!_rIY3lk@aHLHm>KrRe_^(t~CF zPrkWnyUig_(bwrxjac>PTvveNxjwCRCOOrPzj6LKmv*lHwyn&bRhM=CrT@1}=YRVY zo(2T4>dzkhJD&fe7Rogi<+$MUpCs;-$la3uBhRV2r2k7j|Nrd&11{z&T%Az|#lf|M L>jyXfsTKbYk~PjB diff --git a/build/tests/CustomSystemUpdater/banner/banner_JPN.bnr b/build/tests/CustomSystemUpdater/banner/banner_JPN.bnr deleted file mode 100644 index 4480b5e04f1251b7a2a9d0460dd9840cb3db34f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9152 zcmeI2!HOM46oxB_i*b2(BO|nXap5xvS-22ETm=cD5fYIOi7s3XZluA*#f{Lb(iaf2 z5F0-dj_n)fj+db)tIu7V)*X8f(u2WV2={l!+;IFxM<+mq~kAD96 zryFjud_?JEjC~9VKE!X@w(WiNg6x>*1v?EwShPpk1EWJ3U(Z6st^4GY?9P4r^6S?RKZwWQzxLyGfAi#pA6$I(=8Lb~`St4W$MN_L z_nEuzK6SPG#J%G_xBFY%zw7S058eA%Zn=BzhI`Y!?cQ?lE#}x|Zd~7gjsKee>;7NA zf9v=E|M>UsGXL#feP35#U4eB4))iP+U|oUpt$;Lwq(`j!(2_k7!dtPT2S zv_a)%*lUd@{h2Sbi^q>Pws>VK;ml^vq78bqL0<>o)@|^kHb~c`4u%B;7d3r^eBj7{N?KwRvzHDCf_5)31!co};d;+ViQ zuO%9-R^Z?{g&teV5fSHX5D(dCz@a(>e>=48ZF(9;KIOmyjD%2Htj~(SVr{`zIw)0$ zzvYCDp1nIQv**NVu^*B)yq)R8am!=^+{%HZ5ht(qYkv{(&)oUA_k zO?&^;{+HPUogFCl`uXMf)6MjH=3xK9L)XbUf%0z51H#Q@EpyX}w8O;kX;G8DH%hml z9?HG3aGTE}0_z^qH=y+;{^R+8ah@H2%~v9jcVnYx1>DLQ{wA{qbDva*0O+-fSxF^vm{H z&eN@CIzvxqcmVt`B-lM|T|VhZ^OpH>uc~5)JDi2U#qeC1RsQiV*kIT5e81_r>fo*t z#F6;-IfqZ1{<~kIz#Nq(nHJ262r^iVB-!zd5yB2Uibt}J@6M>2W}Z7x8OAkd7UN}f z@h7j{1Eb-Rc@q^^*&pr>Nwq^ZMMcX9{3x+WJcUm+^O#Q>uVQ>_{Ks|w3-Nz&R{T$h z{mJe^;{OGq2g~t4`RXVR+e5yhFVUqcSmV#Wt^mbyeOhZzva1b$WB;=+I*K+^> diff --git a/build/tests/CustomSystemUpdater/banner/banner_USA.bnr b/build/tests/CustomSystemUpdater/banner/banner_USA.bnr deleted file mode 100644 index 110376b662ee7042f102cf5239969cc7a4e6e868..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9152 zcmeI2!HVTX6oxZ1F4|>wEh9v5DK6#_L>M1na3wN`&cFx~8Fk^RaU%g27dJvyrMp=P z1BwH)xDVjQH<)M0Cf=gKRvAv+kIMZX1&FP5be9RZTnzBP@M3*5vN0li*Zvta(B%4*NhzzITtKg?K}ooLfdmw z%11e=k&v~KL(BN!UDL17(ih;fs6n2V4!K2mK!C5cSd%(=gaPm~PWXDaj699mrrGQq zJC6C&fSUReYHvaCVbLVAT?`WEyS#nNV+Xl`CZm<&u0-rd=;oVhSPhlk; zHfU3KRatkPaqQ~Os@lrVb5gu0zJK-B?c)#af)2)PVuFm-{bt<;?v@z;sYZ0iigE}T;D0)D&AkLv8&v<{{B_}wf@)r zzdrxg=l}ol@84Da+r8$#uE4qi>k6zZu&%(m0*9@DJc8s$tp3oFM3N?!O<)Pv#qN6ON<%abr9%K>nS+qkDD?v37{NA4rFLb@J;nsJ+1( z4ClN-)n(j!jc)yUF0-#d9<8-xp>2E4&g$I#Yo45K&5(BuzdyY+Z`$)n3& zT{;fa;ofZ;!y%kN*YwL5oOpw>@R&|$%v_B|)vLDG&-fTqs*rTV;M}0M`H?1=3Ep@@!xVni+4jIHbK3fAOK$GYgImOGp zXCaOW0`q#I(d!Kku9Nh{QjLgss0Q&+jSdp3V+;>s+dg2VW8_l}EWk;S(zU)we`)Pv zs~l7+=Dup-H@uno!?s~E0dCbm@`zJb`?as=nBoxqhvz?w-Ru2; zj$qG`I9Yx6oA&;h{jYEUdUqi0^$E-RGtB*Z=3xK9!_dil0@dAE2guE2Eps!7vLnRp z)21#xZ&YqkBUF21<8*iz5n1<`o&jyh`ltQRXy?3Gf6bQ_7SEBbNs=p4NLH~R#%d-FBR}+|{qI=c|CnCsTagsEE%(z3?f~R&<(UG6K zYPz}B`{$C+ISl0jao13=V9P<=?MY?CK`m?VqK=WFk9HUD4sr|Loyir-i;@(!gkQW#qKe zkxWZ&1w*GZ+)Lt?Xir@FJ?Cadr6FtBFM1^?dD4q!8r@ZysawL!*p)iK_Z5cEo|Dzy z^+D!=|M>Ar*Jw5cl?pVO&e~%~nn&RheMaHN%q8aCDYJ~hrI9*@kvb-kxZs|fhgzm( vE^lyjm|np&SIpMo5%W!jngQ#~U(}!qJ%Zd)$#mj}%xxLDoca!&bqw7vygzmU diff --git a/build/tests/CustomSystemUpdater/banner/icon/gameIcon.bmp b/build/tests/CustomSystemUpdater/banner/icon/gameIcon.bmp deleted file mode 100644 index 7bba61036fe91c0e06697a5beecef5ddd405a6c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 592 zcmb`EK?=e!5Jkr#-ME^r1vOA`<0afHQkXk<5KrQXJc(C`e}0 - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -#define PXI_FIFO_TAG_KAMITEST PXI_FIFO_TAG_USER_1 - -#define KAMI_PXI_CONTINUOUS_PACKET_MAX 10 -#define KAMITEST_PXI_DATA_SIZE_MAX ((KAMI_PXI_CONTINUOUS_PACKET_MAX-1)*3+1) // őf[^ - -#define KAMITEST_PXI_START_BIT 0x02000000 // 擪pPbgӖ -#define KAMITEST_PXI_RESULT_BIT 0x00008000 // PXỈ - -#define KAMITEST_PXI_COMMAND_SHIFT 8 // R}hi[̈ʒu -#define KAMITEST_PXI_COMMAND_MASK 0x00007f00 // R}hi[̃}XN -#define KAMITEST_PXI_DATA_NUMS_MASK 0x00ff0000 // f[^̈ -#define KAMITEST_PXI_DATA_NUMS_SHIFT 16 // f[^ʒu -#define KAMITEST_PXI_1ST_DATA_MASK 0x000000ff // 擪pPbg̃f[^̈ -#define KAMITEST_PXI_1ST_DATA_SHIFT 0 // 擪pPbg̃f[^ʒu - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -typedef enum KAMIPxiResult -{ - KAMI_PXI_RESULT_SUCCESS = 0, // (void/void*^) // ꍇɂ㑱pPbg - KAMI_PXI_RESULT_SUCCESS_TRUE = 0, // (BOOL^) - KAMI_PXI_RESULT_SUCCESS_FALSE, // (BOOL^) - KAMI_PXI_RESULT_INVALID_COMMAND, // sPXIR}h - KAMI_PXI_RESULT_INVALID_PARAMETER, // sȃp[^ - KAMI_PXI_RESULT_ILLEGAL_STATUS, // KAMȈԂɂ菈ss - KAMI_PXI_RESULT_BUSY, // ̃NGXgs - KAMI_PXI_RESULT_FATAL_ERROR, // ̑炩̌ŏɎs - KAMI_PXI_RESULT_MAX -} -KAMIPxiResult; - - -typedef enum KamiCommand -{ - KAMI_TEST_COMMAND, - KAMI_EXE_FORMAT, - KAMI_NAND_IO, - KAMI_CLEAR_NAND_ERRORLOG, - KAMI_GET_IS_TOOL_TYPE -} -KamiCommand; - -typedef enum _IsToolType -{ - IS_TOOL_TYPE_ERROR, - IS_TOOL_TYPE_DEBUGGER, - IS_TOOL_TYPE_CAPTURE -} -IsToolType; - -/*===========================================================================*/ - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* TWL_KAMI_TEST_FIFO_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/custom_base.yaml b/build/tests/CustomSystemUpdater/custom_base.yaml deleted file mode 100644 index 7624d9d2..00000000 --- a/build/tests/CustomSystemUpdater/custom_base.yaml +++ /dev/null @@ -1,10 +0,0 @@ ---- -:DataPath: . -:NandFirm: nandfirm_rcplus.nand -:TargetPath: . -:TemplatePath: template -:RSF: ARM9.TWL/main.rsf -:TadFiles: -:SRC: ARM9.TWL/src/main.c -:FontFile: TWLFontTable.dat -:Region: EUR diff --git a/build/tests/CustomSystemUpdater/default.yaml b/build/tests/CustomSystemUpdater/default.yaml deleted file mode 100644 index de8a0c89..00000000 --- a/build/tests/CustomSystemUpdater/default.yaml +++ /dev/null @@ -1,14 +0,0 @@ ---- -:SRC: ARM9.TWL/src/main.c -:FontFile: TWLFontTable.dat -:DataPath: data -:NandFirm: menu_launcher.nand -:TargetPath: . -:TemplatePath: template -:RSF: ARM9.TWL/main.rsf -:TadFiles: -- HNAA.tad -- HNBA.tad -- HNCA.tad -- HNLA.tad -- HNHA.tad diff --git a/build/tests/CustomSystemUpdater/makecsu.sh b/build/tests/CustomSystemUpdater/makecsu.sh deleted file mode 100755 index c8a17d1f..00000000 --- a/build/tests/CustomSystemUpdater/makecsu.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh -#---------------------------------------------------------------------------- -# Project: TwlSDK - tools -# File: autoupload.sh -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -gen_updater(){ -#ruby sumaker.rb custom $1 $2 -make ROMSET=$1 REGION=$2 -rm `find . -name "*autogen*"` -} - - -if [ $# -lt 1 ]; -then - echo "Usage: makecsu vername" - exit -fi - - -gen_updater $1 JPN -gen_updater $1 USA -gen_updater $1 AUS -gen_updater $1 EUR diff --git a/build/tests/CustomSystemUpdater/romchecker.rb b/build/tests/CustomSystemUpdater/romchecker.rb deleted file mode 100755 index 18da809c..00000000 --- a/build/tests/CustomSystemUpdater/romchecker.rb +++ /dev/null @@ -1,207 +0,0 @@ -#!/bin/ruby -#---------------------------------------------------------------------------- -# Project: TwlSDK -# File: romchecker.rb -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -ALL_REGION = [ - "C", "D", "E", "H", -] - -FIX_REGION = [ - "A", "B", "F", "G", "I", "J", "K", "L", -] - -HEADER = "HN" - -ROM_DATA = { - "#{HEADER}A" => ["Launcher", "00030017"], - "#{HEADER}B" => ["{̐ݒ", "00030015"], - "#{HEADER}C" => ["t@[", "0003000f"], - "#{HEADER}D" => ["DS_E[hvC", "00030005"], - "#{HEADER}E" => ["sNg`bg", "00030005"], - "#{HEADER}F" => ["Vbv", "00030015"], - "#{HEADER}G" => ["tuEU", "00030004"], - "#{HEADER}H" => ["DSnbVXg", "0003000f"], - "#{HEADER}I" => ["ʐ^", "00030005"], - "#{HEADER}J" => ["zbgX|bg", "00030005"], - "#{HEADER}K" => ["DSTEh", "00030005"], - "#{HEADER}L" => ["o[Wf[^", "0003000f"], -} - -REGION_DIRS = { - "AUS" => ["aus", "U"], - "EUR" => ["euro", "P"], - "JPN" => ["jp", "J"], - "USA" => ["usa", "E"], - "VERUP" => ["verup", "UPJE"], -} - -REG_PATH = /[a-zA-Z0-9\.\-_]+\/[a-zA-Z0-9\.\-_*]+\z/ -NAND_FIRM = "*.nand" -FONT_DATA = "*.dat" - -# t@CAROMɊ܂܂ׂǂ𔻒肷 -# Ɉvt@C̔z̗vfŔ -# 0 @t@CȂ -# 1 @ۂ -# 2 ˆȏ@o[WႢA[WႢĂ -def check_pickuped(path, print_success) - ret = true - files = Dir.glob(path) - p_path = path.slice(REG_PATH) - #p files - case - when files.size == 0 - $stdout.printf( "NG:#{p_path} -- #{p_path} is not included ***********\n") - ret = false - when files.size == 1 && print_success - $stdout.printf( "OK:#{files[0].slice(REG_PATH)}\n") - when files.size >= 2 - $stdout.printf("NG:") - files.each{|file| - $stdout.printf( "#{file.slice(REG_PATH)} ") - } - $stdout.printf("-- Too many files are included ***********\n") - ret = false - end - ret -end - -def add_rom_list(rom_list, code, region, version, size) - rom_list << [code, region, version, size] -end - -def make_rom_list(target_dir, region) - region_dir = REGION_DIRS[region][0] - region_codes = (REGION_DIRS[region][1] + "A").unpack("A" * (REGION_DIRS[region][1].size + 1)) - #p region_codes - # o͗pXg - rom_list = [] - - (ALL_REGION + FIX_REGION).each{|app_code| - region_codes.each{|region_code| - search_path = File.join(target_dir, region_dir, "#{HEADER}#{app_code}#{region_code}*.tad") - files = Dir.glob(search_path) - files.each{|tad| - add_rom_list(rom_list, "#{HEADER}#{app_code}", region_code, get_rom_version(tad), File.stat(tad).size) - } - } - } - write_rom_list(rom_list, "rom_list_#{region}.txt") -end - -def write_rom_list(rom_list, file_name) - region_name = { - "A" => "ALL", "E" => "USA", "U" => "AUS", "J" => "JPN", "P" => "EUR" - } - out = "" - sp = [8, 20, 10, 17, 10, 14] - line = "" - sp.each{|s| - line += "+#{"-" * s}" - } - line += "+\n" - out += line - out += sprintf("|%#{sp[0]}s|%-#{sp[1]}s|%#{sp[2]}s|%-#{sp[3]}s|%#{sp[4]}s|%#{sp[5]}s|\n", - "R[h", "O", "[W", "^CgID", "o[W", "t@CTCY") - out += line - rom_list.each{|rom| - rom_data = ROM_DATA[rom[0]] - size = (rom[3].to_s).reverse.scan(/.{1,3}/).join(",").reverse - out += sprintf("|%#{sp[0]}s|%-#{sp[1]}s|%-#{sp[2]}s|%8s %8x|%#{sp[4]}s|%#{sp[5]}s|\n", - rom[0] + rom[1], rom_data[0],region_name[rom[1]], rom_data[1], (rom[0] + rom[1]).unpack("N")[0], rom[2], size); - } - out += line - File.open(file_name, "w") {|file| - file.puts out - } -end - -def get_rom_version(path) - files = Dir.glob(path) - files[0].slice(/v[0-9]+/).delete("v") -end - -def check(target_dir, region) - ret = true - if REGION_DIRS[region] == nil - puts "Invalid region, [JPN, USA, EUR, AUS, VERUP]" - return false - end - region_dir = REGION_DIRS[region][0] - region_code = REGION_DIRS[region][1] - - # o͗pXg - rom_list = [] - - ALL_REGION.each{|app_code| - # I[[W̃܂܂Ă邩̃`FbN - search_path = File.join(target_dir, region_dir, "#{HEADER}#{app_code}A*.tad") - #if ret &= check_pickuped(search_path, false) - #add_rom_list(rom_list, "#{HEADER}#{app_code}", "A", get_rom_version(search_path)) - #end - check_pickuped(search_path, false) - } - FIX_REGION.each{|app_code| - # e[WŗL̃܂܂Ă邩̃`FbN - search_path = File.join(target_dir, region_dir, "#{HEADER}#{app_code}#{region_code}*.tad") - #if ret &= check_pickuped(search_path, false) - #add_rom_list(rom_list, "#{HEADER}#{app_code}", region_code, get_rom_version(search_path)) - #end - ret &= check_pickuped(search_path, false) - } - (ALL_REGION + FIX_REGION).each{|app_code| - # HNxy e[W1‚݂邩̃`FbN - # HNxA HNxU ȂǁAau݂Ă肷ƂłЂ - search_path = File.join(target_dir, region_dir, "#{HEADER}#{app_code}*.tad") - ret &= check_pickuped(search_path, false) - } - - # nand firm, font ̃`FbN - search_path = File.join(target_dir, region_dir, NAND_FIRM) - ret &= check_pickuped(search_path, false) - search_path = File.join(target_dir, region_dir, FONT_DATA) - ret &= check_pickuped(search_path, false) - $stdout.printf("\n") - - # CSUɊ܂܂Ă郍̈ꗗo -# write_rom_list(rom_list, "rom_list_#{region}.txt") - -# make_rom_list(target_dir, region) - - ret -end - -# 烁C - -if ARGV.size < 2 - p "Usage: #{__FILE__} targetdir region" - exit -1 -end - -# JgfBNg̕ύX -Dir.chdir(File.dirname(File.expand_path(__FILE__))) - - -target = ARGV[0] -region = ARGV[1] -make_rom_list(target, region) -if region == "VERUP" - exit 0 -else - exit check(target,region) ? 0 : -1 -end - diff --git a/build/tests/CustomSystemUpdater/sumaker.rb b/build/tests/CustomSystemUpdater/sumaker.rb deleted file mode 100755 index 8d630ebf..00000000 --- a/build/tests/CustomSystemUpdater/sumaker.rb +++ /dev/null @@ -1,212 +0,0 @@ -#!/bin/ruby -#---------------------------------------------------------------------------- -# Project: TwlSDK -# File: sumaker.rb -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -require "yaml" -require "fileutils" -require "tempfile" - -DEFAULT_CONFIG = "default.yaml" -CUSTOM_CONFIG = "custom.yaml" - -FILE_MATCH = /[a-zA-Z0-9\-_\.]+\z/ - -REGION = { - "JPN" => "OS_TWL_REGION_JAPAN", - "EUR" => "OS_TWL_REGION_EUROPE", - "AUS" => "OS_TWL_REGION_AUSTRALIA", - "USA" => "OS_TWL_REGION_AMERICA", -} - -REGION_PATH = { - "JPN" => "jp", - "EUR" => "euro", - "AUS" => "aus", - "USA" => "usa", -} - -# ftHgݒ̍쐬 -def make_default_config - config = { - :TadFiles => [ - "HNAA.tad", - "HNBA.tad", - "HNCA.tad", - "HNLA.tad", - "HNHA.tad", - ], - :FontFile => "TWLFontTable.dat", - :NandFirm => "menu_launcher.nand", - :TargetPath => ".", - :TemplatePath => "template", - :RSF => "ARM9.TWL/main.rsf", - :SRC => "ARM9.TWL/src/main.c", - :DataPath => ".", - :Region => "JPN", - } - write_config(DEFAULT_CONFIG, config) - -end - -# t@CɃXNvguĂfBNg‚ -def calc_path(filename) -# File.join(File.dirname(File.expand_path(__FILE__)), filename) -filename -end - -# RtBOt@CǂœWJ -def read_config(filename) - YAML.load(File.read(calc_path(filename))) -end - -# RtBÕCg -def write_config(filename, data) - File.open(calc_path(filename), "w") {|file| - file.write data.to_yaml - } -end - -# f[^̕u -def replace_data(src, mark, data) - while src.index(/%#{mark}%/) != nil do - src = src.sub(/%#{mark}%/, data) - end - src -end - - -# t@C -def write_data(filename, data) - temp = Tempfile.new("temp") - temp.puts data - temp.close - FileUtils.cp(temp.path, calc_path(filename)) -end - -# main.rsf̏ -def make_rsf(config) - tadlist = config[:TadFiles].dup - tadlist << config[:FontFile] << config[:NandFirm] - tadlist = tadlist.join(" ") - src = File.read(File.join(config[:TemplatePath], config[:RSF])) - #src = File.read(config[:TemplatePath] + "/" + config[:RSF]) - src = replace_data(src, "datapath", config[:DataPath]) - src = replace_data(src, "regionname", config[:Region]) - write_data(File.join(config[:TargetPath], config[:RSF]), replace_data(src, "filelist", tadlist)) - #write_data(config[:TargetPath] + "/" + config[:RSF], replace_data(src, "filelist", tadlist)) -end - -# main.c ̏ -def make_main(config) - filelist = config[:TadFiles] - data = [] - for t in filelist do - data.push("\t\"rom:/data/" + t + "\", \n") - end - data = data.join - #src = File.read(config[:TemplatePath] + "/" + config[:SRC]) - src = File.read(File.join(config[:TemplatePath], config[:SRC])) - mod = replace_data(src, "tadlist", data) - mod = replace_data(mod, "nandfirm", config[:NandFirm]) - mod = replace_data(mod, "fontfile", config[:FontFile]) - - # region - region_name = (config[:Region] != nil) ? config[:Region] : "JPN" - region = (REGION[region_name] != nil) ? REGION[region_name] : REGION["JPN"] - mod = replace_data(mod, "region", region) - mod = replace_data(mod, "regionname", region_name) - #write_data(config[:TargetPath] + "/" + config[:SRC], mod) - write_data(File.join(config[:TargetPath], config[:SRC]), mod) - -end - -# SystemUpdater쐬 -def make_updater(filename) - config = read_config(filename) - make_rsf(config) - make_main(config) -end - -# fBNgtad -def pickup_files(target_dir, name) - Dir.glob(target_dir + name) -end - - -# 烁C - -#sumaker mode [filename] - -if ARGV.size == 0 - p "Usage: sumaker mode [filename]" - exit -end - -mode = ARGV[0] - -case mode -when "default" then - # ftHgݒō쐬 - make_default_config - make_updater(DEFAULT_CONFIG) -when "custom" then - if ARGV.size < 3 - p "Usage: sumaker custom target_dir region" - exit -1 - end - # JX^ݒō쐬 - config = "custom_base.yaml" - region = ARGV[2] - - # JgfBNgύX - Dir.chdir(File.dirname(File.expand_path(__FILE__))) - - - # x[XRtBOɁAdatafBNgtadnandlj - config = read_config(config) - if config[:TadFiles] == nil - config[:TadFiles] = [] - end - - - #config[:DataPath] += "/#{ARGV[1]}/#{REGION_PATH[region]}" - config[:DataPath] = File.join(config[:DataPath], ARGV[1], REGION_PATH[region]) - config[:Region] = region - tads = pickup_files(config[:DataPath], "/*.tad") - nand = pickup_files(config[:DataPath], "/*.nand") - font = pickup_files(config[:DataPath], "/*.dat") -# tHgt@CύX - system("mv #{font} #{File.join(config[:DataPath], "TWLFontTable")}.dat") - font = pickup_files(config[:DataPath], "/*.dat") - - if nand.size > 0 - config[:NandFirm] = nand[0].slice(FILE_MATCH) - end - if font.size > 0 - config[:FontFile] = font[0].slice(FILE_MATCH) - end - for tad in tads do - tad = tad.slice(FILE_MATCH) - config[:TadFiles] << tad - end - config[:TadFiles] = config[:TadFiles].uniq - write_config(CUSTOM_CONFIG, config) - make_updater(CUSTOM_CONFIG) - - exit 0 -end - diff --git a/build/tests/CustomSystemUpdater/template/ARM9.TWL/main.rsf b/build/tests/CustomSystemUpdater/template/ARM9.TWL/main.rsf deleted file mode 100644 index 1e5df836..00000000 --- a/build/tests/CustomSystemUpdater/template/ARM9.TWL/main.rsf +++ /dev/null @@ -1,229 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: SystemUpdater -# File: main.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - RomSize 64M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_%regionname%.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping MAP_TS_SCR - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # CommonClientKey: launcher deliver common client Key [TRUE/FALSE] - # - # ========= SystemUpdater͓ʂȌg ========= - CommonClientKey TRUE - #CommonClientKeyForDebugger TRUE - - # - # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] - # - HwAESSlotB TRUE - - # - # HwAESSlotC: launcher deliver HW AES slot C setting [TRUE/FALSE] - # - HwAESSlotC TRUE - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - NANDAccess TRUE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # DisableDebug FŏIROMł́AsɃfobOłȂ悤TRUEɂKv܂B - # - DisableDebug $(DISABLE_DEBUG) - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType System - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Data only title : [TRUE/FALSE] - # don't have to edit - DataOnly FALSE - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../%datapath% - Root /data - File %filelist% - HostRoot $(PRIVKEY_PATH) - Root /key - File $(HWINFO_PRIVKEY) $(HWID_PRIVKEY) -} diff --git a/build/tests/CustomSystemUpdater/template/ARM9.TWL/src/main.c b/build/tests/CustomSystemUpdater/template/ARM9.TWL/src/main.c deleted file mode 100644 index 0825e574..00000000 --- a/build/tests/CustomSystemUpdater/template/ARM9.TWL/src/main.c +++ /dev/null @@ -1,765 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: SystemUpdater - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include // atoi -#include -#include -#include -#include -#include -#include -#include "kami_pxi.h" -#include "kami_font.h" -#include "kami_write_nandfirm.h" -#include "kami_copy_file.h" -#include "import.h" -#include "hw_info.h" -#include "graphics.h" -#include "hwi.h" -#include "keypad.h" -#include "debugger_hw_reset_control.h" -#include "debugger_card_rom.h" -#include "build_time.h" - -#define SCRAMBLE_MASK 0x00406000 - -extern const char *g_strIPLSvnRevision; -extern const char *g_strSDKSvnRevision; - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -typedef struct _SystemUpdaterLog -{ - int magic_code; - int sdk_version; - int ipl_version; - int reserve[5]; -} SystemUpdaterLog; - -typedef struct _CopyFileList -{ - char* srcPath; - char* dstPath; -} CopyFileList; - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define SYSTEM_UPDATER_LOG_PATH "nand:/sys/log/updater.log" -#define NAND_FIRM_PATH_IN_ROM "rom:/data/%nandfirm%" - -#define SYSTEM_UPDATER_MAGIC_CODE 44001111 - -// gC -#define MAX_RETRY_COUNT 2 - -static const char* ImportTadFileList[] = -{ -%tadlist% -}; - -static const CopyFileList sCopyFileList[] = -{ - { "rom:/data/%fontfile%", "nand:sys/%fontfile%" } -}; - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static NAMTitleId titleId; -static s16 printLine; -static vu8 sIsFormatFinish; -static u8 sFormatResult; -static s32 sLockId; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void VBlankIntr(void); -static void InitAllocation(void); -static BOOL IgnoreRemoval(void); -static void DrawWaitButtonA(void); -static void DrawInvalidConsole(void); -static void DrawCancel(void); -static void DrawAlready(SystemUpdaterLog* log); -static void DrawResult(BOOL result); -static void FormatCallback(KAMIResult result, void* arg); - -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: main - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void -TwlMain() -{ - BOOL result; - BOOL hw_info_result; - BOOL nand_firm_result; - int tadNum; - int i,j; - - // irh`[fobKł̋NΉ - if ( OS_GetRunningConsoleType() & OS_CONSOLE_TWLDEBUGGER ) - { - ROM_Header *dh = (void *)HW_ROM_HEADER_BUF; - dh->s.game_cmd_param &= ~SCRAMBLE_MASK; - } - - OS_Init(); - OS_InitThread(); - OS_InitTick(); - OS_InitAlarm(); - OS_InitArena(); - PXI_Init(); - OS_InitLock(); - OS_InitArenaEx(); - OS_InitIrqTable(); - OS_SetIrqStackChecker(); - MI_Init(); - OS_InitVAlarm(); - OSi_InitVramExclusive(); - OS_InitThread(); - OS_InitReset(); - GX_Init(); - FX_Init(); - SND_Init(); - TP_Init(); - RTC_Init(); - - KamiPxiInit(); /* ƎPXI */ - - // VuN荞ݐݒ - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)OS_EnableIrqMask(OS_IE_FIFO_RECV); - (void)OS_EnableIrq(); - (void)GX_VBlankIntr(TRUE); - - // initialize file-system - FS_Init(FS_DMA_NOT_USE); - - InitAllocation(); - - // NAMCu - NAM_Init( OS_AllocFromMain, OS_FreeToMain ); - NAMUT_Init( OS_AllocFromMain, OS_FreeToMain ); // SoftBoxCounťvZɕKv - - // \֘A - InitGraphics(); - kamiFontInit(); - - // CXbh̃J[hbNID擾 - sLockId = OS_GetLockID(); - - /* always preload FS table for faster directory access. */ - { - u32 need_size = FS_GetTableSize(); - void *p_table = OS_Alloc(need_size); - SDK_ASSERT(p_table != NULL); - (void)FS_LoadTable(p_table, need_size); - } - - // R\[`FbN - { - u32 console = OS_GetRunningConsoleType(); - enum { IS_TWL_DEBUGGER=0, IS_TWL_CAPTURE, TWL, UNKNOWN }; - int running = UNKNOWN; - - // SystemUpdater̓fobOs‚ō쐬邽OS_CONSOLE_TWL擾 - // ԔɃJ[h}SystemUpdatersꍇliAOS_CONSOLE_TWLTYPE_RETAILɂ͂ȂȂj - // fobKǂ̔̓TCY`FbNɂs - // ÔOS_CONSOLE_TWLTYPE_RETAILłȂƂmF - - if ((console & OS_CONSOLE_SIZE_MASK) == OS_CONSOLE_SIZE_32MB) - { - if ((console & OS_CONSOLE_TWLTYPE_MASK) != OS_CONSOLE_TWLTYPE_RETAIL) - { - IsToolType type; - kamiGetIsToolType(&type); - if (type == IS_TOOL_TYPE_DEBUGGER) - { - running = IS_TWL_DEBUGGER; - } - else if (type == IS_TOOL_TYPE_ERROR) // TS{[hvX + dlfobK - { - running = IS_TWL_DEBUGGER; - } - else if (type == IS_TOOL_TYPE_CAPTURE) - { - running = IS_TWL_CAPTURE; - } - } - } - else if ((console & OS_CONSOLE_MASK) == OS_CONSOLE_TWL) - { - IsToolType type; - kamiGetIsToolType(&type); - if (type == IS_TOOL_TYPE_CAPTURE) - { - running = IS_TWL_CAPTURE; - } - else - { - running = TWL; - } - } - - switch (running) - { - case IS_TWL_DEBUGGER: - kamiFontPrintf( 0, printLine++, FONT_COLOR_GREEN, "Running on IS_TWL_DEBUGGER."); - break; - case IS_TWL_CAPTURE: - kamiFontPrintf( 0, printLine++, FONT_COLOR_GREEN, "Running on IS_TWL_CAPTURE."); - break; - case TWL: - kamiFontPrintf( 0, printLine++, FONT_COLOR_GREEN, "Running on TWL CONSOLE."); - break; - case UNKNOWN: - kamiFontPrintf( 0, printLine++, FONT_COLOR_GREEN, "Running on UNKNOWN."); - break; - } - -#ifdef SYSM_BUILD_FOR_DEBUGGER - // fobKSystemUpdater͎@ƃLv`ł͓삳Ȃ - if (running != IS_TWL_DEBUGGER) - { - kamiFontPrintfMain( 2, 9, 3, " Sorry, "); - kamiFontPrintfMain( 2, 10, 3, " This SystemUpdater can not "); - kamiFontPrintfMain( 2, 11, 3, " execute on TWL-CONSOLE. "); - DrawInvalidConsole(); - } -#else - // @SystemUpdater̓fobKł͓삳Ȃ - if (running == IS_TWL_DEBUGGER) - { - kamiFontPrintfMain( 2, 9, 3, " Sorry, "); - kamiFontPrintfMain( 2, 10, 3, " This SystemUpdater can not "); - kamiFontPrintfMain( 2, 11, 3, " execute on IS-TWL-DEBUGGER."); - DrawInvalidConsole(); - } -#endif // SYSM_BUILD_FOR_DEBUGGER - - // UNKNOWN͓͂삳Ȃ - if (running == UNKNOWN) - { - kamiFontPrintfMain( 2, 9, 3, " Sorry, "); - kamiFontPrintfMain( 2, 10, 3, " This SystemUpdater can not "); - kamiFontPrintfMain( 2, 11, 3, " execute on UNKNOWN CONSOLE."); - DrawInvalidConsole(); - } - } - - // iXV”\j - // 1.O݂Ȃ - // 2.O݂AOɋLڂ̃}WbNR[hsiSystemUpdaters̏ԁj - // 2.O݂AOɋLڂ̃}WbNR[hƒOɋLڂ - // SDK & IPL ̃o[W SystemUpdater ̂ȉł - -#ifdef IGNORE_VERSION_CHECK - if( 0 ) -#endif // IGNORE_VERSION_CHECK - { - SystemUpdaterLog log; - FSFile file; - FS_InitFile( &file ); - - if (FS_OpenFileEx(&file, SYSTEM_UPDATER_LOG_PATH, FS_FILEMODE_R) == TRUE) - { - DC_InvalidateRange(&log, sizeof(log)); - - if (FS_ReadFile(&file, &log, sizeof(log)) == sizeof(log)) - { - // O[h - OS_Printf("[%d, %d]\n", log.sdk_version, log.ipl_version); - - // SystemUpdatersԂłȂƂ}WbNR[hŔʂ - if (log.magic_code == SYSTEM_UPDATER_MAGIC_CODE) - { - // }WbNR[hASDKo[WAIPLo[W̊mF - if (log.sdk_version > atoi(g_strSDKSvnRevision) || - log.ipl_version > atoi(g_strIPLSvnRevision)) - { - // XVs - DrawAlready(&log); - } - } - } - else - { - // O[hs - OS_Warning("Failure! FS_ReadFile"); - } - - FS_CloseFile(&file); - } - } - - // `{^҂ - DrawWaitButtonA(); - - // TWL̍XVsł - CARD_LockRom((u16)sLockId); - (void)CARDi_ReadRomIDCoreEx(DEBUGGER_COMMAND_NOW_UPDATE); - CARD_UnlockRom((u16)sLockId); - - // ISfobK̃n[hEFAZbg֎~ - DEBUGGER_HwResetDisable(); - - // HWInfo֘ȂO - switch (HWI_Init( OS_AllocFromMain, OS_FreeToMain )) - { - case HWI_INIT_FAILURE: - OS_Warning(" Fail! : HWI_INIT()"); - break; - case HWI_INIT_SUCCESS_PRO_SIGNATURE_MODE: - break; - case HWI_INIT_SUCCESS_DEV_SIGNATURE_MODE: - break; - case HWI_INIT_SUCCESS_NO_SIGNATRUE_MODE: - break; - } - - result = TRUE; - - // Sɏ - NAMUT_Format(); - - // tH[}bgs - sIsFormatFinish = FALSE; - ExeFormatAsync(FORMAT_MODE_QUICK, FormatCallback); - kamiFontPrintfMain( 7, 11, 8, "Now Format..."); - while(!sIsFormatFinish){}; - if (sFormatResult) - { - kamiFontPrintf( 0, printLine++, FONT_COLOR_GREEN, "NAND Format Success."); - } - else - { - kamiFontPrintf( 0, printLine++, FONT_COLOR_RED, "NAND Format Failure!"); - } - kamiFontPrintfMain( 7, 11, 8, " "); - - // tH[}bgESɕKvȃt@CȂȂĂ邽 - // ES_InitLibĂяoƂō쐬Ă - NAM_End( NULL, NULL ); - NAM_Init( OS_AllocFromMain, OS_FreeToMain ); - - // Sn[hEFA̍XV - for (i=0;isdk_version, log->ipl_version ); - kamiFontPrintfMain( 3, 13, 1, "--------------------------"); - - while(1) - { - G3X_Reset(); - G3_Identity(); - G3_PolygonAttr(GX_LIGHTMASK_NONE, GX_POLYGONMODE_DECAL, GX_CULL_NONE, 0, 31, 0); - - DrawQuad( 10, 50, 246, 128, GX_RGB(28, 28, 28)); - - G3_SwapBuffers(GX_SORTMODE_AUTO, GX_BUFFERMODE_W); - - OS_WaitVBlankIntr(); - } -} - -/*---------------------------------------------------------------------------* - Name: DrawResult - - Description: ʂ\܂B - - Arguments: - - Returns: None. - *---------------------------------------------------------------------------*/ -static void DrawResult(BOOL result) -{ - // 3D - G3X_Reset(); - G3_Identity(); - G3_PolygonAttr(GX_LIGHTMASK_NONE, GX_POLYGONMODE_DECAL, GX_CULL_NONE, 0, 31, 0); - - // "Now Updating.." - kamiFontPrintfMain( 0, 9, 7, " "); - - if (result) - { - kamiFontPrintfMain( 9, 10, 7, "Update Success!"); - // O[_CAO - DrawQuad( 50, 50, 206, 120, GX_RGB(12, 25, 12)); - } - else - { - kamiFontPrintfMain( 9, 10, 7, "Update Failure!"); - // bh_CAO - DrawQuad( 50, 50, 206, 120, GX_RGB(31, 0, 0)); - } - - kamiFontLoadScreenData(); - - // 3DXbv - G3_SwapBuffers(GX_SORTMODE_AUTO, GX_BUFFERMODE_W); -} - -/*---------------------------------------------------------------------------* - Name: FormatCallback - - Description: tH[}bgR[obN - - Arguments: - - Returns: None. - *---------------------------------------------------------------------------*/ -static void FormatCallback(KAMIResult result, void* /*arg*/) -{ - if ( result == KAMI_RESULT_SUCCESS_TRUE ) - { - sFormatResult = TRUE; - } - else - { - sFormatResult = FALSE; - } - - sIsFormatFinish = TRUE; -} diff --git a/build/tests/CustomSystemUpdater/work/aftercls.sh b/build/tests/CustomSystemUpdater/work/aftercls.sh deleted file mode 100755 index 2ec65c6e..00000000 --- a/build/tests/CustomSystemUpdater/work/aftercls.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/sh -#! bash -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tools -# File: aftercls.sh -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -AQUA='//10.116.1.5' -CLSED_PATH="${AQUA}/TWL_debug/sysmenu/rom/debug_rom/CLS_processed" -DAILY_CLSED_DIR=`date +'%Y%m%d'`_cls - -if [ $# -lt 1 ]; -then - echo "input target dir name" - exit -fi - -echo "tocsu.sh" -./tocsu.sh $1 - -echo "toaqua.rb" -./toaqua.rb $1 - -# AquaփRs[ -echo "Copying to Aqua" -cp -r $1_foraqua ${CLSED_PATH}/${DAILY_CLSED_DIR} - -# Shop ROM ̃Rs[ -shopdir="${AQUA}/TWL_debug/shop/rom/cls/${DAILY_CLSED_DIR}" -/bin/mkdir ${shopdir} -/bin/cp $1_foraqua/verup/tad/shop* ${shopdir} - -# NZV ROM ̃Rs[ -nzvdir="${AQUA}/TWL_debug/nintendo_spot/rom/clsprocessed/"`date +'%Y%m%d'` -/bin/mkdir ${nzvdir} -/bin/cp -r $1/HNJ* ${nzvdir} \ No newline at end of file diff --git a/build/tests/CustomSystemUpdater/work/cls.sh b/build/tests/CustomSystemUpdater/work/cls.sh deleted file mode 100755 index d58e276f..00000000 --- a/build/tests/CustomSystemUpdater/work/cls.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/sh -#! bash -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tools -# File: conv2svnDir.sh -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -move_data_to_tmp() { - tmp=tmp/$1 - install -d $tmp - for src in `find $1 -name v* -type d` - do - mv $src $tmp - done -} - -do_cls() { - tmp=tmp/$1 - for target in `find $tmp -name v* -type d | sort -t / -n -k 3.2` - do - cp -rp $target $1 - t=`echo "$target" | cut -c 5-` - if [ -f $t/*.cls ]; then - echo "$t:Already cls processed" - else - genLic $1 - fi -# genLic $1 - done -} - -for app in `find . -maxdepth 1 -mindepth 1 -type d` -do - name=`echo "$app" | cut -c 3-` - move_data_to_tmp $name - do_cls $name -done - -rm -rf tmp diff --git a/build/tests/CustomSystemUpdater/work/mkcls.py b/build/tests/CustomSystemUpdater/work/mkcls.py deleted file mode 100644 index 668f22af..00000000 --- a/build/tests/CustomSystemUpdater/work/mkcls.py +++ /dev/null @@ -1,151 +0,0 @@ -#!/usr/bin/env python -# -*- coding:utf-8 -*- - -import sys, os, struct -import string, random -import re, shutil, binascii - -def roundup(val, align): - return int((val+align-1)/align)*align - -def randstr(n): - words = ''.join([string.digits,string.letters,'.','+']) - return ''.join(random.choice(words) for i in xrange(n)) - -def main(): - try: - tadfile = sys.argv[1] - except: - print '%s : please specfy the tad file' % (sys.argv[0]) - exit(-1) - - #--- parse *.tad - fin = open(tadfile, 'rb') - try: - tadData = fin.read() - except: - fin.close() - start, end = 0, struct.calcsize('>l2sh6l') - (hdrSize, tadType, tadVersion, certSize, crlSize, ticketSize, tmdSize, - contentSize, metaSize) = struct.unpack('>l2sh6l', tadData[start:end]) - certOffset = roundup(hdrSize, 64) - crlOffset = roundup(certOffset + certSize, 64) - ticketOffset = roundup(crlOffset + crlSize, 64) - tmdOffset = roundup(ticketOffset + ticketSize, 64) - contentOffset = roundup(tmdOffset + tmdSize, 64) - metaOffset = roundup(contentOffset + contentSize, 64) - fileSize = roundup(metaOffset + metaSize, 64) - - #print '-'*20+'\n' - #print ' hdrSize %s\n' % hdrSize, - #print ' tadType %s\n' % tadType, - #print ' tadVersion, %s\n' % tadVersion, - #print ' certSize, %s\n' % certSize, - #print ' crlSize, %s\n' % crlSize, - #print ' ticketSize, %s\n' % ticketSize, - #print ' tmdSize, %s\n' % tmdSize, - #print ' contentSize, %s\n' % contentSize, - #print ' metaSize %s' - #print '\n'+'-'*20 - #open("cert.bin", 'wb').write(tadData[certOffset:certOffset+certSize]) - #open("crl.bin", 'wb').write(tadData[crlOffset:crlOffset+crlSize]) - #open("ticket.bin", 'wb').write(tadData[ticketOffset:ticketOffset+ticketSize]) - #open("tmd.bin", 'wb').write(tadData[tmdOffset:tmdOffset+tmdSize]) - #open("content.bin", 'wb').write(tadData[contentOffset:contentOffset+contentSize]) - #open("meta.bin", 'wb').write(tadData[metaOffset:metaOffset+metaSize]) - - #--- parse TMD - tmd = tadData[tmdOffset:tmdOffset+tmdSize] - - #--- RSA2048 signature - (sigB, sigE) = (0, struct.calcsize('>i256s60s64s')) - (IOSCCertSigType, IOSCRsaSig2048, IOSCSigDummy, IOSCName)\ - = struct.unpack('>i256s60s64s', tmd[sigB:sigE]) - - #print "=== RSA2048 signature ===============" - #print "IOSCCertSigType : %x" % IOSCCertSigType - #print "IOSCRsaSig2048 : %s" % IOSCRsaSig2048 - #print "IOSCSigDummy : %s" % IOSCSigDummy - #print "IOSCName : %s" % IOSCName - - #--- ESTitleMetaHeader - (tmhB, tmhE) = (sigE, sigE+struct.calcsize('>4B5iH62si3H')) - (version, - caCrlVersion, - signerCrlVersion, - dummy, - sysVersion_H, - sysVersion_L, - titleId_H, - titleId_L, - titleType, - groupID, - reserved, - accessRights, - titleVersion, - numContents, - bootIndex) = struct.unpack('>4B5iH62si3H',tmd[tmhB:tmhE]) - - print "=== ESTitleMetaHeader ===============" - #print ('version : %d ') % version - #print ('caCrlVersion : %d ') % caCrlVersion - #print ('signerCrlVersion : %d ') % signerCrlVersion - #print ('dummy : %s ') % dummy - #print ('sysVersion_H : %x ') % sysVersion_H - #print ('sysVersion_L : %x ') % sysVersion_L - print ('titleId_H : %08x ') % titleId_H - print ('titleId_L : %08x ') % titleId_L - #print ('titleType : %x ') % titleType - print ('groupID : %x ') % groupID - #print ('reserved[62] : %s ') % reserved - #print ('accessRights : %d ') % accessRights - print ('titleVersion : %d ') % titleVersion - #print ('numContents : %d ') % numContents - #print ('bootIndex : %d ') % bootIndex - - #--- make directory for cls - tadpath = os.path.dirname(tadfile) - gamecode = binascii.unhexlify('%x'%titleId_L) - keycode = gamecode[:3] - sysdic = { 'HNA':'menu', - 'HNB':'setting', - 'HNC':'wfirm', - 'HND':'dlplay', - 'HNE':'pchat', - 'HNF':'shop', - 'HNG':'browser', - 'HNH':'whlist', - 'HNI':'photo', - 'HNJ':'nzv', - 'HNK':'sound', - 'HNL':'verdata', - } - try: - suffix = sysdic.get(keycode) - if suffix: - clsdir = ''.join(['./',gamecode,'-',suffix]) - else: - clsdir = ''.join(['./',gamecode]) - os.mkdir(clsdir) - except: - print '%s : can not create dir %s' % (sys.argv[0],clsdir) - - #--- write properties - properties = open(''.join([clsdir,'/properties']),'w') - properties.write('TITLE_ID\t\t\t\t%08x%08x\n' % (titleId_H, titleId_L)) - properties.write('TITLE_NAME\t\t\t\t%s\n' % gamecode) - properties.write('TITLE_TYPE\t\t\t\t%s\n' % 'TWL_SYS') - properties.write('PASSWORD\t\t\t\t%s\n' % randstr(64)) - properties.write('ALLOW_COMMON_TICKET\t\t%s\n' % '1') - - #--- make version dir - verdir = ''.join([clsdir,'/v',str(titleVersion)]) - try: - os.mkdir(verdir) - except: - print '%s : can not create dir %s' % (sys.argv[0],verdir) - else: - shutil.copy(tadfile,verdir) - -if __name__ == '__main__': - sys.exit(main() or 0) \ No newline at end of file diff --git a/build/tests/CustomSystemUpdater/work/pickup_tad.dev.sh b/build/tests/CustomSystemUpdater/work/pickup_tad.dev.sh deleted file mode 100755 index 98479574..00000000 --- a/build/tests/CustomSystemUpdater/work/pickup_tad.dev.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/sh -#! bash -f - -#---- commands -LS='/bin/ls' -ECHO='/bin/echo' -HEAD='/bin/head' -FIND='/bin/find' -COPY='/bin/cp' -DATE='/bin/date' -XARGS='/bin/xargs' -MKDIR='/bin/mkdir' -CHDIR='cd' - -#---- values -aqua_server='//10.116.1.5' -debug_dir="${aqua_server}/TWL_debug/sysmenu/rom/debug_rom" -redroms="${debug_dir}/sd.roms.template*" -clsbase="${debug_dir}/CLS_base" -datedir=`${DATE} +%Y%m%d` -regions='jp usa euro aus' - -#---- call pickup_tad.pl -${ECHO} "===== getting latest apps files =====" -perl ./pickup_tad.pl - -#---- gets the latest sd.roms.template roms -#redrom_dir=`${LS} -d --full-time ${redroms} | sort -k 7,10 | tail -n 1` -redrom_dir=`${LS} -dt ${redroms} | ${HEAD} -n 1` -${ECHO} -e "===== getting sd.roms.template* rom files =====" -${ECHO} -e "sd.roms.template dir : ${redrom_dir}" -${ECHO} -e "copy *.(tad|dat|nand) file -> ${datedir} dir\n" -${FIND} ${redrom_dir} -regextype posix-egrep -regex ".*.(tad|dat|nand)" | ${XARGS} ${COPY} -fut ${datedir} > /dev/null - -#---- gets the cls base roms -${ECHO} -e "===== getting sd.roms.template* rom files =====" -${ECHO} -e "CLS_base dir : ${clsbase}" -${ECHO} -e "copy *.tad file -> ${datedir} dir" -${FIND} ${clsbase} -name "*.tad" | ${XARGS} ${COPY} -fut ${datedir} > /dev/null - -#---- call mkcls.py -${ECHO} -e "===== create forcls dirs =====" -${MKDIR} ${datedir}_forcls -${CHDIR} ${datedir}_forcls -${FIND} ../${datedir} -name "*.tad" -exec ../mkcls.py {} \; - -${ECHO} -e "===== copy *.nand *.dat files -> (jp|usa|euro|aus) dirs =====\n" -for region in ${regions} -do - ${MKDIR} ${region} - ${COPY} ../${datedir}/*.nand ${region} - ${COPY} ../${datedir}/*.dat ${region} -done - -${COPY} ../cls.sh ./ \ No newline at end of file diff --git a/build/tests/CustomSystemUpdater/work/pickup_tad.pl b/build/tests/CustomSystemUpdater/work/pickup_tad.pl deleted file mode 100755 index b003899e..00000000 --- a/build/tests/CustomSystemUpdater/work/pickup_tad.pl +++ /dev/null @@ -1,146 +0,0 @@ -#!/usr/bin/perl -w -I/usr/local/bin -use File::Copy; -use File::Copy::Recursive qw(fcopy rcopy dircopy); -use Class::Struct; -use POSIX 'strftime'; -use File::Find; - -require "util.pl"; - -my @apps = ("download_play", - "full_browser", - "nintendo_spot", - "photo", - "pictchat", - "shop", - "sound", - "sysmenu"); - -my $flgDate = 0; - -my $i; -my $date_dir = ""; -my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); -my $str_today = sprintf("%04d%02d%02d", $year+1900, $mon+1, $mday); -my $flghelp = 0; -my $err; -my @list_tad; - - -for ($i = 0; $i < $#ARGV+1; $i++) { - - my $opt = $ARGV[$i]; - - if ( $opt eq "-d" ) { - $flgDate = 1; - unless ( $#ARGV <= $i ) { - #$date_dir = $aqua_dir."/SD_".$ARGV[$i+1]; - $str_today = $ARGV[$i+1]; - $err = [ 1, "Not date (\"$date_dir\") !!"] if ( $date_dir !~ /[0-9]{8}/ ); - $i++; - - } else { - $err = [1,"No argument after -d !!"]; - } - } elsif ( $opt eq "-h" ) { - &show_help; - exit 0; - } else { - print "Unknown option: $opt\n"; - &show_help; - exit 1; - } - do { - print "*** Error *** : $err->[1]"; - exit 1; - } if ( $err->[0] ); -} - -# each application directory -foreach $app ( @apps ) -{ - my $dir_date; - #$dir_app = sprintf('//Aqua/TWL_debug/%s/rom/tad', $app); -$dir_app = sprintf('//10.116.1.5/TWL_debug/%s/rom/tad', $app); - $dir_app_date = &search_date_dir($dir_app); - - print "* $dir_app\n - $dir_app_date\n\n"; - - find( sub - { - do { - push @list_tad, $File::Find::name }if (/\.tad$/); - }, $dir_app_date - ); - #foreach ( @list_tad ) { print " * $_\n"; } -} - -#print "Date: $date_dir\n"; - -# Actually not today -mkdir($str_today); - -# copy to the local date directory -foreach ( @list_tad ) { - print("$_\n"); - copy($_, $str_today); -} - -# -exit 0; - -#----------------------------------------------------------------------- -# name : show_help -# function : -#----------------------------------------------------------------------- -sub show_help -{ -print <<__MSG_HELP__; -Usage: -\$ perl pickup_tad.pl [-d yyyymmdd] -__MSG_HELP__ -} - -#----------------------------------------------------------------------- -# name : search_date_dir -# function : -#----------------------------------------------------------------------- -sub search_date_dir -{ - my $root_dir; - my $date_dir; - my $prefix = ($#_<1) ? "" : $_[1]; - my $full_prefix; - my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); - - $year += 1900; - $mon += 1; - - $root_dir = ( $#_ < 0 ) ? "." : $_[0]; - - $full_prefix = $root_dir."/".$prefix; - $date_dir = $full_prefix.sprintf("%04d%02d%02d", $year, $mon, $mday); - - # search directory on going back date - while ( $year >= 2000 ) { - if ( -e "$date_dir" and -d "$date_dir") { - return "$date_dir"; - } else { - $mday -= 1; - $date_dir = $full_prefix.sprintf("%04d%02d%02d", $year, $mon, $mday); - } - do { - $mday = 31; # constant - $mon -= 1; - unless ( $mon ) { - $mon = 12; - $year -= 1; - } - } unless ( $mday ) ; - } - print "*** Error *** : Can't find the date directory !!\n"; - return 0; -} - -__END__ - diff --git a/build/tests/CustomSystemUpdater/work/toaqua.rb b/build/tests/CustomSystemUpdater/work/toaqua.rb deleted file mode 100755 index 3840ed68..00000000 --- a/build/tests/CustomSystemUpdater/work/toaqua.rb +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/ruby -#---------------------------------------------------------------------------- -# Project: TwlSDK - tools -# File: toaqua.sh -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -require "find" -require "fileutils" - -REGION_DIR = { - "U" => ["aus"], - "E" => ["usa"], - "J" => ["jp"], - "P" => ["euro"], - "A" => ["aus", "usa", "jp", "euro"], -} - -VERUP_DIR = "verup" -VERUP_CLS = "#{VERUP_DIR}/cls" -VERUP_TAD = "#{VERUP_DIR}/tad" - -def proc(target_dir, output_dir) - Find.find(target_dir){ |path| - next unless File.file?(path) && (/[a-z0-9A-Z]{4}-.*v[0-9]+\.tad\.out/ =~ path) != nil -# p path - src = path - - # fBNgtadt@C.tadOo - dest = "" - version = "" - Find.find(File.split(src)[0]){|tad| - # .tad ‚ - if (/.*\.tad\z/ =~ tad) != nil - dest = File.split(tad)[1] - end - if (/.*\.cls\z/ =~ tad) != nil - p tad - version = tad.slice(/v[0-9]+/) - end - } - dest = /\.tad/.match(dest).pre_match + "-" + version + ".tad" - # [W𔻕ʂăRs[ - regions = REGION_DIR[File.split(src)[1][3..3]] - for region in regions do - if version != "v0" - p version - p src - system("cp #{src} #{[output_dir, "#{VERUP_TAD}", dest].join("/")}") - system("cp #{src.sub(/\.tad\.out/, ".cls")} #{[output_dir, "#{VERUP_CLS}", dest.sub(/\.tad/, ".cls")].join("/")}") - else - system("cp #{src} #{[output_dir, region, dest].join("/")}") - end - end - } - -end - -# 烁C - -if ARGV.size < 1 - $stdout.printf("Usage:#{__FILE__} target_clsed_dir output_dir") - exit -1 -end -src = ARGV[0].sub(/\/\z/, "") -out = "#{src}_foraqua" -system("mkdir #{out}") -system("mkdir #{out}/aus") -system("mkdir #{out}/usa") -system("mkdir #{out}/euro") -system("mkdir #{out}/jp") -system("mkdir #{out}/#{VERUP_DIR}") -system("mkdir #{out}/#{VERUP_CLS}") -system("mkdir #{out}/#{VERUP_TAD}") - -system("cp -rf #{src}/aus #{out}") -system("cp -rf #{src}/usa #{out}") -system("cp -rf #{src}/euro #{out}") -system("cp -rf #{src}/jp #{out}") - -proc(src, out) - diff --git a/build/tests/CustomSystemUpdater/work/tocls.sh b/build/tests/CustomSystemUpdater/work/tocls.sh deleted file mode 100755 index b7725bb5..00000000 --- a/build/tests/CustomSystemUpdater/work/tocls.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/sh -#! bash -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tools -# File: conv2svnDir.sh -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - - -if [ $# -lt 1 ]; -then - echo "input target dir name" - exit -fi - -target=`echo $1 | sed -e 's/\/$//'` -target=$target"_forcls" -echo $target - -mkdir $target -cd $target -find ../$1 -name "*.tad" -exec ../mkcls.py {} \; -cp ../cls.sh ./ - -# nandt@[ƁAtHgꉞ[WɃRs[ -mkdir jp -mkdir aus -mkdir usa -mkdir euro - -cp `find ../$1/jp -name "*.nand"` jp -cp `find ../$1/jp -name "*.nand"` aus -cp `find ../$1/jp -name "*.nand"` usa -cp `find ../$1/jp -name "*.nand"` euro -cp `find ../$1/jp -name "*.dat"` jp -cp `find ../$1/jp -name "*.dat"` aus -cp `find ../$1/jp -name "*.dat"` usa -cp `find ../$1/jp -name "*.dat"` euro - - diff --git a/build/tests/CustomSystemUpdater/work/tocsu.sh b/build/tests/CustomSystemUpdater/work/tocsu.sh deleted file mode 100755 index c4d9ea7d..00000000 --- a/build/tests/CustomSystemUpdater/work/tocsu.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/bin/sh -#! bash -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tools -# File: tocsu.sh -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - - - -if [ $# -lt 1 ]; -then - echo "input target dir name" - exit -fi - - -target=`echo $1 | sed -e 's/\/$//'` -target=$target"_forcsu" -echo $target - - -tmp=`echo $1 | sed -e 's/\/$//'`_tmp -mkdir $target -cd $target - -mkdir jp -mkdir aus -mkdir usa -mkdir euro - -cp -rf ../$1/jp . -cp -rf ../$1/aus . -cp -rf ../$1/usa . -cp -rf ../$1/euro . - -mkdir verup -mkdir $tmp - -find ../$1 -name "*.out" -exec cp {} $tmp \; - -find $tmp -regex "[^/]*/...[jaJA].*v0\.tad\.out" | gawk -F/ '{printf("cp %s jp/%s\n",$0, $2)}' | sed -e 's/\.out$//g' > jp.sh -find $tmp -regex "[^/]*/...[uaUA].*v0\.tad\.out" | gawk -F/ '{printf("cp %s aus/%s\n",$0, $2)}' | sed -e 's/\.out$//g' > aus.sh -find $tmp -regex "[^/]*/...[paPA].*v0\.tad\.out" | gawk -F/ '{printf("cp %s euro/%s\n",$0, $2)}' | sed -e 's/\.out$//g' > euro.sh -find $tmp -regex "[^/]*/...[eaEA].*v0\.tad\.out" | gawk -F/ '{printf("cp %s usa/%s\n",$0, $2)}' | sed -e 's/\.out$//g' > usa.sh -find $tmp -regex "[^/]*/.*v[^0][0-9]*\.tad\.out" | gawk -F/ '{printf("cp %s verup/%s\n",$0, $2)}' | sed -e 's/\.out$//g' > verup.sh - -./jp.sh -./aus.sh -./euro.sh -./usa.sh -./verup.sh - -mv $tmp ../ -rm -rf *.sh diff --git a/build/tests/CustomSystemUpdater/work/util.pl b/build/tests/CustomSystemUpdater/work/util.pl deleted file mode 100755 index e6d9a075..00000000 --- a/build/tests/CustomSystemUpdater/work/util.pl +++ /dev/null @@ -1,110 +0,0 @@ - -package util; - -#----------------------------------------------------------------------- -# name : get_title_version -# function : get the title version from the specified tad file -#----------------------------------------------------------------------- -sub get_title_version { - - my $titleVersion = 0 ; - my $cmdPython = "/usr/bin/python.exe"; - my $scrpPython = "/usr/local/bin/mkcls.py"; - $tad = $_[0]; - - open(PY, "$cmdPython $scrpPython $tad | ") or die "$!"; - $titleVersion = $1 if ( =~ /([0-9]{1,})/) ; - close(PY); - - $titleVersion; -} - -#----------------------------------------------------------------------- -# name : get_nlist -# function : get the list of the specified directory except "." and ".." -#----------------------------------------------------------------------- -sub get_nlist { - my $dirname = ( $#_ < 0) ? "." : $_[0]; - my @list; - - unless ( opendir(DIR, "$dirname") ) { - print "Can't open directory: $dirname\n"; - return ""; - } - - foreach $node ( readdir(DIR) ) { - push(@list, $node) unless ( $node =~ /^\.{1,2}$/ ); - } - closedir(DIR); - - @list; -} - - -#----------------------------------------------------------------------- -# name : fecheck -# function : check the specified file existence (Error if no file) -#----------------------------------------------------------------------- -sub fecheck { - my $filename = $_[0]; - unless ( -e $filename ) { -print < (RWX) : ORIGIN = , LENGTH = 0x0 > - binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> - - F (RW) : ORIGIN = 0, LENGTH = 0x0 > - - binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > - - (RWX) : ORIGIN = , LENGTH = 0x0 >> - - binary.LTDAUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> - - L (RW) : ORIGIN = 0, LENGTH = 0x0 > - - check.WORKRAM (RWX) : ORIGIN = 0x03740000, LENGTH = 0xd0000 > workram.check -} - -KEEP_SECTION -{ - .sinit -} - -SECTIONS -{ - ############################ STATIC ################################# - .: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # TEXT BLOCK: READ ONLY - # - SDK_STATIC_START =.; - OBJECT(_start,*) - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_STATIC_SINIT_START =.; - - - - - - - - - - - - - WRITEW 0; - - # - # DATA BLOCK: READ WRITE - # - . = ALIGN(4); - - - - - - - - - - - - - . = ALIGN(4); - SDK_STATIC_END =.; - - SDK_STATIC_SIZE = SDK_STATIC_END - SDK_STATIC_START; - __sinit__ = SDK_STATIC_SINIT_START; # for static initializer - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_STATIC_BSS_START =.; - - - - - - - - - - - - - . = ALIGN(4); - SDK_STATIC_BSS_END = .; - - SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START; - - } >> - - ############################ STATIC_FOOTER ########################## - .binary.STATIC_FOOTER: - { - WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE - WRITEW _start_ModuleParams - ADDR(.); - WRITEW 0; # NO DIGEST - WRITEW _start_LtdModuleParams - ADDR(.); - - } > binary.STATIC_FOOTER - - ############################ OVERLAYDEFS ############################ - .F: - { - ### module information - WRITEW ADDR(.); # load address - WRITEW _start; # entry address - WRITEW SDK_STATIC_SIZE; # size of module - WRITEW _start_AutoloadDoneCallback; # callback autoload done - - } > F - - ########################### LTDAUTOLOADS ############################ - SDK_LTDAUTOLOAD_TOP_START = 0x02f00000; - SDK_LTDAUTOLOAD_TOP_SIZE = 4; # STATIC ̈悪 4 bytes ̃_~[oCit@C̐擪ɓ # - SDK_LTDAUTOLOAD_START = SDK_LTDAUTOLOAD_TOP_START + SDK_LTDAUTOLOAD_TOP_SIZE; - SDK_LTDAUTOLOAD_SIZE = 0; - SDK_LTDAUTOLOAD_BSS_END = 0x03740000; - - .binary.LTDAUTOLOAD_TOP: - { - WRITEW 0; - - } > binary.LTDAUTOLOAD_TOP - - - .: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # TEXT BLOCK: READ ONLY - # - SDK_LTDAUTOLOAD..START =.; - - - - - - - - - . = ALIGN(4); - SDK_STATIC_ETABLE_START =.; - __exception_table_start__ =.; - EXCEPTION - __exception_table_end__ =.; - SDK_STATIC_ETABLE_END =.; - - - - - - - - - - - - - - . = ALIGN(4); - SDK_LTDAUTOLOAD..SINIT_START =.; - - - - - - - - - - - - - WRITEW 0; - - # - # DATA BLOCK: READ WRITE BLOCK - # - . = ALIGN(4); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_LTDAUTOLOAD..END =.; - - SDK_LTDAUTOLOAD..SIZE = SDK_LTDAUTOLOAD..END - SDK_LTDAUTOLOAD..START; - SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD..SIZE; - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_LTDAUTOLOAD..BSS_START =.; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_LTDAUTOLOAD..BSS_END =.; - SDK_LTDAUTOLOAD_BSS_END =.; - - SDK_LTDAUTOLOAD..BSS_SIZE = SDK_LTDAUTOLOAD..BSS_END - SDK_LTDAUTOLOAD..BSS_START; - - } >> - - - SDK_MOUNT_INFO_TABLE = SDK_LTDAUTOLOAD_BSS_END; - SDK_LTDAUTOLOAD_BSS_END = SDK_MOUNT_INFO_TABLE + 0x400; - - ######################### LTDAUTOLOAD_INFO ########################## - .binary.LTDAUTOLOAD_INFO: - { - - WRITEW ADDR(.); - WRITEW SDK_LTDAUTOLOAD..SIZE; - WRITEW SDK_LTDAUTOLOAD..SINIT_START; - WRITEW SDK_LTDAUTOLOAD..BSS_SIZE; - - - } > binary.LTDAUTOLOAD_INFO - - SDK_LTDAUTOLOAD_LIST = SDK_LTDAUTOLOAD_START + SDK_LTDAUTOLOAD_SIZE; - SDK_LTDAUTOLOAD_LIST_END = SDK_LTDAUTOLOAD_LIST + SIZEOF(.binary.LTDAUTOLOAD_INFO); - SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SIZEOF(.binary.LTDAUTOLOAD_INFO); - - ########################## LTDOVERLAYDEFS ########################### - .L: - { - ### TWL limited extended static module information - WRITEW SDK_LTDAUTOLOAD_TOP_START; # load address - WRITEW SDK_MOUNT_INFO_TABLE; # address of the FS mount information table - WRITEW SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD_TOP_SIZE; # size of module - WRITEW 0; # padding - - } > L - - ############################ OTHERS ################################# - SDK_SUBPRIV_ARENA_LO = 0x02ffc000; # CA[i̓TCY 0 - SDK_SEA_KEY_STORE = SDK_LTDAUTOLOAD_BSS_END; - SDK_WRAM_ARENA_LO = SDK_LTDAUTOLOAD_BSS_END + 0x40; - - SDK_IRQ_STACKSIZE = ; # allocated in WRAM - SDK_SYS_STACKSIZE = ; # allocated in WRAM - SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1; - - .check.WORKRAM: - { - . = SDK_WRAM_ARENA_LO + 0x80 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN; - - } > check.WORKRAM -} diff --git a/build/tests/DisplaySystemInformation/ARM7/armadillo.lsf b/build/tests/DisplaySystemInformation/ARM7/armadillo.lsf deleted file mode 100644 index 4519fc34..00000000 --- a/build/tests/DisplaySystemInformation/ARM7/armadillo.lsf +++ /dev/null @@ -1,85 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - armadillo.TWL -# File: armadillo.lsf -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# Nitro LCF SPEC FILE -# -#-------- -Static $(TARGET_NAME) -{ - Address 0x02380000 - StackSize 1024 1024 - - Library $(CRT0_O) -} - -#-------- -Ltdautoload SCRWRAM -{ - Address 0x03740000 - - Library libsubpsyscall.a - Library libsyscall_sp.twl.a - Library $(CW_LIBS) - Library $(ISDBG_LIBS_TWL) - Library $(ISDBG_LIBS_NITRO) - - Object * (.etable) - Object $(OBJDIR)/main.o - Object $(OBJDIR)/overwriteRtc.o - - Library libsea_sp$(LIBSUFFIX).a - Library libcrypto_sp$(LIBSUFFIX).a - - Library libos_sp$(LIBSUFFIX).a - Library libmi_sp$(LIBSUFFIX).a - Library libstd_sp$(LIBSUFFIX).a - Library libmath_sp$(LIBSUFFIX).a - Library libpxi_sp$(LIBSUFFIX).a - Library libexi_sp$(LIBSUFFIX).a - Library libi2c_sp$(LIBSUFFIX).a - Library libsdio_sp$(LIBSUFFIX).a - Library libpad_sp$(LIBSUFFIX).a - Library libscfg_sp$(LIBSUFFIX).a - Library libmcu_sp$(LIBSUFFIX).a - Library libcdc_sp$(LIBSUFFIX).a - Library libsnd_sp$(LIBSUFFIX).a - Library libsndex_sp$(LIBSUFFIX).a - Library libspi_sp$(LIBSUFFIX).a - Library libpm_sp$(LIBSUFFIX).a - Library libtp_sp$(LIBSUFFIX).a - Library libtpex_sp$(LIBSUFFIX).a - Library libmic_sp$(LIBSUFFIX).a - Library libmicex_sp$(LIBSUFFIX).a - Library libnvram_sp$(LIBSUFFIX).a - Library librtc_sp$(LIBSUFFIX).a - Library libfatfs_sp$(LIBSUFFIX).a - Library libwm_sp$(LIBSUFFIX).a - Library libnwm_sp$(LIBSUFFIX).a - Library libwvr_sp$(LIBSUFFIX).a - Library libwl_sp$(LIBSUFFIX).a - Library libwpa_sp$(LIBSUFFIX).a - Library libathdrv_sp$(LIBSUFFIX).a -# Library libfs_sp$(LIBSUFFIX).a -# Library libcard_sp$(LIBSUFFIX).a -# Library libcamera_sp$(LIBSUFFIX).a - - Object * (.wram) - Object * (.ltdwram) - Object * (.rsvwram) - Object * (.main) - Object * (.ltdmain) -} diff --git a/build/tests/DisplaySystemInformation/ARM7/armadillo.response.template b/build/tests/DisplaySystemInformation/ARM7/armadillo.response.template deleted file mode 100644 index b68c3564..00000000 --- a/build/tests/DisplaySystemInformation/ARM7/armadillo.response.template +++ /dev/null @@ -1,22 +0,0 @@ - - - - - -l - - - - - - - -l - - - - - - - - -l - - diff --git a/build/tests/DisplaySystemInformation/ARM7/src/main.c b/build/tests/DisplaySystemInformation/ARM7/src/main.c deleted file mode 100644 index 219de8c5..00000000 --- a/build/tests/DisplaySystemInformation/ARM7/src/main.c +++ /dev/null @@ -1,632 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - components - armadillo.TWL - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "nvram_sp.h" - -#include "address.h" - - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -/* eXbhDx */ -#define THREAD_PRIO_SPI 2 -#define THREAD_PRIO_MCU 4 // b -#define THREAD_PRIO_SND 6 -#define THREAD_PRIO_NWM_EVENT 7 -#define THREAD_PRIO_NWM_SDIO 8 -#define THREAD_PRIO_FATFS 8 -#define THREAD_PRIO_NWM_COMMAND 9 -#define THREAD_PRIO_NWM_WPA 10 -#define THREAD_PRIO_AES 12 -#define THREAD_PRIO_SEA 12 -#define THREAD_PRIO_RTC 12 -#define THREAD_PRIO_SNDEX 14 -#define THREAD_PRIO_FS 15 -/* OS_THREAD_LAUNCHER_PRIORITY 16 */ - -/* ROM o^GÅgR[h */ -#define ROMHEADER_FOR_CHINA_BIT 0x80 -#define ROMHEADER_FOR_KOREA_BIT 0x40 - -/* gp DMA ԍ */ -#define DMA_NO_FATFS FATFS_DMA_4 // = 0 -#define DMA_NO_NWM NWMSP_DMA_7 - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void PrintDebugInfo(void); -static OSHeapHandle InitializeAllocateSystem(void); -static void InitializeFatfs(void); -static void InitializeNwm(OSHeapHandle hh); -static void DummyThread(void* arg); - -static void ReadUserInfo(void); -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -static BOOL IsValidConfigEx(void); -static u16 GetRomValidLanguage(void); -static s32 CheckCorrectNCDEx(NVRAMConfigEx* ncdsp); -#else -static s32 CheckCorrectNCD(NVRAMConfig* ncdsp); -#endif -static void VBlankIntr(void); - -/*---------------------------------------------------------------------------* - Name: TwlSpMain - Description: NxN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -void -TwlSpMain(void) -{ - OSHeapHandle heapHandle; - - // OSARM9ƓOSCFG̏Lɏo - // WX^Rs[ - MI_CpuMove16( (void*)REG_ROM_ADDR, DISPINFO_SHARED_SCFG_REG_ADDR, DISPINFO_SHARED_SCFG_REG_SIZE ); - // WRAMɑޔĂ镪Rs[ - MI_CpuMove16( (void*)HWi_WSYS04_ADDR, DISPINFO_SHARED_SCFG_WRAM_ADDR, DISPINFO_SHARED_SCFG_WRAM_SIZE ); - - /* OS */ - OS_Init(); - PrintDebugInfo(); - - /* NVRAM 烆[U[ǂݏo */ - ReadUserInfo(); - - /* q[v̈ݒ */ - heapHandle = InitializeAllocateSystem(); - - /* {^̓T[` */ - (void)PAD_InitXYButton(); - - /* ݋ */ - (void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - /* eCu */ - AES_Init(THREAD_PRIO_AES); // AES - SEA_Init(THREAD_PRIO_SEA); // SEA -// FS_Init(FS_DMA_NOT_USE); // FS for CARD -// FS_CreateReadServerThread(THREAD_PRIO_FS); // FS for CARD - InitializeFatfs(); // FAT-FS - InitializeNwm(heapHandle); // TWL - MCU_InitIrq(THREAD_PRIO_MCU); // }CR - CDC_InitLib(); // CODEC -// if (OSi_IsCodecTwlMode() == TRUE) -// { -// CAMERA_Init(); // J -// } - SND_Init(THREAD_PRIO_SND); // TEh - SNDEX_Init(THREAD_PRIO_SNDEX); // TEhg - RTC_Init(THREAD_PRIO_RTC); // RTC - WVR_Begin(heapHandle); // NITRO - SPI_Init(THREAD_PRIO_SPI); - - while (TRUE) - { - OS_Halt(); - - /* \tgEFAZbgv͊ĎȂ */ - /* AGB J[gbW̑}`FbN͍sȂ */ - /* DS J[h̑}`FbN͍sȂ */ - } -} - -/*---------------------------------------------------------------------------* - Name: PrintDebugInfo - Description: ARM7 R|[lg̏fobOo͂B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -PrintDebugInfo(void) -{ - OS_TPrintf("ARM7: This component is running on TWL.\n"); - OS_TPrintf("ARM7: This component is \"armadillo.TWL\".\n"); -} - -/*---------------------------------------------------------------------------* - Name: InitializeAllocateSystem - Description: ăVXeB - Arguments: None. - Returns: OSHeapHandle - WRAM A[iɊmۂꂽq[ṽnhԂB - *---------------------------------------------------------------------------*/ -static OSHeapHandle -InitializeAllocateSystem(void) -{ - OSHeapHandle hh; - void* subLo = (void*)OS_GetWramSubArenaLo(); - void* subHi = (void*)OS_GetWramSubArenaHi(); - void* privLo = (void*)OS_GetWramSubPrivArenaLo(); - void* privHi = (void*)OS_GetWramSubPrivArenaHi(); - - if (((u32)privLo == HW_PRV_WRAM) && ((u32)subHi == HW_PRV_WRAM) && ((u32)subLo < HW_PRV_WRAM)) - { - /* SUB A[i SUBPRIV A[iɋz */ - OS_SetWramSubArenaHi(subLo); - OS_SetWramSubPrivArenaLo(subLo); - privLo = subLo; - } - - /* A[i 0 NA */ - MI_CpuClear8(privLo, (u32)privHi - (u32)privLo); - - /* q[v쐬 */ - privLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, privLo, privHi, 1); - hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, privLo, privHi); - if (hh < 0) - { - OS_Panic("ARM7: Failed to create heap.\n"); - } - - /* Jgq[vɐݒ */ - (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - /* q[vTCY̊mF */ - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - if (heapSize <= 0) - { - OS_Panic("ARM7: Failed to create heap.\n"); - } - OS_TPrintf("ARM7: heap size [%d]\n", heapSize); - } - - return hh; -} - -/*---------------------------------------------------------------------------* - Name: InitializeFatfs - Description: FATFSCuBFATFS֐ŃXbhx~ - ׁAx~삷_~[̃Xbh𗧂ĂB - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeFatfs(void) -{ - OSThread thread; - u32 stack[18]; - - /* _~[Xbh쐬 */ - OS_CreateThread(&thread, DummyThread, NULL, - (void*)((u32)stack + (sizeof(u32) * 18)), sizeof(u32) * 18, OS_THREAD_PRIORITY_MAX); - OS_WakeupThreadDirect(&thread); - - /* FATFS */ - /* [TODO] DMA NOT_USE ̂܂܂ŗǂH */ - if(!FATFS_Init(DMA_NO_FATFS, FATFS_DMA_NOT_USE, THREAD_PRIO_FATFS)) - { - /* do nothing */ - } - - /* _~[Xbhj */ - OS_KillThread(&thread, NULL); -} - -/*---------------------------------------------------------------------------* - Name: InitializeNwm - Description: NWMCuB - Arguments: hh - p”\ȃq[ṽnhwB - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeNwm(OSHeapHandle hh) -{ - NwmspInit nwmInit; - - /* [TODO] mۂĂq[v̈悪VꎮKvƂĂ郁ʈȏォ̃`FbNKv */ - - nwmInit.cmdPrio = THREAD_PRIO_NWM_COMMAND; - nwmInit.evtPrio = THREAD_PRIO_NWM_EVENT; - nwmInit.sdioPrio = THREAD_PRIO_NWM_SDIO; - - nwmInit.dmaNo = DMA_NO_NWM; - nwmInit.drvHeap.id = OS_ARENA_WRAM_SUBPRIV; - nwmInit.drvHeap.handle = hh; - - nwmInit.wpaPrio = THREAD_PRIO_NWM_WPA; - nwmInit.wpaHeap.id = OS_ARENA_WRAM_SUBPRIV; - nwmInit.wpaHeap.handle = hh; - - NWMSP_Init(&nwmInit); -} - -/*---------------------------------------------------------------------------* - Name: DummyThread - Description: FATFSCuACDCCuۂɗĂ_~[ - XbhB - Arguments: arg - gpȂB - Returns: None. - *---------------------------------------------------------------------------*/ -static void -DummyThread(void* arg) -{ -#pragma unused(arg) - while (TRUE) - { - } -} - -#ifdef WM_PRECALC_ALLOWEDCHANNEL -extern u16 WMSP_GetAllowedChannel(u16 bitField); -#endif -/*---------------------------------------------------------------------------* - Name: ReadUserInfo - - Description: NVRAM烆[U[ǂݏoAL̈ɓWJB - ~[OĂobt@Ăꍇ́A - L̈̃[U[i[ꏊNAB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void ReadUserInfo(void) -{ - s32 offset; -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - NVRAMConfigEx temp[2]; -#else - NVRAMConfig temp[2]; -#endif - s32 check; - u8 *p = OS_GetSystemWork()->nvramUserInfo; - - // ItZbgǂݏo -#ifdef NVRAM_CONFIG_CONST_ADDRESS - offset = NVRAM_CONFIG_DATA_ADDRESS_DUMMY; -#else - NVRAM_ReadDataBytes(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_CONFIG_DATA_OFFSET_SIZE, - (u8 *)(&offset)); - offset <<= NVRAM_CONFIG_DATA_OFFSET_SHIFT; -#endif - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfigEx), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfigEx), - (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCDEx(temp); -#else - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfig), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfig), (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCD(temp); -#endif - - if (check >= 3) - { - // AvP[V̋N} - MI_CpuFill32(p, 0xffffffff, sizeof(NVRAMConfig)); - } - else if (check) - { - s32 i; - - // jbNl[␳ - if (temp[check - 1].ncd.owner.nickname.length < NVRAM_CONFIG_NICKNAME_LENGTH) - { - for (i = NVRAM_CONFIG_NICKNAME_LENGTH; - i > temp[check - 1].ncd.owner.nickname.length; i--) - { - temp[check - 1].ncd.owner.nickname.str[i - 1] = 0x0000; - } - } - // Rg␳ - if (temp[check - 1].ncd.owner.comment.length < NVRAM_CONFIG_COMMENT_LENGTH) - { - for (i = NVRAM_CONFIG_COMMENT_LENGTH; i > temp[check - 1].ncd.owner.comment.length; - i--) - { - temp[check - 1].ncd.owner.comment.str[i - 1] = 0x0000; - } - } - // L̈ɃXgA - MI_CpuCopy32(&temp[check - 1], p, sizeof(NVRAMConfig)); - } - else - { - // L̈NA - MI_CpuClear32(p, sizeof(NVRAMConfig)); - } - - // MACAhX[U[̌ɓWJ - { - u8 wMac[6]; - - // NVRAMMACAhXǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_MACADDRESS_ADDRESS, 6, wMac); - // WJAhXvZ - p = (u8 *)((u32)p + ((sizeof(NVRAMConfig) + 3) & ~0x00000003)); - // L̈ɓWJ - MI_CpuCopy8(wMac, p, 6); - } - -#ifdef WM_PRECALC_ALLOWEDCHANNEL - // gp”\`lgpƒ`lvZ - { - u16 enableChannel; - u16 allowedChannel; - - // gp”\`lǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_ENABLECHANNEL_ADDRESS, 2, (u8 *)(&enableChannel)); - // gpƒ`lvZ - allowedChannel = WMSP_GetAllowedChannel((u16)(enableChannel >> 1)); - // WJAhXvZ(MACAhX̌2oCg) - p = (u8 *)((u32)p + 6); - // L̈ɓWJ - *((u16 *)p) = allowedChannel; - } -#endif -} - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -/*---------------------------------------------------------------------------* - Name: IsValidConfigEx - - Description: [U[񂪊gRtBOɑΉĂ邩ǂ𒲍B - - Arguments: None. - - Returns: BOOL - g[U[񂪗LȏꍇTRUEԂB - łꍇFALSEԂB - *---------------------------------------------------------------------------*/ -static BOOL IsValidConfigEx(void) -{ - u8 ipl2_type; - - NVRAM_ReadDataBytes(NVRAM_CONFIG_IPL2_TYPE_ADDRESS, NVRAM_CONFIG_IPL2_TYPE_SIZE, &ipl2_type); - if (ipl2_type == NVRAM_CONFIG_IPL2_TYPE_NORMAL) - { - return FALSE; - } - if (ipl2_type & NVRAM_CONFIG_IPL2_TYPE_EX_MASK) - { - return TRUE; - } - return FALSE; -} - -/*---------------------------------------------------------------------------* - Name: GetRomValidLanguage - - Description: ROMo^GȀ񂩂AgR[h̑Ήrbg}bv - Ɋւ𒊏oB - - Arguments: None. - - Returns: u16 - DSJ[hA }`u[goCiΉĂ - R[h̃rbg}bvԂBDSJ[hg - R[hɑΉĂȂꍇ 0 ԂB - *---------------------------------------------------------------------------*/ -static u16 GetRomValidLanguage(void) -{ - u16 ret = 0x0000; - u8 langBit = OS_GetSystemWork()->rom_header[0x1d]; - - // ROMo^GÅgR[hmF - if (langBit == ROMHEADER_FOR_CHINA_BIT) - { - // for CHINA - ret |= (0x0001 << NVRAM_CONFIG_LANG_CHINESE); - } - else if (langBit == ROMHEADER_FOR_KOREA_BIT) - { - // for KOREA - ret |= (0x0001 << NVRAM_CONFIG_LANG_HANGUL); - } - return ret; -} - -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCDEx - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - 3: Av̋N}ׂB - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCDEx(NVRAMConfigEx * ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // IPLgR[hɑΉĂ邩 - if (IsValidConfigEx()) - { - // IPLgR[hɑΉĂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - calc_crc = - SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd_ex), sizeof(NVRAMConfigDataEx)); - if ((ncdsp[i].crc16_ex == calc_crc) - && ((0x0001 << ncdsp[i].ncd_ex.language) & - (ncdsp[i].ncd_ex.valid_language_bitmap))) - { - // gf[^p CRC Aݒ茾R[hΉR[hɊ܂܂ꍇɐƔf - if (rom_valid_language & ncdsp[i].ncd_ex.valid_language_bitmap) - { - // gR[hŒʏ팾R[h㏑ - ncdsp[i].ncd.option.language = ncdsp[i].ncd_ex.language; - } - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE) & ~ncdsp[i]. - ncd_ex.valid_language_bitmap) - { - // ROM o^GA""gR[hݒ肳Ă邪A - // IPL2̑ΉR[h""gR[h܂܂Ȃꍇ͋N} - return 3; - } - crc_flag |= (1 << i); - } - } - } - } - else - { - // IPLgR[hɑΉĂȂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE)) - { - // ROM o^GA""gR[hݒ肳Ăꍇ͋N} - return 3; - } - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - crc_flag |= (1 << i); - } - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} - -#else -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCD - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCD(NVRAMConfig *ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // e~[f[^CRC & saveCount`FbN - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRCAsaveCountl0x80̃f[^𐳓ƔfB - crc_flag |= (1 << i); - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} -#endif - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - Description: V uN荞݃xN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -extern BOOL PMi_Initialized; -extern void PM_SelfBlinkProc(void); - -static void -VBlankIntr(void) -{ - if (PMi_Initialized) - { - PM_SelfBlinkProc(); - } -} diff --git a/build/tests/DisplaySystemInformation/ARM7/src/overwriteRtc.c b/build/tests/DisplaySystemInformation/ARM7/src/overwriteRtc.c deleted file mode 100644 index af04b9d0..00000000 --- a/build/tests/DisplaySystemInformation/ARM7/src/overwriteRtc.c +++ /dev/null @@ -1,67 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - components - armadillo.TWL - File: overwriteRtc.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include - -extern BOOL RTC_IsAvailablePxiCommand(u16 command); - -/*---------------------------------------------------------------------------* - Name: RTC_IsAvailablePxiCommand - - Description: PXI R}hL RTC R}hł邩ǂB - - Arguments: command - R}hB - - Returns: BOOL - LȃR}hłꍇ TRUE ԂBł - ȃR}hłꍇɂ FALSE ԂB - *---------------------------------------------------------------------------*/ -BOOL -RTC_IsAvailablePxiCommand(u16 command) -{ - switch (command) - { - case RTC_PXI_COMMAND_RESET: - case RTC_PXI_COMMAND_SET_HOUR_FORMAT: - case RTC_PXI_COMMAND_READ_DATETIME: - case RTC_PXI_COMMAND_READ_DATE: - case RTC_PXI_COMMAND_READ_TIME: - case RTC_PXI_COMMAND_READ_PULSE: - case RTC_PXI_COMMAND_READ_ALARM1: - case RTC_PXI_COMMAND_READ_ALARM2: - case RTC_PXI_COMMAND_READ_STATUS1: - case RTC_PXI_COMMAND_READ_STATUS2: - case RTC_PXI_COMMAND_READ_ADJUST: - case RTC_PXI_COMMAND_READ_FREE: - case RTC_PXI_COMMAND_WRITE_DATETIME: - case RTC_PXI_COMMAND_WRITE_DATE: - case RTC_PXI_COMMAND_WRITE_TIME: - case RTC_PXI_COMMAND_WRITE_PULSE: - case RTC_PXI_COMMAND_WRITE_ALARM1: - case RTC_PXI_COMMAND_WRITE_ALARM2: - case RTC_PXI_COMMAND_WRITE_STATUS1: - case RTC_PXI_COMMAND_WRITE_STATUS2: - case RTC_PXI_COMMAND_WRITE_ADJUST: - case RTC_PXI_COMMAND_WRITE_FREE: - return TRUE; - } - return FALSE; -} - diff --git a/build/tests/DisplaySystemInformation/ARM7_armadillo/Makefile b/build/tests/DisplaySystemInformation/ARM7_armadillo/Makefile deleted file mode 100644 index 16d7b87c..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_armadillo/Makefile +++ /dev/null @@ -1,86 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - armadillo.TWL -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL -override TWL_PROC = ARM7 -override TWL_ARCHGEN = LIMITED -override TWL_PLATFORM = TS -TWL_NO_STD_PCHDR = True -TARGET_CODEGEN ?= ALL - -#---------------------------------------------------------------------------- -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SRCS = overwriteRtc.c crt0.SCR.c main.c - -TARGET_NAME = armadillo - -TARGET_NEF = $(TARGET_NAME).tef -LCFILE_SPEC = $(TARGET_NAME).lsf -LCFILE_TEMPLATE = $(TARGET_NAME).lcf.template -LDRES_TEMPLATE = $(TARGET_NAME).response.template - -CRT0_O = crt0.SCR.o - -# X^bNsh~ׁ̈ACCWJɃRpC -CCFLAGS_OPT = -O4 -inline off - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/commondefs - - -TWL_NO_STD_PCHDR = True - -MACRO_FLAGS += -DSDK_ARM7COMP_LTD -DSDK_SEA -DSDK_NOINIT - -MAKELCF_FLAGS += -DISDBG_LIBS_TWL='$(if $(ISDBG_LIBS_TWL),$(ISDBG_LIBS_TWL),libstubsistd_sp$(TWL_LIBSUFFIX).a)' \ - -DISDBG_LIBS_NITRO='libstubsisd_sp$(TWL_LIBSUFFIX).a' - -#-------------------------------- -# install target -#-------------------------------- -#INSTALL_TARGETS = $(BINDIR)/$(TARGET_NAME).tef \ -# $(BINDIR)/$(TARGET_NAME).TWL.FLX.sbin \ -# $(BINDIR)/$(TARGET_NAME)_defs.TWL.FLX.sbin \ -# $(BINDIR)/$(TARGET_NAME).TWL.LTD.sbin \ -# $(BINDIR)/$(TARGET_NAME)_defs.TWL.LTD.sbin - -#INSTALL_DIR = $(TWL_INSTALL_COMPONENTSDIR)/$(TARGET_NAME)/$(TWL_BUILDTYPE) - -LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include \ - $(DISP_INFO)/common/include \ - $(TWLSDK_ROOT)/build/libraries/init/common/include - -LLIBRARY_DIRS += $(DISP_INFO)/ARM7_armadillo/obj/$(TWL_BUILDTYPE_ARM7) - -LLIBRARIES += libwl_sp$(TWL_LIBSUFFIX).a \ - libsdio_sp$(TWL_LIBSUFFIX).a \ - libathdrv_sp$(TWL_LIBSUFFIX).a \ - libwpa_sp$(TWL_LIBSUFFIX).a \ - libsea_sp$(TWL_LIBSUFFIX).a \ - -LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES) - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.lcf.template b/build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.lcf.template deleted file mode 100644 index 6ae1bd6b..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.lcf.template +++ /dev/null @@ -1,400 +0,0 @@ -#--------------------------------------------------------------------------- -# Project: TwlSDK - components - armadillo.TWL -# File: armadillo.lcf.template -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#--------------------------------------------------------------------------- -MEMORY -{ - (RWX) : ORIGIN = , LENGTH = 0x0 > - binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> - - F (RW) : ORIGIN = 0, LENGTH = 0x0 > - - binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > - - (RWX) : ORIGIN = , LENGTH = 0x0 >> - - binary.LTDAUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> - - L (RW) : ORIGIN = 0, LENGTH = 0x0 > - - check.WORKRAM (RWX) : ORIGIN = 0x03740000, LENGTH = 0xd0000 > workram.check -} - -KEEP_SECTION -{ - .sinit -} - -SECTIONS -{ - ############################ STATIC ################################# - .: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # TEXT BLOCK: READ ONLY - # - SDK_STATIC_START =.; - OBJECT(_start,*) - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_STATIC_SINIT_START =.; - - - - - - - - - - - - - WRITEW 0; - - # - # DATA BLOCK: READ WRITE - # - . = ALIGN(4); - - - - - - - - - - - - - . = ALIGN(4); - SDK_STATIC_END =.; - - SDK_STATIC_SIZE = SDK_STATIC_END - SDK_STATIC_START; - __sinit__ = SDK_STATIC_SINIT_START; # for static initializer - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_STATIC_BSS_START =.; - - - - - - - - - - - - - . = ALIGN(4); - SDK_STATIC_BSS_END = .; - - SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START; - - } >> - - ############################ STATIC_FOOTER ########################## - .binary.STATIC_FOOTER: - { - WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE - WRITEW _start_ModuleParams - ADDR(.); - WRITEW 0; # NO DIGEST - WRITEW _start_LtdModuleParams - ADDR(.); - - } > binary.STATIC_FOOTER - - ############################ OVERLAYDEFS ############################ - .F: - { - ### module information - WRITEW ADDR(.); # load address - WRITEW _start; # entry address - WRITEW SDK_STATIC_SIZE; # size of module - WRITEW _start_AutoloadDoneCallback; # callback autoload done - - } > F - - ########################### LTDAUTOLOADS ############################ - SDK_LTDAUTOLOAD_TOP_START = 0x02f00000; - SDK_LTDAUTOLOAD_TOP_SIZE = 4; # STATIC ̈悪 4 bytes ̃_~[oCit@C̐擪ɓ # - SDK_LTDAUTOLOAD_START = SDK_LTDAUTOLOAD_TOP_START + SDK_LTDAUTOLOAD_TOP_SIZE; - SDK_LTDAUTOLOAD_SIZE = 0; - SDK_LTDAUTOLOAD_BSS_END = 0x03740000; - - .binary.LTDAUTOLOAD_TOP: - { - WRITEW 0; - - } > binary.LTDAUTOLOAD_TOP - - - .: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # TEXT BLOCK: READ ONLY - # - SDK_LTDAUTOLOAD..START =.; - - - - - - - - - . = ALIGN(4); - SDK_STATIC_ETABLE_START =.; - __exception_table_start__ =.; - EXCEPTION - __exception_table_end__ =.; - SDK_STATIC_ETABLE_END =.; - - - - - - - - - - - - - - . = ALIGN(4); - SDK_LTDAUTOLOAD..SINIT_START =.; - - - - - - - - - - - - - WRITEW 0; - - # - # DATA BLOCK: READ WRITE BLOCK - # - . = ALIGN(4); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_LTDAUTOLOAD..END =.; - - SDK_LTDAUTOLOAD..SIZE = SDK_LTDAUTOLOAD..END - SDK_LTDAUTOLOAD..START; - SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD..SIZE; - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_LTDAUTOLOAD..BSS_START =.; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_LTDAUTOLOAD..BSS_END =.; - SDK_LTDAUTOLOAD_BSS_END =.; - - SDK_LTDAUTOLOAD..BSS_SIZE = SDK_LTDAUTOLOAD..BSS_END - SDK_LTDAUTOLOAD..BSS_START; - - } >> - - - SDK_MOUNT_INFO_TABLE = SDK_LTDAUTOLOAD_BSS_END; - SDK_LTDAUTOLOAD_BSS_END = SDK_MOUNT_INFO_TABLE + 0x400; - - ######################### LTDAUTOLOAD_INFO ########################## - .binary.LTDAUTOLOAD_INFO: - { - - WRITEW ADDR(.); - WRITEW SDK_LTDAUTOLOAD..SIZE; - WRITEW SDK_LTDAUTOLOAD..SINIT_START; - WRITEW SDK_LTDAUTOLOAD..BSS_SIZE; - - - } > binary.LTDAUTOLOAD_INFO - - SDK_LTDAUTOLOAD_LIST = SDK_LTDAUTOLOAD_START + SDK_LTDAUTOLOAD_SIZE; - SDK_LTDAUTOLOAD_LIST_END = SDK_LTDAUTOLOAD_LIST + SIZEOF(.binary.LTDAUTOLOAD_INFO); - SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SIZEOF(.binary.LTDAUTOLOAD_INFO); - - ########################## LTDOVERLAYDEFS ########################### - .L: - { - ### TWL limited extended static module information - WRITEW SDK_LTDAUTOLOAD_TOP_START; # load address - WRITEW SDK_MOUNT_INFO_TABLE; # address of the FS mount information table - WRITEW SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD_TOP_SIZE; # size of module - WRITEW 0; # padding - - } > L - - ############################ OTHERS ################################# - SDK_SUBPRIV_ARENA_LO = 0x02ffc000; # CA[i̓TCY 0 - SDK_SEA_KEY_STORE = SDK_LTDAUTOLOAD_BSS_END; - SDK_WRAM_ARENA_LO = SDK_LTDAUTOLOAD_BSS_END + 0x40; - - SDK_IRQ_STACKSIZE = ; # allocated in WRAM - SDK_SYS_STACKSIZE = ; # allocated in WRAM - SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1; - - .check.WORKRAM: - { - . = SDK_WRAM_ARENA_LO + 0x80 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN; - - } > check.WORKRAM -} diff --git a/build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.lsf b/build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.lsf deleted file mode 100644 index 4519fc34..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.lsf +++ /dev/null @@ -1,85 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - armadillo.TWL -# File: armadillo.lsf -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# Nitro LCF SPEC FILE -# -#-------- -Static $(TARGET_NAME) -{ - Address 0x02380000 - StackSize 1024 1024 - - Library $(CRT0_O) -} - -#-------- -Ltdautoload SCRWRAM -{ - Address 0x03740000 - - Library libsubpsyscall.a - Library libsyscall_sp.twl.a - Library $(CW_LIBS) - Library $(ISDBG_LIBS_TWL) - Library $(ISDBG_LIBS_NITRO) - - Object * (.etable) - Object $(OBJDIR)/main.o - Object $(OBJDIR)/overwriteRtc.o - - Library libsea_sp$(LIBSUFFIX).a - Library libcrypto_sp$(LIBSUFFIX).a - - Library libos_sp$(LIBSUFFIX).a - Library libmi_sp$(LIBSUFFIX).a - Library libstd_sp$(LIBSUFFIX).a - Library libmath_sp$(LIBSUFFIX).a - Library libpxi_sp$(LIBSUFFIX).a - Library libexi_sp$(LIBSUFFIX).a - Library libi2c_sp$(LIBSUFFIX).a - Library libsdio_sp$(LIBSUFFIX).a - Library libpad_sp$(LIBSUFFIX).a - Library libscfg_sp$(LIBSUFFIX).a - Library libmcu_sp$(LIBSUFFIX).a - Library libcdc_sp$(LIBSUFFIX).a - Library libsnd_sp$(LIBSUFFIX).a - Library libsndex_sp$(LIBSUFFIX).a - Library libspi_sp$(LIBSUFFIX).a - Library libpm_sp$(LIBSUFFIX).a - Library libtp_sp$(LIBSUFFIX).a - Library libtpex_sp$(LIBSUFFIX).a - Library libmic_sp$(LIBSUFFIX).a - Library libmicex_sp$(LIBSUFFIX).a - Library libnvram_sp$(LIBSUFFIX).a - Library librtc_sp$(LIBSUFFIX).a - Library libfatfs_sp$(LIBSUFFIX).a - Library libwm_sp$(LIBSUFFIX).a - Library libnwm_sp$(LIBSUFFIX).a - Library libwvr_sp$(LIBSUFFIX).a - Library libwl_sp$(LIBSUFFIX).a - Library libwpa_sp$(LIBSUFFIX).a - Library libathdrv_sp$(LIBSUFFIX).a -# Library libfs_sp$(LIBSUFFIX).a -# Library libcard_sp$(LIBSUFFIX).a -# Library libcamera_sp$(LIBSUFFIX).a - - Object * (.wram) - Object * (.ltdwram) - Object * (.rsvwram) - Object * (.main) - Object * (.ltdmain) -} diff --git a/build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.response.template b/build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.response.template deleted file mode 100644 index b68c3564..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.response.template +++ /dev/null @@ -1,22 +0,0 @@ - - - - - -l - - - - - - - -l - - - - - - - - -l - - diff --git a/build/tests/DisplaySystemInformation/ARM7_armadillo/src/crt0.SCR.c b/build/tests/DisplaySystemInformation/ARM7_armadillo/src/crt0.SCR.c deleted file mode 100644 index 52d0ff28..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_armadillo/src/crt0.SCR.c +++ /dev/null @@ -1,714 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - libraries - init - ARM7.TWL - File: crt0.SCR.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#ifndef SDK_FINALROM -#include -#endif -#include "boot_sync.h" - -/*---------------------------------------------------------------------------*/ -void _start(void); -void _start_AutoloadDoneCallback(void* argv[]); - -/*---------------------------------------------------------------------------* - OQ - *---------------------------------------------------------------------------*/ -/* JXNvgɂ`V{Q */ -extern void SDK_AUTOLOAD_LIST(void); -extern void SDK_AUTOLOAD_LIST_END(void); -extern void SDK_AUTOLOAD_START(void); -extern void SDK_STATIC_START(void); -extern void SDK_STATIC_BSS_START(void); -extern void SDK_STATIC_BSS_END(void); -extern void SDK_LTDAUTOLOAD_LIST(void); -extern void SDK_LTDAUTOLOAD_LIST_END(void); -extern void SDK_LTDAUTOLOAD_START(void); -extern void SDK_WRAM_ARENA_LO(void); - -/* O֐Q */ -extern void OS_IrqHandler(void); -#ifndef SDK_NOINIT -extern void _fp_init(void); -extern void __call_static_initializers(void); -#endif - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -#define SDK_NITROCODE_LE 0x2106c0de -#define SDK_NITROCODE_BE 0xdec00621 -#define SDK_TWLCODE_LE 0x6314c0de -#define SDK_TWLCODE_BE 0xdec01463 - -/* .rodata ZNVɔzu郍[hɕKvȏ */ -void* const _start_ModuleParams[] = -{ - (void*)0, - (void*)0, - (void*)0, - (void*)SDK_STATIC_BSS_START, - (void*)SDK_STATIC_BSS_END, - (void*)0, - (void*)0, - (void*)SDK_NITROCODE_BE, - (void*)SDK_NITROCODE_LE, -}; - -void* const _start_LtdModuleParams[] = -{ - (void*)SDK_LTDAUTOLOAD_LIST, - (void*)SDK_LTDAUTOLOAD_LIST_END, - (void*)SDK_LTDAUTOLOAD_START, - (void*)0, - (void*)SDK_TWLCODE_BE, - (void*)SDK_TWLCODE_LE, -}; - -/*---------------------------------------------------------------------------* - Name: ShakeHand - Description: ARM9 ShakeHand ֐ƓB - CłȂԂŎsKvB - Arguments: r0 - ARM9 pϐւ̃|C^B - r1 - ARM7 pϐւ̃|C^B - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_ShakeHand[10] = -{ - 0xe1d020b0, /* ldrh r2, [r0] ; ϐXLǂ */ - 0xe1d130b0, /* ldrh r3, [r1] ; ϐVLǂ */ - 0xe2833001, /* @1: add r3, r3, #1 ; ϐV ++ */ - 0xe1c130b0, /* strh r3, [r1] ; ϐVLɏ */ - 0xe1d0c0b0, /* ldrh r12, [r0] ; ϐX̌Lǂ */ - 0xe152000c, /* cmp r2, r12 ; ϐX̕ω𔻒肷 */ - 0x0afffffa, /* beq @1 ; ωĂȂ΃[v */ - 0xe2833001, /* add r3, r3, #1 ; ϐV ++ */ - 0xe1c130b0, /* strh r3, [r1] ; ϐVLɏ */ - 0xe12fff1e /* bx lr ; nhVFCN */ -}; - -/*---------------------------------------------------------------------------* - Name: Stop - Description: vO~B - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_Stop[2] = -{ - 0xef000006, /* @1: swi #6 ; SVC_Halt */ - 0xeafffffd /* b @1 ; [v */ -}; - -/*---------------------------------------------------------------------------* - Name: GotoMain - Description: ARM9 ɓ̏ԂɂȂƂ`ŁAMain ֐փWv - BɎwobt@ 0 NAsBX^bNœ삳 - 邱Ƃz肵ĂׁAX^bN؎gpȂB - Arguments: r0 - 0 NAobt@̐擪AhXB - 4 oCgACꂽAhXłKvB - r1 - 8 bit: ARM9 ɓ`tF[YԍB - 24 bit: 0 NAobt@̃TCYB - 4 ̔{łKvB - r2 - ptF[YǗϐւ̃|C^B - r3 - Main ֐̃|C^BMain ֐ Thumb R[hłꍇ - ɂ́Abx ߂ŃWv邽ߍʼnʃrbg 1 ɂȂ - KvB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_GotoMain[10] = -{ - 0xe59fc01c, /* @1: ldr r12, [pc, #28] ; 24 bit }XNp */ - 0xe111000c, /* tst r1, r12 ; NAobt@cTCY`FbN */ - 0xe3a0c000, /* mov r12, #0 ; NApϐp */ - 0x1480c004, /* strne r12, [r0], #4 ; 4 oCgNA */ - 0x12411004, /* subne r1, r1, #4 ; NAobt@cTCY -= 4 */ - 0x1afffff9, /* bne @1 ; cTCY 0 ɂȂ܂Ń[v */ - 0xe1a01c21, /* mov r1, r1, LSR #24 ; tF[YǗϐ̍XVlp */ - 0xe1c210b0, /* strh r1, [r2] ; tF[YǗϐXV */ - 0xe12fff13, /* bx r3 ; Main ֐փWv */ - 0x00fffffc /* 0x00fffffc */ -}; - - -/*---------------------------------------------------------------------------* - ֐vg^Cv - *---------------------------------------------------------------------------*/ -static void INITi_CheckSysConfig(void); -static void INITi_DetectMainMemorySize(void); -static void INITi_Stop(void); -static void INITi_DoAutoload(void); -#ifndef SDK_NOINIT -static void INITi_ShelterStaticInitializer(u32* ptr); -static void INITi_CallStaticInitializers(void); -#endif - -static void* INITi_Copy32(void* dst, void* src, u32 size); -static void* INITi_Fill32(void* dst, u32 value, u32 size); - -/*---------------------------------------------------------------------------*/ -#include - -/*---------------------------------------------------------------------------* - Name: _start - Description: NxN^B - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL asm void -_start(void) -{ -@000: - /* ݋֎~ */ - mov r12, #HW_REG_BASE - str r12, [r12, #REG_IME_OFFSET] - - /* SCFG ݒmF */ - bl INITi_CheckSysConfig - - /* `[nꂽޔ */ - ldr r3, =SDK_WRAM_ARENA_LO - sub r2, r3, #0x40 - ldr r1, =HW_LAUNCHER_DELIVER_PARAM_BUF -@001: - cmp r2, r3 - ldrlt r0, [r1], #4 - strlt r0, [r2], #4 - blt @001 - - /* nhVFCNp}CNR[hp WRAM ɃRs[ */ - ldr r1, =microcode_ShakeHand - ldr r2, =HW_PRV_WRAM - add r3, r2, #40 // sizeof(microcode_ShakeHand) -@002: ldr r0, [r1], #4 - str r0, [r2], #4 - cmp r2, r3 - blt @002 - - /* p WRAM ̃R[h ARM9 ƃnhVFCN */ - ldr r0, =HW_BOOT_SHAKEHAND_9 - ldr r1, =HW_BOOT_SHAKEHAND_7 - ldr r2, =HW_PRV_WRAM - mov lr, pc - bx r2 - -@010: - /* X^bN|C^ݒ */ - mov r0, #HW_PSR_SVC_MODE // SuperVisor mode - msr cpsr_c, r0 - ldr sp, =HW_PRV_WRAM_SVC_STACK_END - mov r0, #HW_PSR_IRQ_MODE // IRQ mode - msr cpsr_c, r0 - ldr sp, =HW_PRV_WRAM_IRQ_STACK_END - ldr r1, =SDK_IRQ_STACKSIZE - sub r1, sp, r1 - sub sp, sp, #4 // 4 bytes for IRQ stack check code - mov r0, #HW_PSR_SYS_MODE // System mode - msr cpsr_csfx, r0 - sub sp, r1, #4 // 4 bytes for SYS stack check code - - /* X^bN̈NA */ - ldr r0, =SDK_SYS_STACKSIZE - sub r1, r1, r0 - ldr r2, =HW_PRV_WRAM_IRQ_STACK_END - mov r0, #0 -@011: cmp r1, r2 - strlt r0, [r1], #4 - blt @011 - - /* v[hp[^AhXi[ĂȂꍇ́AftHglZbg */ - ldr r0, =HW_PRELOAD_PARAMETER_ADDR - ldr r1, [r0] - cmp r1, #0 - ldreq r1, =HW_PARAM_TWL_SETTINGS_DATA_DEFAULT - streq r1, [r0] - - /* Autoload { */ - bl INITi_DoAutoload - - /* STATIC ZOg .bss ZNV 0 NA */ - mov r1, #0 // r1 = clear value for STATIC bss section - ldr r3, =_start_ModuleParams - ldr r0, [r3, #12] // r0 = start address of STATIC bss section - ldr r2, [r3, #16] - subs r2, r2, r0 // r2 = size of STATIC bss section - blgt INITi_Fill32 - - /* CTCY𒲍 */ - bl INITi_DetectMainMemorySize - -#ifndef SDK_FINALROM - /* fobOo̓EBhEݒ */ - ldr r1, =HW_PRINT_OUTPUT_ARM9 - mov r0, #OS_PRINT_OUTPUT_DEFAULT_ARM9 - orr r0, r0, #(OS_PRINT_OUTPUT_DEFAULT_ARM7 << 8) - strh r0, [r1] - mov r0, #OS_PRINT_OUTPUT_DEFAULT_ARM9ERR - orr r0, r0, #(OS_PRINT_OUTPUT_DEFAULT_ARM7ERR << 8) - strh r0, [r1, #2] -#endif - - /* IRQ ݃xN^ݒ */ - ldr r1, =HW_INTR_VECTOR_BUF - ldr r0, =OS_IrqHandler - str r0, [r1] - -#ifndef SDK_NOINIT - /* c++ p */ - bl _fp_init - bl TwlSpStartUp - bl __call_static_initializers - bl INITi_CallStaticInitializers -#endif - -@0f0: - /* Main ֐ւ̃Wvp}CNR[hX^bN̒ɃRs[ */ - ldr r1, =microcode_GotoMain - sub r2, sp, #40 - mov r3, sp -@0f1: cmp r2, r3 - ldrlt r0, [r1], #4 - strlt r0, [r2], #4 - blt @0f1 - - /* }CNR[hoR Main ֐փWv */ - ldr r0, =SDK_STATIC_START - bic r0, r0, #0x00000003 - ldr r1, =SDK_STATIC_BSS_END - sub r1, r1, r0 - add r1, r1, #3 - bic r1, r1, #0x00000003 - bic r1, r1, #0xff000000 - mov r2, #BOOT_SYNC_PHASE_4 - mov r2, r2, LSL #24 - orr r1, r1, r2 - ldr r2, =HW_BOOT_SYNC_PHASE - ldr r3, =TwlSpMain - ldr lr, =HW_RESET_VECTOR - sub r12, sp, #40 - bx r12 - /* never return */ -} - -/*---------------------------------------------------------------------------* - Name: _start_AutoloadDoneCallback - Description: I[g[hR[obNB - Arguments: argv - I[g[hp[^ێĂzB - argv[0] = SDK_AUTOLOAD_LIST - argv[1] = SDK_AUTOLOAD_LIST_END - argv[2] = SDK_AUTOLOAD_START - argv[3] = SDK_STATIC_BSS_START - argv[4] = SDK_STATIC_BSS_END - Returns: ȂB - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL asm void -_start_AutoloadDoneCallback(void* argv[]) -{ - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_CheckSysConfig - Description: SCFG ֘A I/O WX^̓emFB - A7-SCFG ubNANZXLȏꍇɂ́A[_[sݒ菈 - sŃANZX𖳌B - ARM7 p WRAM Ƀ[_[WJĂ I/O WX^m - FŃC̋L̈ɃRs[B - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_CheckSysConfig(void) -{ - /* A7-SCFG ̃ANZX”۔ */ - ldr r1, =REG_EXT_ADDR - ldr r0, [r1] - ldr r2, =HW_PRV_WRAM_SYSRV - tst r0, #REG_SCFG_EXT_CFG_MASK - beq @invalid - - /* NbNAJTAGWRAMɓWJ */ -/* ldr r3, =REG_JTAG_ADDR // SCFG-JTAG - ldrh r1, [r3] - and r0, r1, #(REG_SCFG_JTAG_CPUJE_MASK | REG_SCFG_JTAG_ARM7SEL_MASK) - and r3, r1, #REG_SCFG_JTAG_DSPJE_MASK - orr r0, r0, r3, LSR #(REG_SCFG_JTAG_DSPJE_SHIFT - HWi_WSYS09_JTAG_DSPJE_SHIFT) - - ldr r3, =REG_CLK_ADDR - ldrh r1, [r3] - and r3, r1, #(REG_SCFG_CLK_AESHCLK_MASK | REG_SCFG_CLK_SD2HCLK_MASK | REG_SCFG_CLK_SD1HCLK_MASK) - orr r0, r0, r3, LSL #(HWi_WSYS09_CLK_SD1HCLK_SHIFT - REG_SCFG_CLK_SD1HCLK_SHIFT) - and r3, r1, #(REG_SCFG_CLK_SNDMCLK_MASK | REG_SCFG_CLK_WRAMHCLK_MASK) - orr r0, r0, r3, LSR #(REG_SCFG_CLK_WRAMHCLK_SHIFT - HWi_WSYS09_CLK_WRAMHCLK_SHIFT) - - strb r0, [r2, #HWi_WSYS09_WRAMOFFSET] -*/ - - /* A7-SCFG ubNւ̃ANZX𖳌 */ -// ldr r1, =REG_EXT_ADDR -// ldr r0, [r1] -// bic r0, r0, #REG_SCFG_EXT_CFG_MASK -// str r0, [r1] - -@invalid: - /* ROM ݒANITRO ݒemF */ - ldrb r0, [r2, #HWi_WSYS08_WRAMOFFSET] - and r0, r0, #(HWi_WSYS08_ROM_ARM7RSEL_MASK | HWi_WSYS08_ROM_ARM9RSEL_MASK | HWi_WSYS08_ROM_ARM9SEC_MASK) - cmp r0, #HWi_WSYS08_ROM_ARM9SEC_MASK - blne INITi_Stop - - /* SCFG WX^ݒL̈ɃRs[ */ - ldr r2, =HW_PRV_WRAM_SYSRV - ldr r3, =HW_SYS_CONF_BUF - ldr r0, [r2, #HWi_WSYS04_WRAMOFFSET] - str r0, [r3, #HWi_WSYS04_OFFSET] - ldrh r0, [r2, #HWi_WSYS08_WRAMOFFSET] - strh r0, [r3, #HWi_WSYS08_OFFSET] - - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_DetectMainMemorySize - Description: CTCY𒲍B - ʂ (u16*)HW_MMEMCHECER_SUB Ɋi[B - i[l [OS_CONSOLE_SIZE_16MB|OS_CONSOLE_SIZE_32B] - NOTE: vbgtH[ NITRO ̏ꍇ͍lĂȂB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -#define OSi_IMAGE_DIFFERENCE2 0xb000000 -#define OSi_DETECT_NITRO_MASK (REG_SND_SMX_CNT_E_MASK | REG_SND_SMX_CNT_FSEL_MASK) -#define OSi_DETECT_NITRO_VAL (REG_SND_SMX_CNT_E_MASK) - -#define OSi_CHECKNUM1 0x55 -#define OSi_CHECKNUM2 0xaa -#define OSi_100usWAIT 3352 // 100us = 3351.4cycles(33.514MHz) - -static asm void -INITi_DetectMainMemorySize(void) -{ - ldr r2, =HW_MMEMCHECKER_SUB - add r3, r2, #OSi_IMAGE_DIFFERENCE2 - mov r0, #OS_CONSOLE_SIZE_16MB - - /* OSi_CHECKNUM1 (0x55) ݃eXg */ - mov r1, #OSi_CHECKNUM1 - strb r1, [r3] - - ldr r2, =OSi_100usWAIT -@1 subs r2, r2, #4 - bcs @1 - - ldrb r1, [r3] - cmp r1, #OSi_CHECKNUM1 - bne @check_smix - - /* OSi_CHECKNUM2 (0xaa) ݃eXg */ - mov r1, #OSi_CHECKNUM2 - strb r1, [r3] - - ldr r2, =OSi_100usWAIT -@2 subs r2, r2, #4 - bcs @2 - - ldrb r1, [r3] - cmp r1, #OSi_CHECKNUM2 - moveq r0, #OS_CONSOLE_SIZE_32MB - -@check_smix: - /* SMIX WX^𒲍 */ - ldr r3, =REG_SMX_CNT_ADDR - ldrh r1, [r3] - and r1, r1, #OSi_DETECT_NITRO_MASK - cmp r1, #OSi_DETECT_NITRO_VAL - orreq r0, r0, #OS_CHIPTYPE_SMX_MASK - - /* ʂi[ */ - ldr r2, =HW_MMEMCHECKER_SUB - strb r0, [r2] - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_Stop - Description: vO~BARM7 p WRAM Halt JԂ[v - ֐Rs[ARs[֐sB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_Stop(void) -{ - ldr r1, =microcode_Stop - ldr r2, =HW_PRV_WRAM - add r3, r2, #8 // sizeof(microcode_Stop) -@copy_loop: - ldr r0, [r1], #4 - str r0, [r2], #4 - cmp r2, r3 - blt @copy_loop - -@stop_loop: - ldr r0, =HW_PRV_WRAM - mov lr, pc - bx r0 - b @stop_loop - /* never return */ -} - -/*---------------------------------------------------------------------------* - Name: INITi_DoAutoload - Description: NɉāAeI[g[hubŇŒf[^̓WJ - yѕϐ 0 NAsB - NITRO ݊I[g[hZOg݂͑ATWL pZOg - ݂݂̂ƂOB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ - -static asm void -INITi_DoAutoload(void) -{ - stmfd sp!, {lr} - - /* I[g[h{ */ -@000: - ldr r0, =_start_LtdModuleParams - ldr r12, [r0] // r12 = SDK_LTDAUTOLOAD_LIST - ldr r3, [r0, #4] // r3 = SDK_LTDAUTOLOAD_LIST_END - ldr r1, [r0, #8] // r1 = SDK_LTDAUTOLOAD_START -@001: - cmp r12, r3 - bge @010 - /* ŒZNV */ - ldr r0, [r12], #4 // r0 = start address of destination range of fixed section - ldr r2, [r12], #4 // r2 = size of fixed section - bl INITi_Copy32 - stmfd sp!, {r0, r1} - /* static initializer e[u */ - ldr r0, [r12], #4 -#ifndef SDK_NOINIT - stmfd sp!, {r3, r12} - bl INITi_ShelterStaticInitializer - ldmfd sp!, {r3, r12} -#endif - /* bss ZNV */ - ldmfd sp!, {r0} // r0 = start address of destination range of bss section - mov r1, #0 // r1 = clear value for bss section - ldr r2, [r12], #4 // r2 = sizeo of bss section - bl INITi_Fill32 - ldmfd sp!, {r1} - b @001 - - /* I[g[hXgEI[g[hobt@NA */ -@010: - ldr r1, =_start_LtdModuleParams - ldr r12, [r1] // r12 = SDK_LTDAUTOLOAD_LIST - ldr r3, [r1, #4] // r3 = SDK_LTDAUTOLOAD_LIST_END - ldr r0, [r1, #8] // r0 = SDK_LTDAUTOLOAD_START -@011: - cmp r12, r3 - bge @0f0 - mov r1, #0 // r1 = clear value - str r1, [r12], #4 - ldr r2, [r12] // r2 = size of fixed section - str r1, [r12], #4 - str r1, [r12], #4 - str r1, [r12], #4 - bl INITi_Fill32 - b @011 - -@0f0: - /* I[g[hR[obNĂяo */ - ldr r0, =_start_ModuleParams - ldr r1, =_start_LtdModuleParams - ldmfd sp!, {lr} - b _start_AutoloadDoneCallback -} - -#ifndef SDK_NOINIT - -//static asm void -/*---------------------------------------------------------------------------* - Name: INITi_ShelterStaticInitializer - Description: eI[g[hZOg static initializer ւ̃|C^ - e[u IRQ X^bN̍ŏ㕔ɑޔB - Arguments: ptr - ZOg̃|C^e[uւ̃|C^B - e[u NULL ŏI[ĂKvB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_ShelterStaticInitializer(u32* ptr) -{ - /* mF */ - cmp r0, #0 - bxeq lr - - /* ޔꏊ擪AhXvZ */ - ldr r1, =HW_PRV_WRAM_IRQ_STACK_END - ldr r2, =SDK_IRQ_STACKSIZE - sub r1, r1, r2 - add r1, r1, #4 -@001: - /* ޔꏊ擪󂫏ꏊ𒲍 */ - ldr r2, [r1] - cmp r2, #0 - addne r1, r1, #4 - bne @001 -@002: - /* 󂫏ꏊɃe[uRs[ */ - ldr r2, [r0], #4 - str r2, [r1], #4 - cmp r2, #0 - bne @002 - - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_CallStaticInitializers - Description: eI[g[hZOg static initializer ĂяoB - I[g[hɂ IRQ X^bN̍ŏ㕔ɑޔĂ - ֐|C^e[u‚ŒĂяoB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_CallStaticInitializers(void) -{ - stmdb sp!, {lr} - - /* e[uޔꏊ擪AhXvZ */ - ldr r1, =HW_PRV_WRAM_IRQ_STACK_END - ldr r2, =SDK_IRQ_STACKSIZE - sub r1, r1, r2 - add r1, r1, #4 -@001: - /* e[uɊǗĂ|C^‚ŒĂяo */ - ldr r0, [r1] - cmp r0, #0 - beq @002 - stmfd sp!, {r1} - mov lr, pc - bx r0 - ldmfd sp!, {r1} - /* UĂяo|C^̓[NA (IRQX^bNԎ؂肵Ă) */ - mov r0, #0 - str r0, [r1], #4 - b @001 -@002: - ldmia sp!, {lr} - bx lr -} -#endif - -/*---------------------------------------------------------------------------* - Name: INITi_Copy32 - Description: 32 bit PʂŃRs[sBX^bN 36 oCg邪A - WX^ r3 - r12 ͔j󂵂ȂB - Arguments: r0 - Rs[ւ̃|C^ ( 4 oCgAC )B - r1 - Rs[ւ̃|C^ ( 4 oCgAC )B - r2 - Rs[钷oCgPʂŎw ( 4 ̔{ )B - Returns: r0 - Rs[̃Rs[ւ̃|C^ ( r0 + r2 )B - r1 - Rs[̃Rs[ւ̃|C^ ( r1 + r2 )B - *---------------------------------------------------------------------------*/ -static asm void* -INITi_Copy32(void* dst, void* src, u32 size) -{ - stmfd sp!, {r3-r11} - - bics r3, r2, #0x0000001f - beq @next - add r3, r0, r3 -@loop: - ldmia r1!, {r4-r11} - stmia r0!, {r4-r11} - cmp r3, r0 - bgt @loop -@next: - tst r2, #0x00000010 - ldmneia r1!, {r4-r7} - stmneia r0!, {r4-r7} - tst r2, #0x00000008 - ldmneia r1!, {r4-r5} - stmneia r0!, {r4-r5} - tst r2, #0x00000004 - ldmneia r1!, {r4} - stmneia r0!, {r4} - - ldmfd sp!, {r3-r11} - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_Fill32 - Description: 32 bit PʂŃobt@ewf[^Ŗ߂BX^bN 36 - oCg邪AWX^ r3 - r12 ͔j󂵂ȂB - Arguments: r0 - obt@ւ̃|C^ ( 4 oCgAC )B - r1 - obt@𖄂߂e 32 bit lŎwB - r2 - obt@𖄂߂钷oCgPʂŎw ( 4 ̔{ )B - Returns: r0 - ̃obt@ւ̃|C^ ( r0 + r2 )B - *---------------------------------------------------------------------------*/ -static asm void* -INITi_Fill32(void* dst, u32 value, u32 size) -{ - stmfd sp!, {r3-r11} - - mov r4, r1 - mov r5, r1 - mov r6, r1 - mov r7, r1 - mov r8, r1 - mov r9, r1 - mov r10, r1 - mov r11, r1 - bics r3, r2, #0x0000001f - beq @next - add r3, r0, r3 -@loop: - stmia r0!, {r4-r11} - cmp r3, r0 - bgt @loop -@next: - tst r2, #0x00000010 - stmneia r0!, {r4-r7} - tst r2, #0x00000008 - stmneia r0!, {r4-r5} - tst r2, #0x00000004 - stmneia r0!, {r4} - - ldmfd sp!, {r3-r11} - bx lr -} - -/*---------------------------------------------------------------------------* - Name: NitroSpStartUp - Description: Hook for user start up. - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL void -NitroSpStartUp(void) -{ -} - -#include diff --git a/build/tests/DisplaySystemInformation/ARM7_armadillo/src/main.c b/build/tests/DisplaySystemInformation/ARM7_armadillo/src/main.c deleted file mode 100644 index 219de8c5..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_armadillo/src/main.c +++ /dev/null @@ -1,632 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - components - armadillo.TWL - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "nvram_sp.h" - -#include "address.h" - - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -/* eXbhDx */ -#define THREAD_PRIO_SPI 2 -#define THREAD_PRIO_MCU 4 // b -#define THREAD_PRIO_SND 6 -#define THREAD_PRIO_NWM_EVENT 7 -#define THREAD_PRIO_NWM_SDIO 8 -#define THREAD_PRIO_FATFS 8 -#define THREAD_PRIO_NWM_COMMAND 9 -#define THREAD_PRIO_NWM_WPA 10 -#define THREAD_PRIO_AES 12 -#define THREAD_PRIO_SEA 12 -#define THREAD_PRIO_RTC 12 -#define THREAD_PRIO_SNDEX 14 -#define THREAD_PRIO_FS 15 -/* OS_THREAD_LAUNCHER_PRIORITY 16 */ - -/* ROM o^GÅgR[h */ -#define ROMHEADER_FOR_CHINA_BIT 0x80 -#define ROMHEADER_FOR_KOREA_BIT 0x40 - -/* gp DMA ԍ */ -#define DMA_NO_FATFS FATFS_DMA_4 // = 0 -#define DMA_NO_NWM NWMSP_DMA_7 - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void PrintDebugInfo(void); -static OSHeapHandle InitializeAllocateSystem(void); -static void InitializeFatfs(void); -static void InitializeNwm(OSHeapHandle hh); -static void DummyThread(void* arg); - -static void ReadUserInfo(void); -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -static BOOL IsValidConfigEx(void); -static u16 GetRomValidLanguage(void); -static s32 CheckCorrectNCDEx(NVRAMConfigEx* ncdsp); -#else -static s32 CheckCorrectNCD(NVRAMConfig* ncdsp); -#endif -static void VBlankIntr(void); - -/*---------------------------------------------------------------------------* - Name: TwlSpMain - Description: NxN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -void -TwlSpMain(void) -{ - OSHeapHandle heapHandle; - - // OSARM9ƓOSCFG̏Lɏo - // WX^Rs[ - MI_CpuMove16( (void*)REG_ROM_ADDR, DISPINFO_SHARED_SCFG_REG_ADDR, DISPINFO_SHARED_SCFG_REG_SIZE ); - // WRAMɑޔĂ镪Rs[ - MI_CpuMove16( (void*)HWi_WSYS04_ADDR, DISPINFO_SHARED_SCFG_WRAM_ADDR, DISPINFO_SHARED_SCFG_WRAM_SIZE ); - - /* OS */ - OS_Init(); - PrintDebugInfo(); - - /* NVRAM 烆[U[ǂݏo */ - ReadUserInfo(); - - /* q[v̈ݒ */ - heapHandle = InitializeAllocateSystem(); - - /* {^̓T[` */ - (void)PAD_InitXYButton(); - - /* ݋ */ - (void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - /* eCu */ - AES_Init(THREAD_PRIO_AES); // AES - SEA_Init(THREAD_PRIO_SEA); // SEA -// FS_Init(FS_DMA_NOT_USE); // FS for CARD -// FS_CreateReadServerThread(THREAD_PRIO_FS); // FS for CARD - InitializeFatfs(); // FAT-FS - InitializeNwm(heapHandle); // TWL - MCU_InitIrq(THREAD_PRIO_MCU); // }CR - CDC_InitLib(); // CODEC -// if (OSi_IsCodecTwlMode() == TRUE) -// { -// CAMERA_Init(); // J -// } - SND_Init(THREAD_PRIO_SND); // TEh - SNDEX_Init(THREAD_PRIO_SNDEX); // TEhg - RTC_Init(THREAD_PRIO_RTC); // RTC - WVR_Begin(heapHandle); // NITRO - SPI_Init(THREAD_PRIO_SPI); - - while (TRUE) - { - OS_Halt(); - - /* \tgEFAZbgv͊ĎȂ */ - /* AGB J[gbW̑}`FbN͍sȂ */ - /* DS J[h̑}`FbN͍sȂ */ - } -} - -/*---------------------------------------------------------------------------* - Name: PrintDebugInfo - Description: ARM7 R|[lg̏fobOo͂B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -PrintDebugInfo(void) -{ - OS_TPrintf("ARM7: This component is running on TWL.\n"); - OS_TPrintf("ARM7: This component is \"armadillo.TWL\".\n"); -} - -/*---------------------------------------------------------------------------* - Name: InitializeAllocateSystem - Description: ăVXeB - Arguments: None. - Returns: OSHeapHandle - WRAM A[iɊmۂꂽq[ṽnhԂB - *---------------------------------------------------------------------------*/ -static OSHeapHandle -InitializeAllocateSystem(void) -{ - OSHeapHandle hh; - void* subLo = (void*)OS_GetWramSubArenaLo(); - void* subHi = (void*)OS_GetWramSubArenaHi(); - void* privLo = (void*)OS_GetWramSubPrivArenaLo(); - void* privHi = (void*)OS_GetWramSubPrivArenaHi(); - - if (((u32)privLo == HW_PRV_WRAM) && ((u32)subHi == HW_PRV_WRAM) && ((u32)subLo < HW_PRV_WRAM)) - { - /* SUB A[i SUBPRIV A[iɋz */ - OS_SetWramSubArenaHi(subLo); - OS_SetWramSubPrivArenaLo(subLo); - privLo = subLo; - } - - /* A[i 0 NA */ - MI_CpuClear8(privLo, (u32)privHi - (u32)privLo); - - /* q[v쐬 */ - privLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, privLo, privHi, 1); - hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, privLo, privHi); - if (hh < 0) - { - OS_Panic("ARM7: Failed to create heap.\n"); - } - - /* Jgq[vɐݒ */ - (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - /* q[vTCY̊mF */ - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - if (heapSize <= 0) - { - OS_Panic("ARM7: Failed to create heap.\n"); - } - OS_TPrintf("ARM7: heap size [%d]\n", heapSize); - } - - return hh; -} - -/*---------------------------------------------------------------------------* - Name: InitializeFatfs - Description: FATFSCuBFATFS֐ŃXbhx~ - ׁAx~삷_~[̃Xbh𗧂ĂB - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeFatfs(void) -{ - OSThread thread; - u32 stack[18]; - - /* _~[Xbh쐬 */ - OS_CreateThread(&thread, DummyThread, NULL, - (void*)((u32)stack + (sizeof(u32) * 18)), sizeof(u32) * 18, OS_THREAD_PRIORITY_MAX); - OS_WakeupThreadDirect(&thread); - - /* FATFS */ - /* [TODO] DMA NOT_USE ̂܂܂ŗǂH */ - if(!FATFS_Init(DMA_NO_FATFS, FATFS_DMA_NOT_USE, THREAD_PRIO_FATFS)) - { - /* do nothing */ - } - - /* _~[Xbhj */ - OS_KillThread(&thread, NULL); -} - -/*---------------------------------------------------------------------------* - Name: InitializeNwm - Description: NWMCuB - Arguments: hh - p”\ȃq[ṽnhwB - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeNwm(OSHeapHandle hh) -{ - NwmspInit nwmInit; - - /* [TODO] mۂĂq[v̈悪VꎮKvƂĂ郁ʈȏォ̃`FbNKv */ - - nwmInit.cmdPrio = THREAD_PRIO_NWM_COMMAND; - nwmInit.evtPrio = THREAD_PRIO_NWM_EVENT; - nwmInit.sdioPrio = THREAD_PRIO_NWM_SDIO; - - nwmInit.dmaNo = DMA_NO_NWM; - nwmInit.drvHeap.id = OS_ARENA_WRAM_SUBPRIV; - nwmInit.drvHeap.handle = hh; - - nwmInit.wpaPrio = THREAD_PRIO_NWM_WPA; - nwmInit.wpaHeap.id = OS_ARENA_WRAM_SUBPRIV; - nwmInit.wpaHeap.handle = hh; - - NWMSP_Init(&nwmInit); -} - -/*---------------------------------------------------------------------------* - Name: DummyThread - Description: FATFSCuACDCCuۂɗĂ_~[ - XbhB - Arguments: arg - gpȂB - Returns: None. - *---------------------------------------------------------------------------*/ -static void -DummyThread(void* arg) -{ -#pragma unused(arg) - while (TRUE) - { - } -} - -#ifdef WM_PRECALC_ALLOWEDCHANNEL -extern u16 WMSP_GetAllowedChannel(u16 bitField); -#endif -/*---------------------------------------------------------------------------* - Name: ReadUserInfo - - Description: NVRAM烆[U[ǂݏoAL̈ɓWJB - ~[OĂobt@Ăꍇ́A - L̈̃[U[i[ꏊNAB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void ReadUserInfo(void) -{ - s32 offset; -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - NVRAMConfigEx temp[2]; -#else - NVRAMConfig temp[2]; -#endif - s32 check; - u8 *p = OS_GetSystemWork()->nvramUserInfo; - - // ItZbgǂݏo -#ifdef NVRAM_CONFIG_CONST_ADDRESS - offset = NVRAM_CONFIG_DATA_ADDRESS_DUMMY; -#else - NVRAM_ReadDataBytes(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_CONFIG_DATA_OFFSET_SIZE, - (u8 *)(&offset)); - offset <<= NVRAM_CONFIG_DATA_OFFSET_SHIFT; -#endif - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfigEx), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfigEx), - (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCDEx(temp); -#else - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfig), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfig), (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCD(temp); -#endif - - if (check >= 3) - { - // AvP[V̋N} - MI_CpuFill32(p, 0xffffffff, sizeof(NVRAMConfig)); - } - else if (check) - { - s32 i; - - // jbNl[␳ - if (temp[check - 1].ncd.owner.nickname.length < NVRAM_CONFIG_NICKNAME_LENGTH) - { - for (i = NVRAM_CONFIG_NICKNAME_LENGTH; - i > temp[check - 1].ncd.owner.nickname.length; i--) - { - temp[check - 1].ncd.owner.nickname.str[i - 1] = 0x0000; - } - } - // Rg␳ - if (temp[check - 1].ncd.owner.comment.length < NVRAM_CONFIG_COMMENT_LENGTH) - { - for (i = NVRAM_CONFIG_COMMENT_LENGTH; i > temp[check - 1].ncd.owner.comment.length; - i--) - { - temp[check - 1].ncd.owner.comment.str[i - 1] = 0x0000; - } - } - // L̈ɃXgA - MI_CpuCopy32(&temp[check - 1], p, sizeof(NVRAMConfig)); - } - else - { - // L̈NA - MI_CpuClear32(p, sizeof(NVRAMConfig)); - } - - // MACAhX[U[̌ɓWJ - { - u8 wMac[6]; - - // NVRAMMACAhXǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_MACADDRESS_ADDRESS, 6, wMac); - // WJAhXvZ - p = (u8 *)((u32)p + ((sizeof(NVRAMConfig) + 3) & ~0x00000003)); - // L̈ɓWJ - MI_CpuCopy8(wMac, p, 6); - } - -#ifdef WM_PRECALC_ALLOWEDCHANNEL - // gp”\`lgpƒ`lvZ - { - u16 enableChannel; - u16 allowedChannel; - - // gp”\`lǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_ENABLECHANNEL_ADDRESS, 2, (u8 *)(&enableChannel)); - // gpƒ`lvZ - allowedChannel = WMSP_GetAllowedChannel((u16)(enableChannel >> 1)); - // WJAhXvZ(MACAhX̌2oCg) - p = (u8 *)((u32)p + 6); - // L̈ɓWJ - *((u16 *)p) = allowedChannel; - } -#endif -} - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -/*---------------------------------------------------------------------------* - Name: IsValidConfigEx - - Description: [U[񂪊gRtBOɑΉĂ邩ǂ𒲍B - - Arguments: None. - - Returns: BOOL - g[U[񂪗LȏꍇTRUEԂB - łꍇFALSEԂB - *---------------------------------------------------------------------------*/ -static BOOL IsValidConfigEx(void) -{ - u8 ipl2_type; - - NVRAM_ReadDataBytes(NVRAM_CONFIG_IPL2_TYPE_ADDRESS, NVRAM_CONFIG_IPL2_TYPE_SIZE, &ipl2_type); - if (ipl2_type == NVRAM_CONFIG_IPL2_TYPE_NORMAL) - { - return FALSE; - } - if (ipl2_type & NVRAM_CONFIG_IPL2_TYPE_EX_MASK) - { - return TRUE; - } - return FALSE; -} - -/*---------------------------------------------------------------------------* - Name: GetRomValidLanguage - - Description: ROMo^GȀ񂩂AgR[h̑Ήrbg}bv - Ɋւ𒊏oB - - Arguments: None. - - Returns: u16 - DSJ[hA }`u[goCiΉĂ - R[h̃rbg}bvԂBDSJ[hg - R[hɑΉĂȂꍇ 0 ԂB - *---------------------------------------------------------------------------*/ -static u16 GetRomValidLanguage(void) -{ - u16 ret = 0x0000; - u8 langBit = OS_GetSystemWork()->rom_header[0x1d]; - - // ROMo^GÅgR[hmF - if (langBit == ROMHEADER_FOR_CHINA_BIT) - { - // for CHINA - ret |= (0x0001 << NVRAM_CONFIG_LANG_CHINESE); - } - else if (langBit == ROMHEADER_FOR_KOREA_BIT) - { - // for KOREA - ret |= (0x0001 << NVRAM_CONFIG_LANG_HANGUL); - } - return ret; -} - -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCDEx - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - 3: Av̋N}ׂB - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCDEx(NVRAMConfigEx * ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // IPLgR[hɑΉĂ邩 - if (IsValidConfigEx()) - { - // IPLgR[hɑΉĂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - calc_crc = - SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd_ex), sizeof(NVRAMConfigDataEx)); - if ((ncdsp[i].crc16_ex == calc_crc) - && ((0x0001 << ncdsp[i].ncd_ex.language) & - (ncdsp[i].ncd_ex.valid_language_bitmap))) - { - // gf[^p CRC Aݒ茾R[hΉR[hɊ܂܂ꍇɐƔf - if (rom_valid_language & ncdsp[i].ncd_ex.valid_language_bitmap) - { - // gR[hŒʏ팾R[h㏑ - ncdsp[i].ncd.option.language = ncdsp[i].ncd_ex.language; - } - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE) & ~ncdsp[i]. - ncd_ex.valid_language_bitmap) - { - // ROM o^GA""gR[hݒ肳Ă邪A - // IPL2̑ΉR[h""gR[h܂܂Ȃꍇ͋N} - return 3; - } - crc_flag |= (1 << i); - } - } - } - } - else - { - // IPLgR[hɑΉĂȂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE)) - { - // ROM o^GA""gR[hݒ肳Ăꍇ͋N} - return 3; - } - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - crc_flag |= (1 << i); - } - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} - -#else -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCD - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCD(NVRAMConfig *ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // e~[f[^CRC & saveCount`FbN - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRCAsaveCountl0x80̃f[^𐳓ƔfB - crc_flag |= (1 << i); - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} -#endif - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - Description: V uN荞݃xN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -extern BOOL PMi_Initialized; -extern void PM_SelfBlinkProc(void); - -static void -VBlankIntr(void) -{ - if (PMi_Initialized) - { - PM_SelfBlinkProc(); - } -} diff --git a/build/tests/DisplaySystemInformation/ARM7_armadillo/src/overwriteRtc.c b/build/tests/DisplaySystemInformation/ARM7_armadillo/src/overwriteRtc.c deleted file mode 100644 index af04b9d0..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_armadillo/src/overwriteRtc.c +++ /dev/null @@ -1,67 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - components - armadillo.TWL - File: overwriteRtc.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include - -extern BOOL RTC_IsAvailablePxiCommand(u16 command); - -/*---------------------------------------------------------------------------* - Name: RTC_IsAvailablePxiCommand - - Description: PXI R}hL RTC R}hł邩ǂB - - Arguments: command - R}hB - - Returns: BOOL - LȃR}hłꍇ TRUE ԂBł - ȃR}hłꍇɂ FALSE ԂB - *---------------------------------------------------------------------------*/ -BOOL -RTC_IsAvailablePxiCommand(u16 command) -{ - switch (command) - { - case RTC_PXI_COMMAND_RESET: - case RTC_PXI_COMMAND_SET_HOUR_FORMAT: - case RTC_PXI_COMMAND_READ_DATETIME: - case RTC_PXI_COMMAND_READ_DATE: - case RTC_PXI_COMMAND_READ_TIME: - case RTC_PXI_COMMAND_READ_PULSE: - case RTC_PXI_COMMAND_READ_ALARM1: - case RTC_PXI_COMMAND_READ_ALARM2: - case RTC_PXI_COMMAND_READ_STATUS1: - case RTC_PXI_COMMAND_READ_STATUS2: - case RTC_PXI_COMMAND_READ_ADJUST: - case RTC_PXI_COMMAND_READ_FREE: - case RTC_PXI_COMMAND_WRITE_DATETIME: - case RTC_PXI_COMMAND_WRITE_DATE: - case RTC_PXI_COMMAND_WRITE_TIME: - case RTC_PXI_COMMAND_WRITE_PULSE: - case RTC_PXI_COMMAND_WRITE_ALARM1: - case RTC_PXI_COMMAND_WRITE_ALARM2: - case RTC_PXI_COMMAND_WRITE_STATUS1: - case RTC_PXI_COMMAND_WRITE_STATUS2: - case RTC_PXI_COMMAND_WRITE_ADJUST: - case RTC_PXI_COMMAND_WRITE_FREE: - return TRUE; - } - return FALSE; -} - diff --git a/build/tests/DisplaySystemInformation/ARM7_racoon/Makefile b/build/tests/DisplaySystemInformation/ARM7_racoon/Makefile deleted file mode 100644 index bc239513..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_racoon/Makefile +++ /dev/null @@ -1,82 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - racoon.TWL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL -override TWL_PROC = ARM7 -override TWL_ARCHGEN = LIMITED -TWL_NO_STD_PCHDR = True -TARGET_CODEGEN ?= ALL - -#---------------------------------------------------------------------------- - -SRCDIR += ./src - -SRCS = main.c initScfg.c - -TARGET_NAME = racoon - -TARGET_NEF = $(TARGET_NAME).tef -LCFILE_SPEC = $(TARGET_NAME).lsf -LCFILE_TEMPLATE = $(TARGET_NAME).lcf.template -LDRES_TEMPLATE = $(TARGET_NAME).response.template - -CRT0_O = crt0.LTD.TWL.o - -# X^bNsh~ׁ̈ACCWJɃRpC -CCFLAGS_OPT = -O4 -inline off - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -ifeq ($(TWL_PLATFORM),BB) -MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037e0000' -else -MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037c0000' -endif - -MAKELCF_FLAGS += -DISDBG_LIBS_TWL='$(if $(ISDBG_LIBS_TWL),$(ISDBG_LIBS_TWL),libstubsistd_sp$(TWL_LIBSUFFIX).a)' \ - -DISDBG_LIBS_NITRO='libstubsisd_sp$(TWL_LIBSUFFIX).a' - - -#-------------------------------- -# install target -#-------------------------------- -LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include\ - $(DISP_INFO)/common/include -#LLIBRARIES += libwl_sp.TWL.LTD.a libsdio_hcd_twl$(TWL_LIBSUFFIX).a libsdio_busdriver$(TWL_LIBSUFFIX).a libsdio_lib$(TWL_LIBSUFFIX).a libARM7athdrv$(TWL_LIBSUFFIX).a -LLIBRARIES += libwl_sp.TWL.LTD.a -#LLIBRARIES += libwl_sp$(TWL_LIBSUFFIX).a \ -# libcdc_sp$(TWL_LIBSUFFIX).a \ -# libtpex_sp$(TWL_LIBSUFFIX).a \ -# libmicex_sp$(TWL_LIBSUFFIX).a \ -# libsdio_hcd_twl$(TWL_LIBSUFFIX).a \ -# libsdio_busdriver$(TWL_LIBSUFFIX).a \ -# libsdio_lib$(TWL_LIBSUFFIX).a \ -# librompatch_sp$(TWL_LIBSUFFIX).a \ -# libARM7athdrv$(TWL_LIBSUFFIX).a - -LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES) - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lcf.template b/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lcf.template deleted file mode 100644 index 90b672ea..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lcf.template +++ /dev/null @@ -1,935 +0,0 @@ -#--------------------------------------------------------------------------- -# Project: TwlSDK - components - racoon.TWL -# File: racoon.lcf.template -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#--------------------------------------------------------------------------- -MEMORY -{ - (RWX) : ORIGIN = , LENGTH = 0x0 > - - - (RWX) : ORIGIN = , LENGTH = 0x0 >> - - binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> - binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> - - F (RW) : ORIGIN = 0, LENGTH = 0x0 > - F (RW) : ORIGIN = 0, LENGTH = 0x0 > - - (RWXO): ORIGIN = , LENGTH = 0x0 > - - - check.WORKRAM (RWX) : ORIGIN = 0x037c0000, LENGTH = 0x50000 > workram.check - - binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > - - (RWX) : ORIGIN = , LENGTH = 0x0 >> - - binary.LTDAUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> - - L (RW) : ORIGIN = 0, LENGTH = 0x0 > - L (RW) : ORIGIN = 0, LENGTH = 0x0 > - - (RWXO): ORIGIN = , LENGTH = 0x0 > - - - check.LTDMAIN (RWX) : ORIGIN = 0x02f88000, LENGTH = 0x74000 > ltdmain.check - check.RSVWRAM (RWX) : ORIGIN = 0x03040000, LENGTH = 0x08000 > rsvwram.check -} - -KEEP_SECTION -{ - .sinit -} - -SECTIONS -{ - ############################ STATIC ################################# - .: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # TEXT BLOCK: READ ONLY - # - SDK_STATIC_START =.; - SDK_STATIC_TEXT_START =.; - #:::::::::: text/rodata - OBJECT(_start,*) - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_STATIC_SINIT_START =.; - #:::::::::: ctor - - - - - - - - - - - - - WRITEW 0; - #:::::::::: ctor - SDK_STATIC_SINIT_END =.; - #:::::::::: text/rodata - SDK_STATIC_TEXT_END =.; - - # - # DATA BLOCK: READ WRITE - # - . = ALIGN(4); - SDK_STATIC_DATA_START =.; - #:::::::::: data - - - - - - - - - - - - - #:::::::::: data - SDK_STATIC_DATA_END =.; - . = ALIGN(4); - SDK_STATIC_END =.; - - SDK_STATIC_TEXT_SIZE = SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START; - SDK_STATIC_DATA_SIZE = SDK_STATIC_DATA_END - SDK_STATIC_DATA_START; - SDK_STATIC_SIZE = SDK_STATIC_END - SDK_STATIC_START; - __sinit__ = SDK_STATIC_SINIT_START; # for static initializer - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_STATIC_BSS_START =.; - #:::::::::: bss - - - - - - - - - - - - - #:::::::::: bss - . = ALIGN(4); - SDK_STATIC_BSS_END = .; - - SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START; - - } >> - - - ############################ AUTOLOADS ############################## - SDK_AUTOLOAD.WRAM.START = 0x037c0000; - SDK_AUTOLOAD.WRAM.END = SDK_AUTOLOAD.WRAM.START; - SDK_AUTOLOAD.WRAM.BSS_END = SDK_AUTOLOAD.WRAM.START; - SDK_AUTOLOAD.WRAM.SIZE = 0; - SDK_AUTOLOAD.WRAM.BSS_SIZE = 0; - SDK_AUTOLOAD_START = SDK_STATIC_END; - SDK_AUTOLOAD_SIZE = 0; - SDK_AUTOLOAD_NUMBER = ; - - - .: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # TEXT BLOCK: READ ONLY - # - SDK_AUTOLOAD__ID =; - SDK_AUTOLOAD..ID =; - SDK_AUTOLOAD..START =.; - SDK_AUTOLOAD..TEXT_START =.; - #:::::::::: text/rodata - - - - - - - - - . = ALIGN(4); - SDK_STATIC_ETABLE_START =.; - __exception_table_start__ =.; - EXCEPTION - __exception_table_end__ =.; - SDK_STATIC_ETABLE_END =.; - - - - - - - - - - - - - - . = ALIGN(4); - SDK_AUTOLOAD..SINIT_START =.; - #:::::::::: ctor - - - - - - - - - - - - - WRITEW 0; - #:::::::::: ctor - SDK_AUTOLOAD..SINIT_END =.; - #:::::::::: text/rodata - SDK_AUTOLOAD..TEXT_END =.; - - # - # DATA BLOCK: READ WRITE BLOCK - # - . = ALIGN(4); - SDK_AUTOLOAD..DATA_START =.; - #:::::::::: data - - - - - - - - - - - - - - - - - - - - - - - - - #:::::::::: data - SDK_AUTOLOAD..DATA_END =.; - . = ALIGN(4); - SDK_AUTOLOAD..END =.; - - SDK_AUTOLOAD..TEXT_SIZE = SDK_AUTOLOAD..TEXT_END - SDK_AUTOLOAD..TEXT_START; - SDK_AUTOLOAD..DATA_SIZE = SDK_AUTOLOAD..DATA_END - SDK_AUTOLOAD..DATA_START; - SDK_AUTOLOAD..SIZE = SDK_AUTOLOAD..END - SDK_AUTOLOAD..START; - SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD..SIZE; - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_AUTOLOAD..BSS_START = .; - #:::::::::: bss - - - - - - - - - - - - - - - - - - - - - - - - - #:::::::::: bss - . = ALIGN(4); - SDK_AUTOLOAD..BSS_END = .; - - SDK_AUTOLOAD..BSS_SIZE = SDK_AUTOLOAD..BSS_END - SDK_AUTOLOAD..BSS_START; - - } >> - - - - SDK_AUTOLOAD_WRAM_START = SDK_AUTOLOAD.WRAM.START; - SDK_AUTOLOAD_WRAM_END = SDK_AUTOLOAD.WRAM.END; - SDK_MOUNT_INFO_TABLE = SDK_AUTOLOAD.WRAM.BSS_END; - SDK_AUTOLOAD_WRAM_BSS_END = SDK_MOUNT_INFO_TABLE + 0x400; - SDK_AUTOLOAD_WRAM_SIZE = SDK_AUTOLOAD.WRAM.SIZE; - SDK_AUTOLOAD_WRAM_BSS_SIZE = SDK_AUTOLOAD.WRAM.BSS_SIZE; - - ############################ AUTOLOAD_INFO ########################## - .binary.AUTOLOAD_INFO: - { - - WRITEW ADDR(.); - WRITEW SDK_AUTOLOAD..SIZE; - WRITEW SDK_AUTOLOAD..SINIT_START; - WRITEW SDK_AUTOLOAD..BSS_SIZE; - - - } > binary.AUTOLOAD_INFO - - SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE; - SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); - SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); - - ############################ STATIC_FOOTER ########################## - .binary.STATIC_FOOTER: - { - WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE - WRITEW _start_ModuleParams - ADDR(.); - WRITEW 0; # NO DIGEST - WRITEW _start_LtdModuleParams - ADDR(.); - } > binary.STATIC_FOOTER - - ############################ OVERLAYS ############################### - SDK_OVERLAY_NUMBER = ; - - - .: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # TEXT BLOCK: READ ONLY - # - SDK_OVERLAY__ID =; ### SEGMENT OVERLAY ID - SDK_OVERLAY..ID =; - SDK_OVERLAY..START =.; - SDK_OVERLAY..TEXT_START =.; - #:::::::::: text/rodata - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_OVERLAY..SINIT_START =.; - #:::::::::: ctor - - - - - - - - - - - - - WRITEW 0; - #:::::::::: ctor - SDK_OVERLAY..SINIT_END =.; - #:::::::::: text/rodata - SDK_OVERLAY..TEXT_END =.; - - # - # DATA BLOCK: READ WRITE - # - . = ALIGN(4); - SDK_OVERLAY..DATA_START =.; - #:::::::::: data - - - - - - - - - - - - - #:::::::::: data - SDK_OVERLAY..DATA_END =.; - . = ALIGN(4); - SDK_OVERLAY..END =.; - - SDK_OVERLAY..TEXT_SIZE = SDK_OVERLAY..TEXT_END - SDK_OVERLAY..TEXT_START; - SDK_OVERLAY..DATA_SIZE = SDK_OVERLAY..DATA_END - SDK_OVERLAY..DATA_START; - SDK_OVERLAY..SIZE = SDK_OVERLAY..END - SDK_OVERLAY..START; - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_OVERLAY..BSS_START = .; - #:::::::::: bss - - - - - - - - - - - - - #:::::::::: bss - . = ALIGN(4); - SDK_OVERLAY..BSS_END = .; - - SDK_OVERLAY..BSS_SIZE = SDK_OVERLAY..BSS_END - SDK_OVERLAY..BSS_START; - - } >> - - - - ############################ OVERLAYDEFS ############################ - .F: - { - ### module information - WRITEW ADDR(.); # load address - WRITEW _start; # entry address - WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # size of module - WRITEW _start_AutoloadDoneCallback; # callback autoload done - - ### overlay filename - - WRITES (""); # Overlay - - - } > F - - ############################ OVERLAYTABLE ########################### - .F: - { - - WRITEW ; # overlay ID - WRITEW ADDR(.); # load address - WRITEW SDK_OVERLAY..SIZE; # size of module - WRITEW SDK_OVERLAY..BSS_SIZE; # size of bss - WRITEW SDK_OVERLAY..SINIT_START; # start address of static init - WRITEW SDK_OVERLAY..SINIT_END; # end address of static init - WRITEW ; # ROM file ID - WRITEW 0; # Reserved - - - } > F - - ############################ OTHERS ################################# - SDK_WRAM_ARENA_LO = SDK_AUTOLOAD_WRAM_BSS_END; - - SDK_IRQ_STACKSIZE = ; # allocated in WRAM - SDK_SYS_STACKSIZE = ; # allocated in WRAM - SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1; - - .check.WORKRAM: - { - . = . + SDK_AUTOLOAD_WRAM_BSS_END - SDK_AUTOLOAD.WRAM.START + 0x080 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN; - - } > check.WORKRAM - - ########################### LTDAUTOLOADS ############################ - SDK_LTDAUTOLOAD.LTDMAIN.START = 0x02f88000; - SDK_LTDAUTOLOAD.LTDMAIN.END = SDK_LTDAUTOLOAD.LTDMAIN.START; - SDK_LTDAUTOLOAD.LTDMAIN.BSS_END = SDK_LTDAUTOLOAD.LTDMAIN.START; - SDK_LTDAUTOLOAD.LTDMAIN.SIZE = 0; - SDK_LTDAUTOLOAD.LTDMAIN.BSS_SIZE = 0; - SDK_LTDAUTOLOAD_TOP_START = 0x02e80000; - SDK_LTDAUTOLOAD_TOP_SIZE = 4; # STATIC ̈悪 4 bytes ̃_~[oCit@C̐擪ɓ # - SDK_LTDAUTOLOAD_START = SDK_LTDAUTOLOAD_TOP_START + SDK_LTDAUTOLOAD_TOP_SIZE; - SDK_LTDAUTOLOAD_SIZE = 0; - SDK_LTDAUTOLOAD_NUMBER = ; - - .binary.LTDAUTOLOAD_TOP: - { - WRITEW 0; - - } > binary.LTDAUTOLOAD_TOP - - - .: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - SDK_LTDAUTOLOAD__ID =; - SDK_LTDAUTOLOAD..ID =; - SDK_LTDAUTOLOAD..START =.; - # - # TEXT BLOCK: READ ONLY - # - SDK_LTDAUTOLOAD..TEXT_START =.; - #:::::::::: text/rodata - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_LTDAUTOLOAD..SINIT_START =.; - #:::::::::: ctor - - - - - - - - - - - - - WRITEW 0; - #:::::::::: ctor - SDK_LTDAUTOLOAD..SINIT_END =.; - #:::::::::: text/rodata - SDK_LTDAUTOLOAD..TEXT_END =.; - - # - # DATA BLOCK: READ WRITE BLOCK - # - . = ALIGN(4); - SDK_LTDAUTOLOAD..DATA_START =.; - #:::::::::: data - - - - - - - - - - - - - - - - - - - - - - - - - #:::::::::: data - SDK_LTDAUTOLOAD..DATA_END =.; - . = ALIGN(4); - SDK_LTDAUTOLOAD..END =.; - - SDK_LTDAUTOLOAD..TEXT_SIZE = SDK_LTDAUTOLOAD..TEXT_END - SDK_LTDAUTOLOAD..TEXT_START; - SDK_LTDAUTOLOAD..DATA_SIZE = SDK_LTDAUTOLOAD..DATA_END - SDK_LTDAUTOLOAD..DATA_START; - SDK_LTDAUTOLOAD..SIZE = SDK_LTDAUTOLOAD..END - SDK_LTDAUTOLOAD..START; - SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD..SIZE; - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_LTDAUTOLOAD..BSS_START =.; - #:::::::::: bss - - - - - - - - - - - - - - - - - - - - - - - - - #:::::::::: bss - . = ALIGN(4); - SDK_LTDAUTOLOAD..BSS_END =.; - - SDK_LTDAUTOLOAD..BSS_SIZE = SDK_LTDAUTOLOAD..BSS_END - SDK_LTDAUTOLOAD..BSS_START; - - } >> - - - - SDK_LTDAUTOLOAD_LTDMAIN_START = SDK_LTDAUTOLOAD.LTDMAIN.START; - SDK_LTDAUTOLOAD_LTDMAIN_END = SDK_LTDAUTOLOAD.LTDMAIN.END; - SDK_LTDAUTOLOAD_LTDMAIN_BSS_END = SDK_LTDAUTOLOAD.LTDMAIN.BSS_END; - SDK_LTDAUTOLOAD_LTDMAIN_SIZE = SDK_LTDAUTOLOAD.LTDMAIN.SIZE; - SDK_LTDAUTOLOAD_LTDMAIN_BSS_SIZE = SDK_LTDAUTOLOAD.LTDMAIN.BSS_SIZE; - - ######################### LTDAUTOLOAD_INFO ########################## - .binary.LTDAUTOLOAD_INFO: - { - - WRITEW ADDR(.); - WRITEW SDK_LTDAUTOLOAD..SIZE; - WRITEW SDK_LTDAUTOLOAD..SINIT_START; - WRITEW SDK_LTDAUTOLOAD..BSS_SIZE; - - - } > binary.LTDAUTOLOAD_INFO - - SDK_LTDAUTOLOAD_LIST = SDK_LTDAUTOLOAD_START + SDK_LTDAUTOLOAD_SIZE; - SDK_LTDAUTOLOAD_LIST_END = SDK_LTDAUTOLOAD_LIST + SIZEOF(.binary.LTDAUTOLOAD_INFO); - SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SIZEOF(.binary.LTDAUTOLOAD_INFO); - - ########################### LTDOVERLAYS ############################# - SDK_LTDOVERLAY_NUMBER = ; - - - .: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - SDK_LTDOVERLAY__ID =; - SDK_LTDOVERLAY..ID =; - SDK_LTDOVERLAY..START =.; - # - # TEXT BLOCK: READ ONLY - # - SDK_LTDOVERLAY..TEXT_START =.; - #:::::::::: text/rodata - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_LTDOVERLAY..SINIT_START =.; - #:::::::::: ctor - - - - - - - - - - - - - WRITEW 0; - #:::::::::: ctor - SDK_LTDOVERLAY..SINIT_END =.; - #:::::::::: text/rodata - SDK_LTDOVERLAY..TEXT_END =.; - - # - # DATA BLOCK: READ WRITE - # - . = ALIGN(4); - SDK_LTDOVERLAY..DATA_START =.; - #:::::::::: data - - - - - - - - - - - - - #:::::::::: data - SDK_LTDOVERLAY..DATA_END =.; - . = ALIGN(4); - SDK_LTDOVERLAY..END =.; - - SDK_LTDOVERLAY..TEXT_SIZE = SDK_LTDOVERLAY..TEXT_END - SDK_LTDOVERLAY..TEXT_START; - SDK_LTDOVERLAY..DATA_SIZE = SDK_LTDOVERLAY..DATA_END - SDK_LTDOVERLAY..DATA_START; - SDK_LTDOVERLAY..SIZE = SDK_LTDOVERLAY..END - SDK_LTDOVERLAY..START; - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_LTDOVERLAY..BSS_START =.; - #:::::::::: bss - - - - - - - - - - - - - #:::::::::: bss - . = ALIGN(4); - SDK_LTDOVERLAY..BSS_END =.; - - SDK_LTDOVERLAY..BSS_SIZE = SDK_LTDOVERLAY..BSS_END - SDK_LTDOVERLAY..BSS_START; - - } >> - - - - ########################## LTDOVERLAYDEFS ########################### - .L: - { - ### TWL limited extended static module information - WRITEW SDK_LTDAUTOLOAD_TOP_START; # load address - WRITEW SDK_MOUNT_INFO_TABLE; # address of the FS mount information table - WRITEW SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD_TOP_SIZE; # size of module - WRITEW 0; # padding - - ### TWL limited overlay filename - - WRITES (""); - - - } > L - - ######################### LTDOVERLAYTABLE ########################### - .L: - { - - WRITES # overlay ID - WRITEW ADDR(.); # load address - WRITEW SDK_LTDOVERLAY..SIZE; # size of module - WRITEW SDK_LTDOVERLAY..BSS_SIZE; # size of bss - WRITEW SDK_LTDOVERLAY..SINIT_START; # start address of static init - WRITEW SDK_LTDOVERLAY..SINIT_END; # end address of static init - WRITEW # ROM file ID - WRITEW 0; # Reserved - - - } > L - - ############################ OTHERS ################################# - SDK_SUBPRIV_ARENA_LO = SDK_LTDAUTOLOAD.LTDMAIN.BSS_END; - .check.LTDMAIN: - { - . = SDK_SUBPRIV_ARENA_LO; - - } > check.LTDMAIN - - .check.RSVWRAM: - { - . = SDK_LTDAUTOLOAD.RSVWRAM.BSS_END; - - } > check.RSVWRAM - -} diff --git a/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lsf b/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lsf deleted file mode 100644 index 4a239534..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lsf +++ /dev/null @@ -1,231 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - racoon.TWL -# File: racoon.lsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# Nitro LCF SPEC FILE -# -#-------- -Static $(TARGET_NAME) -{ - Address 0x02380000 - Library $(CRT0_O) - Object $(OBJDIR)/initScfg.o - StackSize 1024 1024 -} - -#-------- -Autoload WRAM -{ - Address $(ADDRESS_LTDWRAM) - - Library libsubpsyscall.a \ - libsyscall_sp.twl.a \ - $(CW_LIBS) \ - libos_sp$(LIBSUFFIX).a \ - libmi_sp$(LIBSUFFIX).a \ - libpad_sp$(LIBSUFFIX).a \ - libpxi_sp$(LIBSUFFIX).a \ - libstd_sp$(LIBSUFFIX).a \ - libexi_sp$(LIBSUFFIX).a \ - libsnd_sp$(LIBSUFFIX).a \ - libspi_sp$(LIBSUFFIX).a \ - libpm_sp$(LIBSUFFIX).a \ - libmath_sp$(LIBSUFFIX).a \ - libscfg_sp$(LIBSUFFIX).a \ - libtp_sp$(LIBSUFFIX).a \ - libmic_sp$(LIBSUFFIX).a \ - libfs_sp$(LIBSUFFIX).a \ - libcard_sp$(LIBSUFFIX).a \ - libi2c_sp$(LIBSUFFIX).a \ - libcamera_sp$(LIBSUFFIX).a \ - libcdc_sp$(LIBSUFFIX).a \ - libsndex_sp$(LIBSUFFIX).a \ - libtpex_sp$(LIBSUFFIX).a \ - libmicex_sp$(LIBSUFFIX).a \ - libmcu_sp$(LIBSUFFIX).a \ - - Library libsdio_sp$(LIBSUFFIX).a - - Library libnvram_sp$(LIBSUFFIX).a - Library librtc_sp$(LIBSUFFIX).a - - - Object * (.etable) - Object * (.wram) - Object * (.ltdwram) - Object $(OBJDIR)/main.o - - # caches in fatfs library, that should be on WRAM. - # 2007/12/11 OBJECT() ɂ .bss V{̃N܂Ȃ̂ŁA - # ϐ`ӏ pragma .ltdwram ZNVɊ܂܂悤Ɏb΍􂵂܂B -# Object OBJECT( FATFSi___mem_drives_structures , libfatfs_sp$(LIBSUFFIX).a) (.bss) - - ##### - # Sub-routines in WL library , that should be on WRAM. - # in TaskMan.o - Object OBJECT( MainTaskRoutine , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AddTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DeleteTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( LowestIdleTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ExecuteMessage , libwl_sp$(LIBSUFFIX).a ) (.text) - # in BufMan.o - Object OBJECT( NewHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DeleteHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AllocateHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ReleaseHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( MoveHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AddHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( GetHeapBufNextAdrs , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WlCmdIf.o - Object OBJECT( RequestCmdTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( SendMessageToWmDirect , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WlNic.o - Object OBJECT( WStart , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WStop , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WSetStaState , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WlIntr.o - Object OBJECT( WlIntr , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrPreTbtt , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrTbtt , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrActEnd , libwl_sp$(LIBSUFFIX).a ) (.text) -# Object OBJECT( WlIntrAckCntOvf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrCntOvf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrTxErr , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrRxCntup , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrTxEnd , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrRxEnd , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrMpEnd , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrStartTx , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrStartRx , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( SetParentTbttTxq , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( MacBugTxMp , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AdjustRingPointer , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( CheckKeyTxEnd , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WlIntrTask.o - Object OBJECT( WlIntrTxBeaconTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrTxEndTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrRxEndTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrMpEndTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( SetParentTbttTxqTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( TakeoutRxFrame , libwl_sp$(LIBSUFFIX).a ) (.text) - # in TxCtrl.o - Object OBJECT( InitTxCtrl , libwl_sp$(LIBSUFFIX).a ) (.text) - # in RxCtrl.o - Object OBJECT( InitRxCtrl , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WaitLoop.o - Object OBJECT( WaitLoop_Rxpe , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WaitLoop_Waitus , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WaitLoop_ClrAid , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WaitLoop_BbpAccess , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WaitLoop_RfAccess , libwl_sp$(LIBSUFFIX).a ) (.text) - - -} - -#-------- -Ltdautoload RSVWRAM -{ - Address 0x03040000 - Object * (.rsvwram) - Library libathdrv_sp$(LIBSUFFIX).a (.bss) - Library libathdrv_sp$(LIBSUFFIX).a (.data) - - ##### - # Sub-routines in TWL WIRELESS Driver , that should be on WRAM. - Object OBJECT( HTCSendPktCompletionHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCIssueSend, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCTrySend, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCSendPkt, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCProcessCreditRpt, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevRecvPacket, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCProcessRecvHeader, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCRecvCompleteHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCRecvMessagePendingHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCAddReceivePkt, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AR6KFreeIOPacket, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AR6KAllocIOPacket, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevRWCompletionHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevGetEventAsyncHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevCheckPendingRecvMsgsAsync, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevDsrHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HIFReadWrite, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( hifRWCompletionHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( hifIRQHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HIFAckInterrupt, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ar6000_credit_distribute, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_alloc, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_alloc_rx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_put, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_push, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_pull, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_free, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_to_data, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_to_len, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_headroom, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( nin_drv_return_netbuf, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ath_queue_remove_from_head, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ath_queue_insert_tail, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ar6000_alloc_cookie, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( nin_driver_tx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( nin_tx_complete, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_dix_2_dot3, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_data_hdr_add, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_data_hdr_remove, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( nin_rx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ar6000_ibss_map_epid, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DL_ListInsertTail, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DL_ListRemove, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_control_rx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_cmd_send, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ar6000_control_tx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_implicit_create_pstream, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCAllocControlBuffer, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCFreeControlBuffer, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( BMILZData, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( bmiBufferSend, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( BMIWriteMemory, libathdrv_sp$(LIBSUFFIX).a ) (.text) - - - # FATFS core symbols - Object OBJECT(FATFSi_lfi2text, libfatfs_sp$(LIBSUFFIX).a) (.text) # 360 BYTEs - Object OBJECT(FATFSi_pc_findin, libfatfs_sp$(LIBSUFFIX).a) (.text) # 904 BYTEs - Object OBJECT(FATFSi_pc_patcmp_vfat, libfatfs_sp$(LIBSUFFIX).a) (.text) # 436 BYTEs - Object OBJECT(FATFSi_pc_ascii_mfile, libfatfs_sp$(LIBSUFFIX).a) (.text) # 160 BYTEs - Object OBJECT(FATFSi_map_ascii_to_unicode, libfatfs_sp$(LIBSUFFIX).a) (.text) # 48 BYTEs - Object OBJECT(SDCARD_Intr_Thread, libfatfs_sp$(LIBSUFFIX).a) (.text) # 520 BYTEs - Object OBJECT(FATFSi_unicode_cmp_to_ascii_char, libfatfs_sp$(LIBSUFFIX).a) (.text) # 40 BYTEs - Object OBJECT(FATFSi_pc_read_blk, libfatfs_sp$(LIBSUFFIX).a) (.text) # 352 BYTEs -} - -#-------- -Ltdautoload LTDMAIN -{ - Address 0x02f88000 - - Object * (.ltdmain) - Library libwm_sp$(LIBSUFFIX).a \ - libnwm_sp$(LIBSUFFIX).a \ - libwvr_sp$(LIBSUFFIX).a \ - libwl_sp$(LIBSUFFIX).a - - Library libwpa_sp$(LIBSUFFIX).a - Library libathdrv_sp$(LIBSUFFIX).a - - Library libfatfs_sp$(LIBSUFFIX).a \ - libaes_sp$(LIBSUFFIX).a - Library $(ISDBG_LIBS_TWL) - Library $(ISDBG_LIBS_NITRO) -} diff --git a/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.response.template b/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.response.template deleted file mode 100644 index 88b18081..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.response.template +++ /dev/null @@ -1,40 +0,0 @@ - - - - - -l - - - - - - - -l - - - - -og ,0 -ol - - - - - -l - - - - - - - - -l - - - - -og ,0 -ol - - - - - -l - - diff --git a/build/tests/DisplaySystemInformation/ARM7_racoon/src/initScfg.c b/build/tests/DisplaySystemInformation/ARM7_racoon/src/initScfg.c deleted file mode 100644 index 611fb1b1..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_racoon/src/initScfg.c +++ /dev/null @@ -1,108 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: viewSystemInfo.h - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev:$ - $Author:$ - *---------------------------------------------------------------------------*/ - -#include -#include - -extern void INIT_InitializeScfg(void); - -#include -/*---------------------------------------------------------------------------* - Name: INIT_InitializeScfg - - Description: [_[s SCFG ubNւ̐ݒ菈sׂ̊֐B - crt0 ̎V{㏑B - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -asm void -INIT_InitializeScfg(void) -{ - // SCFG enable? - ldr r2, =REG_EXT_ADDR - ldr r0, [r2] - tst r0, #REG_SCFG_EXT_CFG_MASK - beq @end - - /* NITRO ݊̑M@\𓮍 */ - ldr r1, =REG_WL_ADDR - ldrh r0, [r1] - orr r0, r0, #REG_SCFG_WL_OFFB_MASK - strh r0, [r1] - - /* VKTEhubNւ̃NbN */ - ldr r1, =REG_CLK_ADDR - ldrh r0, [r1] - orr r0, r0, #REG_SCFG_CLK_SNDMCLK_MASK - strh r0, [r1] - - /* ARM7 DMA ɂ͐V DMA H̗p */ - ldr r1, =REG_EXT_ADDR - ldr r0, [r1] - orr r0, r0, #REG_SCFG_EXT_DMAC_MASK - str r0, [r1] - - ldr r2, =HW_PRV_WRAM_SYSRV - //EXT(extentions) - ldr r3, =REG_EXT_ADDR - ldr r0, [r3] - str r0, [r2, #HWi_WSYS04_WRAMOFFSET] - //OPT(bonding option) - ldr r3, =REG_OP_ADDR - ldrb r0, [r3] - //A9ROM(ARM9 ROM) - ldr r3, =REG_A9ROM_ADDR - ldrb r1, [r3] - and r12,r1, #(REG_SCFG_A9ROM_RSEL_MASK | REG_SCFG_A9ROM_SEC_MASK) - orr r0, r0, r12, LSL #(HWi_WSYS08_ROM_ARM9RSEL_SHIFT - REG_SCFG_A9ROM_RSEL_SHIFT) - //A7ROM(ARM7 ROM) - ldr r3, =REG_A7ROM_ADDR - ldrb r1, [r3] - and r12,r1, #(REG_SCFG_A7ROM_RSEL_MASK | REG_SCFG_A7ROM_FUSE_MASK) - orr r0, r0, r12, LSL #(HWi_WSYS08_ROM_ARM7RSEL_SHIFT - REG_SCFG_A7ROM_RSEL_SHIFT) - //DS-WL(DS wireless) - ldr r3, =REG_WL_ADDR - ldrb r1, [r3] - and r12,r1, #REG_SCFG_WL_OFFB_MASK - orr r0, r0, r12, LSL #(HWi_WSYS08_WL_OFFB_SHIFT - REG_SCFG_WL_OFFB_SHIFT) - strb r0, [r2, #HWi_WSYS08_WRAMOFFSET] - //OPT(JTAG info) - ldr r3, =REG_JTAG_ADDR - ldrh r0, [r3] - and r12,r0, #REG_SCFG_JTAG_DSPJE_MASK - orr r0, r0, r12, LSR #(REG_SCFG_JTAG_DSPJE_SHIFT - HWi_WSYS09_JTAG_DSPJE_SHIFT) - //CLK(only wram clock) - ldr r3, =REG_CLK_ADDR - ldrh r1, [r3] - and r12,r1, #(REG_SCFG_CLK_AESHCLK_MASK | REG_SCFG_CLK_SD2HCLK_MASK | REG_SCFG_CLK_SD1HCLK_MASK) - orr r0, r0, r12, LSL #(HWi_WSYS09_CLK_SD1HCLK_SHIFT - REG_SCFG_CLK_SD1HCLK_SHIFT) - and r12,r1, #(REG_SCFG_CLK_SNDMCLK_MASK | REG_SCFG_CLK_WRAMHCLK_MASK) - orr r0, r0, r12, LSR #(REG_SCFG_CLK_WRAMHCLK_SHIFT - HWi_WSYS09_CLK_WRAMHCLK_SHIFT) - strb r0, [r2, #HWi_WSYS09_WRAMOFFSET] - - /* A7-SCFG ubNւ̃ANZX𖳌 */ -// ldr r1, =REG_EXT_ADDR -// ldr r0, [r1] -// bic r0, r0, #REG_SCFG_EXT_CFG_MASK -// str r0, [r1] - -@end: - bx lr -} -#include diff --git a/build/tests/DisplaySystemInformation/ARM7_racoon/src/main.c b/build/tests/DisplaySystemInformation/ARM7_racoon/src/main.c deleted file mode 100644 index ccfd1a6d..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_racoon/src/main.c +++ /dev/null @@ -1,992 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: main.c - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev:$ - $Author:$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "nvram_sp.h" -#include "address.h" - -#ifdef SDK_SEA -#include -#endif // ifdef SDK_SEA - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -#define WM_WL_HEAP_SIZE 0x2100 -#define ATH_DRV_HEAP_SIZE 0x5800 -#define WPA_HEAP_SIZE 0x1C00 - -#define MEM_TYPE_WRAM 0 -#define MEM_TYPE_MAIN 1 - -/* Priorities of each threads */ -#define THREAD_PRIO_SPI 2 -#define THREAD_PRIO_MCU 4 // b -#define THREAD_PRIO_SND 6 -#define THREAD_PRIO_FATFS 8 -#define THREAD_PRIO_AES 12 -#define THREAD_PRIO_SEA 12 -#define THREAD_PRIO_RTC 12 -#define THREAD_PRIO_SNDEX 14 -#define THREAD_PRIO_FS 15 -/* OS_THREAD_LAUNCHER_PRIORITY 16 */ - -/* [TODO] ȉ New WM ɈڍsقD܂? */ -#define NWM_DMANO NWMSP_DMA_7 -#define THREAD_PRIO_NWM_COMMMAND 9 -#define THREAD_PRIO_NWM_EVENT 7 -#define THREAD_PRIO_NWM_SDIO 8 -#define THREAD_PRIO_NWM_WPA 10 - -// ROM o^GÅgR[h -#define ROMHEADER_FOR_CHINA_BIT 0x80 -#define ROMHEADER_FOR_KOREA_BIT 0x40 - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void PrintDebugInfo(void); -static OSHeapHandle InitializeAllocateSystem(u8 memType); -static OSHeapHandle InitializeAllocateSystemCore(u8 memType); -#ifdef SDK_TWLHYB -static OSHeapHandle InitializeAllocateSystemCoreEx(u8 memType); -#endif -static void DummyThread(void* arg); -static void ReadUserInfo(void); -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -static BOOL IsValidConfigEx(void); -static u16 GetRomValidLanguage(void); -static s32 CheckCorrectNCDEx(NVRAMConfigEx * ncdsp); -#else -static s32 CheckCorrectNCD(NVRAMConfig *ncdsp); -#endif -static void VBlankIntr(void); -static void InitializeFatfs(void); -static void InitializeNwm(OSHeapHandle drvHeapHandle, OSHeapHandle wpaHeapHandle); -/*---------------------------------------------------------------------------* - OV{Q - *---------------------------------------------------------------------------*/ -#ifdef SDK_TWLHYB -extern void SDK_LTDAUTOLOAD_LTDWRAM_BSS_END(void); -extern void SDK_LTDAUTOLOAD_LTDMAIN_BSS_END(void); -#endif - - -/*---------------------------------------------------------------------------* - Name: TwlSpMain - Description: NxN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -void TwlSpMain(void) -{ - OSHeapHandle wramHeapHandle, mainHeapHandle; - - - // OSARM9ƓOSCFG̏Lɏo - // WX^Rs[ - MI_CpuMove16( (void*)REG_ROM_ADDR, DISPINFO_SHARED_SCFG_REG_ADDR, DISPINFO_SHARED_SCFG_REG_SIZE ); - // WRAMɑޔĂ镪Rs[ - MI_CpuMove16( (void*)HWi_WSYS04_ADDR, DISPINFO_SHARED_SCFG_WRAM_ADDR, DISPINFO_SHARED_SCFG_WRAM_SIZE ); - - // OS - OS_Init(); - PrintDebugInfo(); - - // NVRAM 烆[U[ǂݏo - ReadUserInfo(); - - // q[v̈ݒ - wramHeapHandle = InitializeAllocateSystem(MEM_TYPE_WRAM); - mainHeapHandle = InitializeAllocateSystem(MEM_TYPE_MAIN); - - // {^̓T[` - (void)PAD_InitXYButton(); - - // 荞݋ - (void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - // t@CVXe - FS_Init(FS_DMA_NOT_USE); - FS_CreateReadServerThread(THREAD_PRIO_FS); - - if (OS_IsRunOnTwl() == TRUE) - { - InitializeFatfs(); // FATFS -#ifndef SDK_SEA // Ib菈uI - // NWM -#ifdef SDK_TWLLTD - InitializeNwm(mainHeapHandle, mainHeapHandle); // LIMITED [hł ̃q[v MAIN m -#else - InitializeNwm(wramHeapHandle, mainHeapHandle); // HYBRID [hł ̃q[v WRAM m -#endif -#endif // ifndef SDK_SEA - AES_Init(THREAD_PRIO_AES); // AES - -#ifdef SDK_SEA - SEA_Init(THREAD_PRIO_SEA); -#endif // ifdef SDK_SEA - MCU_InitIrq(THREAD_PRIO_MCU); // MCU - - CDC_InitLib(); // CODECCu - } - - if (OSi_IsCodecTwlMode() == TRUE) - { - // J - CAMERA_Init(); - /* CODEC TWL [hłȂƃVb^[Iɖ‚炷 - @\gpł܂Bׁ̈ACODEC TWL [h̏ꍇ - ɂ̂݃JCugp”\ȏԂɂ܂B */ - } - - // TEh - SND_Init(THREAD_PRIO_SND); - if (OS_IsRunOnTwl() == TRUE) - { - SNDEX_Init(THREAD_PRIO_SNDEX); - } - - // RTC - RTC_Init(THREAD_PRIO_RTC); - - // -#ifndef SDK_SEA // Ib菈uI - WVR_Begin(wramHeapHandle); -#endif // ifdef SDK_SEA - - // SPI - SPI_Init(THREAD_PRIO_SPI); - - - while (TRUE) - { - OS_Halt(); - - //---- check reset - if (OS_IsResetOccurred()) - { - //VIB_STOP - CTRDG_VibPulseEdgeUpdate(NULL); - - OS_ResetSystem(); - } - - //---- check pull out cartridge - CTRDG_CheckPullOut_Polling(); - -#ifndef SDK_SMALL_BUILD - //---- check pull out card - CARD_CheckPullOut_Polling(); -#endif - } -} - -/*---------------------------------------------------------------------------* - Name: PrintDebugInfo - Description: ARM7 R|[lg̏fobOo͂B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -PrintDebugInfo(void) -{ - if(OS_IsRunOnTwl()) - { - OS_TPrintf("ARM7: This component is running on TWL.\n"); - } - else - { - OS_TPrintf("ARM7: This component is running on NITRO.\n"); - } -#ifdef SDK_SEA -#ifdef SDK_TWLLTD - OS_TPrintf("ARM7: This component is \"armadillo.TWL\"\n"); -#else /* ifdef SDK_TWLLTD */ -#error invalid parameter combination -#endif /* ifdef SDK_TWLLTD else */ -#else /* ifdef SDK_SEA */ -#ifdef SDK_TWLLTD - OS_TPrintf("ARM7: This component is \"racoon.TWL\"\n"); -#else /* ifdef SDK_TWLLTD */ -#ifdef SDK_WIRELESS_IN_VRAM - OS_TPrintf("ARM7: This component is \"ichneumon.TWL\"\n"); -#else /* ifdef SDK_WIRELESS_IN_VRAM */ - OS_TPrintf("ARM7: This component is \"mongoose.TWL\"\n"); -#endif /* ifdef SDK_WIRELESS_IN_VRAM else */ -#endif /* ifdef SDK_TWLLTD else */ -#endif /* ifdef SDK_SEA else */ -} - -#include -/*---------------------------------------------------------------------------* - Name: InitializeFatfs - Description: FATFSCuBFATFS֐ŃXbhx~ - ׁAx~삷_~[̃Xbh𗧂ĂB - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeFatfs(void) -{ - OSThread thread; - u32 stack[18]; - - // _~[Xbh쐬 - OS_CreateThread(&thread, DummyThread, NULL, - (void*)((u32)stack + (sizeof(u32) * 18)), sizeof(u32) * 18, OS_THREAD_PRIORITY_MAX); - OS_WakeupThreadDirect(&thread); - - - // FATFSCȕ - if(!FATFS_Init( FATFS_DMA_4, FATFS_DMA_5, THREAD_PRIO_FATFS)) - { - // do nothing - } - - // _~[Xbhj - OS_KillThread(&thread, NULL); -} -#include - -#include -/*---------------------------------------------------------------------------* - Name: InitializeNwm - Description: NWMCuB - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeNwm(OSHeapHandle drvHeapHandle, OSHeapHandle wpaHeapHandle) -{ - NwmspInit nwmInit; - - nwmInit.dmaNo = NWM_DMANO; - nwmInit.cmdPrio = THREAD_PRIO_NWM_COMMMAND; - nwmInit.evtPrio = THREAD_PRIO_NWM_EVENT; - nwmInit.sdioPrio = THREAD_PRIO_NWM_SDIO; - -#ifdef SDK_TWLLTD - nwmInit.drvHeap.id = OS_ARENA_MAIN_SUBPRIV; /* [TODO] */ -#else - nwmInit.drvHeap.id = OS_ARENA_WRAM_SUBPRIV; /* [TODO] */ -#endif - nwmInit.drvHeap.handle = drvHeapHandle; - - nwmInit.wpaPrio = THREAD_PRIO_NWM_WPA; - nwmInit.wpaHeap.id = OS_ARENA_MAIN_SUBPRIV; /* [TODO] */ - nwmInit.wpaHeap.handle = wpaHeapHandle; - - NWMSP_Init(&nwmInit); - -} -#include - -#include -/*---------------------------------------------------------------------------* - Name: DummyThread - Description: FATFSCuACDCCuۂɗĂ_~[ - XbhB - Arguments: arg - gpȂB - Returns: None. - *---------------------------------------------------------------------------*/ -static void -DummyThread(void* arg) -{ -#pragma unused(arg) - while (TRUE) - { - } -} -#include - -/*---------------------------------------------------------------------------* - Name: InitializeAllocateSystem - Description: ăVXeB - Arguments: None. - Returns: OSHeapHandle - WRAM A[iɊmۂꂽq[ṽnhԂB - *---------------------------------------------------------------------------*/ -static OSHeapHandle InitializeAllocateSystem(u8 memType) -{ - - OSHeapHandle hh; - -#ifdef SDK_TWLHYB - if( OS_IsRunOnTwl() == TRUE) - { - hh = InitializeAllocateSystemCoreEx(memType); /* Hybrid TWL œ삳 */ - } - else -#endif - { - hh = InitializeAllocateSystemCore(memType); /* Hybrid DS œ삳 or Limited */ - } - - return hh; -} - -/*---------------------------------------------------------------------------* - Name: InitializeAllocateSystemCore - Description: ăVXeB - Hybrid DS œ삳ꍇALimited TWL œ삳ꍇɓ - Arguments: None. - Returns: OSHeapHandle - WRAM A[iɊmۂꂽq[ṽnhԂB - *---------------------------------------------------------------------------*/ -static OSHeapHandle InitializeAllocateSystemCore(u8 memType) -{ - OSHeapHandle hh; - - /* MAIN */ - if(memType == MEM_TYPE_MAIN) - { - { - void* lo = (void*)OS_GetSubPrivArenaLo(); - void* hi = (void*)OS_GetSubPrivArenaHi(); - - // A[i 0 NA - MI_CpuClear8(lo, (u32)hi - (u32)lo); - - // 蓖ď - lo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, lo, hi, 1); - // A[iʃAhXݒ - OS_SetArenaLo(OS_ARENA_MAIN_SUBPRIV, lo); - - // q[v쐬 - hh = OS_CreateHeap(OS_ARENA_MAIN_SUBPRIV, lo, hi); - - if (hh < 0) - { - OS_Panic("ARM7: Failed to MAIN create heap.\n"); - } - } - // Jgq[vɐݒ - (void)OS_SetCurrentHeap(OS_ARENA_MAIN_SUBPRIV, hh); - // q[vTCY̊mF - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_MAIN_SUBPRIV, hh); - - if( heapSize <= 0) /* q[v̈̊mۂɎs */ - { - OS_Panic("ARM7: Failed to MAIN create heap.\n"); - } - - #ifdef SDK_TWLLTD - { - if ((ATH_DRV_HEAP_SIZE + WPA_HEAP_SIZE) > heapSize) - { - OS_Panic("Insufficient heap size. (0x%x < 0x%x)\n", heapSize, ATH_DRV_HEAP_SIZE + WPA_HEAP_SIZE); - } - } - #endif - OS_TPrintf("ARM7: MAIN heap size is %d\n", heapSize); - } - } - - /* WRAM */ - if( memType == MEM_TYPE_WRAM) - { - { - void* lo = (void*)OS_GetWramSubPrivArenaLo(); - void* hi = (void*)OS_GetWramSubPrivArenaHi(); - - // A[i 0 NA - MI_CpuClear8(lo, (u32)hi - (u32)lo); - - // 蓖ď - lo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, lo, hi, 1); - // A[iʃAhXݒ - OS_SetArenaLo(OS_ARENA_WRAM_SUBPRIV, lo); - - // q[v쐬 - hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, lo, hi); - - if (hh < 0) - { - OS_Panic("ARM7: Failed to WRAM create heap.\n"); - } - } - - // Jgq[vɐݒ - (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - // q[vTCY̊mF - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - if( heapSize <= 0) /* q[v̈̊mۂɎs */ - { - OS_Panic("ARM7: Failed to MAIN create heap.\n"); - } - - if (WM_WL_HEAP_SIZE > heapSize) - { - OS_Panic("Insufficient heap size. (0x%x < 0x%x)\n", heapSize, WM_WL_HEAP_SIZE); - } - OS_TPrintf("ARM7: WRAM heap size is %d\n", heapSize); - } - } - return hh; -} - -#ifdef SDK_TWLHYB -#include -/*---------------------------------------------------------------------------* - Name: InitializeAllocateSystemCoreEx - Description: ăVXeB - Hybrid TWL œ삳ꍇɓ - Arguments: None. - Returns: OSHeapHandle - WRAM A[iɊmۂꂽq[ṽnhԂB - *---------------------------------------------------------------------------*/ -static OSHeapHandle InitializeAllocateSystemCoreEx(u8 memType) -{ - OSHeapHandle hh; - - if(memType == MEM_TYPE_MAIN) - { - { - void* basicLo = (void*)OS_GetSubPrivArenaLo(); - void* basicHi = (void*)OS_GetSubPrivArenaHi(); - void* extraLo = (void*)MATH_ROUNDUP((u32)SDK_LTDAUTOLOAD_LTDMAIN_BSS_END, 32); - void* extraHi = (void*)MATH_ROUNDDOWN(HW_MAIN_MEM_SUB, 32); - -#if SDK_DEBUG - // debug information - OS_TPrintf("ARM7: MAIN arena basicLo = %p\n", basicLo); - OS_TPrintf("ARM7: MAIN arena basicHi = %p\n", basicHi); - OS_TPrintf("ARM7: MAIN arena extraLo = %p\n", extraLo); - OS_TPrintf("ARM7: MAIN arena extraHi = %p\n", extraHi); -#endif - // A[i 0 NA - MI_CpuClear8(basicLo, (u32)basicHi - (u32)basicLo); - MI_CpuClear8(extraLo, (u32)extraHi - (u32)extraLo); - - // 蓖ď - if ((u32)basicLo < (u32)extraLo) - { - basicLo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, basicLo, extraHi, 1); - // A[iʃAhXݒ - OS_SetArenaLo(OS_ARENA_MAIN_SUBPRIV, basicLo); - } - else - { - extraLo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, extraLo, basicHi, 1); - } - - // q[v쐬 - hh = OS_CreateHeap(OS_ARENA_MAIN_SUBPRIV, basicLo, basicHi); - - if (hh < 0) - { - OS_Panic("ARM7: Failed to create MAIN heap.\n"); - } - - // q[vTCY̊mF - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_MAIN_SUBPRIV, hh); - - if( heapSize <= 0) /* q[v̈̊mۂɎs */ - { - OS_Panic("ARM7: Failed to MAIN create heap.\n"); - } - - OS_TPrintf("ARM7: MAIN heap size is %d (before AddToHead)\n", heapSize); - } - - // q[vɊgubNlj - OS_AddToHeap(OS_ARENA_MAIN_SUBPRIV, hh, extraLo, extraHi); - } - // Jgq[vɐݒ - (void)OS_SetCurrentHeap(OS_ARENA_MAIN_SUBPRIV, hh); - // q[vTCY̊mF - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_MAIN_SUBPRIV, hh); - - if( heapSize <= 0) /* q[v̈̊mۂɎs */ - { - OS_Panic("ARM7: Failed to MAIN create heap.\n"); - } - - if ((WPA_HEAP_SIZE) > heapSize) - { - OS_Panic("Insufficient heap size. (0x%x < 0x%x)\n", heapSize, WPA_HEAP_SIZE); - } - OS_TPrintf("ARM7: MAIN heap size is %d\n", heapSize); - } - } - - if(memType == MEM_TYPE_WRAM) - { - { - void* basicLo = (void*)OS_GetWramSubPrivArenaLo(); - void* basicHi = (void*)OS_GetWramSubPrivArenaHi(); - void* extraLo = (void*)MATH_ROUNDUP((u32)SDK_LTDAUTOLOAD_LTDWRAM_BSS_END, 32); - void* extraHi = (void*)MATH_ROUNDDOWN(HW_WRAM_A_HYB_END, 32); - -#if SDK_DEBUG - // debug information - OS_TPrintf("ARM7: WRAM arena basicLo = %p\n", basicLo); - OS_TPrintf("ARM7: WRAM arena basicHi = %p\n", basicHi); - OS_TPrintf("ARM7: WRAM arena extraLo = %p\n", extraLo); - OS_TPrintf("ARM7: WRAM arena extraHi = %p\n", extraHi); -#endif - - // A[i 0 NA - MI_CpuClear8(basicLo, (u32)basicHi - (u32)basicLo); - MI_CpuClear8(extraLo, (u32)extraHi - (u32)extraLo); - - // 蓖ď - if ((u32)basicLo < (u32)extraLo) - { - basicLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, basicLo, extraHi, 1); - // A[iʃAhXݒ - OS_SetArenaLo(OS_ARENA_WRAM_SUBPRIV, basicLo); - } - else - { - extraLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, extraLo, basicHi, 1); - } - - // q[v쐬 - hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, basicLo, basicHi); - - if (hh < 0) - { - OS_Panic("ARM7: Failed to WRAM create heap.\n"); - } - - // q[vTCY̊mF - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - if( heapSize <= 0) /* q[v̈̊mۂɎs */ - { - OS_Panic("ARM7: Failed to WRAM create heap.\n"); - } - - if (WM_WL_HEAP_SIZE > heapSize) - { - OS_Panic("Insufficient heap size. (0x%x < 0x%x)\n", heapSize, WM_WL_HEAP_SIZE); - } - OS_TPrintf("ARM7: WRAM heap size is %d (before AddToHeap)\n", heapSize); - } - - // q[vɊgubNlj - OS_AddToHeap(OS_ARENA_WRAM_SUBPRIV, hh, extraLo, extraHi); - } - - // Jgq[vɐݒ - (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - // q[vTCY̊mF - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - if( heapSize <= 0) /* q[v̈̊mۂɎs */ - { - OS_Panic("ARM7: Failed to WRAM create heap.\n"); - } - - if (ATH_DRV_HEAP_SIZE + WM_WL_HEAP_SIZE > heapSize) - { - OS_Panic("Insufficient heap size. (0x%x < 0x%x)\n", heapSize, WM_WL_HEAP_SIZE + ATH_DRV_HEAP_SIZE ); - } - OS_TPrintf("ARM7: WRAM heap size is %d\n", heapSize); - } - } - - return hh; -} -#include -#endif - -#ifdef WM_PRECALC_ALLOWEDCHANNEL -extern u16 WMSP_GetAllowedChannel(u16 bitField); -#endif -/*---------------------------------------------------------------------------* - Name: ReadUserInfo - - Description: NVRAM烆[U[ǂݏoAL̈ɓWJB - ~[OĂobt@Ăꍇ́A - L̈̃[U[i[ꏊNAB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void ReadUserInfo(void) -{ - s32 offset; -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - NVRAMConfigEx temp[2]; -#else - NVRAMConfig temp[2]; -#endif - s32 check; - u8 *p = OS_GetSystemWork()->nvramUserInfo; - - // ItZbgǂݏo -#ifdef NVRAM_CONFIG_CONST_ADDRESS - offset = NVRAM_CONFIG_DATA_ADDRESS_DUMMY; -#else - NVRAM_ReadDataBytes(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_CONFIG_DATA_OFFSET_SIZE, - (u8 *)(&offset)); - offset <<= NVRAM_CONFIG_DATA_OFFSET_SHIFT; -#endif - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfigEx), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfigEx), - (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCDEx(temp); -#else - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfig), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfig), (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCD(temp); -#endif - - if (check >= 3) - { - // AvP[V̋N} - MI_CpuFill32(p, 0xffffffff, sizeof(NVRAMConfig)); - } - else if (check) - { - s32 i; - - // jbNl[␳ - if (temp[check - 1].ncd.owner.nickname.length < NVRAM_CONFIG_NICKNAME_LENGTH) - { - for (i = NVRAM_CONFIG_NICKNAME_LENGTH; - i > temp[check - 1].ncd.owner.nickname.length; i--) - { - temp[check - 1].ncd.owner.nickname.str[i - 1] = 0x0000; - } - } - // Rg␳ - if (temp[check - 1].ncd.owner.comment.length < NVRAM_CONFIG_COMMENT_LENGTH) - { - for (i = NVRAM_CONFIG_COMMENT_LENGTH; i > temp[check - 1].ncd.owner.comment.length; - i--) - { - temp[check - 1].ncd.owner.comment.str[i - 1] = 0x0000; - } - } - // L̈ɃXgA - MI_CpuCopy32(&temp[check - 1], p, sizeof(NVRAMConfig)); - } - else - { - // L̈NA - MI_CpuClear32(p, sizeof(NVRAMConfig)); - } - - // MACAhX[U[̌ɓWJ - { - u8 wMac[6]; - - // NVRAMMACAhXǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_MACADDRESS_ADDRESS, 6, wMac); - // WJAhXvZ - p = (u8 *)((u32)p + ((sizeof(NVRAMConfig) + 3) & ~0x00000003)); - // L̈ɓWJ - MI_CpuCopy8(wMac, p, 6); - } - -#ifdef WM_PRECALC_ALLOWEDCHANNEL - // gp”\`lgpƒ`lvZ - { - u16 enableChannel; - u16 allowedChannel; - - // gp”\`lǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_ENABLECHANNEL_ADDRESS, 2, (u8 *)(&enableChannel)); - // gpƒ`lvZ - allowedChannel = WMSP_GetAllowedChannel((u16)(enableChannel >> 1)); - // WJAhXvZ(MACAhX̌2oCg) - p = (u8 *)((u32)p + 6); - // L̈ɓWJ - *((u16 *)p) = allowedChannel; - } -#endif -} - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -/*---------------------------------------------------------------------------* - Name: IsValidConfigEx - - Description: [U[񂪊gRtBOɑΉĂ邩ǂ𒲍B - - Arguments: None. - - Returns: BOOL - g[U[񂪗LȏꍇTRUEԂB - łꍇFALSEԂB - *---------------------------------------------------------------------------*/ -static BOOL IsValidConfigEx(void) -{ - u8 ipl2_type; - - NVRAM_ReadDataBytes(NVRAM_CONFIG_IPL2_TYPE_ADDRESS, NVRAM_CONFIG_IPL2_TYPE_SIZE, &ipl2_type); - if (ipl2_type == NVRAM_CONFIG_IPL2_TYPE_NORMAL) - { - return FALSE; - } - if (ipl2_type & NVRAM_CONFIG_IPL2_TYPE_EX_MASK) - { - return TRUE; - } - return FALSE; -} - -/*---------------------------------------------------------------------------* - Name: GetRomValidLanguage - - Description: ROMo^GȀ񂩂AgR[h̑Ήrbg}bv - Ɋւ𒊏oB - - Arguments: None. - - Returns: u16 - DSJ[hA }`u[goCiΉĂ - R[h̃rbg}bvԂBDSJ[hg - R[hɑΉĂȂꍇ 0 ԂB - *---------------------------------------------------------------------------*/ -static u16 GetRomValidLanguage(void) -{ - u16 ret = 0x0000; - u8 langBit = OS_GetSystemWork()->rom_header[0x1d]; - - // ROMo^GÅgR[hmF - if (langBit == ROMHEADER_FOR_CHINA_BIT) - { - // for CHINA - ret |= (0x0001 << NVRAM_CONFIG_LANG_CHINESE); - } - else if (langBit == ROMHEADER_FOR_KOREA_BIT) - { - // for KOREA - ret |= (0x0001 << NVRAM_CONFIG_LANG_HANGUL); - } - return ret; -} - -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCDEx - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - 3: Av̋N}ׂB - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCDEx(NVRAMConfigEx * ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // IPLgR[hɑΉĂ邩 - if (IsValidConfigEx()) - { - // IPLgR[hɑΉĂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - calc_crc = - SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd_ex), sizeof(NVRAMConfigDataEx)); - if ((ncdsp[i].crc16_ex == calc_crc) - && ((0x0001 << ncdsp[i].ncd_ex.language) & - (ncdsp[i].ncd_ex.valid_language_bitmap))) - { - // gf[^p CRC Aݒ茾R[hΉR[hɊ܂܂ꍇɐƔf - if (rom_valid_language & ncdsp[i].ncd_ex.valid_language_bitmap) - { - // gR[hŒʏ팾R[h㏑ - ncdsp[i].ncd.option.language = ncdsp[i].ncd_ex.language; - } - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE) & ~ncdsp[i]. - ncd_ex.valid_language_bitmap) - { - // ROM o^GA""gR[hݒ肳Ă邪A - // IPL2̑ΉR[h""gR[h܂܂Ȃꍇ͋N} - return 3; - } - crc_flag |= (1 << i); - } - } - } - } - else - { - // IPLgR[hɑΉĂȂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE)) - { - // ROM o^GA""gR[hݒ肳Ăꍇ͋N} - return 3; - } - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - crc_flag |= (1 << i); - } - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} - -#else -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCD - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCD(NVRAMConfig *ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // e~[f[^CRC & saveCount`FbN - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRCAsaveCountl0x80̃f[^𐳓ƔfB - crc_flag |= (1 << i); - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} -#endif - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - Description: V uN荞݃xN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -extern BOOL PMi_Initialized; -void PM_SelfBlinkProc(void); - -static void -VBlankIntr(void) -{ - if (PMi_Initialized) - { - PM_SelfBlinkProc(); - } -} diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile b/build/tests/DisplaySystemInformation/ARM9/Makefile deleted file mode 100644 index e9e4bbbd..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = -SUBMAKES = Makefile.0 Makefile.1 Makefile.2 Makefile.3\ - Makefile.4 Makefile.5 Makefile.6 Makefile.7\ - Makefile.8 Makefile.9 Makefile.10 Makefile.11\ - Makefile.12 Makefile.13 Makefile.14 Makefile.15\ - Makefile.16 Makefile.17 -#SUBMAKES = Makefile.0 - - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -rb: - ruby makeMaking.rb - -do-build : - $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.0 b/build/tests/DisplaySystemInformation/ARM9/Makefile.0 deleted file mode 100644 index e9668930..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.0 +++ /dev/null @@ -1,149 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 0 -IS_SECURE_APP = FALSE -IS_NAND_APP = FALSE -NAND_ACCESS = TRUE -AES_SLOT = DONTCARE -INVISIBLE_SCFG = TRUE -GAMECODE = 0B0A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.1 b/build/tests/DisplaySystemInformation/ARM9/Makefile.1 deleted file mode 100644 index 74cb2035..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.1 +++ /dev/null @@ -1,149 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 1 -IS_SECURE_APP = FALSE -IS_NAND_APP = FALSE -NAND_ACCESS = TRUE -AES_SLOT = DONTCARE -INVISIBLE_SCFG = FALSE -GAMECODE = 0B1A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.10 b/build/tests/DisplaySystemInformation/ARM9/Makefile.10 deleted file mode 100644 index cbef68de..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.10 +++ /dev/null @@ -1,149 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 10 -IS_SECURE_APP = TRUE -IS_NAND_APP = FALSE -NAND_ACCESS = FALSE -AES_SLOT = TRUE -INVISIBLE_SCFG = TRUE -GAMECODE = 0B8A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.11 b/build/tests/DisplaySystemInformation/ARM9/Makefile.11 deleted file mode 100644 index be49071b..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.11 +++ /dev/null @@ -1,149 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 11 -IS_SECURE_APP = TRUE -IS_NAND_APP = FALSE -NAND_ACCESS = FALSE -AES_SLOT = TRUE -INVISIBLE_SCFG = FALSE -GAMECODE = 0B9A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.12 b/build/tests/DisplaySystemInformation/ARM9/Makefile.12 deleted file mode 100644 index 70012aaf..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.12 +++ /dev/null @@ -1,149 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 12 -IS_SECURE_APP = TRUE -IS_NAND_APP = FALSE -NAND_ACCESS = FALSE -AES_SLOT = FALSE -INVISIBLE_SCFG = TRUE -GAMECODE = 0BAA -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.13 b/build/tests/DisplaySystemInformation/ARM9/Makefile.13 deleted file mode 100644 index a036803a..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.13 +++ /dev/null @@ -1,149 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 13 -IS_SECURE_APP = TRUE -IS_NAND_APP = FALSE -NAND_ACCESS = FALSE -AES_SLOT = FALSE -INVISIBLE_SCFG = FALSE -GAMECODE = 0BBA -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.14 b/build/tests/DisplaySystemInformation/ARM9/Makefile.14 deleted file mode 100644 index 8535eb41..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.14 +++ /dev/null @@ -1,149 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 14 -IS_SECURE_APP = TRUE -IS_NAND_APP = TRUE -NAND_ACCESS = TRUE -AES_SLOT = TRUE -INVISIBLE_SCFG = TRUE -GAMECODE = 022A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.15 b/build/tests/DisplaySystemInformation/ARM9/Makefile.15 deleted file mode 100644 index 0cde3f57..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.15 +++ /dev/null @@ -1,149 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 15 -IS_SECURE_APP = TRUE -IS_NAND_APP = TRUE -NAND_ACCESS = TRUE -AES_SLOT = TRUE -INVISIBLE_SCFG = FALSE -GAMECODE = 023A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.16 b/build/tests/DisplaySystemInformation/ARM9/Makefile.16 deleted file mode 100644 index f725a99f..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.16 +++ /dev/null @@ -1,149 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 16 -IS_SECURE_APP = TRUE -IS_NAND_APP = TRUE -NAND_ACCESS = TRUE -AES_SLOT = FALSE -INVISIBLE_SCFG = TRUE -GAMECODE = 024A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.17 b/build/tests/DisplaySystemInformation/ARM9/Makefile.17 deleted file mode 100644 index 073fbd41..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.17 +++ /dev/null @@ -1,149 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 17 -IS_SECURE_APP = TRUE -IS_NAND_APP = TRUE -NAND_ACCESS = TRUE -AES_SLOT = FALSE -INVISIBLE_SCFG = FALSE -GAMECODE = 025A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.2 b/build/tests/DisplaySystemInformation/ARM9/Makefile.2 deleted file mode 100644 index 8cd6ea61..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.2 +++ /dev/null @@ -1,149 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 2 -IS_SECURE_APP = FALSE -IS_NAND_APP = FALSE -NAND_ACCESS = FALSE -AES_SLOT = DONTCARE -INVISIBLE_SCFG = TRUE -GAMECODE = 0B2A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.3 b/build/tests/DisplaySystemInformation/ARM9/Makefile.3 deleted file mode 100644 index 70b7ce9d..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.3 +++ /dev/null @@ -1,149 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 3 -IS_SECURE_APP = FALSE -IS_NAND_APP = FALSE -NAND_ACCESS = FALSE -AES_SLOT = DONTCARE -INVISIBLE_SCFG = FALSE -GAMECODE = 0B3A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.4 b/build/tests/DisplaySystemInformation/ARM9/Makefile.4 deleted file mode 100644 index b4fc433d..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.4 +++ /dev/null @@ -1,149 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 4 -IS_SECURE_APP = FALSE -IS_NAND_APP = TRUE -NAND_ACCESS = TRUE -AES_SLOT = DONTCARE -INVISIBLE_SCFG = TRUE -GAMECODE = 020A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.5 b/build/tests/DisplaySystemInformation/ARM9/Makefile.5 deleted file mode 100644 index d104f109..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.5 +++ /dev/null @@ -1,149 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 5 -IS_SECURE_APP = FALSE -IS_NAND_APP = TRUE -NAND_ACCESS = TRUE -AES_SLOT = DONTCARE -INVISIBLE_SCFG = FALSE -GAMECODE = 021A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.6 b/build/tests/DisplaySystemInformation/ARM9/Makefile.6 deleted file mode 100644 index b2ac46fb..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.6 +++ /dev/null @@ -1,149 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 6 -IS_SECURE_APP = TRUE -IS_NAND_APP = FALSE -NAND_ACCESS = TRUE -AES_SLOT = TRUE -INVISIBLE_SCFG = TRUE -GAMECODE = 0B4A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.7 b/build/tests/DisplaySystemInformation/ARM9/Makefile.7 deleted file mode 100644 index e9a423f8..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.7 +++ /dev/null @@ -1,149 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 7 -IS_SECURE_APP = TRUE -IS_NAND_APP = FALSE -NAND_ACCESS = TRUE -AES_SLOT = TRUE -INVISIBLE_SCFG = FALSE -GAMECODE = 0B5A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.8 b/build/tests/DisplaySystemInformation/ARM9/Makefile.8 deleted file mode 100644 index 08e2098e..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.8 +++ /dev/null @@ -1,149 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 8 -IS_SECURE_APP = TRUE -IS_NAND_APP = FALSE -NAND_ACCESS = TRUE -AES_SLOT = FALSE -INVISIBLE_SCFG = TRUE -GAMECODE = 0B6A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.9 b/build/tests/DisplaySystemInformation/ARM9/Makefile.9 deleted file mode 100644 index 5cbdc74f..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.9 +++ /dev/null @@ -1,149 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 9 -IS_SECURE_APP = TRUE -IS_NAND_APP = FALSE -NAND_ACCESS = TRUE -AES_SLOT = FALSE -INVISIBLE_SCFG = FALSE -GAMECODE = 0B7A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/filemove.rb b/build/tests/DisplaySystemInformation/ARM9/filemove.rb deleted file mode 100755 index 1f6b6dc2..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/filemove.rb +++ /dev/null @@ -1,23 +0,0 @@ -#! ruby -Ks -startDir = "$TWL_IPL_RED_ROOT/build/tests/DisplaySystemInformation/ARM9/bin/ARM9-TS.LTD.thumb/Rom" -dstDir = "/build/tests/DisplaySystemInformation/ARM9/bin/ARM9-TS.LTD.thumb/roms" - -Dir::chdir "./bin/ARM9-TS.LTD.thumb/Rom" - -dirList = Dir::entries "." -`mkdir #{dstDir}` - -for dir in dirList - - puts "===== #{dir} =====" - Dir::chdir "./#{dir}" - - Dir::glob("./*.{tad,srl}").each {|f| - puts "cp #{f} #{dstDir}/" - `cp #{f} #{dstDir}/` - } - - - - Dir::chdir startDir -end diff --git a/build/tests/DisplaySystemInformation/ARM9/main_normal.rsf b/build/tests/DisplaySystemInformation/ARM9/main_normal.rsf deleted file mode 100644 index 10ed7d54..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/main_normal.rsf +++ /dev/null @@ -1,250 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - - # - # TITLE NAME: Your product name within 12bytes - # - TitleName "DispInfo" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - MakerCode 01 - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - RomHeaderTemplate $(ROM_HEADER_TEMPLATE) - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile ./etc/myGameBanner.bnr - #BannerFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr - BannerFile ../banner/$(DISPINFO_GAMECODE).bnr - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # CommonClientKey: launcher deliver common client Key [TRUE/FALSE] - # - #CommonClientKey FALSE - - # - # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] - # - #HwAESSlotB FALSE - - # - # HwAESSlotC: launcher deliver HW AES slot C setting [TRUE/FALSE] - # - #HwAESSlotC FALSE - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess $(DISPINFO_SDACCESS) - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - #NANDAccess FALSE - NANDAccess $(DISPINFO_NANDACCESS) - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - LockSCFG $(DISPINFO_LOCKSCFG) - -# AESSlottO̓m[}Avł͗płȂ - HwAESSlotA_SSLClientCert FALSE - - ### - #### END -} - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType $(DISPINFO_APPTYPE) - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard] - # - Media $(DISPINFO_MEDIA) - - # - # Data only title : [TRUE/FALSE] - # don't have to edit - #DataOnly FALSE - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure $(DISPINFO_SECURE) - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(DISPINFO_GAMECODE) - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile FALSE - -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR - -} diff --git a/build/tests/DisplaySystemInformation/ARM9/main_secure.rsf b/build/tests/DisplaySystemInformation/ARM9/main_secure.rsf deleted file mode 100644 index 3f2e6385..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/main_secure.rsf +++ /dev/null @@ -1,247 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - - # TITLE NAME: Your product name within 12bytes - # - TitleName "DispInfo" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - MakerCode 01 - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - RomHeaderTemplate $(ROM_HEADER_TEMPLATE) - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile ./etc/myGameBanner.bnr - BannerFile ../banner/$(DISPINFO_GAMECODE).bnr - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping MAP_TS_SCR - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # CommonClientKey: launcher deliver common client Key [TRUE/FALSE] - # - #CommonClientKey FALSE - - # - # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] - # - #HwAESSlotB FALSE - - # - # HwAESSlotC: launcher deliver HW AES slot C setting [TRUE/FALSE] - # - #HwAESSlotC FALSE - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess $(DISPINFO_SDACCESS) - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - #NANDAccess FALSE - NANDAccess $(DISPINFO_NANDACCESS) - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - LockSCFG $(DISPINFO_LOCKSCFG) - HwAESSlotA_SSLClientCert $(DISPINFO_AES) - - ### - #### END -} - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - #Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType $(DISPINFO_APPTYPE) -# AppType SYSTEM - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard] - # - Media $(DISPINFO_MEDIA) -# Media NAND - # - # Data only title : [TRUE/FALSE] - # don't have to edit - ##DataOnly FALSE - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure $(DISPINFO_SECURE) -# Secure TRUE - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(DISPINFO_GAMECODE) - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile FALSE - -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR - -} diff --git a/build/tests/DisplaySystemInformation/ARM9/makeConditions.txt b/build/tests/DisplaySystemInformation/ARM9/makeConditions.txt deleted file mode 100644 index 99e6ff33..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/makeConditions.txt +++ /dev/null @@ -1,19 +0,0 @@ -FILE_IDX IS_SECURE_APP IS_NAND_APP NAND_ACCESS AES_SLOT INVISIBLE_SCFG GAMECODE -0 0 0 1 D 1 0B0A -1 0 0 1 D 0 0B1A -2 0 0 0 D 1 0B2A -3 0 0 0 D 0 0B3A -4 0 1 1 D 1 020A -5 0 1 1 D 0 021A -6 1 0 1 1 1 0B4A -7 1 0 1 1 0 0B5A -8 1 0 1 0 1 0B6A -9 1 0 1 0 0 0B7A -10 1 0 0 1 1 0B8A -11 1 0 0 1 0 0B9A -12 1 0 0 0 1 0BAA -13 1 0 0 0 0 0BBA -14 1 1 1 1 1 022A -15 1 1 1 1 0 023A -16 1 1 1 0 1 024A -17 1 1 1 0 0 025A diff --git a/build/tests/DisplaySystemInformation/ARM9/makeFooter.txt b/build/tests/DisplaySystemInformation/ARM9/makeFooter.txt deleted file mode 100644 index 51d85c2e..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/makeFooter.txt +++ /dev/null @@ -1,121 +0,0 @@ -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/makeHeader.txt b/build/tests/DisplaySystemInformation/ARM9/makeHeader.txt deleted file mode 100644 index 0fcb308b..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/makeHeader.txt +++ /dev/null @@ -1,21 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/makeMaking.rb b/build/tests/DisplaySystemInformation/ARM9/makeMaking.rb deleted file mode 100755 index 06b04a2a..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/makeMaking.rb +++ /dev/null @@ -1,54 +0,0 @@ -fHead = open("makeHeader.txt") -fFoot = open("makeFooter.txt") -contentHead = fHead.read -contentFoot = fFoot.read -fHead.close -fFoot.close - -fCond = open("makeConditions.txt") -numArg = 0 - -argList = Array.new -fCond.gets.split(/\s+/).each do |arg| - numArg += 1 - argList.push arg -end - -puts "argList" -puts argList - - -fileIdx = 0 - -while l = fCond.gets - next if l[0] == '#' - argIdx = 0 - - puts "file making: Makefile." + fileIdx.to_s - f = open("Makefile." + fileIdx.to_s, "w") - f.puts contentHead - - l.split(/\t+/).each do |value| - strVal = "TRUE" if value == "1" - strVal = "FALSE" if value == "0" - strVal = "DONTCARE" if value == "D" - - if argList[argIdx] == "GAMECODE" || argList[argIdx] == "FILE_IDX" - argSet = "#{argList[argIdx]}\t=\t#{value}" - else - argSet = "#{argList[argIdx]}\t=\t#{strVal}" - end - - f.puts argSet - - argIdx += 1 - end - - f.puts contentFoot - f.close - fileIdx += 1 -end - -fCond.close - -(0...fileIdx).each{ |i| print "Makefile.#{i} "} \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/control.c b/build/tests/DisplaySystemInformation/ARM9/src/control.c deleted file mode 100644 index d74e83d5..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/control.c +++ /dev/null @@ -1,425 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: control.c - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "misc.h" -#include "drawFunc.h" -#include "control.h" -#include "strResource.h" -#include "viewSystemInfo.h" - -#define SAVE_COUNT_MASK 0x7f // saveCount̒l͈̔͂}XNB(0x00-0x7fj - - -// TSFwb_ -typedef struct TSFHeader{ - union digest { - u8 sha1[ SVC_SHA1_DIGEST_SIZE ]; // SHA-1_CWFXg - u8 rsa[ RSA_KEY_LENGTH ]; // RSA - u8 dst[ RSA_KEY_LENGTH ]; // ]p̍őTCYvf - }digest; - u8 version; // f[^ver. - u8 saveCount; // Z[uJEgi~[OȂt@C͎gpȂj - u8 rsv[2]; // \ - u32 bodyLength; // f[^ -}TSFHeader; // 134bytes - -static const char *s_TSDPath[] = { - (const char *)"nand:/shared1/TWLCFG0.dat", - (const char *)"nand:/shared1/TWLCFG1.dat", -}; - - -static int selectLine[ROOTMENU_SIZE+1]; -BOOL resetUserData( void ); -BOOL breakUserData( u8 idx ); -BOOL resetRTC( void ); -static void TSDi_ClearSettingsDirect( LCFGTWLSettingsData *pTSD ); -static BOOL LCFGi_TSD_WriteSettingsDirectForRecovery( const LCFGTWLSettingsData *pSrcInfo, int index ); -static BOOL LCFGi_TSF_WriteFile( char *pPath, TSFHeader *pHeader, const void *pSrcBody, u8 *pSaveCount ); - - - -BOOL executeControl( int *line, int *changeLine, u8 *mode ) -{ - BOOL controlFlag = FALSE; - - // ㉺ōڕύX - if( ( pad.trg & PAD_KEY_UP ) || ( pad.trg & PAD_KEY_DOWN ) ) - { - controlFlag = TRUE; - *changeLine = !*changeLine; - } - - if( ( pad.trg & PAD_BUTTON_A ) && *changeLine ) - { - BOOL result = TRUE; - controlFlag = TRUE; - - *mode |= MODE_RESULT_DISPLAY_MASK; - - switch( *line ) - { - case MENU_RESET_INFO: - result = resetUserData(); - break; - - case MENU_BREAK_DATA: - result &= breakUserData(0); - result &= breakUserData(1); - break; - - case MENU_RTC_RESET: - result = resetRTC(); - break; - } - - *mode = (u8) ((*mode & ~MODE_RESULT_MASK ) | ( result << MODE_RESULT_SHIFT) ); - } - - // BŃLZĖ߂ - if( (pad.trg & PAD_BUTTON_B) || - ( ( pad.trg & PAD_BUTTON_A ) && !*changeLine) ) - { - controlFlag = TRUE; - *mode = 0; - } - - return controlFlag; -} - -ChangeCotnrolResult changeControl( int *menu, int *line, int *changeLine, u8 *mode ) -{ - int linemax = gAllInfo[*menu][*line].numKindName; - BOOL controlFlag = FALSE; - - if( !gAllInfo[*menu][*line].changable ) - { - // ̊ԈႢ - *mode = 0; - return CHANGE_CONTROL; - } - - // ㉺ōڕύX - if( pad.trg & PAD_KEY_UP ) - { - controlFlag = TRUE; - - if( --(*changeLine) < 0 ) - { - // CfNgʃ}CiXɂȂԍŌ - *changeLine = linemax - 1; - } - } - else if( pad.trg & PAD_KEY_DOWN ) - { - controlFlag = TRUE; - - if( ++(*changeLine) >= linemax ) - { - // CCNgʁAmaxline𒴂ŏ - *changeLine = 0; - } - } - - if( pad.trg & PAD_BUTTON_A ) - { - switch( gAllInfo[*menu][*line].argType ) - { - case ARG_INT: - gAllInfo[*menu][*line].changeFunc.cInt(*changeLine); - break; - - case ARG_BOOL: - gAllInfo[*menu][*line].changeFunc.cBool(*changeLine); - break; - - case ARG_OTHER: - // _lłintłnȂ֐͎cOȑΉ - if( *menu == MENU_SCFG_ARM7 && *line == SCFG_ARM9_RST_DSP ) - { - *changeLine == 0 ? SCFG_ReleaseResetDSP(): SCFG_ResetDSP(); - } - else if( *menu == MENU_SCFG_ARM7 && *line == SCFG_ARM9_EXT_PS ) - { - SCFGPsramBoundary idx = SCFG_PSRAM_BOUNDARY_4MB; - - switch(*changeLine) - { - case 0: - idx = SCFG_PSRAM_BOUNDARY_4MB; - break; - case 1: - idx = SCFG_PSRAM_BOUNDARY_16MB; - break; - case 2: - idx = SCFG_PSRAM_BOUNDARY_32MB; - break; - } - - SCFG_SetPsramBoundary( idx ); - - } - - else if( *menu == MENU_SCFG_ARM7 && *line == SCFG_ARM9_EXT_CFG ) - { - if( *changeLine == 0 ) - { - SCFG_SetConfigBlockInaccessible(); - } - } - - break; - } - - return CHANGE_VALUE_CHANGED; - } - - // BŃLZĖ߂ - if( pad.trg & PAD_BUTTON_B ) - { - controlFlag = TRUE; - *mode = 0; - } - - return controlFlag ? CHANGE_CONTROL : CHANGE_NOTHING ; -} - - -BOOL control( int *menu, int *line, int *changeLine, u8 *mode ) -{ - int linemax = s_numMenu[*menu]; // I𒆃y[W̍ڐ - BOOL controlFlag = FALSE; // 삪TRUEɂȂ - - // ㉺ōڕύX - if( pad.trg & PAD_KEY_UP ) - { - controlFlag = TRUE; - - if( --(*line) < 0 ) - { - // CfNgʃ}CiXɂȂԍŌ - *line = linemax - 1; - } - } - else if( pad.trg & PAD_KEY_DOWN ) - { - controlFlag = TRUE; - - if( ++(*line) >= linemax ) - { - // CCNgʁAmaxline𒴂ŏ - *line = 0; - } - } - - // EŃy[W - if( pad.trg & PAD_KEY_RIGHT ) - { - controlFlag = TRUE; - *line += DISP_NUM_LINES - 2; - - if( *line >= linemax ) - { - *line = linemax - 1; - } - } - else if( pad.trg & PAD_KEY_LEFT ) - { - controlFlag = TRUE; - *line -= DISP_NUM_LINES - 2; - - if( *line < 0 ) - { - *line = 0; - } - } - - // A{^ - if( pad.trg & PAD_BUTTON_A ) - { - if(*menu == MENU_ROOT) - { - controlFlag = TRUE; - - switch( *line ) - { - case MENU_ROOT : - case MENU_OWNER: - case MENU_PARENTAL: - case MENU_SECURE_USER: - case MENU_OTHER: - case MENU_NORMAL_HW: - case MENU_SECURE_HW: - case MENU_SCFG_ARM7: - case MENU_SCFG_ARM9: - case MENU_SYSMENU: - case MENU_FONT: - case MENU_WL: - case MENU_WHITE: - case MENU_VERSION: - // ̉ʂ̑IʒuL^ - selectLine[ROOTMENU_SIZE] = *line; - - // ̃j[ʂJ - *menu = *line; - *line = selectLine[*menu]; - break; - - case MENU_RESET_INFO: - case MENU_BREAK_DATA: - case MENU_RTC_RESET: - *mode |= MODE_EXECUTE_MASK; - *changeLine = 0; // ftHgʒucancelɂĂ - break; - } - } - else if( *menu != MENU_VERSION && *menu != MENU_FONT && gAllInfo[*menu][*line].changable ) - { - controlFlag = TRUE; - - // ύX”\ȍڂ͕ύXʂJ - *mode |= MODE_CHANGE_MASK; - *changeLine = gAllInfo[*menu][*line].iValue; - } - - } - - if( pad.trg & PAD_BUTTON_B ) - { - if( *menu != MENU_ROOT ) - { - controlFlag = TRUE; - - // ݒl\ʂ̂Ƃ̓[gɖ߂ - selectLine[*menu] = *line; - *menu = MENU_ROOT; - *line = selectLine[ROOTMENU_SIZE]; - } - } - - if( ( pad.trg & PAD_BUTTON_SELECT ) && *menu == MENU_SCFG_ARM7 ) - { - controlFlag = TRUE; - - // ARM7SCFG̕\f[^؂ւ - switchViewMode(); - } - - return controlFlag; -} - -BOOL resetUserData( void ) -// idx(0 or 1)Ԗڂ̃[Uf[^Zbg -{ - LCFGTWLTPCalibData calib; - // DisplayInitňReadĂ邩炢񂩂 -// u8 *dataBuf = (u8*) Alloc (LCFG_READ_TEMP); - -// LCFG_ReadTWLSettings( (u8 (*)[ LCFG_READ_TEMP ])dataBuf ); - - // obNAbv‚Ԃ߂ɓ񏑂 - LCFG_TSD_GetTPCalibration( &calib ); // TPLu[V͎cB - LCFG_ClearTWLSettings( LCFG_TSD_GetInstalledSoftBoxCount() ); - LCFG_TSD_SetTPCalibration( &calib ); - - if( ! LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ]) gBufLCFG ) ) - { - OS_TPrintf( "Write Setting failed.\n" ); - return FALSE; - } - - if( ! LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ]) gBufLCFG ) ) - { - OS_TPrintf( "Write Setting failed.\n" ); - return FALSE; - } - - OS_TPrintf("Clear Setting Succeeded.\n" ); - -// TSDi_ClearSettingsDirect( (LCFGTWLSettingsData *)(&dataBuf[ LCFG_TEMP_BUFFER_SIZE*idx ]) ); -// LCFGi_TSD_WriteSettingsDirectForRecovery( (LCFGTWLSettingsData *)&dataBuf[ LCFG_TEMP_BUFFER_SIZE*idx ], idx ); - - return TRUE; -} - -BOOL breakUserData( u8 idx ) -{ - // LCFG APIg킸ɁAFSxŃt@CǂŁAf[^j󂵂Ă珑߂ - FSFile file; - u8 *fileBuf = (u8*) Alloc ( LCFG_TEMP_BUFFER_SIZE ); - - FS_InitFile( &file ); - - if( !FS_OpenFileEx( &file, s_TSDPath[idx], FS_FILEMODE_R | FS_FILEMODE_W ) ) - { - OS_TPrintf("OpenFile failed. result: %d path: %s\n", FS_GetArchiveResultCode(&file), s_TSDPath[idx]); - return FALSE; - } - - // KɃf[^ - MI_CpuFill8( fileBuf, 0xFF, LCFG_TEMP_BUFFER_SIZE ); - - // f[^̏߂ - FS_SeekFileToBegin( &file ); - - if( FS_WriteFile( &file, fileBuf, LCFG_TEMP_BUFFER_SIZE ) == -1 ) - { - OS_TPrintf("writeFile failed. path: %s\n", s_TSDPath[idx]); - return FALSE; - } - - FS_CloseFile( &file ); - - OS_TPrintf("Breaking UserData Succeeded. path: %s\n", s_TSDPath[idx]); - return TRUE; -} - - -BOOL resetRTC( void ) -{ - RTCResult result; - RTCDate date; - RTCTime time; - - date.year = 0; - date.month = 1; - date.day = 1; - date.week = RTC_WEEK_SUNDAY; - - time.hour = 0; - time.minute = 0; - time.second = 0; - - // result͐[Ԃ - result = RTC_SetDate( &date ); - if( result != RTC_RESULT_SUCCESS ) - { - OS_TPrintf("RTC Date Reset Failed. err: %d", result ); - return FALSE; - } - - result |= RTC_SetTime( &time ); - if( result != RTC_RESULT_SUCCESS ) - { - OS_TPrintf("RTC Time Reset Failed. err: %d", result ); - return FALSE; - } - - return TRUE; -} \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/control.h b/build/tests/DisplaySystemInformation/ARM9/src/control.h deleted file mode 100644 index 93598285..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/control.h +++ /dev/null @@ -1,41 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: control.h - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __DISPLAY_SYSTEM_CONTROL_H__ -#define __DISPLAY_SYSTEM_CONTROL_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum ChangeCotnrolResult{ - CHANGE_NOTHING, - CHANGE_CONTROL, - CHANGE_VALUE_CHANGED -} ChangeCotnrolResult; - -BOOL executeControl( int *line, int *changeLine, u8 *mode ); -ChangeCotnrolResult changeControl( int *menu, int *line, int *changeLine, u8 *changeMode ); -BOOL control( int *menu, int *line, int *changeLine, u8 *changeMode ); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.c b/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.c deleted file mode 100644 index ea3c8eba..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.c +++ /dev/null @@ -1,1085 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: drawFunc.c - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - - -#include -#include -#include -#include -#include - -#include "drawFunc.h" -#include "getInformation.h" -#include "viewSystemInfo.h" -#include "misc.h" -#include "strResource.h" -#include "myIoreg_SCFG.h" - - - -// `֘A -#define HEADER_UP 0 -#define HEADER_LEFT 10 -#define PAGE_LEFT 160 -#define FOOTER_UP 110 -#define FOOTER_LEFT 10 -#define ALLOW_LEFT 0 - -#define AST_LEFT ( ALLOW_LEFT + LINE_OFFSET ) -#define KIND_UP 10 // ږ̏W -#define KIND_LEFT ( AST_LEFT + 10 ) // ږ̍W -#define VALUE_UP KIND_UP // ڒl̏W -#define VALUE_LEFT 140 // ڒl̍W -#define LINE_OFFSET 15 // 1sƂ̃ItZbg -#define ROW_OFFSET 15 // ڂꂽƂ̒igp - -#define REGISTER_NAME_LEFT 10 -#define REGISTER_NAME_UP 15 -#define REGISTER_DATA_LEFT 50 -#define REGISTER_DATA_UP 15 - -#define FOOTER_REGIST 0 -#define FOOTER_CONTROL1 1 -#define FOOTER_CONTROL2 2 -#define FOOTER_MENU 3 -#define FOOTER_LINES 4 - -#define CHANGE_ITEMNAME_UP 20 -#define CHANGE_ITEMNAME_LEFT 20 -#define CHANGE_VALUE_LEFT 80 -#define CHANGE_VALUE_UP 80 -#define CHANGE_ALLOW_LEFT (CHANGE_VALUE_LEFT - 15) -#define CHANGE_NOW_SETTING_UP 150 - -#define RESULT_LEFT CHANGE_ITEMNAME_LEFT -#define RESULT_UP CHANGE_NOW_SETTING_UP - - -#define SCROLL_MARGIN 2 // ʒ[sŃXN[邩 - -#define UNIQUE_BUF 12 -#define BINARY_BUF 18 - -/* global variables -------------------- */ - -static int gDrawIdx[ROOTMENU_SIZE+1] = {0}; // ږڂ牺`悵Ă̂ -static int gMenuLineSize[ROOTMENU_SIZE] = {}; // ej[̑S̍s -static const int gRegisterIdx[2][SCFG_ARM7_MENU_SIZE]; -static BOOL gSelectedARM7SCFGReg = TRUE; // ARM7SCFGŃWX^TCh̕`Ȃtrue,L̈Ȃfalse - -/* function prototypes -------------------- */ - -void calibrateDrawIdx( int menu, int idx ); -void printData( int x, int y, int color, DispInfoEntry *entry ); -void printValue( int menu,int entryLine, int drawOffset, DispInfoEntry *entry ); -void printKindName( int menu, int entryLine, int drawOffset, int selected ); -void printBinary16( int x, int y, u16 value, int selected, int selectSize ); -void printBinary32( int x, int y, u32 value, int selected, int selectSize ); -void drawRegister( int menu, int selected ); -void drawChangeMode( DispInfoEntry *Entry, int changeLine ); -void drawExecuteMode( const char *command, int changeLine, u8 mode ); -void drawFontInfo( int idx, int drawLine, int selected ); -void drawVersion( int idx, int drawLine ,int selected ); -void printUniqueID( int drawLineOffset, char *uniqueId ); -int getPageNum( int valueIdx, const int* pageOffset ); -int countMenuLine( int menu ); -int countLinesDown( int menu, int idx ); - -void drawHeader( int menu, int line) -// ʒ[ɊȒPȏ\ -{ - u16 buf[256]; - -#ifdef VERSION_VIEWER - PrintfSJISSub( HEADER_LEFT, HEADER_UP, TXT_COLOR_RED, "%s $Rev$" , "AppVesionViewer" ); -#else - PrintfSJISSub( HEADER_LEFT, HEADER_UP, TXT_COLOR_RED, "%s %d $Rev$" , "DisplaySystemInfo", DISPINFO_BIN_IDX ); -#endif - - if( menu != MENU_ROOT ) - { - swprintf(buf, 256, L"Root > %s", s_strRootMenu[menu] ); - PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + FOOTER_MENU * LINE_OFFSET, TXT_COLOR_BLUE, buf ); - - swprintf(buf, 256, L"%d / %d", line+1 , s_numMenu[menu] ); - PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + FOOTER_LINES * LINE_OFFSET, TXT_COLOR_BLUE, buf ); - } - else - { - PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + FOOTER_MENU * LINE_OFFSET, TXT_COLOR_BLUE, (const u16 *)L"Root" ); - swprintf(buf, 256, L"%d / %d", line+1 , ROOTMENU_SIZE ); - PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + FOOTER_LINES * LINE_OFFSET, TXT_COLOR_BLUE, buf ); - } - -#ifndef VERSION_VIEWER - PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + FOOTER_CONTROL1 * LINE_OFFSET, TXT_COLOR_BLUE, (const u16 *)L" A: Decide B: Back "); - - if( menu == MENU_SCFG_ARM7 ) - { - PrintfSJISSub( FOOTER_LEFT, FOOTER_UP + FOOTER_REGIST * LINE_OFFSET, TXT_COLOR_RED, s_strSCFGViewMode[ gSelectedARM7SCFGReg ] ); - PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + FOOTER_CONTROL2 * LINE_OFFSET, TXT_COLOR_BLUE, (const u16 *)L" Select: Switch Viewing Area" ); - } -#endif -} - -void printData( int x, int y, int color, DispInfoEntry *entry ) -{ - if( entry->isNumData ) - { - // lf[^炻̂܂܃vg - PrintfSJIS( x, y, color, "%d", entry->iValue ); - } - else if( entry->isSjis ) - { - if( entry->str.sjis == s_strCorrect[0] ) - { - color = TXT_COLOR_RED; - } - - // SJIS - PrintfSJIS( x, y, color, "%s", entry->str.sjis ); - } - else - { - // UTF16 - PutStringUTF16( x, y, color, entry->str.utf ); - } - -} - -int countMenuLine( int menu ) -{ - int i; - int sum = 0; - - for( i=0; ifromLCFG ) - { - // LCFGoRŎ擾f[^͐‚ɂ - txtColor = TXT_COLOR_BLUE; - } - - ////////////////////////////////////////////// - // `sKvꍇ̏͂ // - ////////////////////////////////////////////// - - if( menu == MENU_OWNER && entryLine == OWNER_COLOR ) - { - PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawOffset, TXT_UCOLOR_GRAY + entry->iValue , "" ); - printData( VALUE_LEFT + LINE_OFFSET , VALUE_UP + LINE_OFFSET*drawOffset, txtColor, entry ); - return; - } - - if( menu == MENU_NORMAL_HW && entryLine == NORMAL_HW_UNIQUE_ID ) - { - printUniqueID( drawOffset, entry->str.sjis ); - entry->numLines = 4; - return; - } - - if( menu == MENU_PARENTAL && entryLine == PARENTAL_PASSWORD ) - { - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawOffset, txtColor, "%04d", entry->iValue ); - return; - } - - if( menu == MENU_SYSMENU && entryLine == SYSMENU_VERSION_NUM ) - { - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawOffset, - txtColor, "%d.%d", entry->iValue >> 16, entry->iValue & 0xFFFF ); - return; - } - - if( ( menu == MENU_SYSMENU && entryLine == SYSMENU_TIMESTAMP )|| - ( menu == MENU_FONT && entryLine == FONT_TIMESTAMP )) - { - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawOffset, txtColor, "%08lx", entry->iValue ); - return; - } - - if( menu == MENU_SECURE_HW && entryLine == SECURE_HW_LAUNCHER_ID ) - { - char buf[5]; - - if( entry->iValue == 0 ) - { - // 񂪎󂯎ĂȂ - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET * (1 + drawOffset), txtColor, s_strNA ); - } - - MI_CpuCopy( &(entry->iValue), buf, 4 ); - buf[4] = '\0'; - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET * (1 + drawOffset), txtColor, "%s", buf ); - return; - } - - if( ( menu == MENU_SECURE_HW && entryLine == SECURE_HW_FUSE ) || - ( menu == MENU_OTHER && entryLine == OTHER_RTC_OFFSET ) || - ( menu == MENU_OTHER && entryLine == OTHER_TP_RSV ) ) - { - // 168̓ig݂ɕύX - char buf[9] = {0}; - STD_StrLCpy( buf, entry->str.sjis , 9 ); - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET * drawOffset, txtColor, "%s", buf ); - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET * (1+drawOffset), txtColor, "%s", &(entry->str.sjis[8]) ); - return; - } - - if( ( menu == MENU_SYSMENU && entryLine == SYSMENU_EULA_URL ) || - ( menu == MENU_SYSMENU && entryLine == SYSMENU_NUP_HOST )) - { - char buf[17] = {0}; - int i, lineOffset = 0; - - for( i = 0; i < STD_StrLen( entry->str.sjis ) ; i+=16 ) - { - STD_StrLCpy( buf, &(entry->str.sjis[i]), 17 ); - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET * ( drawOffset + lineOffset++), txtColor, "%s", buf ); - } - - entry->numLines = lineOffset > 0 ? lineOffset : 1; - return; - } - - if( ( menu == MENU_OWNER && entryLine == OWNER_COMMENT ) || - ( menu == MENU_PARENTAL && entryLine == PARENTAL_ANSWER )) - { - u16 buf[11] = {0}; - int i, lineOffset = 0; - - for( i = 0; i < wcslen( entry->str.utf ) ; i+=10 ) - { - MI_CpuCopy( &(entry->str.utf[i]), buf, 20 ); - PutStringUTF16( VALUE_LEFT, VALUE_UP + LINE_OFFSET * ( drawOffset + lineOffset++), txtColor, buf ); - } - - // ڂ󕶎ȂƂł1s\͂悤ɂ - entry->numLines = lineOffset > 0 ? lineOffset : 1; - - return; - } - - - ////////////////////////// - // ʏ̍ڕ`͂ // - ////////////////////////// - - if( entry->isAligned ) - { - printData( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawOffset, txtColor, entry ); - } - else - { - // ږĎKvȏꍇ - printData( VALUE_LEFT, VALUE_UP + LINE_OFFSET* ( drawOffset + 1 ), txtColor, entry ); - } -} - -void drawRegister( int menu, int selected ) -{ -#ifndef VERSION_VIEWER - // SCFGWX^̃oCiTuʂɕ`悷 - int selectRegSize = 1; - int selectBitNum; - - if( menu == MENU_SCFG_ARM7 && selected < SCFG_ARM7_MI_SC1_CDET) - { - // ARM7̑O4 - u32 regRom = 0; - u16 regClk = 0; - u16 regJtag = 0; - u32 regExt = 0; - selectBitNum = gRegisterIdx[0][selected]; - - regRom = MI_LoadLE32( &gArm7SCFGReg[DISP_REG_ROM_OFFSET - 0x4000] ); - regClk = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_CLK_OFFSET - 0x4000] ); - regJtag = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_JTAG_OFFSET - 0x4000] ); - regExt = MI_LoadLE32( &gArm7SCFGReg[DISP_REG_EXT_OFFSET - 0x4000] ); - - if( selected == SCFG_ARM7_EXT_PS ) - { - selectRegSize = 2; - } - - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP, TXT_COLOR_BLACK, s_strARM7RegisterName[0] ); - printBinary32( REGISTER_DATA_LEFT, REGISTER_DATA_UP, regRom, selectBitNum, selectRegSize); - - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + 2*LINE_OFFSET, TXT_COLOR_BLACK, s_strARM7RegisterName[1] ); - printBinary16( REGISTER_DATA_LEFT, REGISTER_DATA_UP + 2*LINE_OFFSET, regClk, selectBitNum - 32, selectRegSize ); - - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + 3*LINE_OFFSET, TXT_COLOR_BLACK, s_strARM7RegisterName[2] ); - printBinary16( REGISTER_DATA_LEFT, REGISTER_DATA_UP + 3*LINE_OFFSET, regJtag, selectBitNum - 48, selectRegSize ); - - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + 4*LINE_OFFSET, TXT_COLOR_BLACK, s_strARM7RegisterName[3] ); - printBinary32( REGISTER_DATA_LEFT, REGISTER_DATA_UP + 4*LINE_OFFSET, regExt, selectBitNum - 64, selectRegSize ); - } - else if( menu == MENU_SCFG_ARM7 && selected >= SCFG_ARM7_MI_SC1_CDET ) - { - // SCFǦ㔼4 - u32 regMc1 = MI_LoadLE32( &gArm7SCFGReg[DISP_REG_MC_OFFSET - 0x4000] ); - u16 regMc2 = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_MC2_OFFSET - 0x4000] ); - u16 regOldWL = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_WL_OFFSET - 0x4000] ); - u16 regOption = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_OP_OFFSET - 0x4000] ); - selectBitNum = gRegisterIdx[0][selected]; - - if( selected == SCFG_ARM7_MI_SC1_MODE || - selected == SCFG_ARM7_MI_SC2_MODE || - selected == SCFG_ARM7_OP_FORM || - selected == SCFG_ARM7_OP_APP ) - { - selectRegSize = 2; - } - else if( selected == SCFG_ARM7_MI_CC || selected == SCFG_ARM7_MI_CA ) - { - selectRegSize = 16; - } - - // ` - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP, TXT_COLOR_BLACK, s_strARM7RegisterName[4] ); - printBinary32( REGISTER_DATA_LEFT, REGISTER_DATA_UP, regMc1, selectBitNum - 96, selectRegSize ); - - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + 2*LINE_OFFSET, TXT_COLOR_BLACK, s_strARM7RegisterName[5]); - printBinary16( REGISTER_DATA_LEFT, REGISTER_DATA_UP + 2*LINE_OFFSET, regMc2, selectBitNum - 128, selectRegSize ); - - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + 3*LINE_OFFSET, TXT_COLOR_BLACK, s_strARM7RegisterName[6] ); - printBinary16( REGISTER_DATA_LEFT, REGISTER_DATA_UP + 3*LINE_OFFSET, regOldWL, selectBitNum - 144, selectRegSize ); - - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + 4*LINE_OFFSET, TXT_COLOR_BLACK, s_strARM7RegisterName[7] ); - printBinary16( REGISTER_DATA_LEFT, REGISTER_DATA_UP + 4*LINE_OFFSET, regOption, selectBitNum - 160, selectRegSize ); - - } - else if( menu == MENU_SCFG_ARM9 ) - { - // ARM9SCFGWX^Zbg - u16 regRom = MI_LoadLE16( (void*) (HW_IOREG + REG_A9ROM_OFFSET) ); - u16 regClk = MI_LoadLE16( (void*) (HW_IOREG + REG_CLK_OFFSET) ); - u16 regRst = MI_LoadLE16( (void*) (HW_IOREG + REG_RST_OFFSET) ); - u32 regExt = MI_LoadLE32( (void*) (HW_IOREG + REG_EXT_OFFSET) ); - u16 regMc = MI_LoadLE16( (void*) (HW_IOREG + REG_MC_OFFSET ) ); - selectBitNum = gRegisterIdx[1][selected]; - - if( selected == SCFG_ARM9_EXT_PS) - { - selectRegSize = 2; - } - - // ` - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP, TXT_COLOR_BLACK, s_strARM9RegisterName[0] ); - printBinary16( REGISTER_DATA_LEFT, REGISTER_DATA_UP, regRom, selectBitNum, selectRegSize ); - - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + LINE_OFFSET, TXT_COLOR_BLACK, s_strARM9RegisterName[1] ); - printBinary16( REGISTER_DATA_LEFT, REGISTER_DATA_UP + LINE_OFFSET, regClk, selectBitNum - 16, selectRegSize ); - - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + 2*LINE_OFFSET, TXT_COLOR_BLACK, s_strARM9RegisterName[2] ); - printBinary16( REGISTER_DATA_LEFT, REGISTER_DATA_UP + 2*LINE_OFFSET, regRst, selectBitNum - 32, selectRegSize ); - - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + 3*LINE_OFFSET, TXT_COLOR_BLACK, s_strARM9RegisterName[3] ); - printBinary32( REGISTER_DATA_LEFT, REGISTER_DATA_UP + 3*LINE_OFFSET, regExt, selectBitNum - 48, selectRegSize ); - - } -#endif // ifndef VERSION_VIEWER -} - -void printBinary32( int x, int y, u32 value, int selected, int selectSize ) -{ - printBinary16( x, y, (u16)(value >> 16), selected - 16, selectSize ); - printBinary16( x, y + LINE_OFFSET, (u16)(value & 0xFFFF), selected, selectSize ); -} - -void printBinary16( int x, int y, u16 value, int selected, int selectSize ) -{ - // 16rbg̃oCifBXvCɕ` - - int i; - int bitNum; - u16 buf[BINARY_BUF] = {0}; // 16bit + 1 space + 1 EOS - u16 mask = 0x8000; - - for( i = 0; i < BINARY_BUF; i++) - { - if( i%9 == 8 ) - { - buf[i] = L'@'; - continue; - } - - if( value & mask ) - { - buf[i] = L'P'; - } - else - { - buf[i] = L'O'; - } - - mask = (u16)( mask >> 1 ); - } - - buf[BINARY_BUF] = L'\0'; - - PutStringUTF16Sub( x, y, TXT_COLOR_BLACK, buf ); - - if( selected >= 16 || selected < 0 ) - { - // `惌WX^ɑIڂɑΉrbgȂ΂ŏI - return; - } - - // }XNZbg - mask = 0x8000; - - // ̕`惌WX^ɑIڂɑΉrbgƂ - // ̃rbgԎŕ\ - for( i = 0, bitNum = 0; bitNum < 16; i++ ) - { - if( i == 8 ) - { - // 8rbgA8rbg̊Ԃ̋ - buf[i] = L'@'; - continue; - } - - if( selected <= 15 - bitNum && 15 - bitNum < selected + selectSize ) - { - buf[i] = ( value & ( mask >> bitNum )) ? L'P': L'O' ; - } - else - { - buf[i] = L'@'; - } - - bitNum++; - } - - PutStringUTF16Sub( x, y, TXT_COLOR_RED, buf ); -} - -void drawChangeMode( DispInfoEntry *entry, int changeLine ) -// lύXʂ̕` -{ - int i; - - // ږ - PrintfSJIS( CHANGE_ITEMNAME_LEFT, CHANGE_ITEMNAME_UP, TXT_COLOR_RED, entry->kind ); - - if( entry->kindNameList != NULL ) - { - // BOOLlŕύXݒ肷鍀ڂ̏ꍇ͒lꗗIƂĕ\ - PrintfSJIS( CHANGE_ITEMNAME_LEFT, CHANGE_NOW_SETTING_UP, TXT_COLOR_BLACK, "Now Setting: %s", entry->kindNameList[entry->iValue] ); - - for( i = 0; i < entry->numKindName; i++ ) - { - int kindColor = TXT_COLOR_BLACK; - - if( i == changeLine ) - { - kindColor = TXT_COLOR_GREEN; - PutStringUTF16( CHANGE_ALLOW_LEFT, CHANGE_VALUE_UP + i*LINE_OFFSET, TXT_COLOR_BLACK, (const u16 *)L"" ); - } - - PrintfSJIS( CHANGE_VALUE_LEFT, CHANGE_VALUE_UP + i*LINE_OFFSET, kindColor, entry->kindNameList[i] ); - } - } - -} - -void drawExecuteMode( const char *command, int changeLine, u8 mode ) -{ -#ifndef VERSION_VIEWER - int i; - - // ږ - PrintfSJIS( CHANGE_ITEMNAME_LEFT, CHANGE_ITEMNAME_UP, TXT_COLOR_RED, command ); - - for( i = 0; i < 2 ; i++ ) - { - int kindColor = TXT_COLOR_BLACK; - - if( i == changeLine ) - { - kindColor = TXT_COLOR_GREEN; - PutStringUTF16( CHANGE_ALLOW_LEFT, CHANGE_VALUE_UP + i*LINE_OFFSET, TXT_COLOR_BLACK, (const u16 *)L"" ); - } - - PrintfSJIS( CHANGE_VALUE_LEFT, CHANGE_VALUE_UP + i*LINE_OFFSET, kindColor, s_strOK[i] ); - } - - if( mode & MODE_RESULT_DISPLAY_MASK ) - { - PrintfSJIS( RESULT_LEFT, RESULT_UP, TXT_COLOR_BLACK, s_strResult[ (mode & MODE_RESULT_MASK) >> MODE_RESULT_SHIFT ] ); - } -#endif // VERSION_VIEWER - -} - -void drawVersion( int idx, int drawLine ,int selected ) -{ - int kindColor = TXT_COLOR_BLACK; - u16 value = gContentsVersion[idx]; - - if( idx == selected) - { - // Iڂ͂납 - kindColor = TXT_COLOR_GREEN; - PutStringUTF16( ALLOW_LEFT, KIND_UP + LINE_OFFSET*drawLine, TXT_COLOR_BLACK, (const u16 *)L""); - } - - - // ږ - // gContentsTitle[i]͓4oCgCjVR[h̃rbOGfBALqA - // K4oCgAṽtO - { - u64 id = gContentsTitle[idx]; - char buf[5] = {0}; - int i; - - for(i = 3; 0<=i; i-- ) - { - buf[i] = (char)(id & 0xFF) ; - id >>= 8; - } - - PrintfSJIS( KIND_LEFT, KIND_UP + LINE_OFFSET*drawLine , kindColor, "%s", buf ); - } - - // l - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawLine , TXT_COLOR_BLACK, "%x.%x", value >> 8, value & 0xFF ); -} - -void drawFontInfo( int idx, int drawLine, int selected ) -{ -#ifndef VERSION_VIEWER - int color = TXT_COLOR_BLACK; - int fontIdx = idx / NUM_FONT_INFO; - int dataType = idx % NUM_FONT_INFO; - - static const char* s_strFontDataType[] = { - "name", - "size", - "hash" - }; - - // ޖ - if( idx == selected) - { - color = TXT_COLOR_GREEN; - PutStringUTF16( ALLOW_LEFT, KIND_UP + LINE_OFFSET*drawLine, TXT_COLOR_BLACK, (const u16 *)L""); - } - - PrintfSJIS( KIND_LEFT, KIND_UP + LINE_OFFSET*drawLine , color, "font%d %s", fontIdx, s_strFontDataType[dataType] ); - - // l - switch( dataType ) - { - case 0: - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawLine , TXT_COLOR_BLACK, (char*)gFontInfo[fontIdx].name ); - break; - - case 1: - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawLine , TXT_COLOR_BLACK, "%d byte", gFontInfo[fontIdx].size ); - break; - - case 2: - if( gFontInfo[fontIdx].isHashOK ) - { - color = TXT_COLOR_BLACK; - } - else - { - color = TXT_COLOR_RED; - } - - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawLine , color, s_strCorrect[ gFontInfo[fontIdx].isHashOK ] ); - break; - } -#endif // ifdef VERSION_VIEWER -} -void drawMenu( int menu, int line, int changeLine, u8 mode ) -// ꗗ`悷 -{ - int lineNum = 0; - int i=0; - - drawHeader( menu, line ); - drawRegister( menu, line ); - - if( mode & MODE_CHANGE_MASK ) - { - // ύX[hʂ̕` - drawChangeMode( &gAllInfo[menu][line], changeLine ); - return; - } - - if( mode & MODE_EXECUTE_MASK ) - { - drawExecuteMode( s_strMetaMenu[MENU_ROOT][line] , changeLine, mode ); - return; - } - - // `ʒu̒ - if( line - gDrawIdx[menu] < SCROLL_MARGIN ) - { - gDrawIdx[menu] = line - SCROLL_MARGIN >= 0 ? line - SCROLL_MARGIN : 0; - } - else if( countLinesDown(menu, line) < SCROLL_MARGIN ) - { - calibrateDrawIdx( menu, line ); - } - - for( i = gDrawIdx[menu] ; i < s_numMenu[menu] && lineNum < DISP_NUM_LINES ; i++ ) - { - // •ϒڂȃo[W񂾂Ꮘ - if( menu == MENU_VERSION && VERSION_OTHER <= i ) - { - drawVersion( i - VERSION_OTHER, lineNum++, line - VERSION_OTHER ); - continue; - } - - if( menu == MENU_FONT && FONT_INFO <= i ) - { - drawFontInfo( i - FONT_INFO, lineNum++, line - FONT_INFO ); - continue; - } - - // ږ̕` - printKindName( menu, i, lineNum, line ); - - // l̕` - if( menu == MENU_SCFG_ARM7 && !gSelectedARM7SCFGReg ) - { - // ARM7SCFGŋL̈摤̒l\ĂƂ̓ItZbg - printValue( menu, i, lineNum, &gAllInfo[menu][i + SCFG_ARM7_SHARED_OFFSET] ); - } - else if( menu != MENU_ROOT ) - { - printValue( menu, i, lineNum, &gAllInfo[menu][i] ); - } - - // `ItZbg̍XV - lineNum += menu != MENU_ROOT ? gAllInfo[menu][i].numLines : 1; - } - - /* - // XN[o[ƂoH - // Ŝ̍sc - if( gMenuLineSize[menu] == 0 ) - { - gMenuLineSize[menu] = countMenuLine(menu); - } - */ -} - -int countLinesDown( int menu, int idx ) -// Iڂ艺ɉڕ\Ă邩JEg -{ - int i; - int lines = 0; - - for( i = gDrawIdx[menu]; lines < DISP_NUM_LINES && i < s_numMenu[menu] ; i++ ) - { - lines += ( menu == MENU_VERSION && VERSION_OTHER <= i ) || - ( menu == MENU_FONT && FONT_INFO <= i ) || - ( menu == MENU_ROOT ) ? - 1 : gAllInfo[menu][i].numLines; - } - - return (i-1) - idx; -} - -void calibrateDrawIdx( int menu, int idx ) -// ܂ԂڂƂƕ`ʒû -// ɏ2ڕ\悤ɕ␳s -{ - int i; - int lines = 0; - - // ܂͎Ɖ2ڂ̍sT - for( i = 0; i <= 2 && i + idx < s_numMenu[menu] ; i++ ) - { - lines += ( menu == MENU_VERSION && VERSION_OTHER <= i+idx ) || - ( menu == MENU_FONT && FONT_INFO <= i+idx ) || - ( menu == MENU_ROOT ) ? - 1 : gAllInfo[menu][i + idx].numLines; - } - - // ֒T - for( i = 1; 0 <= idx - i && lines < DISP_NUM_LINES ; i++) - { - lines += ( menu == MENU_VERSION && VERSION_OTHER <= i+idx ) || - ( menu == MENU_FONT && FONT_INFO <= i+idx ) || - ( menu == MENU_ROOT ) ? - 1 : gAllInfo[menu][idx - i].numLines; - } - - // [v]vɉ - i--; - - if( lines < DISP_NUM_LINES ) - { - // idx - i[菬Ȃꍇ - gDrawIdx[menu] = 0; - } - else if( lines == DISP_NUM_LINES ) - { - // \s傤ǂ͂̂܂ - gDrawIdx[menu] = idx - i; - } - else if( lines == DISP_NUM_LINES + 1 && gAllInfo[menu][ idx - i ].numLines != 1) - { - // 1sĂāAˆԏ̍ڂs`悾ꍇ͂̂܂ - gDrawIdx[menu] = idx - i; - } - else - { - // ȊȌꍇ͈ԏ̍sO - gDrawIdx[menu] = idx - i + 1; - } - -} - -void switchViewMode( void ) -// ARM7SCFG̃WX^f[^ƋL̈f[^̕\e؂ւ -{ - gSelectedARM7SCFGReg = !gSelectedARM7SCFGReg; -} - -/* -void drawKindName( int menu, int page, int line ) -// ږ`֐ -{ - int linenum = 0; - int offset = 0; - - if( menu == MENU_ROOT ) - { - // [gj[ɂ̓CfNXf[^Ȃ̂ŁAԊuȂƂOɗ񂷂邾 - for(linenum = 0; linenum < ROOTMENU_SIZE ; linenum++) - { - if( linenum == line ) - { - // I𒆂̍ڂ͕\FĖ\ - PutStringUTF16( ALLOW_LEFT, KIND_UP + LINE_OFFSET*linenum, TXT_COLOR_BLACK, (const u16 *)L"" ); - PutStringUTF16( KIND_LEFT, KIND_UP + LINE_OFFSET*linenum, TXT_COLOR_GREEN, s_strMetaMenu[MENU_ROOT][linenum]) ; - } - else - { - PutStringUTF16( KIND_LEFT, KIND_UP + LINE_OFFSET*linenum, TXT_COLOR_BLACK, s_strMetaMenu[MENU_ROOT][linenum]) ; - } - } - - } - else - { - for(linenum = s_pageOffset[menu][page] ; linenum < s_pageOffset[menu][page+1] ; linenum++) - { - if( linenum == s_pageOffset[menu][page] + line ) - { - // I𒆂̍ڂ͕\FĖ\ - PutStringUTF16( ALLOW_LEFT, KIND_UP + LINE_OFFSET * gMenuKindOffset[menu][linenum], - TXT_COLOR_BLACK, (const u16 *)L"" ); - PutStringUTF16( KIND_LEFT, KIND_UP + LINE_OFFSET * gMenuKindOffset[menu][linenum], - TXT_COLOR_GREEN, s_strMetaMenu[menu][linenum]) ; - } - else - { - PutStringUTF16( KIND_LEFT, KIND_UP + LINE_OFFSET * gMenuKindOffset[menu][linenum], - TXT_COLOR_BLACK, s_strMetaMenu[menu][linenum]) ; - } - } - } -} - -void drawOwnerMenu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) -{ - int drawLineOffset = linenum, drawKindOffset = linenum; - - // utf16ŕ`悷̂ - if( valueIdx == OWNER_NICKNAME ) - { - kindOffset[valueIdx] = drawKindOffset; - PutStringUTF16( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, gUserName) ; - } - else if( valueIdx == OWNER_COMMENT ) - { - kindOffset[valueIdx] = drawKindOffset; - PutStringUTF16( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, gUserComment) ; - } - else if( valueIdx == OWNER_COLOR ) - { - kindOffset[valueIdx] = drawKindOffset; - PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_UCOLOR_G5, "" ); - PrintfSJIS( VALUE_LEFT + LINE_OFFSET , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); - - } - else - { - // sjisŕ`悷 - kindOffset[valueIdx] = drawKindOffset; - PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); - } - -} - -void drawParentalMenu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) -{ - int drawLineOffset = linenum, drawKindOffset = linenum; - - // utf16ŕ`悷̂ - if(valueIdx == PARENTAL_ANSWER) - { - kindOffset[valueIdx] = drawKindOffset; - PutStringUTF16( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, gSecretAnswer) ; - } - else - { - // sjisŕ`悷 - kindOffset[valueIdx] = drawKindOffset; - PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); - } -} - - -void drawNormalHWMenu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) -{ - int drawLineOffset = linenum, drawKindOffset = linenum; - - // `悵ÂłɃCfNXf[^ - kindOffset[valueIdx] = drawKindOffset; - PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); - -} - - -void drawSecureHWMenu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) -{ - int drawLineOffset = linenum, drawKindOffset = linenum; - - // sKvȍڂƕ`ʒu邽 - // `ItZbg𒲐鏈Kv - if( valueIdx >= SECURE_HW_FORCE_DISABLE && page == getPageNum( SECURE_HW_FORCE_DISABLE, pageOffset ) ) - { - drawLineOffset++; - } - - if( valueIdx > SECURE_HW_UNIQUE_ID && page == getPageNum( SECURE_HW_UNIQUE_ID, pageOffset ) ) - { - drawLineOffset += OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3 / UNIQUE_BUF; - } - - // 悤ɍږ̃ItZbg - if( valueIdx > SECURE_HW_FORCE_DISABLE && page == getPageNum( SECURE_HW_FORCE_DISABLE, pageOffset ) ) - { - drawKindOffset++; - } - - if( valueIdx > SECURE_HW_UNIQUE_ID && page == getPageNum( SECURE_HW_UNIQUE_ID, pageOffset ) ) - { - drawKindOffset += OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3 / UNIQUE_BUF; - } - - - // `悷A‚łɃCfNXf[^ - if( valueIdx == SECURE_HW_UNIQUE_ID ) - { - kindOffset[valueIdx] = drawKindOffset; - printUniqueID(drawLineOffset); - } - else - { - kindOffset[valueIdx] = drawKindOffset; - PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); - } -} - -void drawSCFGARM7Menu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) -{ - kindOffset[valueIdx] = linenum; -} - -void drawSCFGARM9Menu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) -{ - int drawLineOffset = linenum, drawKindOffset = linenum; - - PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); - kindOffset[valueIdx] = drawKindOffset; - -} - -void drawVersionMenu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) -{ - int drawLineOffset = linenum, drawKindOffset = linenum; - - PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); - kindOffset[valueIdx] = drawKindOffset; - -} -*/ - -void printUniqueID( int drawLineOffset, char *uniqueId) -// j[NID𐮌`ďo -{ - char buf[UNIQUE_BUF+1]; - int i; - - for( i=0; i * UNIQUE_BUF < OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3 ; i++) - { - strncpy(buf, &uniqueId[i * UNIQUE_BUF], UNIQUE_BUF); - buf[UNIQUE_BUF] = '\0'; - PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET * (drawLineOffset + i), TXT_COLOR_BLACK, buf ); - } - -} - -int getPageNum( int valueIdx, const int* pageOffset ) -// valueIdxy[Wڂɂ邩pageOffset璲ׂ -{ - int i; - - for( i=0; i < MAXITEM - 1; i++ ) - { - if( valueIdx > pageOffset[i] && valueIdx < pageOffset[i+1] ) - { - return i; - } - } - - return -1; -} - -const static int gRegisterIdx[2][SCFG_ARM7_MENU_SIZE] = { - // ARM7, ARM9SCFG̊eڂWX^ɂđΉĂ̂XgŋLq - - // ARM7 side - { - DISP_REG_SCFG_ROM_ARM9SEL_SHIFT, - DISP_REG_SCFG_ROM_ARM9RSEL_SHIFT, - DISP_REG_SCFG_ROM_ARM7SEL_SHIFT, - DISP_REG_SCFG_ROM_ARM7RSEL_SHIFT, - DISP_REG_SCFG_ROM_ARM7FUSE_SHIFT, - DISP_REG_SCFG_ROM_ROMWE_SHIFT, - - DISP_REG_SCFG_CLK_SD1HCLK_SHIFT + 32, - DISP_REG_SCFG_CLK_SD2HCLK_SHIFT + 32, - DISP_REG_SCFG_CLK_AESHCLK_SHIFT + 32, - DISP_REG_SCFG_CLK_WRAMHCLK_SHIFT + 32, - DISP_REG_SCFG_CLK_SNDMCLK_SHIFT + 32, - - DISP_REG_SCFG_JTAG_ARM7SEL_SHIFT + 48, - DISP_REG_SCFG_JTAG_CPUJE_SHIFT + 48, - DISP_REG_SCFG_JTAG_DSPJE_SHIFT + 48, - - DISP_REG_SCFG_EXT_DMA_SHIFT + 64, - DISP_REG_SCFG_EXT_SDMA_SHIFT + 64, - DISP_REG_SCFG_EXT_SND_SHIFT + 64, - DISP_REG_SCFG_EXT_MC_SHIFT + 64, - DISP_REG_SCFG_EXT_INTC_SHIFT + 64, - DISP_REG_SCFG_EXT_SPI_SHIFT + 64, - DISP_REG_SCFG_EXT_DSEL_SHIFT + 64, - DISP_REG_SCFG_EXT_SIO_SHIFT + 64, - DISP_REG_SCFG_EXT_LCDC_SHIFT + 64, - DISP_REG_SCFG_EXT_VRAM_SHIFT + 64, - DISP_REG_SCFG_EXT_PSRAM_SHIFT + 64, - DISP_REG_SCFG_EXT_DMAC_SHIFT + 64, - DISP_REG_SCFG_EXT_AES_SHIFT + 64, - DISP_REG_SCFG_EXT_SD1_SHIFT + 64, - DISP_REG_SCFG_EXT_SD2_SHIFT + 64, - DISP_REG_SCFG_EXT_MIC_SHIFT + 64, - DISP_REG_SCFG_EXT_I2S_SHIFT + 64, - DISP_REG_SCFG_EXT_I2C_SHIFT + 64, - DISP_REG_SCFG_EXT_GPIO_SHIFT + 64, - DISP_REG_SCFG_EXT_MC_B_SHIFT + 64, - DISP_REG_SCFG_EXT_WRAM_SHIFT + 64, - DISP_REG_SCFG_EXT_PUENABLE_SHIFT + 64, - DISP_REG_SCFG_EXT_CFG_SHIFT + 64, - - DISP_REG_MI_MC1_SL1_CDET_SHIFT + 96, - DISP_REG_MI_MC1_SL1_M0_SHIFT + 96, - DISP_REG_MI_MC1_SL2_CDET_SHIFT + 96, - DISP_REG_MI_MC1_SL2_M0_SHIFT + 96, - DISP_REG_MI_MC1_SWP_SHIFT + 96, - DISP_REG_MI_MC1_CC_SHIFT + 96, - - DISP_REG_MI_MC2_CA_SHIFT + 128, - - DISP_REG_SCFG_WL_OFFB_SHIFT + 144, - - DISP_REG_SCFG_OP_OP0_SHIFT + 160, - DISP_REG_SCFG_OP_OP0_SHIFT + 160 - }, - - // ARM9 side - { - REG_SCFG_A9ROM_SEC_SHIFT, - REG_SCFG_A9ROM_RSEL_SHIFT, - - REG_SCFG_CLK_CPUSPD_SHIFT + 16, - REG_SCFG_CLK_DSPHCLK_SHIFT + 16, - REG_SCFG_CLK_CAMHCLK_SHIFT + 16, - REG_SCFG_CLK_WRAMHCLK_SHIFT + 16, - REG_SCFG_CLK_CAMCKI_SHIFT + 16, - - REG_SCFG_RST_DSPRSTB_SHIFT + 32, - - REG_SCFG_EXT_DMA_SHIFT + 48, - REG_SCFG_EXT_GEO_SHIFT + 48, - REG_SCFG_EXT_REN_SHIFT + 48, - REG_SCFG_EXT_G2DE_SHIFT + 48, - REG_SCFG_EXT_DIV_SHIFT + 48, - REG_SCFG_EXT_MC_SHIFT + 48, - REG_SCFG_EXT_INTC_SHIFT + 48, - REG_SCFG_EXT_LCDC_SHIFT + 48, - REG_SCFG_EXT_VRAM_SHIFT + 48, - REG_SCFG_EXT_PSRAM_SHIFT + 48, - REG_SCFG_EXT_DMAC_SHIFT + 48, - REG_SCFG_EXT_CAM_SHIFT + 48, - REG_SCFG_EXT_DSP_SHIFT + 48, - REG_SCFG_EXT_MC_B_SHIFT + 48, - REG_SCFG_EXT_WRAM_SHIFT + 48, - REG_SCFG_EXT_CFG_SHIFT + 48, - - } -}; \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.h b/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.h deleted file mode 100644 index 50958e22..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.h +++ /dev/null @@ -1,54 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: drawFunc.h - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __DRAW_FUNC__ -#define __DRAW_FUNC__ - -#include -#include "strResource.h" - -#ifdef __cplusplus -extern "C" { -#endif - - - - -// ej[TCY - -#define DISP_NUM_LINES 11 // y[W̍ڐ - -/* global variables ----------------- */ - -#define MAXITEM 50 -#define MAXPAGE 5 - -// eڂ\Ƃ̍sItZbg\ -extern int gMenuKindOffset[ROOTMENU_SIZE][MAXITEM]; - -/* function prototypes ----------------- */ - -void drawHeader( int menu, int line ); -void drawMenu( int menu, int line, int changeLine, u8 mode ); -void printResult( BOOL res ); -void switchViewMode( void ); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/build/tests/DisplaySystemInformation/ARM9/src/getInformation.h b/build/tests/DisplaySystemInformation/ARM9/src/getInformation.h deleted file mode 100644 index e861e041..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/getInformation.h +++ /dev/null @@ -1,59 +0,0 @@ - -#ifndef __DISPLAY_INFO_GETINFORMATION__ - -#include - -#define __DISPLAY_INFO_GETINFORMATION__ - -// ǂݍ݂ۂ -static BOOL firstRead; - -// NANDAv -extern s32 gNumContents; -extern OSTitleId *gContentsTitle; -extern u16 *gContentsVersion; - -#ifndef VERSION_VIEWER - -#define TWL_SYSMENU_VER_STR_LEN 28 // VXej[o[WMAX bytes -#define TWL_EULA_URL_LEN 128 -#define TWL_NUP_HOSTNAME_LEN 64 - -#define NUM_FONT_INFO 3 // tHg“̃j[BOATCYAnbV̎O - -typedef struct FontInfo{ - u8 *name; // O - u32 size; // 傫 - u8 *data; // f[^{ - u8 *hash; // f[^̃nbVl - BOOL isHashOK; // nbVlm̂̂ƈv邩 -} FontInfo; - - - -// LtHg -extern FontInfo gFontInfo[ OS_SHARED_FONT_MAX ]; - -// LCFGf[^ǂݍނ߂̃obt@ -extern u8 *bufLCFG; - -#endif // ifndef VERSION_VIEWER - -void getVersions( void ); -void getContentsVersion( void ); - -#ifndef VERSION_VIEWER -void getSysmenuInfo( void ); -void getSCFGInfo( void ); -void getOwnerInfo( void ); -void getHWInfo( void ); -void getParentalInfo( void ); -void getOtherInfo( void ); -void getSecureUserInfo( void ); -void getFontInfo( void ); -void getWLInfo( void ); -void getWhiteListInfo( void ); - -#endif // ifndef VERSION_VIEWER - -#endif // ifdef __DISPLAY_INFO_GETINFORMATION__ \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/get_font.c b/build/tests/DisplaySystemInformation/ARM9/src/get_font.c deleted file mode 100644 index 843b8679..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/get_font.c +++ /dev/null @@ -1,118 +0,0 @@ -#include -#include - -#include "misc.h" -#include "viewSystemInfo.h" -#include "strResource.h" -#include "getInformation.h" -#include "util.h" - -#define NUM_FONT_HASHDATA 3 - -const static char* s_strFontHash[] = { - "07381F6C1FF7421BA309196FA9FC750706B031AD", - "EF271DAD8B67EDB3DDE2655C6C35288D1334132D", - "28e68d0496ab28d7f082b70fc8f4f9081dee2ccc" -}; - -FontInfo gFontInfo[ OS_SHARED_FONT_MAX ]; - -void loadFontName( OSSharedFontIndex idx ); -void loadFont( OSSharedFontIndex idx ); -void releaseFont( OSSharedFontIndex idx ); -BOOL checkFontHash( OSSharedFontIndex idx ); - - -void getFontInfo( void ) -{ - u32 time; - int tableSize = 0; - u8 *tableBuf; - OSSharedFontIndex fontIdx; - - OS_InitSharedFont(); - - // tHge[uobt@̊m - tableSize = OS_GetSharedFontTableSize(); - tableBuf = (u8*) Alloc ( (u32)tableSize ); - SDK_ASSERT( tableBuf ); - - time = OS_GetSharedFontTimestamp(); - OS_TPrintf("SharedFont Time Stamp %08lx\n", time ); - gAllInfo[MENU_FONT][FONT_TIMESTAMP].iValue = (int) time; - gAllInfo[MENU_FONT][FONT_TIMESTAMP].isNumData = TRUE; - - if( ! OS_LoadSharedFontTable( (void*)tableBuf ) ) - { - OS_TPrintf("Loading shared font table failed.\n"); - Free(tableBuf); - return; - } - - for( fontIdx = (OSSharedFontIndex) 0; fontIdx < OS_SHARED_FONT_MAX; fontIdx++ ) - { - loadFontName( fontIdx ); - - // TCY擾 - gFontInfo[fontIdx].size = (u32) OS_GetSharedFontSize( (OSSharedFontIndex)fontIdx ); - - loadFont( fontIdx ); - gFontInfo[fontIdx].isHashOK = checkFontHash( fontIdx ); - releaseFont( fontIdx ); - } - - Free(tableBuf); - s_numMenu[MENU_FONT] = FONT_INFO + ( NUM_FONT_INFO * OS_SHARED_FONT_MAX ); -} - -void loadFontName( OSSharedFontIndex idx ) -{ - // O擾 - const u8* fontName = OS_GetSharedFontName( (OSSharedFontIndex)idx ); - int fontNameLength = STD_StrLen( (char*)fontName ); - - OS_TPrintf("fontname length: %d\n", fontNameLength ); - if( gFontInfo[idx].name == NULL ){ - // ÔƂɃ蓖ĂĂȂ肵 - - gFontInfo[idx].name = (u8*) Alloc ( sizeof(u8) * (fontNameLength + 1) ); - } - - SDK_ASSERT( gFontInfo[idx].name ); - STD_StrLCpy( (char*)gFontInfo[idx].name, (char*)fontName, fontNameLength + 1 ); -} - -void loadFont( OSSharedFontIndex idx ) -{ - // łʂɕiKvȂ킯Ȃ烁mۂ̂߂ɂ - // nbVlIJ悤ɂ邩ȁH - if( gFontInfo[idx].data == NULL ) - { - // f[^obt@Ƀ蓖ĂĂȂA - // 肵ꍇ͊蓖ĂȂB - - gFontInfo[idx].data = (u8*) Alloc ( gFontInfo[idx].size ); - } - - SDK_ASSERT( gFontInfo[idx].data ); - OS_LoadSharedFont( idx, (void*)gFontInfo[idx].data ); -} - -void releaseFont( OSSharedFontIndex idx ) -{ - if( gFontInfo[idx].data != NULL ) - { - Free( gFontInfo[idx].data ); - } -} - -BOOL checkFontHash( OSSharedFontIndex idx ) -{ - u8 digestBuf[MATH_SHA1_DIGEST_SIZE], cmpBuf[MATH_SHA1_DIGEST_SIZE]; - - // ԁAؗpꂼ̃nbVZo - strToHexa( s_strFontHash[idx], cmpBuf, MATH_SHA1_DIGEST_SIZE ); - MATH_CalcSHA1( digestBuf, gFontInfo[idx].data , gFontInfo[idx].size ); - - return MI_CpuComp8( cmpBuf, digestBuf, MATH_SHA1_DIGEST_SIZE ) == 0; -} \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/get_hw.c b/build/tests/DisplaySystemInformation/ARM9/src/get_hw.c deleted file mode 100644 index ab1f42df..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/get_hw.c +++ /dev/null @@ -1,108 +0,0 @@ -#include -//#include -#include -#include - - -#include "viewSystemInfo.h" -#include "strResource.h" -#include "getInformation.h" - -void getNormalHWInfo( void ); -void getSecureHWInfo( void ); - -void getHWInfo( void ) -{ - getNormalHWInfo(); - getSecureHWInfo(); -} - - -void getNormalHWInfo( void ) -{ - int value; - - - value = (int)LCFG_NSD_GetRTCClockAdjust(); - gAllInfo[MENU_NORMAL_HW][NORMAL_HW_RTC_ADJUST].iValue = value; - gAllInfo[MENU_NORMAL_HW][NORMAL_HW_RTC_ADJUST].isNumData = TRUE; - gAllInfo[MENU_NORMAL_HW][NORMAL_HW_RTC_ADJUST].fromLCFG = TRUE; - - { - int i; - char ascii[] = "0123456789abcdef"; - const u8 *unq = OS_GetMovableUniqueIDPtr(); - // 16i1oCg‹l߂Ă - // obt@3{Ȃ̂́Af[^"%02x-%02x-%02x..."ɒu邽 - for(i=0; i < OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3; i += 3, unq++ ) - { - gAllInfo[MENU_NORMAL_HW][NORMAL_HW_UNIQUE_ID].str.sjis[i] = ascii[(*unq>>4) & 0x0f]; - gAllInfo[MENU_NORMAL_HW][NORMAL_HW_UNIQUE_ID].str.sjis[i+1] = ascii[*unq & 0x0f]; - gAllInfo[MENU_NORMAL_HW][NORMAL_HW_UNIQUE_ID].str.sjis[i+2] = - (i+2) == (OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3 - 1) ? (char)'\0' : (char)'-' ; - OS_TPrintf("uniqid: %d\n", *unq); - } - } - -} - -void getSecureHWInfo( void ) -{ - int value; - - value = OS_IsForceDisableWireless(); - gAllInfo[MENU_SECURE_HW][SECURE_HW_FORCE_DISABLE].iValue = value; - gAllInfo[MENU_SECURE_HW][SECURE_HW_FORCE_DISABLE].str.sjis = s_strBool[ value ]; - gAllInfo[MENU_SECURE_HW][SECURE_HW_FORCE_DISABLE].isAligned = FALSE; - gAllInfo[MENU_SECURE_HW][SECURE_HW_FORCE_DISABLE].numLines = 2; - - value = OS_GetRegion(); - gAllInfo[MENU_SECURE_HW][SECURE_HW_REGION].iValue = value; - gAllInfo[MENU_SECURE_HW][SECURE_HW_REGION].str.sjis = s_strRegion[ value ]; - - { - u8 serialBuf[OS_TWL_HWINFO_SERIALNO_LEN_MAX]; - OS_GetSerialNo( serialBuf ); - snprintf( gAllInfo[MENU_SECURE_HW][SECURE_HW_SERIAL].str.sjis , OS_TWL_HWINFO_SERIALNO_LEN_MAX, "%s", serialBuf); - } - - { - u64 buf; - buf = OS_GetValidLanguageBitmap(); - OS_TPrintf("language bitmap : %lx\n", buf ); - snprintf( gAllInfo[MENU_SECURE_HW][SECURE_HW_LANGUAGE].str.sjis , - DISPINFO_BUFSIZE-1, "%08lx", OS_GetValidLanguageBitmap() ); - - - // fuseRomf[^̓ǂݏo - // secureȃAvȊO̓n[hIɐ؂藣̂Ń[ɂȂ - buf = SCFG_ReadFuseData(); - OS_TPrintf("fuse data : %016llx\n", buf); - snprintf( gAllInfo[MENU_SECURE_HW][SECURE_HW_FUSE].str.sjis , - DISPINFO_BUFSIZE-1, "%016llx", SCFG_ReadFuseData() ); - gAllInfo[MENU_SECURE_HW][SECURE_HW_FUSE].numLines = 2; - - } - - // `̃^CgIDLo̎擾 - if( LCFG_ReadHWSecureInfo() ) - { - const u8 *titleIDLo = LCFG_THW_GetLauncherTitleID_LoPtr(); - value = ( int )( titleIDLo[0] << 8*3 | - titleIDLo[1] << 8*2 | - titleIDLo[2] << 8*1 | - titleIDLo[3] << 8*0 ); - - gAllInfo[MENU_SECURE_HW][SECURE_HW_LAUNCHER_ID].iValue = value; - gAllInfo[MENU_SECURE_HW][SECURE_HW_LAUNCHER_ID].isNumData = TRUE; - } - else - { - gAllInfo[MENU_SECURE_HW][SECURE_HW_LAUNCHER_ID].str.sjis = s_strNA; - } - - gAllInfo[MENU_SECURE_HW][SECURE_HW_LAUNCHER_ID].isAligned = FALSE; - gAllInfo[MENU_SECURE_HW][SECURE_HW_LAUNCHER_ID].numLines = 2; - gAllInfo[MENU_SECURE_HW][SECURE_HW_LAUNCHER_ID].fromLCFG = TRUE; - -} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/get_other.c b/build/tests/DisplaySystemInformation/ARM9/src/get_other.c deleted file mode 100644 index 2b53a7d1..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/get_other.c +++ /dev/null @@ -1,69 +0,0 @@ -#include -#include - -#include "viewSystemInfo.h" -#include "strResource.h" -#include "getInformation.h" - -void getOtherInfo( void ) -{ - // ̕ӂ}NŐ - s64 rtcoffset; - int value; - LCFGTWLTPCalibData tpdata; - - value = OS_IsAgreeEULA(); - gAllInfo[MENU_OTHER][OTHER_AGREE_EULA].iValue = value; - gAllInfo[MENU_OTHER][OTHER_AGREE_EULA].str.sjis = s_strBool[value]; - - gAllInfo[MENU_OTHER][OTHER_EULA_VERSION].iValue = OS_GetAgreedEULAVersion(); - gAllInfo[MENU_OTHER][OTHER_EULA_VERSION].isNumData = TRUE; - - value = OS_IsAvailableWireless(); - gAllInfo[MENU_OTHER][OTHER_WIRELESS].iValue = value; - gAllInfo[MENU_OTHER][OTHER_WIRELESS].str.sjis = s_strEnable[value]; - - rtcoffset = OS_GetOwnerRtcOffset(); - snprintf( gAllInfo[MENU_OTHER][OTHER_RTC_OFFSET].str.sjis, - DISPINFO_BUFSIZE-1, "%016llx", rtcoffset ); - gAllInfo[MENU_OTHER][OTHER_RTC_OFFSET].numLines = 2; - - LCFG_TSD_GetTPCalibration( &tpdata ); - gAllInfo[MENU_OTHER][OTHER_TP_RAWX1].iValue = tpdata.data.raw_x1; - gAllInfo[MENU_OTHER][OTHER_TP_RAWX1].isNumData = TRUE; - gAllInfo[MENU_OTHER][OTHER_TP_RAWX1].fromLCFG = TRUE; - - gAllInfo[MENU_OTHER][OTHER_TP_RAWX2].iValue = tpdata.data.raw_x2; - gAllInfo[MENU_OTHER][OTHER_TP_RAWX2].isNumData = TRUE; - gAllInfo[MENU_OTHER][OTHER_TP_RAWX2].fromLCFG = TRUE; - - gAllInfo[MENU_OTHER][OTHER_TP_DX1].iValue = tpdata.data.dx1; - gAllInfo[MENU_OTHER][OTHER_TP_DX1].isNumData = TRUE; - gAllInfo[MENU_OTHER][OTHER_TP_DX1].fromLCFG = TRUE; - - gAllInfo[MENU_OTHER][OTHER_TP_DY1].iValue = tpdata.data.dy1; - gAllInfo[MENU_OTHER][OTHER_TP_DY1].isNumData = TRUE; - gAllInfo[MENU_OTHER][OTHER_TP_DY1].fromLCFG = TRUE; - - gAllInfo[MENU_OTHER][OTHER_TP_RAWY1].iValue = tpdata.data.raw_y1; - gAllInfo[MENU_OTHER][OTHER_TP_RAWY1].isNumData = TRUE; - gAllInfo[MENU_OTHER][OTHER_TP_RAWY1].fromLCFG = TRUE; - - gAllInfo[MENU_OTHER][OTHER_TP_RAWY2].iValue = tpdata.data.raw_y2; - gAllInfo[MENU_OTHER][OTHER_TP_RAWY2].isNumData = TRUE; - gAllInfo[MENU_OTHER][OTHER_TP_RAWY2].fromLCFG = TRUE; - - gAllInfo[MENU_OTHER][OTHER_TP_DX2].iValue = tpdata.data.dx2; - gAllInfo[MENU_OTHER][OTHER_TP_DX2].isNumData = TRUE; - gAllInfo[MENU_OTHER][OTHER_TP_DX2].fromLCFG = TRUE; - - gAllInfo[MENU_OTHER][OTHER_TP_DY2].iValue = tpdata.data.dy2; - gAllInfo[MENU_OTHER][OTHER_TP_DY2].isNumData = TRUE; - gAllInfo[MENU_OTHER][OTHER_TP_DY2].fromLCFG = TRUE; - - snprintf( gAllInfo[MENU_OTHER][OTHER_TP_RSV].str.sjis, - DISPINFO_BUFSIZE, "%016llx", MI_LoadLE64( tpdata.rsv ) ); - gAllInfo[MENU_OTHER][OTHER_TP_RSV].fromLCFG = TRUE; - - -} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/get_owner.c b/build/tests/DisplaySystemInformation/ARM9/src/get_owner.c deleted file mode 100644 index bc9246b4..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/get_owner.c +++ /dev/null @@ -1,37 +0,0 @@ -#include -#include -#include - -#include "viewSystemInfo.h" -#include "strResource.h" -#include "getInformation.h" - - -void getOwnerInfo( void ) -// I[i[擾 -{ - OSOwnerInfoEx ownerInfo; - - OS_TPrintf( "...Owner Information\n"); - // {̐ݒ܂ - OS_GetOwnerInfoEx( &ownerInfo ); - - // S̏ɂ‚߂Ă - // DLȂ̂łƂōl - gAllInfo[MENU_OWNER][OWNER_LANGUAGE].str.sjis = s_strLanguage[ ownerInfo.language ]; - gAllInfo[MENU_OWNER][OWNER_LANGUAGE].iValue = ownerInfo.language; - - gAllInfo[MENU_OWNER][OWNER_COLOR].str.sjis = s_strUserColor[ ownerInfo.favoriteColor ]; - gAllInfo[MENU_OWNER][OWNER_COLOR].iValue = ownerInfo.favoriteColor; - - snprintf( gAllInfo[MENU_OWNER][OWNER_BIRTHDAY].str.sjis, DISPINFO_BUFSIZE-1, "%02d/%02d", ownerInfo.birthday.month, ownerInfo.birthday.day); - gAllInfo[MENU_OWNER][OWNER_BIRTHDAY].iValue = ownerInfo.birthday.month * 100 + ownerInfo.birthday.day; - - gAllInfo[MENU_OWNER][OWNER_COUNTRY].str.sjis = s_strCountry[ownerInfo.country]; - gAllInfo[MENU_OWNER][OWNER_COUNTRY].iValue = ownerInfo.country; - - wcsncpy( gAllInfo[MENU_OWNER][OWNER_NICKNAME].str.utf , ownerInfo.nickName, OS_OWNERINFO_NICKNAME_MAX + 1); - gAllInfo[MENU_OWNER][OWNER_NICKNAME].isSjis = FALSE; - wcsncpy( gAllInfo[MENU_OWNER][OWNER_COMMENT].str.utf , ownerInfo.comment, OS_OWNERINFO_COMMENT_MAX + 1 ); - gAllInfo[MENU_OWNER][OWNER_COMMENT].isSjis = FALSE; -} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/get_parental.c b/build/tests/DisplaySystemInformation/ARM9/src/get_parental.c deleted file mode 100644 index 3e0021ca..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/get_parental.c +++ /dev/null @@ -1,53 +0,0 @@ -#include -#include -#include -#include - -#include "viewSystemInfo.h" -#include "strResource.h" -#include "getInformation.h" - -void getParentalInfo( void ) -// yA^Rg[擾 -{ - // yA^Rg[܂ - const LCFGTWLParentalControl *pPC = (const LCFGTWLParentalControl *) OS_GetParentalControlInfoPtr(); - - OS_TPrintf( "...Parental Control Information\n" ); - - gAllInfo[MENU_PARENTAL][PARENTAL_FLAG].str.sjis = s_strBool[ pPC->flags.isSetParentalControl ]; - gAllInfo[MENU_PARENTAL][PARENTAL_FLAG].iValue = (int) pPC->flags.isSetParentalControl; - - gAllInfo[MENU_PARENTAL][PARENTAL_PICTOCHAT].str.sjis = s_strBool[ pPC->flags.pictoChat ]; - gAllInfo[MENU_PARENTAL][PARENTAL_PICTOCHAT].iValue = (int) pPC->flags.pictoChat; - - gAllInfo[MENU_PARENTAL][PARENTAL_DOWNLOAD].str.sjis = s_strBool[ pPC->flags.dsDownload ]; - gAllInfo[MENU_PARENTAL][PARENTAL_DOWNLOAD].iValue = (int) pPC->flags.dsDownload; - - gAllInfo[MENU_PARENTAL][PARENTAL_BROWSER].str.sjis = s_strBool[ pPC->flags.browser ]; - gAllInfo[MENU_PARENTAL][PARENTAL_BROWSER].iValue = (int) pPC->flags.browser; - - gAllInfo[MENU_PARENTAL][PARENTAL_WIIPOINT].str.sjis = s_strBool[ pPC->flags.wiiPoint ]; - gAllInfo[MENU_PARENTAL][PARENTAL_WIIPOINT].iValue = (int) pPC->flags.wiiPoint; - - gAllInfo[MENU_PARENTAL][PARENTAL_PHOTO_EXCHANGE].str.sjis = s_strBool[ pPC->flags.photoExchange ]; - gAllInfo[MENU_PARENTAL][PARENTAL_PHOTO_EXCHANGE].iValue = (int) pPC->flags.photoExchange; - - gAllInfo[MENU_PARENTAL][PARENTAL_UGC].str.sjis = s_strBool[ pPC->flags.ugc ]; - gAllInfo[MENU_PARENTAL][PARENTAL_UGC].iValue = (int) pPC->flags.ugc; - - gAllInfo[MENU_PARENTAL][PARENTAL_ORGANIZATION].str.sjis = s_strRatingOrg[ pPC->ogn ]; - gAllInfo[MENU_PARENTAL][PARENTAL_ORGANIZATION].iValue = (int) pPC->ogn; - - gAllInfo[MENU_PARENTAL][PARENTAL_AGE].iValue = pPC->ratingAge; - gAllInfo[MENU_PARENTAL][PARENTAL_AGE].isNumData = TRUE; - - gAllInfo[MENU_PARENTAL][PARENTAL_QUESTION_ID].iValue = pPC->secretQuestionID; - gAllInfo[MENU_PARENTAL][PARENTAL_QUESTION_ID].isNumData = TRUE; - - gAllInfo[MENU_PARENTAL][PARENTAL_PASSWORD].iValue = atoi( pPC->password ) ; - gAllInfo[MENU_PARENTAL][PARENTAL_PASSWORD].isNumData = TRUE; - - wcsncpy( gAllInfo[MENU_PARENTAL][PARENTAL_ANSWER].str.utf , pPC->secretAnswer, OS_TWL_PCTL_SECRET_ANSWER_LENGTH_MAX + 1); - gAllInfo[MENU_PARENTAL][PARENTAL_ANSWER].isSjis = FALSE; -} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/get_scfg.c b/build/tests/DisplaySystemInformation/ARM9/src/get_scfg.c deleted file mode 100644 index bd9b96e4..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/get_scfg.c +++ /dev/null @@ -1,1137 +0,0 @@ - -#include -#include "getInformation.h" -#include "viewSystemInfo.h" -#include "strResource.h" -#include "myIoreg_SCFG.h" -//#include "misc.h" - -void getSCFGARM9Info( void ); -void getSCFGARM7InfoReg( void ); -void getSCFGARM7InfoShared( void ); -void setSCFGAccessFlag( BOOL flag ); -void setPsramBoundaryFlag( int idx ); -void setDSPResetFlag( BOOL flag ); -BOOL scfgTotalCheck( void ); -void getTotalCheckResult( void ); -u64 getArm7CheckData( BOOL isSecure, BOOL isNandAccessable, BOOL isVisibleSCFG, BOOL isDebugger ); -u32 getArm9CheckData( void ); - -void getSCFGInfo( void ) -{ - getSCFGARM9Info(); - getSCFGARM7InfoReg(); - getSCFGARM7InfoShared(); - getTotalCheckResult(); -} - -void getSCFGARM9Info( void ) -// ARM9Ŏ擾łSCFG擾 -// ARM9SCFGAPI̓WX^𒼐ڎQƂĂ̂ŁAAPIgĂWX^𒼐ڌĂl -{ - int value; - - // ROM䃌WX^ - - // IsSecureRomAccessible̕Ԃl̓WX^rbg] - value = !SCFG_IsSecureRomAccessible(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_ROM_SEC].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_ROM_SEC].str.sjis = s_strJoint[ value ]; - - value = SCFG_GetSystemRomType() == SCFG_SYSTEM_ROM_FOR_NITRO; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_ROM_STATE].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_ROM_STATE].str.sjis = s_strRomMode[ value ]; - - // NbN䃌WX^ - value = SCFG_GetCpuSpeed(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].str.sjis = s_strCpuSpeed[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].changeFunc.cBool = SCFG_SetCpuSpeed; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].kindNameList = s_strCpuSpeed; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].numKindName = 2; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].changable = TRUE; - - value = SCFG_IsClockSuppliedToDSP(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].str.sjis = s_strSupply[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].changeFunc.cBool = SCFG_SupplyClockToDSP; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].kindNameList = s_strSupply; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].numKindName = 2; - - value = SCFG_IsClockSuppliedToCamera(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].str.sjis = s_strSupply[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].changeFunc.cBool = SCFG_SupplyClockToCamera; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].kindNameList = s_strSupply; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].numKindName = 2; - - value = SCFG_IsClockSuppliedToWram(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_WRAM].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_WRAM].str.sjis = s_strSupply[ value ]; - - value = SCFG_IsCameraCKIClockEnable(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].changeFunc.cBool = SCFG_SetCameraCKIClock; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].kindNameList = s_strEnable; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].numKindName = 2; - - // VKubN䃌WX^ - value = ! SCFG_IsDSPReset(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].str.sjis = s_strBool[ !value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].kindNameList = s_strBool; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].changeFunc.cBool = setDSPResetFlag; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].numKindName = 2; - - // g@\䃌WX^ - - value = SCFG_IsDmacFixed() ; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].changeFunc.cBool = SCFG_SetDmacFixed; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].kindNameList = s_strEnable; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].numKindName = 2; - - value = SCFG_IsGeometryFixed() ; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].changeFunc.cBool = SCFG_SetGeometryFixed; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].kindNameList = s_strEnable; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].numKindName = 2; - - value = SCFG_IsRendererFixed() ; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].changeFunc.cBool = SCFG_SetRendererFixed; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].kindNameList = s_strEnable; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].numKindName = 2; - - value = SCFG_Is2DEngineFixed() ; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].changeFunc.cBool = SCFG_Set2DEngineFixed; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].kindNameList = s_strEnable; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].numKindName = 2; - - value = SCFG_IsDividerFixed(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].changeFunc.cBool = SCFG_SetDividerFixed; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].kindNameList = s_strEnable; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].numKindName = 2; - - value = SCFG_IsCardFixed() ; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].changeFunc.cBool = SCFG_SetCardFixed; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].kindNameList = s_strEnable; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].numKindName = 2; - - value = SCFG_IsIntcExpanded(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].changeFunc.cBool = SCFG_SetIntcExpanded; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].kindNameList = s_strEnable; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].numKindName = 2; - - value = SCFG_IsLCDCExpanded(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].changeFunc.cBool = SCFG_SetLCDCExpanded; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].kindNameList = s_strEnable; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].numKindName = 2; - - value = SCFG_IsVRAMExpanded(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].changeFunc.cBool = SCFG_SetVRAMExpanded; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].kindNameList = s_strEnable; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].numKindName = 2; - - { - u8 idx; - value = SCFG_GetPsramdBoundary(); - - if( value == SCFG_PSRAM_BOUNDARY_4MB ) - { - idx = 0; - } - else if ( value == SCFG_PSRAM_BOUNDARY_16MB ) - { - idx = 1; - } - else if ( value == SCFG_PSRAM_BOUNDARY_32MB ) - { - idx = 2; - } - - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].iValue = idx; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].str.sjis = s_strPSRAM[ idx ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].argType = ARG_INT; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].kindNameList = s_strPSRAM; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].numKindName = 3; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].changeFunc.cInt = setPsramBoundaryFlag; - } - - value = SCFG_IsNDmaAccessible(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].str.sjis = s_strAccess[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].changeFunc.cBool = SCFG_SetNDmaAccessible; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].kindNameList = s_strAccess; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].numKindName = 2; - - value = SCFG_IsCameraAccessible(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].str.sjis = s_strAccess[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].changeFunc.cBool = SCFG_SetCameraAccessible; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].kindNameList = s_strAccess; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].numKindName = 2; - - value = SCFG_IsDSPAccessible(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].str.sjis = s_strAccess[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].changeFunc.cBool = SCFG_SetDSPAccessible; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].kindNameList = s_strAccess; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].numKindName = 2; - - value = (reg_SCFG_EXT & REG_SCFG_EXT_MC_B_MASK) || 0; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MCB].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MCB].str.sjis = s_strAccess[ value ]; - - value = SCFG_IsWRAMAccessible(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_WRAM].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_WRAM].str.sjis = s_strAccess[ value ]; - - value = SCFG_IsConfigBlockAccessible(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].str.sjis = s_strAccess[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].kindNameList = s_strAccess; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].changeFunc.cBool = setSCFGAccessFlag; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].numKindName = 2; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].isAligned = FALSE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].numLines = 2; - -} - -void getSCFGARM7InfoReg( void ) -{ - // WX^ɒڊi[ĂقSCFGf[^擾 - - - int value; - - // ROM䃌WX^(L)A(H) - { - // SECtOTRUE = ؂藣(ANZXs), FALSE = ڑ(ANZX) - value = ( gArm7SCFGReg[DISP_REG_A9ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A9ROM_SEC_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_SEC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_SEC].str.sjis = s_strJoint[ value ]; - - value = ( gArm7SCFGReg[DISP_REG_A9ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A9ROM_RSEL_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_RSEL].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_RSEL].str.sjis = s_strRomMode[ value ]; - - // SECtOTRUE = ؂藣(ANZXs), FALSE = ڑ(ANZX) - value = ( gArm7SCFGReg[DISP_REG_A7ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A7ROM_SEC_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_SEC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_SEC].str.sjis = s_strJoint[ value ]; - - value = ( gArm7SCFGReg[DISP_REG_A7ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A7ROM_RSEL_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_RSEL].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_RSEL].str.sjis = s_strRomMode[ value ]; - - // FuseROMtOTRUE = ؂藣(ANZXs), FALSE = ڑ(ANZX) - value = ( gArm7SCFGReg[DISP_REG_A7ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A7ROM_FUSE_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_FUSE].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_FUSE].str.sjis = s_strJoint[ value ]; - - value = ( gArm7SCFGReg[DISP_REG_ROMWE_OFFSET - 0x4000] & DISP_REG_SCFG_ROMWE_WE_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_WE].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_WE].str.sjis = s_strEnable[ value ]; - } - - // VKubNNbN䃌WX^ - { - u16 flag = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_CLK_OFFSET - 0x4000] ); - - value = ( flag & DISP_REG_SCFG_CLK_SD1HCLK_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD1].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD1].str.sjis = s_strSupply[ value ]; - - value = ( flag & DISP_REG_SCFG_CLK_SD2HCLK_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD2].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD2].str.sjis = s_strSupply[ value ]; - - value = ( flag & DISP_REG_SCFG_CLK_AESHCLK_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_AES].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_AES].str.sjis = s_strSupply[ value ]; - - value = ( flag & DISP_REG_SCFG_CLK_WRAMHCLK_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_WRAM].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_WRAM].str.sjis = s_strSupply[ value ]; - - value = ( flag & DISP_REG_SCFG_CLK_SNDMCLK_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SND].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SND].str.sjis = s_strSupply[ value ]; - } - - // JTAG䃌WX^ - { - u16 flag = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_JTAG_OFFSET - 0x4000] ); - - value = ( flag & DISP_REG_SCFG_JTAG_ARM7SEL_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_A7].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_A7].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_A7].isAligned = FALSE; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_A7].numLines = 2; - - value = ( flag & DISP_REG_SCFG_JTAG_CPUJE_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_CPU].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_CPU].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_JTAG_DSPJE_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_DSP].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_DSP].str.sjis = s_strEnable[ value ]; - } - - // g@\䃌WX^ - { - u32 flag = MI_LoadLE32( &gArm7SCFGReg[DISP_REG_EXT_OFFSET - 0x4000] ); - - value = ( flag & DISP_REG_SCFG_EXT_DMA_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMA].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMA].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_SDMA_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SDMA].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SDMA].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_SND_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SND].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SND].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_MC_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].isAligned = FALSE; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].numLines = 2; - - value = ( flag & DISP_REG_SCFG_EXT_INTC_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].isAligned = FALSE; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].numLines = 2; - - value = ( flag & DISP_REG_SCFG_EXT_SPI_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SPI].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SPI].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_DSEL_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].isAligned = FALSE; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].numLines = 2; - - value = ( flag & DISP_REG_SCFG_EXT_SIO_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SIO].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SIO].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_LCDC_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_LCDC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_LCDC].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_VRAM_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_VRAM].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_VRAM].str.sjis = s_strEnable[ value ]; - - { - u8 idx = 0; - value = (int) ( (flag & DISP_REG_SCFG_EXT_PSRAM_MASK) >> DISP_REG_SCFG_EXT_PSRAM_SHIFT ); - - - if( value <= 1 ) - { - idx = 0; - } - else if ( value == 2 ) - { - idx = 1; - } - else if ( value == 3 ) - { - idx = 2; - } - - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PS].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PS].str.sjis = s_strPSRAM[idx]; - } - - value = ( flag & DISP_REG_SCFG_EXT_DMAC_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMAC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMAC].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_AES_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_AES].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_AES].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_SD1_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD1].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD1].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_SD2_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD2].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD2].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_MIC_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MIC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MIC].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_I2S_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2S].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2S].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_I2C_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2C].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2C].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_GPIO_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_GPIO].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_GPIO].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_MC_B_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MCB].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MCB].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_WRAM_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_WRAM].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_WRAM].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_PUENABLE_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PU].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PU].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_CFG_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_CFG].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_CFG].str.sjis = s_strEnable[ value ]; - - } - - // J[h I/F 䃌WX^ - { - u16 flag = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_MC_OFFSET - 0x4000] ); - - value = ( flag & DISP_REG_MI_MC_SL1_CDET_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC1_CDET].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC1_CDET].str.sjis = s_strBool[ value ]; - - value = ( flag & DISP_REG_MI_MC_SL2_CDET_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC2_CDET].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC2_CDET].str.sjis = s_strBool[ value ]; - - value = ( flag & DISP_REG_MI_MC_SWP_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SWP].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SWP].str.sjis = s_strBool[ value ]; - - value = (flag & DISP_REG_MI_MC_SL1_MODE_MASK) >> DISP_REG_MI_MC_SL1_MODE_SHIFT ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC1_MODE].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC1_MODE].str.sjis = s_strMCMode[value]; - - value = (flag & DISP_REG_MI_MC_SL2_MODE_MASK) >> DISP_REG_MI_MC_SL2_MODE_SHIFT; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC2_MODE].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC2_MODE].str.sjis = s_strMCMode[value]; - - flag = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_MCCHAT_OFFSET - 0x4000] ); - value = (flag & DISP_REG_MI_MCCHAT_CC_MASK) >> DISP_REG_MI_MCCHAT_CC_SHIFT; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_CC].iValue = value; - snprintf( gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_CC].str.sjis , DISPINFO_BUFSIZE-1, "%04x", value); - - flag = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_MC2_OFFSET - 0x4000] ); - value = (flag & DISP_REG_MI_MC2_CA_MASK ) >> DISP_REG_MI_MC2_CA_SHIFT; - ;gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_CA].iValue = value; - snprintf( gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_CA].str.sjis , DISPINFO_BUFSIZE-1, "%04x", value ); - } - - // M䃌WX^ - { - u8 flag = gArm7SCFGReg[DISP_REG_WL_OFFSET - 0x4000]; - - value = ( flag & DISP_REG_SCFG_WL_OFFB_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_WL_OFFB].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_WL_OFFB].str.sjis = s_strEnable[ value ]; - } - - // IvV[qǂݏoWX^ - { - - u8 flag = gArm7SCFGReg[DISP_REG_OP_OFFSET - 0x4000]; - value = (flag & DISP_REG_SCFG_OP_OPT_MASK) >> DISP_REG_SCFG_OP_OPT_SHIFT; - - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_OP_FORM].iValue = (value & 0x2) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_OP_FORM].str.sjis = value == 3 ? s_strRomForm[1] : s_strRomForm[0]; - - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_OP_APP].iValue = (value & 0x1) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_OP_APP].str.sjis = s_strRomApp[ value ]; - } -} - -void getSCFGARM7InfoShared( void ) -{ - // L̈ɑޔꂽقSCFGf[^擾 - int value; - - // g@\䃌WX^ (4byte) - { - u32 extData = MI_LoadLE32( &gArm7SCFGShared[HWi_WSYS04_OFFSET] ); - - value = (extData & DISP_REG_SCFG_EXT_DMA_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DMA].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DMA].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_SDMA_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SDMA].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SDMA].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_SND_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SND].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SND].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_MC_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MC].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MC].isAligned = FALSE; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MC].numLines = 2; - - value = (extData & DISP_REG_SCFG_EXT_INTC_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_INTC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_INTC].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_INTC].isAligned = FALSE; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_INTC].numLines = 2; - - value = (extData & DISP_REG_SCFG_EXT_SPI_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SPI].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SPI].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_DSEL_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DSEL].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DSEL].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DSEL].isAligned = FALSE; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DSEL].numLines = 2; - - value = (extData & DISP_REG_SCFG_EXT_LCDC_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_LCDC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_LCDC].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_VRAM_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_VRAM].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_VRAM].str.sjis = s_strEnable[ value ]; - - { - u8 idx = 0; - value = (int) ( (extData & HWi_WSYS04_EXT_PSRAM_MASK ) >> HWi_WSYS04_EXT_PSRAM_SHIFT ); - - if( value <= 1 ) - { - idx = 0; - } - else if ( value == 2 ) - { - idx = 1; - } - else if ( value == 3 ) - { - idx = 2; - } - - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_PS].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_PS].str.sjis = s_strPSRAM[idx]; - } - - value = (extData & DISP_REG_SCFG_EXT_DMAC_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DMAC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DMAC].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_AES_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_AES].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_AES].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_SD1_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SD1].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SD1].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_SD2_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SD2].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SD2].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_MIC_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MIC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MIC].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_I2S_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_I2S].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_I2S].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_I2C_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_I2C].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_I2C].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_GPIO_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_GPIO].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_GPIO].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_MC_B_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MCB].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MCB].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_WRAM_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_WRAM].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_WRAM].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_PUENABLE_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_PU].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_PU].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_CFG_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_CFG].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_CFG].str.sjis = s_strEnable[ value ]; - } - - // {fBOAromԁAWX^ ( 1byte ) - { - u8 regData = gArm7SCFGShared[HWi_WSYS08_OFFSET]; - - value = (regData & HWi_WSYS08_OP_OPT_MASK) >> HWi_WSYS08_OP_OPT_SHIFT ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_OP_FORM].iValue = (value & 0x2) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_OP_FORM].str.sjis = value == 3 ? s_strRomForm[1] : s_strRomForm[0]; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_OP_APP].iValue = (value & 0x1) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_OP_APP].str.sjis = s_strRomApp[ value ]; - - // rom - value = ( regData & HWi_WSYS08_ROM_ARM9SEC_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM9_SEC ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM9_SEC ].str.sjis = s_strJoint[ value ] ; - - value = ( regData & HWi_WSYS08_ROM_ARM9RSEL_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM9_RSEL ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM9_RSEL ].str.sjis = s_strRomMode[value] ; - - value = ( regData & HWi_WSYS08_ROM_ARM7RSEL_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM7_RSEL ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM7_RSEL ].str.sjis = s_strRomMode[value] ; - - value = ( regData & HWi_WSYS08_ROM_ARM7FUSE_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM7_FUSE ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM7_FUSE ].str.sjis = s_strJoint[ value ] ; - - // - value = ( regData & HWi_WSYS08_WL_OFFB_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_WL_OFFB ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_WL_OFFB ].str.sjis = s_strEnable[value] ; - - } - - // jtagAclkWX^ ( 1byte ) - { - u8 regData = gArm7SCFGShared[HWi_WSYS09_OFFSET]; - - value = ( regData & HWi_WSYS09_JTAG_ARM7SEL_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_A7 ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_A7 ].str.sjis = s_strEnable[value] ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_A7 ].isAligned = FALSE; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_A7 ].numLines = 2; - - value = ( regData & HWi_WSYS09_JTAG_CPUJE_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_CPU ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_CPU ].str.sjis = s_strEnable[value] ; - - value = ( regData & HWi_WSYS09_JTAG_DSPJE_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_DSP ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_DSP ].str.sjis = s_strEnable[value] ; - - value = ( regData & HWi_WSYS09_CLK_SD1HCLK_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_SD1 ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_SD1 ].str.sjis = s_strSupply[value] ; - - value = ( regData & HWi_WSYS09_CLK_SD2HCLK_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_SD2 ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_SD2 ].str.sjis = s_strSupply[value] ; - - value = ( regData & HWi_WSYS09_CLK_AESHCLK_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_AES ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_AES ].str.sjis = s_strSupply[value] ; - - value = ( regData & HWi_WSYS09_CLK_WRAMHCLK_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_WRAM ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_WRAM].str.sjis = s_strSupply[value] ; - - value = ( regData & HWi_WSYS09_CLK_SNDMCLK_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_SND ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_SND ].str.sjis = s_strSupply[value] ; - } -} - -void setDSPResetFlag( BOOL flag ) -{ - if( flag ) - { - SCFG_ResetDSP(); - } - else - { - SCFG_ReleaseResetDSP(); - } -} - -void setPsramBoundaryFlag( int idx ) -{ - SCFGPsramBoundary value; - - if( idx < 0 || 2 < idx ) - { - return; - } - - OS_TPrintf("call setPsramBoundary( %d )\n", idx ); - - switch( idx ) - { - case 0: - value = SCFG_PSRAM_BOUNDARY_4MB; - break; - - case 1: - value = SCFG_PSRAM_BOUNDARY_16MB; - break; - - case 2: - value = SCFG_PSRAM_BOUNDARY_32MB; - break; - } - - SCFG_SetPsramBoundary( value ); -} - -void setSCFGAccessFlag( BOOL flag ) -{ - // Inaccessible = falseȂ̂ŃtO] - if( !flag ) - { - SCFG_SetConfigBlockInaccessible(); - } -} - -void getTotalCheckResult( void ) -{ - BOOL isSecure; - BOOL isNandAccessable; - BOOL isVisibleSCFG; - BOOL isDebugger; - u64 arm7res; - u32 arm9res; - - isDebugger = ( OS_GetRunningConsoleType() & OS_CONSOLE_TWLDEBUGGER ) || 0; - - switch( DISPINFO_BIN_IDX ) - { - case 0: - case 4: - isSecure = FALSE; - isNandAccessable = TRUE; - isVisibleSCFG = FALSE; - break; - - case 1: - case 5: - isSecure = FALSE; - isNandAccessable = TRUE; - isVisibleSCFG = TRUE; - break; - case 2: - isSecure = FALSE; - isNandAccessable = FALSE; - isVisibleSCFG = FALSE; - break; - case 3: - isSecure = FALSE; - isNandAccessable = FALSE; - isVisibleSCFG = TRUE; - break; - case 6: - case 8: - case 14: - case 16: - isSecure = TRUE; - isNandAccessable = TRUE; - isVisibleSCFG = FALSE; - break; - - case 7: - case 9: - case 15: - case 17: - isSecure = TRUE; - isNandAccessable = TRUE; - isVisibleSCFG = TRUE; - break; - - case 10: - case 12: - isSecure = TRUE; - isNandAccessable = FALSE; - isVisibleSCFG = FALSE; - break; - - case 11: - case 13: - isSecure = TRUE; - isNandAccessable = FALSE; - isVisibleSCFG = TRUE; - break; - - default: - // mast not come here - return; - } - - // SCFGf[^̌ - arm7res = getArm7CheckData( isSecure, isNandAccessable, isVisibleSCFG, isDebugger ); - arm9res = getArm9CheckData( ); - - - // Ƃ0ԂĂΐ - if( !arm7res && !arm9res ) - { - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_TOTAL_CHECK].str.sjis = s_strCorrect[TRUE]; - STD_StrLCpy( gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CHECK_ERROR7].str.sjis, s_strNA, DISPINFO_BUFSIZE ); - STD_StrLCpy( gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CHECK_ERROR9].str.sjis, s_strNA, DISPINFO_BUFSIZE ); - } - else - { - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_TOTAL_CHECK].str.sjis = s_strCorrect[FALSE]; - STD_TSNPrintf( gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CHECK_ERROR7].str.sjis, - DISPINFO_BUFSIZE, "%012llx", arm7res ); - STD_TSNPrintf( gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CHECK_ERROR9].str.sjis, - DISPINFO_BUFSIZE, "%08x", arm9res ); - - } -} -/* -BOOL scfgTotalCheck( BOOL isSecure, BOOL isNandAccessable, BOOL isVisibleSCFG, BOOL isDebugger ) -{ - // ARM7 check - - if( isVisibleSCFG && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_SEC].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_RSEL].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_SEC].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_RSEL].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_FUSE].iValue != isSecure && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_WE].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD1].iValue == isNandAccessable && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD2].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_AES].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_WRAM].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SND].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMA].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SDMA].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SND].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SPI].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SIO].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_LCDC].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_VRAM].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PS].iValue == 3 && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMAC].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_AES].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD1].iValue == isNandAccessable && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD2].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MIC].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2S].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2C].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_GPIO].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MCB].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_WRAM].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PU].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_CFG].iValue ) - { - arm7res = TRUE; - } - else if( !isVisibleSCFG && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_SEC].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_RSEL].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_SEC].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_RSEL].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_FUSE].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_WE].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD1].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD2].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_AES].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_WRAM].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SND].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMA].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SDMA].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SND].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SPI].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SIO].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_LCDC].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_VRAM].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PS].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMAC].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_AES].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD1].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD2].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MIC].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2S].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2C].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_GPIO].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MCB].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_WRAM].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PU].iValue && - !gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_CFG].iValue ) - { - arm7res = TRUE; - } - else - { - arm7res = FALSE; - } - - - // arm9 check - // SCFGLockł - if( gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_ROM_SEC].iValue && - ! gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_ROM_STATE].iValue && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].iValue && - ! gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].iValue && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].iValue && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_WRAM].iValue && - ! gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].iValue && - ! gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].iValue && - ! gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].iValue && - ! gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].iValue && - ! gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].iValue && - ! gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].iValue && - ! gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].iValue && - ! gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].iValue && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].iValue && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].iValue && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].iValue && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].iValue == 2 && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].iValue && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].iValue && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].iValue && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].iValue ) - { - arm9res = TRUE; - } - else - { - arm9res = FALSE; - } - - return arm9res && arm7res; -}*/ - -u64 getArm7CheckData( BOOL isSecure, BOOL isNandAccessable, BOOL isVisibleSCFG, BOOL isDebugger ) -{ - // KlɑSĈvĂ΃[A - // vĂȂ΁AvĂȂڂɑΉrbgf[^A - - u64 result = 0; - - int correctValue[SCFG_ARM7_MENU_SIZE] = { - // ROM status - TRUE, FALSE, TRUE, FALSE, 0, FALSE, - // CLK - 0, TRUE, TRUE, TRUE, TRUE, - // JTAG - 0, 0, 0, - // EXP - FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, - TRUE, TRUE, TRUE, 3, TRUE, TRUE, 0, TRUE, - TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 0, - // MI - FALSE, 2, 0, FALSE, FALSE, 0x1998, 0x264c, - // old wireless - TRUE - // Bonding op͕s - }; - - correctValue[SCFG_ARM7_ROM_ARM7_FUSE] = !isSecure; - correctValue[SCFG_ARM7_CLK_SD1] = isNandAccessable; - correctValue[SCFG_ARM7_JTAG_CPU] = isDebugger; - correctValue[SCFG_ARM7_JTAG_DSP] = isDebugger; - correctValue[SCFG_ARM7_JTAG_A7] = isDebugger; - correctValue[SCFG_ARM7_EXT_SD1] = isNandAccessable; - correctValue[SCFG_ARM7_EXT_CFG] = isVisibleSCFG; - correctValue[SCFG_ARM7_MI_SC2_CDET] = !isDebugger; - - if( isVisibleSCFG ) - { -/* result = - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_SEC].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_ROM_ARM9_SEC) | - (!gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_RSEL].iValue) << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_ROM_ARM9_RSEL ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_SEC].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_ROM_ARM7_SEC ) | - (!gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_RSEL].iValue) << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_ROM_ARM7_RSEL ) | - (gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_FUSE].iValue != isSecure) - << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_ROM_ARM7_FUSE ) | - (!gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_WE].iValue) << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_ROM_WE ) | - - (gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD1].iValue == isNandAccessable) - << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_CLK_SD1 ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD2].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_CLK_SD2 ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_AES].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_CLK_AES ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_WRAM].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_CLK_WRAM ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SND].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_CLK_SND ) | - - (gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_CPU].iValue == isDebugger) - << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_JTAG_CPU ) | - (gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_DSP].iValue == isDebugger ) - << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_JTAG_DSP ) | - (gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_A7].iValue == isDebugger ) - << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_JTAG_A7 ) | - - (!gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMA].iValue) << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_DMA ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SDMA].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_SDMA ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SND].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_SND ) | - (!gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].iValue) << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_MC ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_INTC ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SPI].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_SPI ) | - (!gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].iValue) << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_DSEL ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SIO].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_SIO ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_LCDC].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_LCDC ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_VRAM].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_VRAM ) | - (gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PS].iValue == 3) << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_PS ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMAC].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_DMAC ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_AES].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_AES ) | - (gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD1].iValue == isNandAccessable) - << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_SD1 ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD2].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_SD2 ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MIC].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_MIC ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2S].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_I2S ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2C].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_I2C ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_GPIO].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_GPIO ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MCB].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_MCB ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_WRAM].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_WRAM ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PU].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_PU ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_CFG].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_CFG ) | - - (!gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC1_CDET].iValue) << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_MI_SC1_CDET) | - (gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC1_MODE].iValue == 2) - << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_MI_SC1_MODE) | - (gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC2_CDET].iValue != isDebugger ) - << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_MI_SC2_CDET) | - (!gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC2_MODE].iValue) << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_MI_SC2_MODE) | - (!gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SWP].iValue) << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_MI_SWP) | - (gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_CC].iValue) == 0x1988) - << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_MI_SWP) | - ;*/ - int index; - - for( index = 0; index < SCFG_ARM7_MENU_SIZE ; index++ ) - { - if(SCFG_ARM7_OP_FORM <= index) - { - // ̕ӂ̒l͊J@ʎY@ŕς̂ŖڎŔf - //result |= 0 << index; - continue; - } - - OS_TPrintf("%d:%d:%d ", index, gAllInfo[MENU_SCFG_ARM7][index].iValue ,correctValue[index] ); - result |= ( gAllInfo[MENU_SCFG_ARM7][index].iValue != correctValue[index] ) << index; - } - - return result; - } - else - { - int index; - result = 0; - - for( index = 0; index < SCFG_ARM7_MENU_SIZE ; index++ ) - { - result |= ( gAllInfo[MENU_SCFG_ARM7][index].iValue ) << index; - } - - return result; - } - -} - -u32 getArm9CheckData( void ) -{ - u32 result = 0; - int index; - - int correctValue[SCFG_ARM9_MENU_SIZE] = { - // ROM status - TRUE, FALSE, - // CLK - TRUE, FALSE, TRUE, TRUE, FALSE, - // RST - FALSE, - // EXT - FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, - TRUE, TRUE, TRUE, 2, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE - }; - - for( index = 0; index < SCFG_ARM9_MENU_SIZE ; index++ ) - { - if( SCFG_ARM9_TOTAL_CHECK <= index) - { - //result |= 0 << index; - continue; - } - - OS_TPrintf("%d:%d ",gAllInfo[MENU_SCFG_ARM9][index].iValue ,correctValue[index] ); - result |= ( gAllInfo[MENU_SCFG_ARM9][index].iValue != correctValue[index] ) << index; - } - - OS_TPrintf("\nresult: %d\n", result); - return result; - -} - - \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/get_secureUser.c b/build/tests/DisplaySystemInformation/ARM9/src/get_secureUser.c deleted file mode 100644 index f42a1ee0..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/get_secureUser.c +++ /dev/null @@ -1,112 +0,0 @@ -#include -#include - -#include "viewSystemInfo.h" -#include "strResource.h" -#include "getInformation.h" - - -void getSecureUserInfo( void ) -{ - int value; - - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_SETTINGS].isAligned = FALSE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_SETTINGS].numLines = 2; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_SETTINGS].fromLCFG = TRUE; - - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_LAUNCHER].isAligned = FALSE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_LAUNCHER].numLines = 2; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_LAUNCHER].fromLCFG = TRUE; - - gAllInfo[MENU_SECURE_USER][SECURE_USER_BROKEN_SETTINGS].isAligned = FALSE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_BROKEN_SETTINGS].numLines = 2; - gAllInfo[MENU_SECURE_USER][SECURE_USER_BROKEN_SETTINGS].fromLCFG = TRUE; - - gAllInfo[MENU_SECURE_USER][SECURE_USER_INSTALLED_SOFTBOX].isAligned = FALSE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INSTALLED_SOFTBOX].numLines = 2; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INSTALLED_SOFTBOX].fromLCFG = TRUE; - - gAllInfo[MENU_SECURE_USER][SECURE_USER_FREE_SOFTBOX].isAligned = FALSE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_FREE_SOFTBOX].numLines = 2; - gAllInfo[MENU_SECURE_USER][SECURE_USER_FREE_SOFTBOX].fromLCFG = TRUE; - - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_IDX].isAligned = FALSE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_IDX].numLines = 2; - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_IDX].fromLCFG = TRUE; - - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_PLATFORM].isAligned = FALSE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_PLATFORM].numLines = 2; - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_PLATFORM].fromLCFG = TRUE; - - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_ID].isAligned = FALSE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_ID].numLines = 2; - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_ID].fromLCFG = TRUE; - STD_StrCpy( gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_ID].str.sjis, "0000" ); - - if( gLCFGAccessible ) - { - - value = LCFG_TSD_IsFinishedInitialSetting(); - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_SETTINGS].iValue = value; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_SETTINGS].str.sjis = s_strBool[ value ]; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_SETTINGS].changable = TRUE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_SETTINGS].changeFunc.cBool = LCFG_TSD_SetFlagFinishedInitialSetting; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_SETTINGS].argType = ARG_BOOL; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_SETTINGS].kindNameList = s_strBool; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_SETTINGS].numKindName = 2; - - value = LCFG_TSD_IsFinishedInitialSetting_Launcher(); - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_LAUNCHER].iValue = value; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_LAUNCHER].str.sjis = s_strBool[ value ]; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_LAUNCHER].changable = TRUE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_LAUNCHER].changeFunc.cBool = LCFG_TSD_SetFlagFinishedInitialSetting_Launcher; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_LAUNCHER].argType = ARG_BOOL; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_LAUNCHER].kindNameList = s_strBool; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_LAUNCHER].numKindName = 2; - - value = LCFG_TSD_IsFinishedBrokenTWLSettings(); - gAllInfo[MENU_SECURE_USER][SECURE_USER_BROKEN_SETTINGS].iValue = value; - gAllInfo[MENU_SECURE_USER][SECURE_USER_BROKEN_SETTINGS].str.sjis = s_strBool[ value ]; - gAllInfo[MENU_SECURE_USER][SECURE_USER_BROKEN_SETTINGS].changable = TRUE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_BROKEN_SETTINGS].changeFunc.cBool = LCFG_TSD_SetFlagFinishedBrokenTWLSettings; - gAllInfo[MENU_SECURE_USER][SECURE_USER_BROKEN_SETTINGS].argType = ARG_BOOL; - gAllInfo[MENU_SECURE_USER][SECURE_USER_BROKEN_SETTINGS].kindNameList = s_strBool; - gAllInfo[MENU_SECURE_USER][SECURE_USER_BROKEN_SETTINGS].numKindName = 2; - - value = LCFG_TSD_GetInstalledSoftBoxCount(); - gAllInfo[MENU_SECURE_USER][SECURE_USER_INSTALLED_SOFTBOX].iValue = value; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INSTALLED_SOFTBOX].isNumData = TRUE; - - - value = LCFG_TSD_GetFreeSoftBoxCount(); - gAllInfo[MENU_SECURE_USER][SECURE_USER_FREE_SOFTBOX].iValue = value; - gAllInfo[MENU_SECURE_USER][SECURE_USER_FREE_SOFTBOX].isNumData = TRUE; - - value = LCFG_TSD_GetLastTimeBootSoftIndex(); - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_IDX].iValue = value; - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_IDX].isNumData = TRUE; - - value = LCFG_TSD_GetLastTimeBootSoftPlatform(); - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_PLATFORM].iValue = value; - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_PLATFORM].isNumData = TRUE; - - - { - u64 buf = LCFG_TSD_GetLastTimeBootSoftTitleID(); - - - if( buf ) - // buf0ONAvݒ肳ĂȂ - { - u32 titleID = MI_LoadBE32( &buf ); - - OS_TPrintf("Lastboot ID: %x Title ID: %x\n", buf, titleID ); - - MI_CpuCopy( &titleID, gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_ID].str.sjis, 4 ); - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_ID].str.sjis[8] = '\0'; - } - } - } - - -} \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/get_sysmenu.c b/build/tests/DisplaySystemInformation/ARM9/src/get_sysmenu.c deleted file mode 100644 index 78824d98..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/get_sysmenu.c +++ /dev/null @@ -1,265 +0,0 @@ -#include -#include -#include -#include -#include - -#include "getInformation.h" -#include "viewSystemInfo.h" -#include "strResource.h" -#include "misc.h" -#include "util.h" - - -#define FILE_VERSION "verdata:/version.bin" -#define FILE_EULA_URL "verdata:/eula_url.bin" -#define FILE_NUP_HOSTNAME "verdata:/nup_host.bin" -#define FILE_TIMESTAMP "verdata:/time_stamp.bin" - -#define FILE_SIGN_NUP_CERT "verdata:/.twl-nup-cert.der" -#define FILE_SIGN_NUP_PRV "verdata:/.twl-nup-prvkey.der" -#define FILE_SIGN_SHOP_CERT "verdata:/.twl-shop-cert.der" -#define FILE_SIGN_SHOP_PRV "verdata:/.twl-shop-prvkey.der" -#define FILE_SIGN_NINTENDO_CAG2 "verdata:/NintendoCA-G2.der" -#define NUM_FILE_SIGN 5 - - -typedef struct SystemMenuVersion { - u16 major; - u16 minor; - u16 str[ TWL_SYSMENU_VER_STR_LEN / sizeof(u16) ]; -}SystemMenuVersion; - -static char* s_strSignFilePath[] = { - FILE_SIGN_NUP_CERT, - FILE_SIGN_NUP_PRV, - FILE_SIGN_SHOP_CERT, - FILE_SIGN_SHOP_PRV, - FILE_SIGN_NINTENDO_CAG2, -}; - -static char* s_strSignHashDev[] = { - "01e03e86fe11c5172ba742045c63e65c2f058e99", - "7497940e3a3591d592b46ff99d75ebe102c27550", - "cf130c7674bae733f3b106109bb06cc0d6ac1a18", - "ab38a52a384ab63ea8397de6eae8a96d6c108888", - "c60b2a5cc90f0630cca33040df6b3378239f3bfa" -}; - -static char* s_strSignHashProd[] = { - "0626f8ac62baaa0b70c543a33962e54507d451d6", - "58c198c8099d579500cb5d9007bf81404a3c41fa", - "72445f08ab30a41aff9e20a2e64ca7d2b263765e", - "43a81069e6b6300dbe08d6fc3583d0c384a37996", - "c60b2a5cc90f0630cca33040df6b3378239f3bfa" -}; - - -void getSysmenuInfo( void ) -{ - u8 *pBuffer = (u8*) Alloc (NA_VERSION_DATA_WORK_SIZE); - - // numLineallined̐ݒ肪KvȂ̂łăG[`FbN͂Ȃ - NA_LoadVersionDataArchive( pBuffer, NA_VERSION_DATA_WORK_SIZE) ; - - - // o[W̓ǂݏo - { - FSFile file; - SystemMenuVersion bufVersion; - s32 len; - - FS_InitFile(&file); - - if ( FS_OpenFileEx(&file, FILE_VERSION, FS_FILEMODE_R)) - { - len = FS_ReadFile(&file, &bufVersion, sizeof(SystemMenuVersion)); - FS_CloseFile(&file); - - gAllInfo[MENU_SYSMENU][SYSMENU_VERSION_NUM].iValue = (int)( bufVersion.major << 16 | bufVersion.minor ); - gAllInfo[MENU_SYSMENU][SYSMENU_VERSION_NUM].isNumData = TRUE; - - wcsncpy( gAllInfo[MENU_SYSMENU][SYSMENU_VERSION_STR].str.utf, bufVersion.str, TWL_SYSMENU_VER_STR_LEN ); - gAllInfo[MENU_SYSMENU][SYSMENU_VERSION_STR].isSjis = FALSE; - } - else - { - // Ȃꍇ̓f[^N/A - gAllInfo[MENU_SYSMENU][SYSMENU_VERSION_STR].str.sjis = s_strNA; - gAllInfo[MENU_SYSMENU][SYSMENU_VERSION_STR].isSjis = TRUE; - } - } - - // EULA URL̓ǂݏo - { - FSFile file; - s32 len; - - FS_InitFile(&file); - - if ( FS_OpenFileEx(&file, FILE_EULA_URL, FS_FILEMODE_R)) { - len = FS_ReadFile(&file, gAllInfo[MENU_SYSMENU][SYSMENU_EULA_URL].str.sjis , TWL_EULA_URL_LEN) ; - FS_CloseFile(&file); - } - else - { - STD_StrLCpy( gAllInfo[MENU_SYSMENU][SYSMENU_EULA_URL].str.sjis, s_strNA, TWL_EULA_URL_LEN ); - } - } - - // NUP HOST NAME ̓ǂݏo - { - FSFile file; - s32 len; - - FS_InitFile(&file); - - if ( FS_OpenFileEx(&file, FILE_NUP_HOSTNAME, FS_FILEMODE_R)) { - len = FS_ReadFile(&file, gAllInfo[MENU_SYSMENU][SYSMENU_NUP_HOST].str.sjis, TWL_NUP_HOSTNAME_LEN); - FS_CloseFile(&file); - } - else - { - STD_StrLCpy( gAllInfo[MENU_SYSMENU][SYSMENU_NUP_HOST].str.sjis, s_strNA , TWL_NUP_HOSTNAME_LEN ); - } - - } - - // ^CX^v ̓ǂݏo - { - FSFile file; - s32 len; - - FS_InitFile(&file); - - if ( FS_OpenFileEx(&file, FILE_TIMESTAMP, FS_FILEMODE_R)) { - len = FS_ReadFile(&file, &gAllInfo[MENU_SYSMENU][SYSMENU_TIMESTAMP].iValue, sizeof(u32) ); - gAllInfo[MENU_SYSMENU][SYSMENU_TIMESTAMP].isNumData = TRUE; - FS_CloseFile(&file); - } - } - - // ̏ƍ - { - FSFile file[NUM_FILE_SIGN]; - u32 fileLen[NUM_FILE_SIGN], maxFileSize = 0; - u8 i; - u8 *srcBuf, *dstBuf, digestBuf[MATH_SHA1_DIGEST_SIZE], - cmpDigestDevBuf[MATH_SHA1_DIGEST_SIZE], cmpDigestProdBuf[MATH_SHA1_DIGEST_SIZE]; - - for( i=0 ; i < NUM_FILE_SIGN; i++ ) - { - // ŏɃGg̍sݒ肵Ă - gAllInfo[MENU_SYSMENU][i + SYSMENU_HASH_IDX].numLines = 2; - gAllInfo[MENU_SYSMENU][i + SYSMENU_HASH_IDX].isAligned = FALSE; - } - - for( i=0 ; i < NUM_FILE_SIGN; i++ ) - { - FS_InitFile( &file[i] ); - - // ꂽt@CꂼI[v - if( !FS_OpenFileEx( &file[i], s_strSignFilePath[i], FS_FILEMODE_R ) ) - { - // JȂNANDANZX֎~ԂȂ̂Ŗ߂ - OS_Printf("sysmenu info error: Openfile failed.\n" ); - return ; - } - - // t@Ceʂꂼ擾 - fileLen[i] = FS_GetFileLength( &file[i] ); - } - - // obt@傫k߂肵Ȃ̂ - // ԑ傫t@CƓ傫̃obt@mۂĂ܂ - for( i=0 ; i < NUM_FILE_SIGN; i++ ) - { - if( maxFileSize < fileLen[i] ) - { - maxFileSize = fileLen[i]; - } - } - - srcBuf = (u8*) Alloc ( maxFileSize ); - dstBuf = (u8*) Alloc ( maxFileSize ); - - // ꂼ̃t@Cɑ΂ď؂s - for( i=0 ; i < NUM_FILE_SIGN; i++ ) - { - u8 idx = (u8)(SYSMENU_HASH_IDX + i) ; - - OS_TPrintf("Checking signature...%s\n", s_strMetaMenu[MENU_SYSMENU][idx] ); - - // t@Cǂݍ - FS_ReadFile( &file[i], srcBuf, (s32)fileLen[i] ); - OS_TPrintf("FileSize: %d byte HeadData: %02x%02x%02x\n", fileLen[i], srcBuf[0], srcBuf[1], srcBuf[2] ); - - if( SYSMENU_NUP_CERT <= idx && idx < SYSMENU_NINTENDO_CAG2 ) - { - s32 result; - - // SYSMENU_NUP_CERT4t@C͈ÍĂ̂ŕ - result = NA_DecodeVersionData( srcBuf, fileLen[i] , dstBuf, fileLen[i] ); - - if( result < 0 ) - { - OS_TPrintf( "NA_DecodeVersionData() Failed. errCode: %d\n", result ); - continue; - } - - // oR[hƃt@CTCYςۂ̂ōXV - fileLen[i] = (u32)result; - - OS_TPrintf("Dacode VersionData... HeadData: %02x%02x%02x\n", dstBuf[0], dstBuf[1], dstBuf[2] ); - - // f[^LbVvZ - MATH_CalcSHA1( digestBuf, dstBuf, fileLen[i] ); - } - else - { - // ȊO͂̂܂܃nbV߂ - MATH_CalcSHA1( digestBuf, srcBuf, fileLen[i] ); - } - - strToHexa( s_strSignHashDev[i] , cmpDigestDevBuf, MATH_SHA1_DIGEST_SIZE ); - strToHexa( s_strSignHashProd[i], cmpDigestProdBuf, MATH_SHA1_DIGEST_SIZE ); - - gAllInfo[MENU_SYSMENU][idx].numLines = 2; - gAllInfo[MENU_SYSMENU][idx].isAligned = FALSE; - - putBinary( cmpDigestDevBuf, MATH_SHA1_DIGEST_SIZE ); - putBinary( cmpDigestProdBuf, MATH_SHA1_DIGEST_SIZE ); - putBinary( digestBuf, MATH_SHA1_DIGEST_SIZE ); - - // nbVlvcorrect,vȂincorrect - if( MI_CpuComp8( cmpDigestDevBuf, digestBuf, MATH_SHA1_DIGEST_SIZE ) == 0 ) - { - gAllInfo[MENU_SYSMENU][idx].str.sjis = - idx == SYSMENU_NINTENDO_CAG2 ? s_strCorrect[1] : s_strSysMenuKey[1]; - } - else if( MI_CpuComp8( cmpDigestProdBuf, digestBuf, MATH_SHA1_DIGEST_SIZE ) == 0 ) - { - gAllInfo[MENU_SYSMENU][idx].str.sjis = - idx == SYSMENU_NINTENDO_CAG2 ? s_strCorrect[1] : s_strSysMenuKey[2]; - } - else - { - gAllInfo[MENU_SYSMENU][idx].str.sjis = s_strSysMenuKey[0]; - } - - - } - - // obt@̊J - Free( srcBuf ); - Free( dstBuf ); - } - - - // SystemMenuVersioñA}Eg - if( !NA_UnloadVersionDataArchive() ) { - return; - } - - Free(pBuffer); -} \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/get_versionData.c b/build/tests/DisplaySystemInformation/ARM9/src/get_versionData.c deleted file mode 100644 index d2269f89..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/get_versionData.c +++ /dev/null @@ -1,55 +0,0 @@ - -#include -#include -#include - -#include "viewSystemInfo.h" -#include "strResource.h" -#include "getInformation.h" -#include "misc.h" - -void getWirelessVersion( void ); -void getContentsVersion( void ); -void getSharedFontVersion( void ); - - -void getContentsVersion( void ) -// RecXgƂɊeRec̃^CgIDƃo[W擾 -{ - NAMTitleInfo info; - int i; - - gNumContents = NAM_GetNumTitles(); - - if( gNumContents < 0 ) - { - // NAMʖڂƂANANDANZXłȂƂ̏ꍇ͏I - return ; - } - - OS_TPrintf(" numContents: %d\n", gNumContents); - - if( gContentsTitle == NULL ) - { - // 񏈗̎̓obt@m - gContentsTitle = (NAMTitleId*) Alloc( sizeof(NAMTitleId) * gNumContents ); - gContentsVersion = (u16*) Alloc( sizeof(u16) * (u32)gNumContents); - SDK_ASSERT( gContentsTitle ); - SDK_ASSERT( gContentsVersion ); - } - - NAM_GetTitleList( gContentsTitle, (u32)gNumContents); - SDK_POINTER_ASSERT( gContentsTitle ); - SDK_POINTER_ASSERT( gContentsVersion ); - - for( i=0; i -#include -#include -#include -#include - -#include "viewSystemInfo.h" -#include "strResource.h" -#include "getInformation.h" -#include "util.h" -#include "misc.h" - -#define WHITELIST_TITLEID 0x0003000f484e4841 -#define DS_HASH_TABLE_SIZE (256*1024) - -void getWhitelistHash( void ); -void getNumDHTEntry( void ); -BOOL cmpHash( void *src1, void *src2 ); - -void getWhiteListInfo( void ) -{ - OS_TPrintf("...Whitelist Information\n"); - - getWhitelistHash(); - getNumDHTEntry(); -} - -void getWhitelistHash( void ) -{ - u32 tmdSize=0, fileSize; - ESTitleMeta *tmd; - - FSFile file; - char filePath[NAM_PATH_LEN+1]; - u8 *fileBuf, digestBuf[MATH_SHA1_DIGEST_SIZE]; - - - // ESCugănbVl擾 - // ڂ̌ĂяoŃTCY擾ēڂŒl炤 - ES_GetTmd( WHITELIST_TITLEID, NULL, &tmdSize ); - tmd = (ESTitleMeta*) Alloc ( tmdSize ); - SDK_ASSERT( tmd ); - ES_GetTmd( WHITELIST_TITLEID , tmd, &tmdSize ); - - if( tmd == NULL ) - { - OS_TPrintf("getting tmd hash failed.\n" ); - return; - } - - putBinary( (u8*)&tmd->contents[0].hash , MATH_SHA1_DIGEST_SIZE ); - - // zCgXg̃t@C̎ԂĂ - FS_InitFile( &file ); - NAM_GetTitleBootContentPath( filePath , WHITELIST_TITLEID ); - - OS_TPrintf("filepath : %s\n", filePath ); - - if( ! FS_OpenFileEx( &file, filePath, FS_FILEMODE_R ) ) - { - OS_TPrintf("whitelist info error: FS_OpenFileEx() failed. FSResult: %d\n", FS_GetArchiveResultCode(filePath) ); - return; - } - - fileSize = FS_GetFileLength( &file ); - - fileBuf = (u8*) Alloc ( fileSize ); - SDK_ASSERT( fileBuf ); - - if( fileSize != FS_ReadFile( &file, fileBuf, (s32)fileSize ) ) - { - OS_TPrintf("whitelist info error: FS_ReadFileEx() failed. FSResult: %d\n", FS_GetArchiveResultCode(filePath) ); - return; - } - - MATH_CalcSHA1( digestBuf, fileBuf, fileSize ); - putBinary( digestBuf, MATH_SHA1_DIGEST_SIZE ); - - gAllInfo[MENU_WHITE][WHITE_HASH].str.sjis = s_strCorrect [ cmpHash( digestBuf, &tmd->contents[0].hash ) ]; - - FS_CloseFile( &file ); - Free( tmd ); - Free( fileBuf ); - -} - -void getNumDHTEntry( void ) -{ - DHTFile *dht; - FSFile file; - char filePath[NAM_PATH_LEN+1]; - - dht = (DHTFile*) Alloc (DS_HASH_TABLE_SIZE); - SDK_ASSERT(dht); - - FS_InitFile( &file ); - NAM_GetTitleBootContentPathFast( filePath , WHITELIST_TITLEID ); - - OS_TPrintf("DHTEntry reading...\n"); - - if( ! FS_OpenFileEx( &file, filePath, FS_FILEMODE_R ) ) - { - OS_TPrintf("whitelist info error: FS_OpenFileEx() failed. FSResult: %d\n", FS_GetArchiveResultCode(filePath) ); - return; - } - -/* if( ! FS_SeekFile( &file, sizeof(ROM_Header), FS_SEEK_SET ) ) - { - OS_TPrintf("whitelist info error: FS_SeekFile() failed. FSResult: %d\n", FS_GetArchiveResultCode(filePath) ); - return; - } -*/ - if( ! DHT_PrepareDatabase( dht, &file ) ) - { - OS_TPrintf("whitelist info error: PrepareDatabase() failed.\n" ); - return; - } - - DC_FlushRange( dht, DHT_GetDatabaseLength( dht )); - OS_TPrintf(" dht.header.nums : %d\n", dht->header.nums); - - FS_CloseFile( &file ); - gAllInfo[MENU_WHITE][WHITE_NUM].iValue = (int)dht->header.nums; - gAllInfo[MENU_WHITE][WHITE_NUM].isNumData = TRUE; - - Free(dht); -} - -// ‚̃nbVrĈvĂԂ -// łsrc2̓rbOGfBA˂ -BOOL cmpHash( void *src1, void *src2 ) -{ - u8 *u1 = (u8*)src1; - u8 *u2 = (u8*)src2; - - return MI_CpuComp8( u1, u2, MATH_SHA1_DIGEST_SIZE ) == 0 ; - -} \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/get_wl.c b/build/tests/DisplaySystemInformation/ARM9/src/get_wl.c deleted file mode 100644 index 5532d3e8..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/get_wl.c +++ /dev/null @@ -1,142 +0,0 @@ -#include -#include - -#include "viewSystemInfo.h" -#include "strResource.h" -#include "getInformation.h" - -#define WL_TITLEID 0x0003000F484E4341 - -#define WL_FW_LOADSIZE 0x10 -#define WL_FW_LOAD_OFFSET 0xa0 -#define WL_FW_VERSION_LO_IDX 0x1 -#define WL_FW_VERSION_HI_IDX 0x0 -#define WL_FW_VERSION_SIZE 0x2 -#define WL_NUM_FW_IDX 0x2 -#define WL_NUM_FW_SIZE 0x2 -#define WL_FW1_OFFSET_IDX 0x4 -#define WL_FW_TYPE_IDX 0xc -#define WL_FW_TYPE_SIZE 0x4 - -#define WL_FW2_OFFSET_IDX 0xc4 -#define WL_FW2_TYPE_IDX 0xcc - -#define WL_FW_SECTION_OFFSET 0x4 -#define WL_FW_VER_MINUSOFFSET 0x2c - -#define WL_FW_IDX_OFFSET 3 - - - - -void getWLInfo( void ) -{ - FSFile file; - char filePath[NAM_PATH_LEN+1]; - char filebuf[WL_FW_LOADSIZE]; - int res; - - FS_InitFile( &file ); - NAM_GetTitleBootContentPath( filePath , WL_TITLEID); // t@[̃t@CpX擾 - OS_TPrintf("wireless firm path: %s\n", filePath ) ; - - if( FS_OpenFileEx( &file, filePath, FS_FILEMODE_R ) ) - { - int value; - s32 fwOffset, sectionOffset; - - /* - // o[W̓ǂݎ - FS_SeekFile( &file, WL_FW_VERSION_OFFSET, FS_SEEK_SET ); - res = FS_ReadFile( &file, filebuf, WL_FW_VERSION_SIZE ); - - if( res == WL_FW_VERSION_SIZE ) - { - snprintf( gAllInfo[MENU_WL][WL_VERSION].str.sjis, DISPINFO_BUFSIZE-1, "%d.%d", filebuf[0], filebuf[1] ); - gAllInfo[MENU_WL][WL_VERSION].iValue = filebuf[0] *100 + filebuf[1]; - } - - // t@[EFA̐̎擾 - FS_SeekFile( &file, WL_NUM_FW, FS_SEEK_SET ); - res = FS_ReadFile( &file, filebuf, 2 ); - - if( res == WL_NUM_FW_SIZE ) - { - gAllInfo[MENU_WL][WL_NUM_FW].iValue = filebuf[0]; - gAllInfo[MENU_WL][WL_NUM_FW].isNumData = TRUE; - } - - // t@[^Cv̎擾 - FS_SeekFile( &file, WL_FW_TYPE_OFFSET, FS_SEEK_SET ); - res = FS_ReadFile( &file, filebuf, WL_FW_TYPE_SIZE ); - - if( res == WL_FW_TYPE_SIZE ) - { - int value = (int) MI_LoadLE32( filebuf ); - gAllInfo[MENU_WL][WL_FW_TYPE].iValue = value; - gAllInfo[MENU_WL][WL_FW_TYPE].str.sjis = s_strWLFWType[ value ]; - }*/ - - FS_SeekFile( &file, WL_FW_LOAD_OFFSET , FS_SEEK_SET); - res = FS_ReadFile( &file, filebuf, WL_FW_LOADSIZE); - - if( res == WL_FW_LOADSIZE ) - { - int value; - - snprintf( gAllInfo[MENU_WL][WL_VERSION].str.sjis, DISPINFO_BUFSIZE-1, "%d.%d", - filebuf[WL_FW_VERSION_HI_IDX], filebuf[WL_FW_VERSION_LO_IDX] ); - - gAllInfo[MENU_WL][WL_NUM_FW].iValue = (int) MI_LoadLE8( &filebuf[WL_NUM_FW_IDX] ); - gAllInfo[MENU_WL][WL_NUM_FW].isNumData = TRUE; - - fwOffset = (s32)MI_LoadLE32( &filebuf[WL_FW1_OFFSET_IDX] ); - - value = (int) MI_LoadLE32( &filebuf[WL_FW_TYPE_IDX] ); - gAllInfo[MENU_WL][WL_FW1_TYPE].iValue = value; - gAllInfo[MENU_WL][WL_FW1_TYPE].str.sjis = s_strWLFWType[ value ]; - - FS_SeekFile( &file, fwOffset, FS_SEEK_SET ); - FS_ReadFile( &file, filebuf, WL_FW_LOADSIZE ); - sectionOffset = (s32)MI_LoadLE32( &filebuf[WL_FW_SECTION_OFFSET] ); - - FS_SeekFile( &file, fwOffset + sectionOffset - WL_FW_VER_MINUSOFFSET, FS_SEEK_SET ); - FS_ReadFile( &file, filebuf, WL_FW_LOADSIZE ); - snprintf( gAllInfo[MENU_WL][WL_FW1_VER].str.sjis, DISPINFO_BUFSIZE-1, "%08x", - MI_LoadLE32( filebuf ) ); - } - - if( gAllInfo[MENU_WL][WL_NUM_FW].iValue == 2 ) - { - FS_SeekFile( &file, WL_FW2_OFFSET_IDX, FS_SEEK_SET ); - FS_ReadFile( &file, filebuf, WL_FW_LOADSIZE ); - fwOffset = (s32)MI_LoadLE32( filebuf ); - - value = (int) MI_LoadLE32( &filebuf[WL_FW2_TYPE_IDX - WL_FW2_OFFSET_IDX] ); - gAllInfo[MENU_WL][WL_FW2_TYPE].str.sjis = s_strWLFWType[ value ]; - - FS_SeekFile( &file, fwOffset, FS_SEEK_SET ); - FS_ReadFile( &file, filebuf, WL_FW_LOADSIZE ); - sectionOffset = (s32)MI_LoadLE32( &filebuf[WL_FW_SECTION_OFFSET] ); - - FS_SeekFile( &file, fwOffset + sectionOffset - WL_FW_VER_MINUSOFFSET, FS_SEEK_SET ); - FS_ReadFile( &file, filebuf, WL_FW_LOADSIZE ); - snprintf( gAllInfo[MENU_WL][WL_FW2_VER].str.sjis, DISPINFO_BUFSIZE-1, "%08x", - MI_LoadLE32( filebuf ) ); - } - else - { - STD_StrLCpy( gAllInfo[MENU_WL][WL_FW2_VER].str.sjis, s_strNA, DISPINFO_BUFSIZE ); - } - - FS_CloseFile( &file ); - } - else - { - // ǂݍ߂ȂƂ肠N/AēĂ - STD_StrLCpy( gAllInfo[MENU_WL][WL_VERSION].str.sjis, s_strNA, DISPINFO_BUFSIZE ); - STD_StrLCpy( gAllInfo[MENU_WL][WL_FW2_VER].str.sjis, s_strNA, DISPINFO_BUFSIZE ); - STD_StrLCpy( gAllInfo[MENU_WL][WL_FW1_VER].str.sjis, s_strNA, DISPINFO_BUFSIZE ); - } - -} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/infodata.xls b/build/tests/DisplaySystemInformation/ARM9/src/infodata.xls deleted file mode 100644 index b78857f80f2ea7b361c0c6127f92627be4c3248f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35328 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 diff --git a/build/tests/DisplaySystemInformation/ARM9/src/main.c b/build/tests/DisplaySystemInformation/ARM9/src/main.c deleted file mode 100644 index 8df2ebd5..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/main.c +++ /dev/null @@ -1,120 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: main.c - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - - -#include -#include -#include -#include -#include "misc.h" -#include "viewSystemInfo.h" -#include "address.h" - -#define CANVAS0_WIDTH 15 -#define CANVAS0_HEIGHT 10 -#define CANVAS0_LEFT 10 -#define CANVAS0_TOP 10 - -#define CANVAS1_WIDTH 10 -#define CANVAS1_HEIGHT 10 -#define CANVAS1_LEFT 130 -#define CANVAS1_TOP 10 - -#define TEXT_HSPACE 1 // `掞̕ (sNZP) -#define TEXT_VSPACE 1 // `掞̍s (sNZP) -#define CHARACTER_OFFSET 1 - -///////////////////////////// - -void VBlankHandler( void ); - -///////////////////////////// - - -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: main - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ - - - -void TwlMain( void ) -{ - - OS_Init(); - OS_InitTick(); - OS_TPrintf("Initialize begin\n"); - - // ARM7ŃɃZbgꂽSCFG̃f[^m - MI_CpuMove16( DISPINFO_SHARED_SCFG_REG_ADDR, gArm7SCFGReg, DISPINFO_SHARED_SCFG_REG_SIZE ); - // WRAMɑޔĂ镪Rs[ - MI_CpuMove16( DISPINFO_SHARED_SCFG_WRAM_ADDR, gArm7SCFGShared, DISPINFO_SHARED_SCFG_WRAM_SIZE ); - - //---- interrupt setting - OS_EnableIrq(); - OS_EnableInterrupts(); - - OS_InitSharedFont(); - GX_Init(); - - OS_SetIrqFunction( OS_IE_V_BLANK, VBlankHandler ); - OS_EnableIrqMask( OS_IE_V_BLANK ); - GX_VBlankIntr( TRUE ); - - OS_TPrintf("RTC Initilize...\n"); - RTC_Init(); - - OS_TPrintf("Allocator Initialize...\n"); - InitAllocator(); - CRYPTO_SetAllocator( Alloc, Free ); - -#if NAM_ENABLE - OS_TPrintf("NAM Initialize...\n"); - NAM_Init( Alloc, Free ); -#endif - - InitBG(); - OS_TPrintf("Initialize Finished\n"); - displayInfoInit(); - - OS_TPrintf("begin mainloop\n"); - - - // C[v - while( 1 ) - { - OS_WaitIrq(1, OS_IE_V_BLANK); // VuN荞ݑ҂ - - ReadKeyPad(); // L[͂̎擾 - - displayInfoMain(); // r[AXV - } - - OS_Terminate(); - -} - - -void VBlankHandler(void) -{ - OS_SetIrqCheckFlag( OS_IE_V_BLANK ); // VuN`FbÑZbg -} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/misc.c b/build/tests/DisplaySystemInformation/ARM9/src/misc.c deleted file mode 100644 index 2e81ed3b..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/misc.c +++ /dev/null @@ -1,759 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: misc.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "misc.h" - -// define data----------------------------------------------------------------- -#define NTR_IPL_FONT_DATA "data/NTR_IPL_font_m.NFTR" - -#define STRING_LENGTH_MAX 256 - -#define GRAY(x) GX_RGB(x, x, x) - -enum -{ - TXT_CPALETTE_MAIN, - TXT_CPALETTE_USERCOLOR, - TXT_CPALETTE_USERCOLORSAMPLE, - TXT_CPALETTE_4BPP, - TXT_NUM_CPALEETE -}; - -// fʂ̃J[pbg -GXRgb TXTColorPalette[TXT_NUM_CPALEETE * 16] = -{ - GX_RGB(31, 31, 31), GX_RGB(31, 31, 31), GX_RGB( 0, 0, 0), GX_RGB(31, 0, 0),// {F - GX_RGB( 0, 31, 0), GX_RGB( 0, 0, 31), GX_RGB( 0, 31, 31), GX_RGB(31, 0, 31), - GX_RGB(31, 31, 0), GX_RGB( 0, 0, 0), GX_RGB( 0, 0, 0), GX_RGB( 0, 0, 0), - GX_RGB( 0, 0, 0), GX_RGB( 0, 0, 0), GX_RGB( 0, 0, 0), GX_RGB( 0, 0, 0), - - GX_RGB( 0, 0, 0), GX_RGB(12, 16, 19), GX_RGB(23, 9, 0), GX_RGB(31, 0, 3),// [U[J[̈ - GX_RGB(31, 17, 31), GX_RGB(31, 18, 0), GX_RGB(30, 28, 0), GX_RGB(21, 31, 0), - GX_RGB( 0, 20, 7), GX_RGB( 9, 27, 17), GX_RGB( 6, 23, 30), GX_RGB( 0, 11, 30), - GX_RGB( 0, 0, 18), GX_RGB(17, 0, 26), GX_RGB(26, 0, 29), GX_RGB(31, 0, 18), - - GX_RGB(12, 16, 19), GX_RGB(23, 9, 0), GX_RGB(31, 0, 3), GX_RGB(31, 17, 31),// [U[J[̃Tv̈ - GX_RGB(31, 18, 0), GX_RGB(30, 28, 0), GX_RGB(21, 31, 0), GX_RGB( 0, 31, 0), - GX_RGB( 0, 20, 7), GX_RGB( 9, 27, 17), GX_RGB( 6, 23, 30), GX_RGB( 0, 11, 30), - GX_RGB( 0, 0, 18), GX_RGB(17, 0, 26), GX_RGB(26, 0, 29), GX_RGB(31, 0, 18), - - GRAY(31), GRAY(29), GRAY(27), GRAY(25), - GRAY(23), GRAY(21), GRAY(19), GRAY(17), - GRAY(15), GRAY(14), GRAY(12), GRAY(10), - GRAY( 8), GRAY( 6), GRAY( 3), GRAY( 0), -}; - -// Ofpbg邽߂̃}N -#define MAKECOLOR(r,g,b) GX_RGB( 0, 0, 0), GX_RGB(r, g, b), MC(r,g,b,1), MC(r,g,b,2),\ - MC(r,g,b,3), MC(r,g,b,4), MC(r,g,b,5), MC(r,g,b,6),\ - MC(r,g,b,7), MC(r,g,b,8), MC(r,g,b,9), MC(r,g,b,10),\ - MC(r,g,b,11), MC(r,g,b,12), MC(r,g,b,13), GX_RGB(31, 31, 31) - -#define MC(r,g,b,i) GX_RGB(r+((31-r)*i)/14, g+((31-g)*i)/14, b+((31-b)*i)/14) - -// [U[J[pbg؂ւp -GXRgb TempPalette[16 * 16] = -{ - MAKECOLOR(12, 16, 19), - MAKECOLOR(23, 9, 0), - MAKECOLOR(31, 0, 3), - MAKECOLOR(31, 17, 31), - MAKECOLOR(31, 18, 0), - MAKECOLOR(30, 28, 0), - MAKECOLOR(21, 31, 0), - MAKECOLOR( 0, 31, 0), - MAKECOLOR( 0, 20, 7), - MAKECOLOR( 9, 27, 17), - MAKECOLOR( 6, 23, 30), - MAKECOLOR( 0, 11, 30), - MAKECOLOR( 0, 0, 18), - MAKECOLOR(17, 0, 26), - MAKECOLOR(26, 0, 29), - MAKECOLOR(31, 0, 18), -}; - -// extern data----------------------------------------------------------------- - -// define data----------------------------------------------------------------- -#define CANVAS_WIDTH 32 // `̕ (LN^P) -#define CANVAS_HEIGHT 24 // `̍ (LN^P) -#define CANVAS_LEFT 0 // `̈ʒuX (LN^P) -#define CANVAS_TOP 0 // `̈ʒuY (LN^P) - -#define TEXT_HSPACE 1 // `掞̕ (sNZP) -#define TEXT_VSPACE 1 // `掞̍s (sNZP) - -#define CHARACTER_OFFSET 0 // gpLN^̊Jnԍ - -// RTCf[^\ʒu[N -typedef struct RtcDrawPos{ - int date_x; - int date_y; - int time_x; - int time_y; -}RtcDrawPos; - -// function's prototype------------------------------------------------------- -static BOOL WaitDetachTP( void ); -static void StartDetachTP( void ); -static void InitScreen( void ); -static void InitCanvas( void ); - -// global variable------------------------------------------------------------- -KeyWork pad; // L[pbh̓f[^ -TpWork tpd; // ^b`pl̓f[^ -NNSFndAllocator g_allocator; // AP[^ -NNSG2dFont gFont; // tHg -NNSG2dCharCanvas gCanvas; // CharCanvas -NNSG2dTextCanvas gTextCanvas; // TextCanvas -NNSG2dCharCanvas gCanvasSub; // CharCanvas -NNSG2dTextCanvas gTextCanvasSub; // TextCanvas - -// static variable------------------------------------------------------------- -static int s_detach_count; -static RtcDrawPos s_rtcPos; -static RTCDate s_rtcDate; -static RTCTime s_rtcTime; -static u16 s_vcount; - -static char s_strBuffer[ STRING_LENGTH_MAX * 2 ] ATTRIBUTE_ALIGN(2); -static u16 s_strBufferUTF16[ STRING_LENGTH_MAX ]; - -// const data------------------------------------------------------------------ - -// jf[^\pR[h -const u8 *const g_strWeek[] ATTRIBUTE_ALIGN(2) = { - (const u8 *)"SUN", - (const u8 *)"MON", - (const u8 *)"TUE", - (const u8 *)"WED", - (const u8 *)"THU", - (const u8 *)"FRI", - (const u8 *)"SAT", -}; - - -// ============================================================================ -// Ǘ -// ============================================================================ - -// AP[^̏ -void InitAllocator( void ) -{ - // b΍@FS_InitŃnbV`FbNp̃q[vmۂĂ邽߁A - // [U[q[v̊mۑOFS_InitsKvB - - // t@CVXe - FS_Init( FS_DMA_NOT_USE ); - - { - NNSFndAllocator *pAllocator = &g_allocator; - u32 arenaLow = MATH_ROUNDUP ( (u32)OS_GetMainArenaLo(), 16 ); - u32 arenaHigh = MATH_ROUNDDOWN( (u32)OS_GetMainArenaHi(), 16 ); - u32 heapSize = arenaHigh - arenaLow; - void* heapMemory = OS_AllocFromMainArenaLo( heapSize, 16 ); - NNSFndHeapHandle heapHandle; - SDK_NULL_ASSERT( pAllocator ); - - heapHandle = NNS_FndCreateExpHeap( heapMemory, heapSize ); - SDK_ASSERT( heapHandle != NNS_FND_HEAP_INVALID_HANDLE ); - - NNS_FndInitAllocatorForExpHeap( pAllocator, heapHandle, 32 ); - } -} - - -// 蓖 -void *Alloc( u32 size ) -{ - return NNS_FndAllocFromAllocator( &g_allocator, size ); -} - - -// -void Free( void *pBuffer ) -{ - NNS_FndFreeToAllocator( &g_allocator, pBuffer ); -} - - -// ============================================================================ -// ʐݒ -// ============================================================================ - -// BG -void InitBG(void) -{ - // OFF - GX_DispOff(); - GXS_DispOff(); - - // VRAM̊蓖ĂSĉ - GX_DisableBankForBG(); - GX_DisableBankForOBJ(); - GX_DisableBankForSubBG(); - GX_DisableBankForSubOBJ(); - - // C2DGW̏o͂ʂ - GX_SetDispSelect( GX_DISP_SELECT_SUB_MAIN ); - - // CLCD - { - // VRAM蓖 - GX_SetBankForBG ( GX_VRAM_BG_128_A ); - GX_SetBankForOBJ( GX_VRAM_OBJ_128_B ); - - MI_CpuClearFast( (void *)HW_BG_VRAM, 0x20000 ); // BG -VRAM NA - MI_CpuClearFast( (void *)HW_OBJ_VRAM, 0x20000 ); // OBJ-VRAM NA - MI_DmaFill32( 3, (void *)HW_OAM, 192, HW_OAM_SIZE ); // OAM NA - - // J[pbgݒ - GX_LoadBGPltt( TXTColorPalette, 0, sizeof(TXTColorPalette) ); - - // BG[hݒ - GX_SetGraphicsMode( GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D ); - - GX_SetBGScrOffset ( GX_BGSCROFFSET_0x10000 ); - GX_SetBGCharOffset( GX_BGCHAROFFSET_0x00000 ); - } - // TuLCD - { - // VRAM蓖 - GX_SetBankForSubBG ( GX_VRAM_SUB_BG_128_C ); // VRAM-C for BGs - GX_SetBankForSubOBJ( GX_VRAM_SUB_OBJ_128_D ); // VRAM-D for BGs - - MI_CpuClearFast( (void *)HW_DB_BG_VRAM, 0x20000 ); // BG -VRAM NA - MI_CpuClearFast( (void *)HW_DB_OBJ_VRAM, 0x20000 ); // OBJ -VRAM NA - - // J[pbgݒ - GXS_LoadBGPltt( TXTColorPalette, 0, sizeof(TXTColorPalette) ); - - // BG[hݒ - GXS_SetGraphicsMode( GX_BGMODE_0 ); // BGMODE is 0 - } - InitScreen(); - InitCanvas(); -} - - -// XN[ -static void InitScreen( void ) -{ - // C BG 0 ݒ - G2_SetBG0Control( - GX_BG_SCRSIZE_TEXT_256x256, // XN[TCY 256x256 - GX_BG_COLORMODE_256, // J[[h 256F - GX_BG_SCRBASE_0xf800, // XN[x[X - GX_BG_CHARBASE_0x00000, // LN^x[X - GX_BG_EXTPLTT_01 // gpbgXbg - ); - G2_SetBG1Control( - GX_BG_SCRSIZE_TEXT_256x256, // 256pix x 256pix text - GX_BG_COLORMODE_16, // use 16 colors mode - GX_BG_SCRBASE_0xe800, // screen base offset + 0x0000 is the address for BG #1 screen - GX_BG_CHARBASE_0x10000, // character base offset + 0x04000 is the address for BG #0 characters - GX_BG_EXTPLTT_01 // use BGExtPltt slot #0 if BGExtPltt is enabled - ); - G2_SetBG2ControlText( - GX_BG_SCRSIZE_TEXT_256x256, // 256pix x 256pix text - GX_BG_COLORMODE_16, // use 16 colors mode - GX_BG_SCRBASE_0xd800, // screen base offset + 0x0000 is the address for BG #1 screen - GX_BG_CHARBASE_0x14000 // character base offset + 0x04000 is the address for BG #0 characters - ); - GX_SetVisiblePlane( GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1); - G2_SetBG2Priority(0); - G2_SetBG0Priority(1); - G2_SetBG1Priority(2); - - // Tu BG 0 ݒ - G2S_SetBG0Control( - GX_BG_SCRSIZE_TEXT_256x256, // 256pix x 256pix text - GX_BG_COLORMODE_16, // use 16 colors mode - GX_BG_SCRBASE_0xf800, // screen base offset + 0x0000 is the address for BG #0 screen - GX_BG_CHARBASE_0x00000, // character base offset + 0x04000 is the address for BG #0 characters - GX_BG_EXTPLTT_01 // use BGExtPltt slot #0 if BGExtPltt is enabled - ); - GXS_SetVisiblePlane( GX_PLANEMASK_BG0 ); // display only BG #0 -} - - -// `̏ -static void InitCanvas( void ) -{ - CMN_InitFileSystem( &g_allocator ); - - // tHgǂݍ݂܂ - { - void* pFontFile; - u32 size = CMN_LoadFile( &pFontFile, NTR_IPL_FONT_DATA, &g_allocator); - NNS_G2D_ASSERT( size > 0 ); - NNS_G2dFontInitUTF16(&gFont, pFontFile); -// NNS_G2dPrintFont(&gFont); - } - - { - // CharCanvas ̏ - NNS_G2dCharCanvasInitForBG( - &gCanvas, - (GXCharFmt256*)G2_GetBG0CharPtr() + CHARACTER_OFFSET, - CANVAS_WIDTH, - CANVAS_HEIGHT, - NNS_G2D_CHARA_COLORMODE_256 - ); - - // TextCanvas̏ - NNS_G2dTextCanvasInit( - &gTextCanvas, - &gCanvas, - &gFont, - TEXT_HSPACE, - TEXT_VSPACE - ); - - // XN[ݒ - NNS_G2dMapScrToCharText( - G2_GetBG0ScrPtr(), - CANVAS_WIDTH, - CANVAS_HEIGHT, - CANVAS_LEFT, - CANVAS_TOP, - NNS_G2D_TEXT_BG_WIDTH_256, - CHARACTER_OFFSET, - TXT_CPALETTE_MAIN - ); - } - { - // CharCanvas ̏ - NNS_G2dCharCanvasInitForBG( - &gCanvasSub, - (GXCharFmt16*)G2S_GetBG0CharPtr() + CHARACTER_OFFSET, - CANVAS_WIDTH, - CANVAS_HEIGHT, - NNS_G2D_CHARA_COLORMODE_16 - ); - - // TextCanvas̏ - NNS_G2dTextCanvasInit( - &gTextCanvasSub, - &gCanvasSub, - &gFont, - TEXT_HSPACE, - TEXT_VSPACE - ); - - // XN[ݒ - NNS_G2dMapScrToCharText( - G2S_GetBG0ScrPtr(), - CANVAS_WIDTH, - CANVAS_HEIGHT, - CANVAS_LEFT, - CANVAS_TOP, - NNS_G2D_TEXT_BG_WIDTH_256, - CHARACTER_OFFSET, - TXT_CPALETTE_MAIN - ); - } -} - - -// UTF16ł̒ڕ\ -void PutStringUTF16( int x, int y, int color, const u16 *strUTF16 ) -{ - NNS_G2dTextCanvasDrawText( &gTextCanvas, x, y, color, TXT_DRAWTEXT_FLAG_DEFAULT, - strUTF16 ); -} - -void PutStringUTF16Sub( int x, int y, int color, const u16 *strUTF16 ) -{ - NNS_G2dTextCanvasDrawText( &gTextCanvasSub, x, y, color, TXT_DRAWTEXT_FLAG_DEFAULT, - strUTF16 ); -} - - -// tō쐬\ꍇ̕擾 -int GetPrintfWidth( const NNSG2dTextCanvas *pCanvas, const char *fmt, ... ) -{ - int srcLen; - int dstLen = sizeof(s_strBufferUTF16); - va_list vlist; - va_start(vlist, fmt); - srcLen = STD_TVSNPrintf( s_strBuffer, sizeof(s_strBuffer), fmt, vlist); - va_end(vlist); - s_strBuffer[ srcLen ] = 0; - - (void)STD_ConvertStringSjisToUnicode( s_strBufferUTF16, &dstLen, s_strBuffer, &srcLen, NULL ); - s_strBufferUTF16[ dstLen ] = 0; - - return NNS_G2dTextCanvasGetTextWidth( pCanvas, s_strBufferUTF16 ); -} - - -// SJISPrintf`ŕ\iUTF16ɕϊ) -void PrintfSJIS( int x, int y, int color, const char *fmt, ... ) -{ - int srcLen; - int dstLen = sizeof(s_strBufferUTF16); - va_list vlist; - va_start(vlist, fmt); - srcLen = STD_TVSNPrintf( s_strBuffer, sizeof(s_strBuffer), fmt, vlist); - va_end(vlist); - s_strBuffer[ srcLen ] = 0; - - (void)STD_ConvertStringSjisToUnicode( s_strBufferUTF16, &dstLen, s_strBuffer, &srcLen, NULL ); - s_strBufferUTF16[ dstLen ] = 0; - - NNS_G2dTextCanvasDrawText(&gTextCanvas, x, y, color, TXT_DRAWTEXT_FLAG_DEFAULT, - s_strBufferUTF16 ); -} - -void PrintfSJISSub( int x, int y, int color, const char *fmt, ... ) -{ - int srcLen; - int dstLen = sizeof(s_strBufferUTF16); - va_list vlist; - va_start(vlist, fmt); - srcLen = STD_TVSNPrintf( s_strBuffer, sizeof(s_strBuffer), fmt, vlist); - va_end(vlist); - s_strBuffer[ srcLen ] = 0; - - (void)STD_ConvertStringSjisToUnicode( s_strBufferUTF16, &dstLen, s_strBuffer, &srcLen, NULL ); - s_strBufferUTF16[ dstLen ] = 0; - - NNS_G2dTextCanvasDrawText(&gTextCanvasSub, x, y, color, TXT_DRAWTEXT_FLAG_DEFAULT, - s_strBufferUTF16 ); -} - - -// L[͓ǂݏo-------------------------------- -void ReadKeyPad(void) -{ - u16 readData = PAD_Read(); - pad.trg = (u16)(readData & (readData ^ pad.cont)); // gK - pad.cont = readData; // x^ -} - - -// ^b`plf[^̎擾----------------------- -void ReadTP(void) -{ - TP_GetCalibratedPoint( &tpd.last, &tpd.raw ); // OTPf[^ޔ - - if( TP_RequestRawSampling(&tpd.raw) ) { // ^b`pl̃TvO - SVC_CpuClear(0x0000, &tpd.raw, sizeof(tpd.raw), 16); // SPI-busyŃf[^擾Ɏśhf[^ȂhŃ^[B - return; - } - TP_GetCalibratedPoint( &tpd.disp, &tpd.raw ); // TPWLCDWɕϊB - - if( !WaitDetachTP() ) { // TPf^b`҂sB - SVC_CpuClear(0x0000, &tpd.disp, sizeof(tpd.disp), 16); // SPI-busyŃf[^擾Ɏśhf[^ȂhŃ^[B - return; - } -#if 0 - if(tpd.disp.touch) { // ݂TPf[^\ - switch ( tpd.disp.validity ) { - case TP_VALIDITY_VALID: - OS_Printf("( %3d, %3d ) -> ( %3d, %3d )\n", tpd.raw.x, tpd.raw.y, tpd.disp.x, tpd.disp.y); - break; - case TP_VALIDITY_INVALID_X: - OS_Printf("( *%3d, %3d ) -> ( *%3d, %3d )\n", tpd.raw.x, tpd.raw.y, tpd.disp.x, tpd.disp.y); - break; - case TP_VALIDITY_INVALID_Y: - OS_Printf("( %3d, *%3d ) -> ( %3d, *%3d )\n", tpd.raw.x, tpd.raw.y, tpd.disp.x, tpd.disp.y); - break; - case TP_VALIDITY_INVALID_XY: - OS_Printf("( *%3d, *%3d ) -> ( *%3d, *%3d )\n", tpd.raw.x, tpd.raw.y, tpd.disp.x, tpd.disp.y); - break; - } - } -#endif -} - - -// TPf^b`҂ -static BOOL WaitDetachTP( void ) -{ - // s_detach_countnĂAJEgB - if(s_detach_count > 0) { - if(tpd.disp.touch == 0) { // TPĂȂ΁AJEgisKlōē͂󂯕tB - s_detach_count--; - }else { - s_detach_count = TP_CSR_DETACH_COUNT; - } - return FALSE; - } - return TRUE; -} - - -// TPf^b`҂̊Jn -static void StartDetachTP( void ) -{ - s_detach_count = TP_CSR_DETACH_COUNT; -} - - -//====================================================== -// j[ -//====================================================== - -// j[` -void DrawMenu( u16 nowCsr, const MenuParam *pMenu ) -{ - int i; - int color; - - for( i = 0; i < pMenu->num; i++ ) { - if(i == nowCsr) { - if( !pMenu->pos[ i ].enable ) { - color = pMenu->disable_color; - }else { - color = pMenu->select_color; - } - }else { - color = pMenu->normal_color; - } - PutStringUTF16( pMenu->pos[ i ].x, pMenu->pos[ i ].y, color, (pMenu->str_elem)[ i ] ); - } -} - -// ^b`plɂIs֐EėpŁB -// Ƀ`^Ozx̋@\B -// SelectSomethingFunc^̊֐|C^funcɂ́AɎ𖞂֐AXgɂăZbgĎgB -// PDvfŃ^b`ĂTRUEԂAłȂFALSEԂB -// QDɗ^|C^̎wϐɃJ[\ʒuĕԂB -BOOL SelectSomethingByTP( u16 *nowCsr, SelectSomethingFunc func[], int funcnum ) -{ - int i; - static u16 detach_count = 0; - static u16 csr_old = 0xffff; - static u16 same_csr_count = 0; - - // detach_countnĂAJEgB - if( detach_count > 0 ) { - if( tpd.disp.touch == 0 ) { // TPĂȂ΁AJEgisATP_CSR_DETACH_COUNTJEgŃj[I - if( ++detach_count == TP_CSR_DETACH_COUNT ) { - detach_count = 0; - same_csr_count = 0; - *nowCsr = csr_old; - return TRUE; - }else { - return FALSE; - } - } - } - detach_count=0; // detachJEgl̃NA - - for( i = 0; i < funcnum; i++ ) { - if( tpd.disp.touch ) { // ^b`pl^b`ĂȂA - u16 csr; - if( func[i]( &csr, &tpd.disp ) ) { // func͗vfɃ^b`ĂTRUEԂAJ[\ʒuԂĂ֐ - if( tpd.disp.validity == TP_VALIDITY_VALID ) { // J[\̗vfɈړ - if( csr_old == csr ) { - if( same_csr_count < TP_CSR_TOUCH_COUNT ) { - same_csr_count++; - } - if( same_csr_count == TP_CSR_TOUCH_COUNT ) { - *nowCsr = csr; - } - return FALSE; - }else { - csr_old = csr; - } - break; - } - }else { - } - }else { // touch==0 - if( same_csr_count == TP_CSR_TOUCH_COUNT ) { - detach_count = 1; - break; - } - } - } - same_csr_count = 0; - return FALSE; -} - -// ^b`plɂ郁j[I -BOOL SelectMenuByTP( u16 *nowCsr, const MenuParam *pMenu ) -{ - u16 i; - static u16 detach_count = 0; - static u16 csr_old = 0xff; - static u16 same_csr_count = 0; - - // detach_countnĂAJEgB - if( detach_count > 0 ) { - if( tpd.disp.touch == 0 ) { // TPĂȂ΁AJEgisAPOJEgŃj[I - if( ++detach_count == TP_CSR_DETACH_COUNT ) { - detach_count = 0; - return TRUE; - }else { - return FALSE; - } - } - } - detach_count=0; // detachJEgl̃NA - - for( i = 0; i < pMenu->num; i++ ) { - if( tpd.disp.touch ) { // ^b`plj[̗vfŃ^b`ĂȂA - NNSG2dTextRect rect = NNS_G2dTextCanvasGetTextRect( &gTextCanvas, (pMenu->str_elem)[ i ] ); - u16 top_x = (u16)( pMenu->pos[ i ].x ); // j[vfLCDWZo - u16 top_y = (u16)( pMenu->pos[ i ].y ); - u16 bottom_x = (u16)( top_x + rect.width ); - u16 bottom_y = (u16)( top_y + rect.height ); - - - if( WithinRangeTP( top_x, top_y, bottom_x, bottom_y, &tpd.disp ) ) { - if( tpd.disp.validity == TP_VALIDITY_VALID ) { // J[\̗vfɈړ - if( csr_old == i ) { - if( same_csr_count < TP_CSR_TOUCH_COUNT ) { - same_csr_count++; - } - if( same_csr_count == TP_CSR_TOUCH_COUNT ) { - *nowCsr = i; - } - return FALSE; - }else { - csr_old = i; - } - break; - } - }else { - } - }else { // touch==0 - if( same_csr_count == TP_CSR_TOUCH_COUNT ) { - detach_count = 1; - break; - } - } - } - same_csr_count = 0; - return FALSE; -} - - -// ݂̃^b`plWẅɂ邩ǂԂB -BOOL WithinRangeTP( int top_x, int top_y, int bottom_x, int bottom_y, TPData *tgt ) -{ - if( ( tgt->x >= top_x ) && - ( tgt->x <= bottom_x ) && - ( tgt->y >= top_y ) && - ( tgt->y <= bottom_y ) ) { - return TRUE; - }else { - return FALSE; - } -} - - -// oi[ACROBJ̃[h -void SetBannerIconOBJ( GXOamAttr *pDstOAM, BannerFileV1 *bannerp ) -{ - GXS_LoadOBJPltt( bannerp->pltt, 15, BANNER_PLTT_SIZE ); - MI_CpuCopyFast( bannerp->image, (void *)(HW_DB_OBJ_VRAM + 0x20), BANNER_IMAGE_SIZE ); - G2_SetOBJAttr( pDstOAM, // OAM pointer - 32, // X position - 32, // Y position - 0, // Priority - GX_OAM_MODE_NORMAL, // Bitmap mode - FALSE, // mosaic off - GX_OAM_EFFECT_NONE, // affine off - GX_OAM_SHAPE_32x32, // 16x16 size - GX_OAM_COLOR_16, // 16 color - 1, // charactor - 15, // palette - 0); // affine -} - - -//=============================================== -// RTCANZX[` -//=============================================== - -// RTCf[^̎擾 -BOOL GetRTCData( RTCDrawProperty *pRTCDraw, BOOL forceGetFlag ) -{ - if( forceGetFlag || ( pRTCDraw->vcount++ == 59 ) ) { - pRTCDraw->vcount = 0; - MI_CpuCopy16( &pRTCDraw->date, &pRTCDraw->date_old, sizeof(RTCDate) ); - MI_CpuCopy16( &pRTCDraw->time, &pRTCDraw->time_old, sizeof(RTCTime) ); - (void)RTC_GetDateTime( &pRTCDraw->date, &pRTCDraw->time ); - return TRUE; - } - return FALSE; -} - - -// RTCf[^̕\ -void DrawRTCData( RTCDrawProperty *pRTCDraw ) -{ - void (*pPrintFunc)( int x, int y, int color, const char *fmt, ... ) = - ( pRTCDraw->isTopLCD ) ? PrintfSJISSub : PrintfSJIS; - - // ORTC̏ - { - u32 year = pRTCDraw->date_old.year + 2000; - pPrintFunc( pRTCDraw->date_x, pRTCDraw->date_y, TXT_COLOR_WHITE, "%04d/%02d/%02d[%3s]", - year, - pRTCDraw->date_old.month, - pRTCDraw->date_old.day, - g_strWeek[ pRTCDraw->date_old.week ] - ); - pPrintFunc( pRTCDraw->time_x, pRTCDraw->time_y, TXT_COLOR_WHITE, "%02d:%02d:%02d", - pRTCDraw->time_old.hour, - pRTCDraw->time_old.minute, - pRTCDraw->time_old.second - ); - } - // RTC̕\ - { - u32 year = pRTCDraw->date.year + 2000; - pPrintFunc( pRTCDraw->date_x, pRTCDraw->date_y, TXT_COLOR_BLACK, "%d/%02d/%02d[%3s]", - year, - pRTCDraw->date.month, - pRTCDraw->date.day, - g_strWeek[ pRTCDraw->date.week ] - ); - pPrintFunc( pRTCDraw->time_x, pRTCDraw->time_y, TXT_COLOR_BLACK, "%02d:%02d:%02d", - pRTCDraw->time.hour, - pRTCDraw->time.minute, - pRTCDraw->time.second - ); - } -} - -// RTCf[^̎擾&\ -void GetAndDrawRTCData( RTCDrawProperty *pRTCDraw, BOOL forceGetFlag ) -{ - if( GetRTCData( pRTCDraw, forceGetFlag ) ) { - DrawRTCData( pRTCDraw ); - } -} - -// [U[J[̈̐؂ւ -void ChangeUserColor( u8 col ) -{ - int l; - if(col > 15) return; - for(l=0;l<16;l++) - { - TXTColorPalette[16+l] = TempPalette[16 * col + l]; - } - GX_LoadBGPltt( TXTColorPalette, 0, sizeof(TXTColorPalette) ); -} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/misc.h b/build/tests/DisplaySystemInformation/ARM9/src/misc.h deleted file mode 100644 index ba7cd3bc..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/misc.h +++ /dev/null @@ -1,196 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: misc.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __MISC_H__ -#define __MISC_H__ - -#include -#include - -#define NNS_G2D_UNICODE -#include -#include -#include -#include - -#include "cmn.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// define data---------------------------------------------------------- -#define TP_CSR_TOUCH_COUNT 2 // TPJ[\̃`^Oẑ߂̃JEgl -#define TP_CSR_DETACH_COUNT 2 // TPJ[\uIvƔ肷TPf^b`̃JEgl - -// DrawText ł̍ -#define TXT_DRAWTEXT_FLAG_DEFAULT (NNS_G2D_VERTICALORIGIN_TOP | NNS_G2D_HORIZONTALORIGIN_LEFT | NNS_G2D_HORIZONTALALIGN_LEFT) - -// TXTColorPalette ̐F 256Fpbgւ̃[hz -enum -{ - // pbg0 TXT_CPALETTE_MAIN - TXT_COLOR_NULL=0, - TXT_COLOR_WHITE, - TXT_COLOR_BLACK, - TXT_COLOR_RED, - TXT_COLOR_GREEN, - TXT_COLOR_BLUE, - TXT_COLOR_CYAN, - TXT_COLOR_MAGENTA, - TXT_COLOR_YELLOW, - - // [U[J[Of[Vpbg̈ - TXT_UCOLOR_GNULL=16, - TXT_UCOLOR_G0, - TXT_UCOLOR_G1, - TXT_UCOLOR_G2, - TXT_UCOLOR_G3, - TXT_UCOLOR_G4, - TXT_UCOLOR_G5, - TXT_UCOLOR_G6, - TXT_UCOLOR_G7, - TXT_UCOLOR_G8, - TXT_UCOLOR_G9, - TXT_UCOLOR_G10, - TXT_UCOLOR_G11, - TXT_UCOLOR_G12, - TXT_UCOLOR_G13, - TXT_UCOLOR_GWHITE, - - // [U[J[Tv̈ - TXT_UCOLOR_GRAY=32, - TXT_UCOLOR_BROWN, - TXT_UCOLOR_RED, - TXT_UCOLOR_PINK, - TXT_UCOLOR_ORANGE, - TXT_UCOLOR_YELLOW, - TXT_UCOLOR_LIMEGREEN, - TXT_UCOLOR_GREEN, - TXT_UCOLOR_DARKGREEN, - TXT_UCOLOR_SEAGREEN, - TXT_UCOLOR_TURQUOISE, - TXT_UCOLOR_BLUE, - TXT_UCOLOR_DARKBLUE, - TXT_UCOLOR_PURPLE, - TXT_UCOLOR_VIOLET, - TXT_UCOLOR_MAGENTA, - - // pbg TXT_CPALETTE_4BPP - TXT_COLOR_4BPP_NULL=48, - TXT_COLOR_4BPP_BG=49, - TXT_COLOR_4BPP_TEXT=49 -}; - -// v\ꏊ -#define RTC_DATE_TOP_X ( 9 * 8 ) -#define RTC_DATE_TOP_Y ( 10 * 8 ) -#define RTC_TIME_TOP_X ( 12 * 8 ) -#define RTC_TIME_TOP_Y ( 12 * 8 ) - - -// L[f[^[N -typedef struct { - u16 trg; // gK - u16 cont; // x^ -}KeyWork; - - -// ^b`pl[N -typedef struct { - int detached; // ̃f[^͂Ń^b`ꂽƂB - TPData disp; // ̓͒liLCDWj - TPData raw; // ̓͒liTP Wj - TPData last; // O̓͒liLCDWj -}TpWork; - - -// j[vfW -typedef struct MenuPos { - BOOL enable; - int x; - int y; -}MenuPos; - - -// j[\p[^\ -typedef struct MenuParam { - int num; - int normal_color; - int select_color; - int disable_color; - MenuPos *pos; - const u16 **str_elem; -}MenuParam; - - -// RTCf[^\ʒu[N -typedef struct RTCDrawProperty { - BOOL isTopLCD; - int date_x; - int date_y; - int time_x; - int time_y; - int vcount; - RTCDate date; - RTCTime time; - RTCDate date_old; - RTCTime time_old; -}RTCDrawProperty; - -typedef BOOL (*SelectSomethingFunc)( u16 *csr, TPData *tgt ); - -// global variables-------------------------------------------------- -extern TpWork tpd; // ^b`plf[^ -extern KeyWork pad; // L[pbh̓f[^ -extern const u8 *const g_strWeek[ 7 ]; // j -extern RTCDrawProperty g_rtcDraw; - -extern NNSFndAllocator g_allocator; // AP[^ -extern NNSG2dFont gFont; // tHg -extern NNSG2dCharCanvas gCanvas; // CharCanvas -extern NNSG2dTextCanvas gTextCanvas; // TextCanvas -extern NNSG2dCharCanvas gCanvasSub; // CharCanvas -extern NNSG2dTextCanvas gTextCanvasSub; // TextCanvas - -// function------------------------------------------------------------- -void InitAllocator( void ); -void *Alloc( u32 size ); -void Free( void *pBuffer ); -void InitBG( void ); -int GetPrintfWidth( const NNSG2dTextCanvas *pCanvas, const char *fmt, ... ); -void PutStringUTF16 ( int x, int y, int color, const u16 *strUTF16 ); -void PutStringUTF16Sub( int x, int y, int color, const u16 *strUTF16 ); -void PrintfSJIS ( int x, int y, int color, const char *fmt, ... ); -void PrintfSJISSub( int x, int y, int color, const char *fmt, ... ); -void ReadKeyPad( void ); -void ReadTP( void ); -void DrawMenu( u16 nowCsr, const MenuParam *pMenu ); -BOOL SelectSomethingByTP( u16 *nowCsr, SelectSomethingFunc func[], int funcnum ); -BOOL SelectMenuByTP( u16 *nowCsr, const MenuParam *pMenu ); -BOOL WithinRangeTP( int top_x, int top_y, int bottom_x, int bottom_y, TPData *tgt ); -void SetBannerIconOBJ( GXOamAttr *pDstOAM, BannerFileV1 *bannerp ); -BOOL GetRTCData( RTCDrawProperty *pRTCDraw, BOOL forceGetFlag ); -void DrawRTCData( RTCDrawProperty *pRTCDraw ); -void GetAndDrawRTCData( RTCDrawProperty *pRTCDraw, BOOL forceGetFlag ); -void ChangeUserColor( u8 col ); - -#ifdef __cplusplus -} -#endif - -#endif // __MISC_H__ diff --git a/build/tests/DisplaySystemInformation/ARM9/src/myIoreg_SCFG.h b/build/tests/DisplaySystemInformation/ARM9/src/myIoreg_SCFG.h deleted file mode 100644 index 8961cca5..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/myIoreg_SCFG.h +++ /dev/null @@ -1,533 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: myIoreg_SCFG.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - *---------------------------------------------------------------------------*/ - -// ARM9Ŏ󂯎ARM7SCFGQƂ邽߂ -// ARM9Ȃ̂ARM7ˑ̃ItZbg񂪕Kv... - - -// }NĒ`h߂̋̍ - -#ifndef __MY_IOREG_SCFG_H__ -#define __MY_IOREG_SCFG_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Definition of Register offsets, addresses and variables. - */ - - -/* ROM */ - -#define DISP_REG_ROM_OFFSET 0x4000 -#define DISP_REG_ROM_ADDR (HW_REG_BASE + DISP_REG_ROM_OFFSET) - -/* A9ROM */ - -#define DISP_REG_A9ROM_OFFSET 0x4000 -#define DISP_REG_A9ROM_ADDR (HW_REG_BASE + DISP_REG_A9ROM_OFFSET) - -/* A7ROM */ - -#define DISP_REG_A7ROM_OFFSET 0x4001 -#define DISP_REG_A7ROM_ADDR (HW_REG_BASE + DISP_REG_A7ROM_OFFSET) - -/* ROMWE */ - -#define DISP_REG_ROMWE_OFFSET 0x4002 -#define DISP_REG_ROMWE_ADDR (HW_REG_BASE + DISP_REG_ROMWE_OFFSET) - -/* CLK */ - -#define DISP_REG_CLK_OFFSET 0x4004 -#define DISP_REG_CLK_ADDR (HW_REG_BASE + DISP_REG_CLK_OFFSET) - -/* JTAG */ - -#define DISP_REG_JTAG_OFFSET 0x4006 -#define DISP_REG_JTAG_ADDR (HW_REG_BASE + DISP_REG_JTAG_OFFSET) - -/* EXT */ - -#define DISP_REG_EXT_OFFSET 0x4008 -#define DISP_REG_EXT_ADDR (HW_REG_BASE + DISP_REG_EXT_OFFSET) - -/* MC */ - -#define DISP_REG_MC_OFFSET 0x4010 -#define DISP_REG_MC_ADDR (HW_REG_BASE + DISP_REG_MC_OFFSET) - -/* MCCHAT */ - -#define DISP_REG_MCCHAT_OFFSET 0x4012 -#define DISP_REG_MCCHAT_ADDR (HW_REG_BASE + DISP_REG_MCCHAT_OFFSET) - -/* MC2 */ - -#define DISP_REG_MC2_OFFSET 0x4014 -#define DISP_REG_MC2_ADDR (HW_REG_BASE + DISP_REG_MC2_OFFSET) - - -/* WL */ - -#define DISP_REG_WL_OFFSET 0x4020 -#define DISP_REG_WL_ADDR (HW_REG_BASE + DISP_REG_WL_OFFSET) - -/* OP */ - -#define DISP_REG_OP_OFFSET 0x4024 -#define DISP_REG_OP_ADDR (HW_REG_BASE + DISP_REG_OP_OFFSET) - - -/* - * Definitions of Register fields - */ - - -/* ROM */ - -#define DISP_REG_SCFG_ROM_ROMWE_SHIFT 16 -#define DISP_REG_SCFG_ROM_ROMWE_SIZE 1 -#define DISP_REG_SCFG_ROM_ROMWE_MASK 0x00010000 - -#define DISP_REG_SCFG_ROM_ARM7FUSE_SHIFT 10 -#define DISP_REG_SCFG_ROM_ARM7FUSE_SIZE 1 -#define DISP_REG_SCFG_ROM_ARM7FUSE_MASK 0x00000400 - -#define DISP_REG_SCFG_ROM_ARM7RSEL_SHIFT 9 -#define DISP_REG_SCFG_ROM_ARM7RSEL_SIZE 1 -#define DISP_REG_SCFG_ROM_ARM7RSEL_MASK 0x00000200 - -#define DISP_REG_SCFG_ROM_ARM7SEL_SHIFT 8 -#define DISP_REG_SCFG_ROM_ARM7SEL_SIZE 1 -#define DISP_REG_SCFG_ROM_ARM7SEL_MASK 0x00000100 - -#define DISP_REG_SCFG_ROM_ARM9RSEL_SHIFT 1 -#define DISP_REG_SCFG_ROM_ARM9RSEL_SIZE 1 -#define DISP_REG_SCFG_ROM_ARM9RSEL_MASK 0x00000002 - -#define DISP_REG_SCFG_ROM_ARM9SEL_SHIFT 0 -#define DISP_REG_SCFG_ROM_ARM9SEL_SIZE 1 -#define DISP_REG_SCFG_ROM_ARM9SEL_MASK 0x00000001 - -#ifndef SDK_ASM -#define DISP_REG_SCFG_ROM_FIELD( romwe, arm7fuse, arm7rsel, arm7sel, arm9rsel, arm9sel ) \ - (u32)( \ - ((u32)(romwe) << DISP_REG_SCFG_ROM_ROMWE_SHIFT) | \ - ((u32)(arm7fuse) << DISP_REG_SCFG_ROM_ARM7FUSE_SHIFT) | \ - ((u32)(arm7rsel) << DISP_REG_SCFG_ROM_ARM7RSEL_SHIFT) | \ - ((u32)(arm7sel) << DISP_REG_SCFG_ROM_ARM7SEL_SHIFT) | \ - ((u32)(arm9rsel) << DISP_REG_SCFG_ROM_ARM9RSEL_SHIFT) | \ - ((u32)(arm9sel) << DISP_REG_SCFG_ROM_ARM9SEL_SHIFT)) -#endif - - -/* A9ROM */ - -#define DISP_REG_SCFG_A9ROM_RSEL_SHIFT 1 -#define DISP_REG_SCFG_A9ROM_RSEL_SIZE 1 -#define DISP_REG_SCFG_A9ROM_RSEL_MASK 0x02 - -#define DISP_REG_SCFG_A9ROM_SEC_SHIFT 0 -#define DISP_REG_SCFG_A9ROM_SEC_SIZE 1 -#define DISP_REG_SCFG_A9ROM_SEC_MASK 0x01 - -#ifndef SDK_ASM -#define DISP_REG_SCFG_A9ROM_FIELD( rsel, sec ) \ - (u8)( \ - ((u32)(rsel) << DISP_REG_SCFG_A9ROM_RSEL_SHIFT) | \ - ((u32)(sec) << DISP_REG_SCFG_A9ROM_SEC_SHIFT)) -#endif - - -/* A7ROM */ - -#define DISP_REG_SCFG_A7ROM_FUSE_SHIFT 2 -#define DISP_REG_SCFG_A7ROM_FUSE_SIZE 1 -#define DISP_REG_SCFG_A7ROM_FUSE_MASK 0x04 - -#define DISP_REG_SCFG_A7ROM_RSEL_SHIFT 1 -#define DISP_REG_SCFG_A7ROM_RSEL_SIZE 1 -#define DISP_REG_SCFG_A7ROM_RSEL_MASK 0x02 - -#define DISP_REG_SCFG_A7ROM_SEC_SHIFT 0 -#define DISP_REG_SCFG_A7ROM_SEC_SIZE 1 -#define DISP_REG_SCFG_A7ROM_SEC_MASK 0x01 - -#ifndef SDK_ASM -#define DISP_REG_SCFG_A7ROM_FIELD( fuse, rsel, sec ) \ - (u8)( \ - ((u32)(fuse) << DISP_REG_SCFG_A7ROM_FUSE_SHIFT) | \ - ((u32)(rsel) << DISP_REG_SCFG_A7ROM_RSEL_SHIFT) | \ - ((u32)(sec) << DISP_REG_SCFG_A7ROM_SEC_SHIFT)) -#endif - - -/* ROMWE */ - -#define DISP_REG_SCFG_ROMWE_WE_SHIFT 0 -#define DISP_REG_SCFG_ROMWE_WE_SIZE 1 -#define DISP_REG_SCFG_ROMWE_WE_MASK 0x0001 - -#ifndef SDK_ASM -#define DISP_REG_SCFG_ROMWE_FIELD( we ) \ - (u16)( \ - ((u32)(we) << DISP_REG_SCFG_ROMWE_WE_SHIFT)) -#endif - - -/* CLK */ - -#define DISP_REG_SCFG_CLK_SNDMCLK_SHIFT 8 -#define DISP_REG_SCFG_CLK_SNDMCLK_SIZE 1 -#define DISP_REG_SCFG_CLK_SNDMCLK_MASK 0x0100 - -#define DISP_REG_SCFG_CLK_WRAMHCLK_SHIFT 7 -#define DISP_REG_SCFG_CLK_WRAMHCLK_SIZE 1 -#define DISP_REG_SCFG_CLK_WRAMHCLK_MASK 0x0080 - -#define DISP_REG_SCFG_CLK_AESHCLK_SHIFT 2 -#define DISP_REG_SCFG_CLK_AESHCLK_SIZE 1 -#define DISP_REG_SCFG_CLK_AESHCLK_MASK 0x0004 - -#define DISP_REG_SCFG_CLK_SD2HCLK_SHIFT 1 -#define DISP_REG_SCFG_CLK_SD2HCLK_SIZE 1 -#define DISP_REG_SCFG_CLK_SD2HCLK_MASK 0x0002 - -#define DISP_REG_SCFG_CLK_SD1HCLK_SHIFT 0 -#define DISP_REG_SCFG_CLK_SD1HCLK_SIZE 1 -#define DISP_REG_SCFG_CLK_SD1HCLK_MASK 0x0001 - -#ifndef SDK_ASM -#define DISP_REG_SCFG_CLK_FIELD( sndmclk, wramhclk, aeshclk, sd2hclk, sd1hclk ) \ - (u16)( \ - ((u32)(sndmclk) << DISP_REG_SCFG_CLK_SNDMCLK_SHIFT) | \ - ((u32)(wramhclk) << DISP_REG_SCFG_CLK_WRAMHCLK_SHIFT) | \ - ((u32)(aeshclk) << DISP_REG_SCFG_CLK_AESHCLK_SHIFT) | \ - ((u32)(sd2hclk) << DISP_REG_SCFG_CLK_SD2HCLK_SHIFT) | \ - ((u32)(sd1hclk) << DISP_REG_SCFG_CLK_SD1HCLK_SHIFT)) -#endif - - -/* JTAG */ - -#define DISP_REG_SCFG_JTAG_DSPJE_SHIFT 8 -#define DISP_REG_SCFG_JTAG_DSPJE_SIZE 1 -#define DISP_REG_SCFG_JTAG_DSPJE_MASK 0x0100 - -#define DISP_REG_SCFG_JTAG_CPUJE_SHIFT 1 -#define DISP_REG_SCFG_JTAG_CPUJE_SIZE 1 -#define DISP_REG_SCFG_JTAG_CPUJE_MASK 0x0002 - -#define DISP_REG_SCFG_JTAG_ARM7SEL_SHIFT 0 -#define DISP_REG_SCFG_JTAG_ARM7SEL_SIZE 1 -#define DISP_REG_SCFG_JTAG_ARM7SEL_MASK 0x0001 - -#ifndef SDK_ASM -#define DISP_REG_SCFG_JTAG_FIELD( dspje, cpuje, arm7sel ) \ - (u16)( \ - ((u32)(dspje) << DISP_REG_SCFG_JTAG_DSPJE_SHIFT) | \ - ((u32)(cpuje) << DISP_REG_SCFG_JTAG_CPUJE_SHIFT) | \ - ((u32)(arm7sel) << DISP_REG_SCFG_JTAG_ARM7SEL_SHIFT)) -#endif - - -/* EXT */ - -#define DISP_REG_SCFG_EXT_CFG_SHIFT 31 -#define DISP_REG_SCFG_EXT_CFG_SIZE 1 -#define DISP_REG_SCFG_EXT_CFG_MASK 0x80000000 - -#define DISP_REG_SCFG_EXT_PUENABLE_SHIFT 28 -#define DISP_REG_SCFG_EXT_PUENABLE_SIZE 1 -#define DISP_REG_SCFG_EXT_PUENABLE_MASK 0x10000000 - -#define DISP_REG_SCFG_EXT_SD20_SHIFT 28 -#define DISP_REG_SCFG_EXT_SD20_SIZE 1 -#define DISP_REG_SCFG_EXT_SD20_MASK 0x10000000 - -#define DISP_REG_SCFG_EXT_NEWB_ACCESS_E_SHIFT 16 -#define DISP_REG_SCFG_EXT_NEWB_ACCESS_E_SIZE 10 -#define DISP_REG_SCFG_EXT_NEWB_ACCESS_E_MASK 0x03ff0000 - -#define DISP_REG_SCFG_EXT_WRAM_SHIFT 25 -#define DISP_REG_SCFG_EXT_WRAM_SIZE 1 -#define DISP_REG_SCFG_EXT_WRAM_MASK 0x02000000 - -#define DISP_REG_SCFG_EXT_MC_B_SHIFT 24 -#define DISP_REG_SCFG_EXT_MC_B_SIZE 1 -#define DISP_REG_SCFG_EXT_MC_B_MASK 0x01000000 - -#define DISP_REG_SCFG_EXT_GPIO_SHIFT 23 -#define DISP_REG_SCFG_EXT_GPIO_SIZE 1 -#define DISP_REG_SCFG_EXT_GPIO_MASK 0x00800000 - -#define DISP_REG_SCFG_EXT_I2C_SHIFT 22 -#define DISP_REG_SCFG_EXT_I2C_SIZE 1 -#define DISP_REG_SCFG_EXT_I2C_MASK 0x00400000 - -#define DISP_REG_SCFG_EXT_I2S_SHIFT 21 -#define DISP_REG_SCFG_EXT_I2S_SIZE 1 -#define DISP_REG_SCFG_EXT_I2S_MASK 0x00200000 - -#define DISP_REG_SCFG_EXT_MIC_SHIFT 20 -#define DISP_REG_SCFG_EXT_MIC_SIZE 1 -#define DISP_REG_SCFG_EXT_MIC_MASK 0x00100000 - -#define DISP_REG_SCFG_EXT_SD2_SHIFT 19 -#define DISP_REG_SCFG_EXT_SD2_SIZE 1 -#define DISP_REG_SCFG_EXT_SD2_MASK 0x00080000 - -#define DISP_REG_SCFG_EXT_SD1_SHIFT 18 -#define DISP_REG_SCFG_EXT_SD1_SIZE 1 -#define DISP_REG_SCFG_EXT_SD1_MASK 0x00040000 - -#define DISP_REG_SCFG_EXT_AES_SHIFT 17 -#define DISP_REG_SCFG_EXT_AES_SIZE 1 -#define DISP_REG_SCFG_EXT_AES_MASK 0x00020000 - -#define DISP_REG_SCFG_EXT_DMAC_SHIFT 16 -#define DISP_REG_SCFG_EXT_DMAC_SIZE 1 -#define DISP_REG_SCFG_EXT_DMAC_MASK 0x00010000 - -#define DISP_REG_SCFG_EXT_NITROB_EX_E_SHIFT 8 -#define DISP_REG_SCFG_EXT_NITROB_EX_E_SIZE 8 -#define DISP_REG_SCFG_EXT_NITROB_EX_E_MASK 0x0000ff00 - -#define DISP_REG_SCFG_EXT_PSRAM_SHIFT 14 -#define DISP_REG_SCFG_EXT_PSRAM_SIZE 2 -#define DISP_REG_SCFG_EXT_PSRAM_MASK 0x0000c000 - -#define DISP_REG_SCFG_EXT_VRAM_SHIFT 13 -#define DISP_REG_SCFG_EXT_VRAM_SIZE 1 -#define DISP_REG_SCFG_EXT_VRAM_MASK 0x00002000 - -#define DISP_REG_SCFG_EXT_LCDC_SHIFT 12 -#define DISP_REG_SCFG_EXT_LCDC_SIZE 1 -#define DISP_REG_SCFG_EXT_LCDC_MASK 0x00001000 - -#define DISP_REG_SCFG_EXT_SIO_SHIFT 11 -#define DISP_REG_SCFG_EXT_SIO_SIZE 1 -#define DISP_REG_SCFG_EXT_SIO_MASK 0x00000800 - -#define DISP_REG_SCFG_EXT_DSEL_SHIFT 10 -#define DISP_REG_SCFG_EXT_DSEL_SIZE 1 -#define DISP_REG_SCFG_EXT_DSEL_MASK 0x00000400 - -#define DISP_REG_SCFG_EXT_SPI_SHIFT 9 -#define DISP_REG_SCFG_EXT_SPI_SIZE 1 -#define DISP_REG_SCFG_EXT_SPI_MASK 0x00000200 - -#define DISP_REG_SCFG_EXT_INTC_SHIFT 8 -#define DISP_REG_SCFG_EXT_INTC_SIZE 1 -#define DISP_REG_SCFG_EXT_INTC_MASK 0x00000100 - -#define DISP_REG_SCFG_EXT_NITROB_MOD_E_SHIFT 0 -#define DISP_REG_SCFG_EXT_NITROB_MOD_E_SIZE 8 -#define DISP_REG_SCFG_EXT_NITROB_MOD_E_MASK 0x000000ff - -#define DISP_REG_SCFG_EXT_MC_SHIFT 7 -#define DISP_REG_SCFG_EXT_MC_SIZE 1 -#define DISP_REG_SCFG_EXT_MC_MASK 0x00000080 - -#define DISP_REG_SCFG_EXT_SND_SHIFT 2 -#define DISP_REG_SCFG_EXT_SND_SIZE 1 -#define DISP_REG_SCFG_EXT_SND_MASK 0x00000004 - -#define DISP_REG_SCFG_EXT_SDMA_SHIFT 1 -#define DISP_REG_SCFG_EXT_SDMA_SIZE 1 -#define DISP_REG_SCFG_EXT_SDMA_MASK 0x00000002 - -#define DISP_REG_SCFG_EXT_DMA_SHIFT 0 -#define DISP_REG_SCFG_EXT_DMA_SIZE 1 -#define DISP_REG_SCFG_EXT_DMA_MASK 0x00000001 - -#ifndef SDK_ASM -#define DISP_REG_SCFG_EXT_FIELD( cfg, puenable, sd20, newb_access_e, wram, mc_b, gpio, i2c, i2s, mic, sd2, sd1, aes, dmac, nitrob_ex_e, psram, vram, lcdc, sio, dsel, spi, intc, nitrob_mod_e, mc, snd, sdma, dma ) \ - (u32)( \ - ((u32)(cfg) << DISP_REG_SCFG_EXT_CFG_SHIFT) | \ - ((u32)(puenable) << DISP_REG_SCFG_EXT_PUENABLE_SHIFT) | \ - ((u32)(sd20) << DISP_REG_SCFG_EXT_SD20_SHIFT) | \ - ((u32)(newb_access_e) << DISP_REG_SCFG_EXT_NEWB_ACCESS_E_SHIFT) | \ - ((u32)(wram) << DISP_REG_SCFG_EXT_WRAM_SHIFT) | \ - ((u32)(mc_b) << DISP_REG_SCFG_EXT_MC_B_SHIFT) | \ - ((u32)(gpio) << DISP_REG_SCFG_EXT_GPIO_SHIFT) | \ - ((u32)(i2c) << DISP_REG_SCFG_EXT_I2C_SHIFT) | \ - ((u32)(i2s) << DISP_REG_SCFG_EXT_I2S_SHIFT) | \ - ((u32)(mic) << DISP_REG_SCFG_EXT_MIC_SHIFT) | \ - ((u32)(sd2) << DISP_REG_SCFG_EXT_SD2_SHIFT) | \ - ((u32)(sd1) << DISP_REG_SCFG_EXT_SD1_SHIFT) | \ - ((u32)(aes) << DISP_REG_SCFG_EXT_AES_SHIFT) | \ - ((u32)(dmac) << DISP_REG_SCFG_EXT_DMAC_SHIFT) | \ - ((u32)(nitrob_ex_e) << DISP_REG_SCFG_EXT_NITROB_EX_E_SHIFT) | \ - ((u32)(psram) << DISP_REG_SCFG_EXT_PSRAM_SHIFT) | \ - ((u32)(vram) << DISP_REG_SCFG_EXT_VRAM_SHIFT) | \ - ((u32)(lcdc) << DISP_REG_SCFG_EXT_LCDC_SHIFT) | \ - ((u32)(sio) << DISP_REG_SCFG_EXT_SIO_SHIFT) | \ - ((u32)(dsel) << DISP_REG_SCFG_EXT_DSEL_SHIFT) | \ - ((u32)(spi) << DISP_REG_SCFG_EXT_SPI_SHIFT) | \ - ((u32)(intc) << DISP_REG_SCFG_EXT_INTC_SHIFT) | \ - ((u32)(nitrob_mod_e) << DISP_REG_SCFG_EXT_NITROB_MOD_E_SHIFT) | \ - ((u32)(mc) << DISP_REG_SCFG_EXT_MC_SHIFT) | \ - ((u32)(snd) << DISP_REG_SCFG_EXT_SND_SHIFT) | \ - ((u32)(sdma) << DISP_REG_SCFG_EXT_SDMA_SHIFT) | \ - ((u32)(dma) << DISP_REG_SCFG_EXT_DMA_SHIFT)) -#endif - -/* MC1 */ - -#define DISP_REG_MI_MC1_CC_SHIFT 16 -#define DISP_REG_MI_MC1_CC_SIZE 16 -#define DISP_REG_MI_MC1_CC_MASK 0xffff0000 - -#define DISP_REG_MI_MC1_SWP_SHIFT 15 -#define DISP_REG_MI_MC1_SWP_SIZE 1 -#define DISP_REG_MI_MC1_SWP_MASK 0x00008000 - -#define DISP_REG_MI_MC1_SL2_STATUS_SHIFT 4 -#define DISP_REG_MI_MC1_SL2_STATUS_SIZE 4 -#define DISP_REG_MI_MC1_SL2_STATUS_MASK 0x000000f0 - -#define DISP_REG_MI_MC1_SL2_M1_SHIFT 7 -#define DISP_REG_MI_MC1_SL2_M1_SIZE 1 -#define DISP_REG_MI_MC1_SL2_M1_MASK 0x00000080 - -#define DISP_REG_MI_MC1_SL2_M0_SHIFT 6 -#define DISP_REG_MI_MC1_SL2_M0_SIZE 1 -#define DISP_REG_MI_MC1_SL2_M0_MASK 0x00000040 - -#define DISP_REG_MI_MC1_SL2_CDET_SHIFT 4 -#define DISP_REG_MI_MC1_SL2_CDET_SIZE 1 -#define DISP_REG_MI_MC1_SL2_CDET_MASK 0x00000010 - -#define DISP_REG_MI_MC1_SL1_STATUS_SHIFT 0 -#define DISP_REG_MI_MC1_SL1_STATUS_SIZE 4 -#define DISP_REG_MI_MC1_SL1_STATUS_MASK 0x0000000f - -#define DISP_REG_MI_MC1_SL1_M1_SHIFT 3 -#define DISP_REG_MI_MC1_SL1_M1_SIZE 1 -#define DISP_REG_MI_MC1_SL1_M1_MASK 0x00000008 - -#define DISP_REG_MI_MC1_SL1_M0_SHIFT 2 -#define DISP_REG_MI_MC1_SL1_M0_SIZE 1 -#define DISP_REG_MI_MC1_SL1_M0_MASK 0x00000004 - -#define DISP_REG_MI_MC1_SL1_CDET_SHIFT 0 -#define DISP_REG_MI_MC1_SL1_CDET_SIZE 1 -#define DISP_REG_MI_MC1_SL1_CDET_MASK 0x00000001 - - -/* MC */ - -#define DISP_REG_MI_MC_SWP_SHIFT 15 -#define DISP_REG_MI_MC_SWP_SIZE 1 -#define DISP_REG_MI_MC_SWP_MASK 0x8000 - -#define DISP_REG_MI_MC_SL2_MODE_SHIFT 6 -#define DISP_REG_MI_MC_SL2_MODE_SIZE 2 -#define DISP_REG_MI_MC_SL2_MODE_MASK 0x00c0 - -#define DISP_REG_MI_MC_SL2_CDET_SHIFT 4 -#define DISP_REG_MI_MC_SL2_CDET_SIZE 1 -#define DISP_REG_MI_MC_SL2_CDET_MASK 0x0010 - -#define DISP_REG_MI_MC_SL1_MODE_SHIFT 2 -#define DISP_REG_MI_MC_SL1_MODE_SIZE 2 -#define DISP_REG_MI_MC_SL1_MODE_MASK 0x000c - -#define DISP_REG_MI_MC_SL1_CDET_SHIFT 0 -#define DISP_REG_MI_MC_SL1_CDET_SIZE 1 -#define DISP_REG_MI_MC_SL1_CDET_MASK 0x0001 - -#ifndef SDK_ASM -#define DISP_REG_MI_MC_FIELD( swp, sl2_mode, sl2_cdet, sl1_mode, sl1_cdet ) \ - (u16)( \ - ((u32)(swp) << DISP_REG_MI_MC_SWP_SHIFT) | \ - ((u32)(sl2_mode) << DISP_REG_MI_MC_SL2_MODE_SHIFT) | \ - ((u32)(sl2_cdet) << DISP_REG_MI_MC_SL2_CDET_SHIFT) | \ - ((u32)(sl1_mode) << DISP_REG_MI_MC_SL1_MODE_SHIFT) | \ - ((u32)(sl1_cdet) << DISP_REG_MI_MC_SL1_CDET_SHIFT)) -#endif - -/* MCCHAT */ - -#define DISP_REG_MI_MCCHAT_CC_SHIFT 0 -#define DISP_REG_MI_MCCHAT_CC_SIZE 16 -#define DISP_REG_MI_MCCHAT_CC_MASK 0xffff - -#ifndef SDK_ASM -#define DISP_REG_MI_MCCHAT_FIELD( cc ) \ - (u16)( \ - ((u32)(cc) << DISP_REG_MI_MCCHAT_CC_SHIFT)) -#endif - - -/* MC2 */ - -#define DISP_REG_MI_MC2_CA_SHIFT 0 -#define DISP_REG_MI_MC2_CA_SIZE 16 -#define DISP_REG_MI_MC2_CA_MASK 0xffff - -#ifndef SDK_ASM -#define DISP_REG_MI_MC2_FIELD( ca ) \ - (u16)( \ - ((u32)(ca) << DISP_REG_MI_MC2_CA_SHIFT)) -#endif - - -/* WL */ - -#define DISP_REG_SCFG_WL_OFFB_SHIFT 0 -#define DISP_REG_SCFG_WL_OFFB_SIZE 1 -#define DISP_REG_SCFG_WL_OFFB_MASK 0x0001 - -#ifndef SDK_ASM -#define DISP_REG_SCFG_WL_FIELD( offb ) \ - (u16)( \ - ((u32)(offb) << DISP_REG_SCFG_WL_OFFB_SHIFT)) -#endif - - -/* OP */ - -#define DISP_REG_SCFG_OP_OP1_SHIFT 1 -#define DISP_REG_SCFG_OP_OP1_SIZE 1 -#define DISP_REG_SCFG_OP_OP1_MASK 0x0002 - -#define DISP_REG_SCFG_OP_OP0_SHIFT 0 -#define DISP_REG_SCFG_OP_OP0_SIZE 1 -#define DISP_REG_SCFG_OP_OP0_MASK 0x0001 - -#define DISP_REG_SCFG_OP_OPT_SHIFT 0 -#define DISP_REG_SCFG_OP_OPT_SIZE 2 -#define DISP_REG_SCFG_OP_OPT_MASK 0x0003 - -#ifndef SDK_ASM - -#define DISP_REG_SCFG_OP_FIELD( op1, op0, opt ) \ - (u16)( \ - ((u32)(op1) << DISP_REG_SCFG_OP_OP1_SHIFT) | \ - ((u32)(op0) << DISP_REG_SCFG_OP_OP0_SHIFT) | \ - ((u32)(opt) << DISP_REG_SCFG_OP_OPT_SHIFT)) -#endif - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -/* TWL_IOREG_SCFG_H_ */ -#endif diff --git a/build/tests/DisplaySystemInformation/ARM9/src/strResource.c b/build/tests/DisplaySystemInformation/ARM9/src/strResource.c deleted file mode 100644 index 9e70045d..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/strResource.c +++ /dev/null @@ -1,726 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: strResource.c - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "drawFunc.h" - - -// VERSION_MENU_SIZEAFONTMENU_SIZERecɉĉ•ςȂ̂constł͂Ȃ - -#ifdef VERSION_VIEWER - -int s_numMenu[] = { - VERSIONMENU_SIZE, - ROOTMENU_SIZE -}; - -const char *s_strRootMenu[] = { - "Installed Content Version" -}; - - -const char **s_strMetaMenu[] = { - NULL, - s_strRootMenu -}; - -#else - -int s_numMenu[] = { - OWNERMENU_SIZE, - PARENTALMENU_SIZE, - SECURE_USER_MENU_SIZE, - OTHERMENU_SIZE, - NORMAL_HW_MENU_SIZE, - SECURE_HW_MENU_SIZE, - SCFG_ARM7_MENU_SIZE, - SCFG_ARM9_MENU_SIZE, - SYSMENU_MENU_SIZE, - FONTMENU_SIZE, - WLMENU_SIZE, - WHITEMENU_SIZE, - VERSIONMENU_SIZE, - 0, - 0, - 0, - ROOTMENU_SIZE -}; - -const char *s_strARM7RegisterName[] = { - "ROM", - "CLK", - "JTAG", - "EXP", - "MC1", - "MC2", - "DSWL", - "OPT", -}; - -const char *s_strARM9RegisterName[] = { - "ROM", - "CLK", - "RST", - "EXP", -}; - -const char *s_strSCFGViewMode[] = { - "", - "" -}; - -const char *s_strRootMenu[] = { - "Owner", - "Parental control", - "Secure User Info", - "Other Info", - "Normal Hardware Info", - "Secure Hardware Info", - "SCFG Info (ARM7 side)", - "SCFG Info (ARM9 side)", - "SystemMenu Version", - "Shared Font", - "Wireless Firmware", - "Whitelist", - "Installed Content Version", - "Reset HW Setting to Default", - "break HW Setting", - "Reset RTC Data" -}; - -const char *s_strOwnerMenu[] = { - "Language", - "Favorite color", - "Birthday", - "Country", - "Nickname", - "Comment" -}; - -const char *s_strParentalMenu[] = { - "Parental control", - "Picto Chat", - "ds Download", - "browser", - "Wii Point", - "Photo Exchange", - "UGC", - "Organization", - "Age", - "Password", - "Quastion id", - "Answer" -}; - -const char *s_strSecureUserMenu[] = { - "Finished Initial Setting(Setting)", - "Finished Initial Setting(Launcher)", - "Finished Broken Setting Sequence", - "Installed Softbox Count", - "Free Softbox Count", - "Last Boot Soft Index", - "Last Boot Soft Platform", - "Last Boot Soft ID" -}; - -const char *s_strOtherMenu[] = { - "Agree EULA", - "EULA Version", - "Wireless", - "RTC Offset", - "TP Calib raw x1", - "TP Calib raw y1", - "TP Calib dx1", - "TP Calib dy1", - "TP Calib raw x2", - "TP Calib raw y2", - "TP Calib dx2", - "TP Calib dy2", - "TP Calib RSV" -}; - -const char *s_strNormalHWMenu[] = { - "RTC Adjustment", - "Unique ID" -}; - -const char *s_strSecureHWMenu[] = { - "Force Disable Wireless", - "Region", - "Serial No", - "Language Bitmap", - "Fuse Data", - "Launcher TitleID Lo" -}; - -const char *s_strSCFGArm9Menu[] = { - "ARM9 SecureROM", - "Rom Status", - - "CPU Speed", - "DSP Clock", - "Camera Clock", - "WRAM Clock", - "Camera CKI", - - "DSP Reset Flag", - - "Fixed DMA", - "Fixed Geometry", - "Fixed Renderer", - "Fixed 2D Engine", - "Fixed Divider", - "Fixed Card I/F", - "Expanded VRAM", - "Expanded LCDC", - "Expanded INTC", - "PSRAM Boundary", - "New DMA Access", - "Camera Access", - "DSP Access", - "MemoryCard I/F", - "WRAM Access", - "CFG Block Access", - "All SCFG Check", - "SCFG Check Err7", - "SCFG Check Err9" -}; - -const char *s_strSCFGArm7Menu[] = { - - // rom - "ARM9 SecureROM", - "ARM9 ROM Type", - "ARM7 SecureROM", - "ARM7 ROM Type", - "ARM7 FuseRom", - "Write Rom Area", - - // VKubNNbN - "SD1 I/F Clock", - "SD2 I/F Clock", - "AES Clock", - "WRAM Clock", - "SND Clock", - - // JTAG - "Chain ARM7 to CPU JTAG", - "CPU JTAG", - "DSP JTAG", - - // g@\ - "Fixed A7-DMAC1", - "Fixed Sound DMA", - "Fixed Sound", - "Fixed Memory Card", - "Expanded A7-INTC", - "Expanded SPI", - "Expanded Sound DMA", - "Expanded SIO", - "Expanded LCDC", - "Expanded VRAM", - "PSRAM Boundary", - "A7-DMAC2 Block", - "AES Block", - "SD1 I/F Block", - "SD2 I/F Block", - "Mic Block", - "I2S I/F Block", - "I2C I/F Block", - "GPIO Block", - "MemoryCard I/F", - "Shared WRAM", - "PU Resistance", - "ALL SCFG Block", - - // J[h I/F - "MC Slot1 DET", - "MC Slot1 Mode", - "MC Slot2 DET", - "MC Slot2 Mode", - "Swap MC1 MC2", - "Chatter. Count", - "MC Counter Data", - - // - "Old Wireless", - - // IvV[qǂݏo - "Option Form", - "Option App for" -}; - -const char *s_strSystemMenu[] = { - "Timestamp", - "Version (numeric)", - "Version (string)", - "EULA URL", - "NUP Hostname", - - ".twl-nup-cert.der" , - ".twl-nup-prvkey.der", - ".twl-shop-cert.der", - ".twl-shop-prvkey.der", - "NintendoCA-G2.der" -}; - -const char *s_strFontMenu[] = { - "Timestamp", -}; - -const char *s_strWLMenu[] = { - "Version", - "Num of FW", - "FW1 type", - "FW1 version", - "FW2 type", - "FW2 version" -}; - -const char *s_strWhiteMenu[] = { - "Num of Entry", - "Tmd Hash" -}; - -const char **s_strMetaMenu[] = { - s_strOwnerMenu, - s_strParentalMenu, - s_strSecureUserMenu, - s_strOtherMenu, - s_strNormalHWMenu, - s_strSecureHWMenu, - s_strSCFGArm7Menu, - s_strSCFGArm9Menu, - s_strSystemMenu, - s_strFontMenu, - s_strWLMenu, - s_strWhiteMenu, - NULL, - NULL, - NULL, - NULL, - s_strRootMenu -}; - -char *s_strAccess[] = { - "Inaccessible", - "Accessible" -}; - -char *s_strJoint[] = { - "Jointed", - "DisJointed" -}; - -char *s_strSupply[] = { - "STOPPED", - "SUPPLIED" -}; - -char *s_strPSRAM[] = { - "4MB", - "16MB", - "32MB" -}; - -char *s_strRomMode[] = { - "TWL 64KB ROM", - "NITRO 8KB ROM" - -}; - -char *s_strCpuSpeed[] = { - "67.03 MHz", - "134.06 MHz" -}; - -char *s_strRomForm[] = { - "Included ROM", - "Downloaded PROM" -}; - -char *s_strRomApp[] = { - "Mass Product", - "Development 1", - "Development 2", - "PROM Download" -}; - -char *s_strWLFWType[] = { - "2in1 module 1.1", - "2in1 module 2.0", - "One Chip (M&M)" -}; - -char *s_strMCMode[] = { - "00", - "01", - "10", - "11" -}; - -char *s_strEnable[] = { - "DISABLED", - "ENABLED" -}; - -char *s_strResult[] = { - "Failed.", - "Succeeded.", - "" -}; - - - -char *s_strSysMenuKey[] = { - "Incorrect", - "correct: dev", - "correct: prod" -}; - -char *s_strBool[] = { - "FALSE", - "TRUE" -}; - - -char *s_strRatingOrg[] = { - "CERO", - "ESRB", - "BBFC", - "USK", - "PEGI general", - "PEGI Finland", - "PEGI Portugal", - "PEGI and BBFC Great Briten", - "OFLC", - "GRB" -}; - - char *s_strRegion[] = { - "JAPAN", - "AMERICA", - "EUROPA", - "AUSTRALIA", - "CHINA", - "KOREA", -}; - - char *s_strUserColor[] = { - "GRAY ", - "BROWN ", - "RED ", - "PINK ", - "ORANGE ", - "YELLOW ", - "LIME GREEN", - "GREEN ", - "DARK GREEN", - "SEA GREEN ", - "TURQUOISE ", - "BLUE ", - "DARK BLUE ", - "PURPLE ", - "VIOLET ", - "MAGENTA ", -}; - -char *s_strLanguage[] = { - "JAPANESE", - "ENGLISH", - "FRENCH", - "GERMAN", - "ITALIAN", - "SPANISH", - "CHINESE", - "KOREAN", -}; - -char *s_strCountry[] = { - "UNDEFINED ", // ݒ - "JAPAN ", // { - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "Anguilla ", // AM - "ANTIGUA_AND_BARBUDA", // AeBOAEo[u[_ - "ARGENTINA ", // A[` - "ARUBA", // Ao - "BAHAMAS", // on} - "BARBADOS", // oohX - "BELIZE", // x[Y - "BOLIVIA", // {rA - "BRAZIL", // uW - "BRITISH_VIRGIN_ISLANDS", // p̃@[W - "CANADA", // Ji_ - "CAYMAN_ISLANDS", // PC} - "CHILE ", // ` - "COLOMBIA", // RrA - "COSTA_RICA", // RX^J - "DOMINICA", // h~jJ - "DOMINICAN_REPUBLIC", // h~jJa - "ECUADOR", // GNAh - "EL_SALVADOR", // GToh - "FRENCH_GUIANA", // tX̃MAi - "GRENADA", // Oi_ - "GUADELOUPE", // OAh[v - "GUATEMALA ", // OAe} - "GUYANA", // KCAi - "HAITI", // nC` - "HONDURAS", // zWX - "JAMAICA", // W}CJ - "MARTINIQUE", // }eBj[N - "MEXICO", // LVR - "MONTSERRAT", // gZg - "NETHERLANDS_ANTILLES", // I_̃AeB - "NICARAGUA", // jJOA - "PANAMA ", // pi} - "PARAGUAY", // pOAC - "PERU", // y[ - "ST_KITTS_AND_NEVIS", // ZgLbcElCrX - "ST_LUCIA", // ZgVA - "ST_VINCENT_AND_THE_GRENADINES", // ZgrZgEOifB[ - "SURINAME", // Xi - "TRINIDAD_AND_TOBAGO", // gj_[hEgoS - "TURKS_AND_CAICOS_ISLANDS", // ^[NXEJCRX - "UNITED_STATES", // AJ - "URUGUAY ", // EOAC - "US_VIRGIN_ISLANDS", // ė̃o[W - "VENEZUELA", // xlYG - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "ALBANIA ", // AojA - "AUSTRALIA", // I[XgA - "AUSTRIA", // I[XgA - "BELGIUM", // xM[ - "BOSNIA_AND_HERZEGOVINA", // {XjAEwcFSri - "BOTSWANA", // {ci - "BULGARIA ", // uKA - "CROATIA", // NA`A - "CYPRUS", // LvX - "CZECH_REPUBLIC", // `FR - "DENMARK", // f}[N - "ESTONIA", // GXgjA - "FINLAND", // tBh - "FRANCE", // tX - "GERMANY", // hCc - "GREECE", // MV - "HUNGARY ", // nK[ - "ICELAND", // ACXh - "IRELAND", // ACh - "ITALY", // C^A - "LATVIA", // grA - "LESOTHO", // \g - "LIECHTENSTEIN", // qeV^C - "LITHUANIA", // gAjA - "LUXEMBOURG", // NZuN - "MACEDONIA", // }PhjA - "MALTA ", // }^ - "MONTENEGRO", // elO - "MOZAMBIQUE", // Ur[N - "NAMIBIA", // i~rA - "NETHERLANDS", // I_ - "NEW_ZEALAND", // j[W[h - "NORWAY", // mEF[ - "POLAND", // |[h - "PORTUGAL", // |gK - "ROMANIA", // [}jA - "RUSSIA ", // VA - "SERBIA", // ZrA - "SLOVAKIA", // XoLA - "SLOVENIA", // XxjA - "SOUTH_AFRICA", // AtJ - "SPAIN", // XyC - "SWAZILAND", // XWh - "SWEDEN", // XEF[f - "SWITZERLAND", // XCX - "TURKEY", // gR - "UNITED_KINGDOM ", // CMX - "ZAMBIA", // UrA - "ZIMBABWE", // WouG - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "TAIWAN ", // p - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "SOUTH_KOREA ", // ؍ - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "HONG_KONG ", // zR - "MACAU", // }JI - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "INDONESIA ", // ChlVA - "SINGAPORE ", // VK|[ - "THAILAND ", // ^C - "PHILIPPINES", // tBs - "MALAYSIA", // }[VA - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "CHINA ", // - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UAE ", // Au񒷍AM - "INDIA ", // Ch - "EGYPT ", // GWvg - "OMAN", // I}[ - "QATAR", // J^[ - "KUWAIT", // NEF[g - "SAUDI_ARABIA", // TEWArA - "SYRIA", // VA - "BAHRAIN", // o[[ - "JORDAN", // _ - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "OTHERS ", - "UNKNOWN ", -}; - - -#endif // else VERSION_VIEWER - -char *s_strOK[] = { - "CANCEL", - "OK" -}; - -char *s_strCorrect[] = { - "Incorrect", - "Correct" -}; - -char s_strNA[] = { - "N/A" -}; diff --git a/build/tests/DisplaySystemInformation/ARM9/src/strResource.h b/build/tests/DisplaySystemInformation/ARM9/src/strResource.h deleted file mode 100644 index 97c8928f..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/strResource.h +++ /dev/null @@ -1,293 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: strResource.h - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __DISPLAY_INFO_RESOURCE__ -#define __DISPLAY_INFO_RESOURCE__ - -// j[ID -#ifdef VERSION_VIEWER - #define ROOTMENU_SIZE 1 - #define MENU_ROOT 1 - #define MENU_VERSION 0 - #define MENU_OWNER 10 - #define MENU_PARENTAL 11 - #define MENU_SECURE_USER 12 - #define MENU_OTHER 13 - #define MENU_NORMAL_HW 14 - #define MENU_SECURE_HW 15 - #define MENU_SCFG_ARM7 16 - #define MENU_SCFG_ARM9 17 - #define MENU_SYSMENU 18 - #define MENU_FONT 19 - #define MENU_WL 20 - #define MENU_WHITE 21 - #define MENU_RESET_INFO 22 - #define MENU_BREAK_DATA 23 - #define MENU_RTC_RESET 24 - -#else - #define ROOTMENU_SIZE 16 - - #define MENU_ROOT 16 - #define MENU_OWNER 0 - #define MENU_PARENTAL 1 - #define MENU_SECURE_USER 2 - #define MENU_OTHER 3 - #define MENU_NORMAL_HW 4 - #define MENU_SECURE_HW 5 - #define MENU_SCFG_ARM7 6 - #define MENU_SCFG_ARM9 7 - #define MENU_SYSMENU 8 - #define MENU_FONT 9 - #define MENU_WL 10 - #define MENU_WHITE 11 - #define MENU_VERSION 12 - #define MENU_RESET_INFO 13 - #define MENU_BREAK_DATA 14 - #define MENU_RTC_RESET 15 -#endif // else VERSION_VIEWER - -#define OWNERMENU_SIZE 6 - -#define OWNER_LANGUAGE 0 -#define OWNER_COLOR 1 -#define OWNER_BIRTHDAY 2 -#define OWNER_COUNTRY 3 -#define OWNER_NICKNAME 4 -#define OWNER_COMMENT 5 - -#define PARENTALMENU_SIZE 12 - -#define PARENTAL_FLAG 0 -#define PARENTAL_PICTOCHAT 1 -#define PARENTAL_DOWNLOAD 2 -#define PARENTAL_BROWSER 3 -#define PARENTAL_WIIPOINT 4 -#define PARENTAL_PHOTO_EXCHANGE 5 -#define PARENTAL_UGC 6 -#define PARENTAL_ORGANIZATION 7 -#define PARENTAL_AGE 8 -#define PARENTAL_PASSWORD 9 -#define PARENTAL_QUESTION_ID 10 -#define PARENTAL_ANSWER 11 - -#define SECURE_USER_MENU_SIZE 8 - -#define SECURE_USER_INITIAL_SETTINGS 0 -#define SECURE_USER_INITIAL_LAUNCHER 1 -#define SECURE_USER_BROKEN_SETTINGS 2 -#define SECURE_USER_INSTALLED_SOFTBOX 3 -#define SECURE_USER_FREE_SOFTBOX 4 -#define SECURE_USER_LASTBOOT_IDX 5 -#define SECURE_USER_LASTBOOT_PLATFORM 6 -#define SECURE_USER_LASTBOOT_ID 7 - -#define OTHERMENU_SIZE 13 - -#define OTHER_AGREE_EULA 0 -#define OTHER_EULA_VERSION 1 -#define OTHER_WIRELESS 2 -#define OTHER_RTC_OFFSET 3 -#define OTHER_TP_RAWX1 4 -#define OTHER_TP_RAWY1 5 -#define OTHER_TP_DX1 6 -#define OTHER_TP_DY1 7 -#define OTHER_TP_RAWX2 8 -#define OTHER_TP_RAWY2 9 -#define OTHER_TP_DX2 10 -#define OTHER_TP_DY2 11 -#define OTHER_TP_RSV 12 - -#define NORMAL_HW_MENU_SIZE 2 - -#define NORMAL_HW_RTC_ADJUST 0 -#define NORMAL_HW_UNIQUE_ID 1 - -#define SECURE_HW_MENU_SIZE 6 - -#define SECURE_HW_FORCE_DISABLE 0 -#define SECURE_HW_REGION 1 -#define SECURE_HW_SERIAL 2 -#define SECURE_HW_LANGUAGE 3 -#define SECURE_HW_FUSE 4 -#define SECURE_HW_LAUNCHER_ID 5 - -#define SCFG_ARM9_MENU_SIZE 27 - -#define SCFG_ARM9_ROM_SEC 0 -#define SCFG_ARM9_ROM_STATE 1 -#define SCFG_ARM9_CLK_CPU 2 -#define SCFG_ARM9_CLK_DSP 3 -#define SCFG_ARM9_CLK_CAM 4 -#define SCFG_ARM9_CLK_WRAM 5 -#define SCFG_ARM9_CLK_CAM_CKI 6 -#define SCFG_ARM9_RST_DSP 7 -#define SCFG_ARM9_EXT_DMA 8 -#define SCFG_ARM9_EXT_GEO 9 -#define SCFG_ARM9_EXT_REN 10 -#define SCFG_ARM9_EXT_2DE 11 -#define SCFG_ARM9_EXT_DIV 12 -#define SCFG_ARM9_EXT_MC 13 -#define SCFG_ARM9_EXT_INTC 14 -#define SCFG_ARM9_EXT_LCDC 15 -#define SCFG_ARM9_EXT_VRAM 16 -#define SCFG_ARM9_EXT_PS 17 -#define SCFG_ARM9_EXT_DMAC 18 -#define SCFG_ARM9_EXT_CAM 19 -#define SCFG_ARM9_EXT_DSP 20 -#define SCFG_ARM9_EXT_MCB 21 -#define SCFG_ARM9_EXT_WRAM 22 -#define SCFG_ARM9_EXT_CFG 23 -#define SCFG_ARM9_TOTAL_CHECK 24 -#define SCFG_ARM9_CHECK_ERROR7 25 -#define SCFG_ARM9_CHECK_ERROR9 26 - -#define SCFG_ARM7_MENU_SIZE 47 - -#define SCFG_ARM7_ROM_ARM9_SEC 0 -#define SCFG_ARM7_ROM_ARM9_RSEL 1 -#define SCFG_ARM7_ROM_ARM7_SEC 2 -#define SCFG_ARM7_ROM_ARM7_RSEL 3 -#define SCFG_ARM7_ROM_ARM7_FUSE 4 -#define SCFG_ARM7_ROM_WE 5 -#define SCFG_ARM7_CLK_SD1 6 -#define SCFG_ARM7_CLK_SD2 7 -#define SCFG_ARM7_CLK_AES 8 -#define SCFG_ARM7_CLK_WRAM 9 -#define SCFG_ARM7_CLK_SND 10 -#define SCFG_ARM7_JTAG_A7 11 -#define SCFG_ARM7_JTAG_CPU 12 -#define SCFG_ARM7_JTAG_DSP 13 -#define SCFG_ARM7_EXT_DMA 14 -#define SCFG_ARM7_EXT_SDMA 15 -#define SCFG_ARM7_EXT_SND 16 -#define SCFG_ARM7_EXT_MC 17 -#define SCFG_ARM7_EXT_INTC 18 -#define SCFG_ARM7_EXT_SPI 19 -#define SCFG_ARM7_EXT_DSEL 20 -#define SCFG_ARM7_EXT_SIO 21 -#define SCFG_ARM7_EXT_LCDC 22 -#define SCFG_ARM7_EXT_VRAM 23 -#define SCFG_ARM7_EXT_PS 24 -#define SCFG_ARM7_EXT_DMAC 25 -#define SCFG_ARM7_EXT_AES 26 -#define SCFG_ARM7_EXT_SD1 27 -#define SCFG_ARM7_EXT_SD2 28 -#define SCFG_ARM7_EXT_MIC 29 -#define SCFG_ARM7_EXT_I2S 30 -#define SCFG_ARM7_EXT_I2C 31 -#define SCFG_ARM7_EXT_GPIO 32 -#define SCFG_ARM7_EXT_MCB 33 -#define SCFG_ARM7_EXT_WRAM 34 -#define SCFG_ARM7_EXT_PU 35 -#define SCFG_ARM7_EXT_CFG 36 -#define SCFG_ARM7_MI_SC1_CDET 37 -#define SCFG_ARM7_MI_SC1_MODE 38 -#define SCFG_ARM7_MI_SC2_CDET 39 -#define SCFG_ARM7_MI_SC2_MODE 40 -#define SCFG_ARM7_MI_SWP 41 -#define SCFG_ARM7_MI_CC 42 -#define SCFG_ARM7_MI_CA 43 -#define SCFG_ARM7_WL_OFFB 44 -#define SCFG_ARM7_OP_FORM 45 -#define SCFG_ARM7_OP_APP 46 - -#define SCFG_ARM7_SHARED_OFFSET 47 - -#define SYSMENU_MENU_SIZE 10 - -#define SYSMENU_TIMESTAMP 0 -#define SYSMENU_VERSION_NUM 1 -#define SYSMENU_VERSION_STR 2 -#define SYSMENU_EULA_URL 3 -#define SYSMENU_NUP_HOST 4 - -#define SYSMENU_NUP_CERT 5 -#define SYSMENU_NUP_PRV 6 -#define SYSMENU_SHOP_CERT 7 -#define SYSMENU_SHOP_PRV 8 -#define SYSMENU_NINTENDO_CAG2 9 - -#define SYSMENU_HASH_IDX 5 - -#define FONTMENU_SIZE 1 - -#define FONT_TIMESTAMP 0 -#define FONT_INFO 1 - -#define WLMENU_SIZE 6 - -#define WL_VERSION 0 -#define WL_NUM_FW 1 -#define WL_FW1_TYPE 2 -#define WL_FW1_VER 3 -#define WL_FW2_TYPE 4 -#define WL_FW2_VER 5 - -#define WHITEMENU_SIZE 2 - -#define WHITE_NUM 0 -#define WHITE_HASH 1 - -#define VERSIONMENU_SIZE 0 - -#define VERSION_OTHER 0 - -extern int s_numMenu[]; -extern const char *s_strRootMenu[]; -extern const char *s_strOwnerMenu[]; -extern const char *s_strParentalMenu[]; -extern const char *s_strSecureUserMenu[]; -extern const char *s_strOtherMenu[]; -extern const char *s_strNormalHWMenu[]; -extern const char *s_strSecureHWMenu[]; -extern const char *s_strSCFGARM7Menu[]; -extern const char *s_strSCFGARM9Menu[]; -extern const char *s_strOtherMenu[]; -extern const char *s_strSystemMenu[]; -extern const char *s_strFontMenu[] ; -extern const char *s_strWLMenu[]; -extern const char *s_strWhiteMenu[]; -extern const char **s_strMetaMenu[]; -extern const char *s_strARM7RegisterName[]; -extern const char *s_strARM9RegisterName[]; -extern const char *s_strSCFGViewMode[]; - -extern char *s_strEnable[]; -extern char *s_strJoint[]; -extern char *s_strCorrect[]; -extern char *s_strSysMenuKey[]; -extern char *s_strSupply[]; -extern char *s_strRomMode[]; -extern char *s_strPSRAM[]; -extern char *s_strCpuSpeed[]; -extern char *s_strOK[]; -extern char *s_strWLFWType[]; -extern char *s_strResult[]; -extern char *s_strBool[]; -extern char *s_strAccess[]; -extern char *s_strRomApp[]; -extern char *s_strRomForm[]; -extern char *s_strMCMode[]; -extern char *s_strRatingOrg[]; -extern char *s_strRegion[]; -extern char *s_strUserColor[]; -extern char *s_strLanguage[]; -extern char *s_strCountry[]; -extern char s_strNA[]; - -#endif // ifndef __DISPLAY_INFO_RESOURCE__ \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/util.c b/build/tests/DisplaySystemInformation/ARM9/src/util.c deleted file mode 100644 index 95ece923..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/util.c +++ /dev/null @@ -1,46 +0,0 @@ -#include -#include "util.h" - -u8 ctoh( const char c ); - -void putBinary( u8 *src, u32 size ) -{ - int i; - for( i = 0; i < size; i++ ) - { - OS_TPrintf( "%x", src[i] ); - } - - OS_TPrintf( "\n" ); -} - -u8 ctoh( const char c ) -{ - if( '0' <= c && c <= '9' ) - { - return (u8) (c - '0'); - } - - if( 'a' <= c && c <= 'f' ) - { - return (u8) ((c - 'a') + 10); - } - - if( 'A' <= c && c <= 'F' ) - { - return (u8) ((c - 'A') + 10); - } - - return 0; -} - -void strToHexa( const char *src, u8 *dst, u32 length ) -// 󂯎z16iz֕ϊ -// length͕ł͂ȂoCgȂ̂Œ -{ - int i; - for( i = 0; i < length*2 ; i += 2 ) - { - dst[i/2] = (u8) ( (ctoh( src[i] ) << 4) | ctoh( src[i+1] ) ); - } -} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/util.h b/build/tests/DisplaySystemInformation/ARM9/src/util.h deleted file mode 100644 index dda95543..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/util.h +++ /dev/null @@ -1,10 +0,0 @@ - -#ifndef __DISPLAY_INFO_UTIL__ -#define __DISPLAY_INFO_UTIL__ - -#include - -void putBinary( u8 *src, u32 size ); -void strToHexa( const char *src, u8 *dst, u32 length ); - -#endif \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.c b/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.c deleted file mode 100644 index 88f1d520..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.c +++ /dev/null @@ -1,317 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: viewSystemInfo.c - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include - -#include "misc.h" -#include "viewSystemInfo.h" -#include "strResource.h" -#include "control.h" - -#include "getInformation.h" - -/* function prototype ----------------------------- */ -void getAllInfo( void ); -void initInfo( void ); -void infoAlloc( DispInfoEntry *p, u8 index, u8 size, BOOL isSjis ); -void printAllInfo ( void ); -void getParentalInfo( void ); -void getOtherInfo( void ); - - -/* global variables ----------------------------- */ - -DispInfoEntry* gAllInfo[ROOTMENU_SIZE]; // ꂼ̃j[Ƃɍڂ̒g""”z - -// Rec^Cg֌W -OSTitleId *gContentsTitle; // Rec^Cg̈ꗗ -s32 gNumContents; // gContentsTitleɊ܂܂^Cg̐ -u16 *gContentsVersion; // gContentsTitleꂼ̃o[W - -// ARM7SCFGf[^ێ -u8 gArm7SCFGReg[DISPINFO_SHARED_SCFG_REG_SIZE]; -u8 gArm7SCFGShared[DISPINFO_SHARED_SCFG_WRAM_SIZE]; - -// LCFGReaď -BOOL gLCFGAccessible; -u8 * gBufLCFG; - -/* static data ---------------------------------- */ - - -/* function definition -------------------------- */ - -void displayInfoMain( void ) -{ - static int menu = MENU_ROOT; - static int line = 0; // ݑIĂy[Wioƍs - static int changeLine = 0; // changeModep - static BOOL firstCall = TRUE; // ŏ̌Ăяoۂ - - // 0: changemode 1: executemode 2: result on/off 3:(require 2=true) success/failed - static u8 modeFlag = 0; - - static BOOL isChangeMode = FALSE; - static BOOL executeMode = FALSE; - - BOOL repaintFlag = FALSE; - ChangeCotnrolResult changeResult = CHANGE_NOTHING; - - // ̌Ăяo͑SĂ̏擾Ȃ - if( firstCall ) - { - initInfo(); - getAllInfo(); - } - - if( modeFlag & MODE_CHANGE_MASK ) - { - changeResult = changeControl( &menu, &line, &changeLine, &modeFlag ); - } - else if( modeFlag & MODE_EXECUTE_MASK ) - { - repaintFlag |= executeControl( &line, &changeLine, &modeFlag ); - } - else - { - repaintFlag |= control( &menu, &line, &changeLine, &modeFlag ); - } - - if( changeResult == CHANGE_VALUE_CHANGED ) - { - // lXVꂽƂ͑S擾Ȃ - LCFG_WriteTWLSettings( (u8 (*) [LCFG_WRITE_TEMP] ) gBufLCFG ); - getAllInfo(); - } - - // pbhőIłꏊƂƂXV - if( changeResult == CHANGE_VALUE_CHANGED || changeResult == CHANGE_CONTROL || repaintFlag || firstCall ) - { - // 삪Ƃ̓LoXNAĕ`悵Ȃ - NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); - NNS_G2dCharCanvasClear( &gCanvasSub, TXT_COLOR_WHITE ); - // ꗗ`悷 - drawMenu( menu, line, changeLine, modeFlag ); - - firstCall = FALSE; - } - -} - -void initInfo( void ) -// Œ蕶őΉłȂڂɕ̈蓖Ă -{ - -#ifndef VERSION_VIEWER - OS_TPrintf("buffer initialize\n"); - - // sjis (char) - infoAlloc( gAllInfo[MENU_OWNER], OWNER_BIRTHDAY, DISPINFO_BUFSIZE , TRUE ); - infoAlloc( gAllInfo[MENU_SECURE_USER], SECURE_USER_LASTBOOT_ID, DISPINFO_BUFSIZE , TRUE ); - infoAlloc( gAllInfo[MENU_SECURE_HW], SECURE_HW_LAUNCHER_ID, DISPINFO_BUFSIZE, TRUE ); - infoAlloc( gAllInfo[MENU_NORMAL_HW], NORMAL_HW_UNIQUE_ID, OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3 , TRUE ); - infoAlloc( gAllInfo[MENU_SECURE_HW], SECURE_HW_SERIAL , OS_TWL_HWINFO_SERIALNO_LEN_MAX + 1, TRUE ); - infoAlloc( gAllInfo[MENU_SECURE_HW], SECURE_HW_LANGUAGE, DISPINFO_BUFSIZE , TRUE ); - infoAlloc( gAllInfo[MENU_SECURE_HW], SECURE_HW_FUSE, DISPINFO_BUFSIZE , TRUE ); - infoAlloc( gAllInfo[MENU_SCFG_ARM7], SCFG_ARM7_MI_CC, DISPINFO_BUFSIZE , TRUE ); - infoAlloc( gAllInfo[MENU_SCFG_ARM7], SCFG_ARM7_MI_CA, DISPINFO_BUFSIZE , TRUE ); - infoAlloc( gAllInfo[MENU_SCFG_ARM9], SCFG_ARM9_CHECK_ERROR7, DISPINFO_BUFSIZE, TRUE ); - infoAlloc( gAllInfo[MENU_SCFG_ARM9], SCFG_ARM9_CHECK_ERROR9, DISPINFO_BUFSIZE, TRUE ); - infoAlloc( gAllInfo[MENU_WL], WL_VERSION, DISPINFO_BUFSIZE, TRUE ); - infoAlloc( gAllInfo[MENU_WL], WL_FW1_VER, DISPINFO_BUFSIZE, TRUE ); - infoAlloc( gAllInfo[MENU_WL], WL_FW2_VER, DISPINFO_BUFSIZE, TRUE ); - infoAlloc( gAllInfo[MENU_OTHER], OTHER_RTC_OFFSET, DISPINFO_BUFSIZE, TRUE); - infoAlloc( gAllInfo[MENU_OTHER], OTHER_TP_RSV, DISPINFO_BUFSIZE, TRUE); - - - // utf(u16) - infoAlloc( gAllInfo[MENU_SYSMENU], SYSMENU_EULA_URL, TWL_EULA_URL_LEN + 1, FALSE ); - infoAlloc( gAllInfo[MENU_SYSMENU], SYSMENU_NUP_HOST, TWL_NUP_HOSTNAME_LEN + 1, FALSE ); - infoAlloc( gAllInfo[MENU_OWNER], OWNER_NICKNAME, OS_OWNERINFO_NICKNAME_MAX + 1 , FALSE ); - infoAlloc( gAllInfo[MENU_OWNER], OWNER_COMMENT, OS_OWNERINFO_COMMENT_MAX + 1 , FALSE ); - infoAlloc( gAllInfo[MENU_PARENTAL], PARENTAL_ANSWER, OS_TWL_PCTL_SECRET_ANSWER_LENGTH_MAX + 1 , FALSE ); - infoAlloc( gAllInfo[MENU_SYSMENU], SYSMENU_VERSION_STR, TWL_SYSMENU_VER_STR_LEN + 1, FALSE ); - - OS_TPrintf( "information alloc succeeded\n" ); -#endif -} - - -void infoAlloc( DispInfoEntry *p, u8 index, u8 size, BOOL isSjis ) -// initInfo̍Ɨp֐BisSjis=truecharAfalseȂu16蓖Ă -{ - if( isSjis ) - { - p[index].str.sjis = (char*) Alloc (sizeof(char) * size); - SDK_ASSERT( p->str.sjis ); - p[index].str.sjis[size] = '\0'; - } - else - { - p[index].str.utf = (u16*) Alloc (sizeof(u16) * size); - SDK_ASSERT( p->str.utf ); - p[index].str.utf[size-1] = '\0'; - } - -} - - -void getAllInfo( void ) -// -{ - static BOOL firstRead = TRUE; - - OS_TPrintf("reflesh Information\n"); - -#ifndef VERSION_VIEWER - getOwnerInfo(); - getParentalInfo(); - getSecureUserInfo(); - getOtherInfo(); - getHWInfo(); - getSCFGInfo(); - getSysmenuInfo(); - getFontInfo(); - - if( firstRead ){ - getWLInfo(); - getWhiteListInfo(); - } -#endif - -#if NAM_ENABLE - if( firstRead ){ - getContentsVersion(); - } -#endif - - - printAllInfo(); - firstRead = FALSE; - OS_TPrintf("reflesh information finished\n"); -} - - -void displayInfoInit( void ) -{ - int loop1, loop2; - - GX_DispOff(); - GXS_DispOff(); - NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); - OS_TPrintf(" size version: %d\n", s_numMenu[MENU_VERSION]); - // S̏”zZbg - // ”\Ȃ̂͗pӂstaticւ̃|C^őΉ - // KvȂ̂Ƃmalloc - for(loop1=0; loop1isNumData ) - { - OS_TPrintf("%d %d : %d\n", loop1, loop2, entry->iValue); - } - else if( entry->isSjis ) - { - OS_TPrintf("%d %d : %s\n", loop1, loop2, entry->str.sjis); - } - else - { - OS_TPrintf("%d %d : %s\n", loop1, loop2, entry->str.utf); - } - - } - } -} - - diff --git a/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.h b/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.h deleted file mode 100644 index 33bdef68..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.h +++ /dev/null @@ -1,101 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: viewSystemInfo.h - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __LOAD_VIEW_INFO__ -#define __LOAD_VIEW_INFO__ - -#include -#include "drawFunc.h" -#include "address.h" - -#define DISPINFO_BUFSIZE 64 - -#define MODE_CHANGE_MASK 0x1 -#define MODE_EXECUTE_MASK 0x2 -#define MODE_RESULT_DISPLAY_MASK 0x4 -#define MODE_RESULT_MASK 0x8 -#define MODE_RESULT_SHIFT 3 - -#ifdef __cplusplus -extern "C" { -#endif - -//////////////////////////////// - -typedef enum ChangeFuncArg{ - ARG_BOOL, - ARG_INT, - ARG_OTHER -} ChangeFuncArg; - -typedef struct DispInfoEntry -{ - BOOL isNumData; // \Ƃ͐lf[^f[^ - BOOL isSjis; // UTF16ŕ`悷f[^FALSE isNumData=TRUEȂ疢` - BOOL isAligned; // ɕ\łȂTRUEAKvȂFALSE - BOOL fromLCFG; // LCFG擾f[^͐F‚ĕ\ - int numLines; // ږAړe\̂ɕKvȍs - - const char *kind; // ږ - - union { - char* sjis; - u16* utf; - } str; - - int iValue; // f[^̐l^\(CfNXƂ) - - BOOL changable; // ̒lύX”\ۂ - - // changabletruẽGĝݐݒ肳 - ChangeFuncArg argType; // lύX邽߂̊֐̈^ - - // lύX邽߂̊֐ - union { - void (*cBool)(bool); - void (*cInt)(int); - } changeFunc; - - char **kindNameList; // ږꗗ̐擪ւ̃|C^ - int numKindName; // ږꗗ̒ - -} DispInfoEntry; - - -//////////////////////////////// - -// e{́A[U -extern DispInfoEntry* gAllInfo[ROOTMENU_SIZE]; - -extern u8 gArm7SCFGReg[DISPINFO_SHARED_SCFG_REG_SIZE]; // ARM7̃f[^擾pobt@ -extern u8 gArm7SCFGShared[DISPINFO_SHARED_SCFG_WRAM_SIZE]; // ARM7̃f[^擾pobt@ - -extern BOOL gLCFGAccessible; -extern u8* gBufLCFG; - -//////////////////////////////// - -void displayInfoMain( void ); -void displayInfoInit( void ); - -//////////////////////////////// - -#ifdef __cplusplus -} -#endif - -#endif // __LOAD_VIEW_INFO__ diff --git a/build/tests/DisplaySystemInformation/Makefile b/build/tests/DisplaySystemInformation/Makefile deleted file mode 100644 index 6c2cd85e..00000000 --- a/build/tests/DisplaySystemInformation/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS = banner ARM7_armadillo ARM7_racoon ARM9 - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/banner/MakeFooter.txt b/build/tests/DisplaySystemInformation/banner/MakeFooter.txt deleted file mode 100644 index 91571e63..00000000 --- a/build/tests/DisplaySystemInformation/banner/MakeFooter.txt +++ /dev/null @@ -1,29 +0,0 @@ -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/MakeHeader.txt b/build/tests/DisplaySystemInformation/banner/MakeHeader.txt deleted file mode 100644 index 10cdc670..00000000 --- a/build/tests/DisplaySystemInformation/banner/MakeHeader.txt +++ /dev/null @@ -1,18 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - diff --git a/build/tests/DisplaySystemInformation/banner/Makefile b/build/tests/DisplaySystemInformation/banner/Makefile deleted file mode 100644 index bfd869e7..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = -SUBMAKES = \ - Makefile.0B0A Makefile.0B1A Makefile.0B2A Makefile.0B3A \ - Makefile.020A Makefile.021A Makefile.0B4A Makefile.0B5A \ - Makefile.0B6A Makefile.0B7A Makefile.0B8A Makefile.0B9A \ - Makefile.0BAA Makefile.0BBA Makefile.022A Makefile.023A \ - Makefile.024A Makefile.025A - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.020A b/build/tests/DisplaySystemInformation/banner/Makefile.020A deleted file mode 100644 index 69b02397..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.020A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 020A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.021A b/build/tests/DisplaySystemInformation/banner/Makefile.021A deleted file mode 100644 index bbc7f3ba..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.021A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 021A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.022A b/build/tests/DisplaySystemInformation/banner/Makefile.022A deleted file mode 100644 index 9222801e..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.022A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 022A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.023A b/build/tests/DisplaySystemInformation/banner/Makefile.023A deleted file mode 100644 index adbe8786..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.023A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 023A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.024A b/build/tests/DisplaySystemInformation/banner/Makefile.024A deleted file mode 100644 index 80b12300..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.024A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 024A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.025A b/build/tests/DisplaySystemInformation/banner/Makefile.025A deleted file mode 100644 index 0d270f76..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.025A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 025A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0B0A b/build/tests/DisplaySystemInformation/banner/Makefile.0B0A deleted file mode 100644 index 6a1317f5..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0B0A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0B0A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0B1A b/build/tests/DisplaySystemInformation/banner/Makefile.0B1A deleted file mode 100644 index 8cd89489..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0B1A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0B1A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0B2A b/build/tests/DisplaySystemInformation/banner/Makefile.0B2A deleted file mode 100644 index 7a5328be..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0B2A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0B2A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0B3A b/build/tests/DisplaySystemInformation/banner/Makefile.0B3A deleted file mode 100644 index 9840501b..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0B3A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0B3A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0B4A b/build/tests/DisplaySystemInformation/banner/Makefile.0B4A deleted file mode 100644 index d5dc7e7e..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0B4A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0B4A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0B5A b/build/tests/DisplaySystemInformation/banner/Makefile.0B5A deleted file mode 100644 index 39dd75c0..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0B5A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0B5A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0B6A b/build/tests/DisplaySystemInformation/banner/Makefile.0B6A deleted file mode 100644 index 7ea49c4d..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0B6A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0B6A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0B7A b/build/tests/DisplaySystemInformation/banner/Makefile.0B7A deleted file mode 100644 index 29b6af03..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0B7A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0B7A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0B8A b/build/tests/DisplaySystemInformation/banner/Makefile.0B8A deleted file mode 100644 index 2792ec15..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0B8A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0B8A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0B9A b/build/tests/DisplaySystemInformation/banner/Makefile.0B9A deleted file mode 100644 index 57f5b803..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0B9A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0B9A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0BAA b/build/tests/DisplaySystemInformation/banner/Makefile.0BAA deleted file mode 100644 index 99da9ee9..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0BAA +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0BAA -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0BBA b/build/tests/DisplaySystemInformation/banner/Makefile.0BBA deleted file mode 100644 index f270f2e2..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0BBA +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0BBA -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/banner020A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner020A_v3.bsf deleted file mode 100644 index c7a40f7f582cb71ba7b4990bfdcfea84e921c48e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmc(by$ZrW5QM+h1K;5wwS^!Smj0YZM8s$h4JG1Xs zz>o-srBgpE9FyrCxv3hFD?2E2q@0x-f`h4JG1Xs zz>o-srBgpE9FyrCxv3hFD?2E2q@0x-f`h4JG1Xs zz>o-srBgpE9FyrCxv3hFD?2E2q@0x-f`SBJ($lKA#+tJLMX~28{zGq&~ diff --git a/build/tests/DisplaySystemInformation/banner/banner023A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner023A_v3.bsf deleted file mode 100644 index ce71e02156d426cad6064887265339a15bc08710..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmc(by$ZrW5QM+h1K;5wwS|Qimj0YZM8s$h4JG1Xs zz>o-srBgpE9FyrCxv3hFD?2E2q@0x-f`SBJ($lKA#+tJLMX~28{!(U$4 diff --git a/build/tests/DisplaySystemInformation/banner/banner024A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner024A_v3.bsf deleted file mode 100644 index 74f6562f685a389a6e866d675faf93c5e5fb4c88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmc(by$ZrW5QM+h1K;5wwS|p^r9aV#h#0LU27>{O!9>KDS0`s4;40-{+1Z=jo!R#* zU_?xarRSa%PAK$_+*FMzm8Hr;a?Z*PLCgJi{3bSAEn7}fQ7Ow>HI@r^Rch4^QfGNc zcP?BD6~eiTsX7z=RH`=Ioo0pd(PzMt>EB!#7OWZ4Vd9*Xx^cpjNUAfg?481{^cksK dc``#bp3Ir1`fZPNF+XPP?P%=nXztB4U_QuKUf%!! diff --git a/build/tests/DisplaySystemInformation/banner/banner025A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner025A_v3.bsf deleted file mode 100644 index 83d5343d37acd727514f313ccfceb48367b44624..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmc(by$ZrW5QM+h1K;5wwS|p>r9Y<;5iwdz6oUbc!9>KDS0^zKaFuef?Cj0%&g}aY zFeJiZ>D12($7Fg(ZmLG)$_~mLDQD$|py7TyeiN&$mJKJVD3m3Q8q0;dDy3?Bsk1z! zI~6X4GU2q22X)5!DO9bvTg`Iv(WS?N$=_TV=ByadVq81Rb>o;Pp;RYa*-2raw)7dP eTzWDcYft7>Q~kDwx|km`@^&=xb~N*58ZaNtPhRH$ diff --git a/build/tests/DisplaySystemInformation/banner/banner0B0A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner0B0A_v3.bsf deleted file mode 100644 index cb327e33face66ce9fa7a2ec09d1a0fb436f8569..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmc(by$ZrW5QM+h1K;5wwV;iKr9Y<;5iwdz6oUbc!9>KDS0^zKaFuef?Cj0%&g}aY zFeJiZ>D12($7Fg(ZmLG)$_~mLDQD$|py7TyeiN&$mJKJVD3m3Q8q0;dDy3?Bsk1z! zI~6X4GU2q22X)5!DO9bvTg`Iv(WB3T$=_TV=ByadVq81Rb>o;Pp;RYa+0msfbw(PO dUOdOzi#OFopS__j<-?0SeT+PP%shDp%m*_-T_*ql diff --git a/build/tests/DisplaySystemInformation/banner/banner0B1A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner0B1A_v3.bsf deleted file mode 100644 index 93165d660919176d05a4464cf72b8aeabcfc1cc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmc(by$ZrW5QM+h1K;5wwS|p^r9Y<;5iwdz3+|o+*FMylqJd>8E55&pyhr$eiQ4hmMtf#D3ztH8q0;dDwS#nsk1z! zI}@&ia^b9ri8^Ebl&aR;on|@t=rdr+^lz>V3)T$jFln3>x^c{tP^wd|?4__Pbw(Oj dUOdOfi#O9mpS__j<-?0SeT+SQ%sqJq%m+9CT`vFt diff --git a/build/tests/DisplaySystemInformation/banner/banner0B2A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner0B2A_v3.bsf deleted file mode 100644 index 42fdbd7138253d13b43e293f73cf9c793375ceba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmc(by$ZrW5QM+h1K;5wwS^WImj0YZM8s$h4JG1Xs zz>o-srBgpE9FyrCxv3hFD?2E2q@0x-f`4mj0YZM8s$h4JG1Xs zz>o-srBgpE9FyrCxv3hFD?2E2q@0x-f`+|o+*FMylqJd>8E55&pyhr$eiQ4hmMtf#D3ztH8q0;dDwS#nsk1z! zI}@&ia^b9ri8^Ebl&aR;on|@t=rdr+^lz>V3)T$jFln3>x^c{tP^wd|?4_?Obw(Oj dUOdOfi#O9mpS__j<-?0SeT+SQ%sqJq%m+`vT~`1A diff --git a/build/tests/DisplaySystemInformation/banner/banner0B5A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner0B5A_v3.bsf deleted file mode 100644 index 5a99c64201a629a31e8f3459c9792c26d0645139..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmc(by$ZrW5QM+h1K;5wwS|p>r9Y<;5iwdz6oUbc!9>KDS0^zKaFuef?Cj0%&g}aY zFeJiZ>D12($7Fg(ZmLG)$_~mLDQD$|py7TyeiN&$mJKJVD3m3Q8q0;dDy3?Bsk1z! zI~6X4GU2q22X)5!DO9bvTg`Iv(WS?N$=_TV=ByadVq81Rb>o;Pp;RYa+0myhbw(PO dUOdOzi#OFopS__j<-?0SeT+PP%shDp%m-9}U0(nI diff --git a/build/tests/DisplaySystemInformation/banner/banner0B6A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner0B6A_v3.bsf deleted file mode 100644 index df218cb759b5a1542f26dc091dd2743521438319..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmc(by$ZrW5QM+h1K;5wwS|p{r9Y<;5iwdz6oUbc!9>KDS0^zKaFuef?Cj0%&g}aY zFeJiZ>D12($7Fg(ZmLG)$_~mLDQD$|py7TyeiN&$mJKJVD3m3Q8q0;dDy3?Bsk1z! zI~6X4GU2q22X)5!DO9bvTg`Iv(WS?N$=_TV=ByadVq81Rb>o;Pp;RYa+0myhbw(PO dUOdOzi#OFopS__j<-?0SeT+PP%shDp%m-OOU1tCQ diff --git a/build/tests/DisplaySystemInformation/banner/banner0B7A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner0B7A_v3.bsf deleted file mode 100644 index 73ee7b0eb84d47d3a6154386a3dfdfedce572a60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmc(by$ZrW5QM+h1K;5wwS|qKr9Y<;5iwdz6oUbc!9>KDS0^zKaFuef?Cj0%&g}aY zFeJiZ>D12($7Fg(ZmLG)$_~mLDQD$|py7TyeiN&$mJKJVD3m3Q8q0;dDy3?Bsk1z! zI~6X4GU2q22X)5!DO9bvTg`Iv(WS?N$=_TV=ByadVq81Rb>o;Pp;RYa+0myhbw(PO dUOdOzi#OFopS__j<-?0SeT+PP%shDp%m-coU2gyY diff --git a/build/tests/DisplaySystemInformation/banner/banner0B8A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner0B8A_v3.bsf deleted file mode 100644 index e3f3f29b23701918a4b4c74d7e6ebf9e40f3cbef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmc(by$ZrW5QM+h1K;5wwV;iKr9Y<;5iwdz6oUbc!9>KDS0^zKaFuef?Cj0%&g}aY zFeJiZ>D12($7Fg(ZmLG)$_~mLDQD$|py7TyeiN&$mJKJVD3m3Q8q0;dDy3?Bsk1z! zI~6X4GU2q22X)5!DO9bvTg`Iv(WB3T$=_TV=ByadVq81Rb>o;Pp;RYa*-2rSw)7dP eTzWDcYft7>Q~kDwx|km`@^&=xb~N*58ZaNKhhDD$ diff --git a/build/tests/DisplaySystemInformation/banner/banner0B9A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner0B9A_v3.bsf deleted file mode 100644 index 1082fd896a4fa5fa5a10981ac02e2b9adace2c07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmc(by$ZrW5QM+h1K;7m+9HjGr9Y<;5iwdz3t2XcbetoBVfRi>EB!#7OWZ4VbVA&bmN#Op;V__*-K$SSNe=p et~{BJjVE)aseao-UCfUec{>_=JDPhl4VVwFe_po$ diff --git a/build/tests/DisplaySystemInformation/banner/banner0BAA_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner0BAA_v3.bsf deleted file mode 100644 index eae1319cc9e4ccb09d6c4fd320726ff704dfdd5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmc(by$ZrW5QM+h1K;5wwS^WImj0YZM8s$h4JG1Xs zz>o-srBgpE9FyrCxv3hFD?2E2q@0x-f`SBJ($lKA#+tJLMX~28{w0B;= diff --git a/build/tests/DisplaySystemInformation/banner/banner0BBA_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner0BBA_v3.bsf deleted file mode 100644 index e20c3b3b119d78947460439369f279f148c2ecb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmc(by$ZrW5QM+h1K;5wwS@>4mj0YZM8s$h4JG1Xs zz>o-srBgpE9FyrCxv3hFD?2E2q@0x-f`SBJ($lKA#+tJLMX~28{xo=*_ diff --git a/build/tests/DisplaySystemInformation/banner/bannerOption.txt b/build/tests/DisplaySystemInformation/banner/bannerOption.txt deleted file mode 100644 index 9da03c6f..00000000 --- a/build/tests/DisplaySystemInformation/banner/bannerOption.txt +++ /dev/null @@ -1,19 +0,0 @@ -#gamecode bannerStr -0B0A DisplayInfo_0 -0B1A DisplayInfo_1 -0B2A DisplayInfo_2 -0B3A DisplayInfo_3 -020A DisplayInfo_4 -021A DisplayInfo_5 -0B4A DisplayInfo_6 -0B5A DisplayInfo_7 -0B6A DisplayInfo_8 -0B7A DisplayInfo_9 -0B8A DisplayInfo_10 -0B9A DisplayInfo_11 -0BAA DisplayInfo_12 -0BBA DisplayInfo_13 -022A DisplayInfo_14 -023A DisplayInfo_15 -024A DisplayInfo_16 -025A DisplayInfo_17 diff --git a/build/tests/DisplaySystemInformation/banner/banner_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner_v3.bsf deleted file mode 100644 index 74965f854974c99810a783903e3c4dcfc7a6f3df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 984 zcmc(e-D<)>5QWce3%ABdNqCp-Huc< zf!eqoV7Y?FQ8^qkauw%tA|5-}TW4&bkIvWyFL$kZMgO~E!ydhQ>CvlY4{W30yN)ZS v=zm&ibM{Kzn|^Ed*tA>FoiXcX6Hm#HK&0d%T}>n28u2@G^e`rVZZ-T1$#|8R diff --git a/build/tests/DisplaySystemInformation/banner/icon/020A.bmp b/build/tests/DisplaySystemInformation/banner/icon/020A.bmp deleted file mode 100644 index b6545ca64af6e14db112d9a18fc8c57170e92143..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7A%MC&?3=4<>7=a^maA%!&?r0q#QWmNd?DR)Pg&;3!<1~J8`**H@~ z-W$K}lTh0R2Hz0g3!zTue2g}AO0GtX{H;Gwr$g#!4Z@H5+TS;u7o+3KF(dR4bjpwj{dt&-X6^ZAh8eb>K@Vv?Cha15ug@Si3otiqzR4q(hA&af%iIyYYGov+(i zY$kr)_kxjD81(|TNrXDy`=hn6x#VGv5g+mc&2mVs)F}8-U*3MQnTjbMB)>WIc$bO& f{eUeMxw;rB*u}>WD2xPkE_(vh~G(!WYm<)ms`=8k7 f=Lk6nXUE9K7V>|RkAR68;O%9(=!7Hi5~t(?EV;VQ diff --git a/build/tests/DisplaySystemInformation/banner/icon/023A.bmp b/build/tests/DisplaySystemInformation/banner/icon/023A.bmp deleted file mode 100644 index 33ed807f2701d7b9a0799122b12c3e42e8108a4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7=!41PO2t{et0XjmDoul`zle0(507xuki9U?&G*VQh7;L~F^YQDwT&2mv{=^>L zE^@=$%Y7FX5mZXagB=$uvaTx^-c;Pf!&s4G(?7-Bw3=ESbp)wBaTI$cJMUe0^^u>i zsrdl@Jhy^`&6s+_d?Xq>-TKqo)Pr(L#Q0zM7L9VKPG~DQ$*;eDaCkM8N0UM0LysAA gLvv=xj|g_G$_UvX@&Evh7(k3S24WJvAP}eI0~55mp#T5? diff --git a/build/tests/DisplaySystemInformation/banner/icon/024A.bmp b/build/tests/DisplaySystemInformation/banner/icon/024A.bmp deleted file mode 100644 index 7b135f8be69d43fe23014d9a22c3144ce89f3ab7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7=%?-jZ422D107l@*9Nbx_=Zw|?EP0_w=CkwDRssaB?fAKV$x9y3M1zjhIhuqY_4VD~EMASn*tT6d_2>@A i`>A`ygB|KpL#PalcqDaNU}^~S4WR)To>xfTr}P3_&$})F diff --git a/build/tests/DisplaySystemInformation/banner/icon/025A.bmp b/build/tests/DisplaySystemInformation/banner/icon/025A.bmp deleted file mode 100644 index 3e036a6da796ebfc6aae8e5d9732bb15712d94ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7=!41PO2t{et0XjmDoul`zle0(507xuki9U?&G*VQh7;HWU^YQDwT&2mv{=^>L zE^@=$%Y6rn2r8xI!H$a+S=W^dZz}HLVXO$T>7Qb5T1~BvIzVa<9AU3S=e_H$KH~E= zH6MvT&#fTSCZ^snAA!bBxBj#?^`M**82>B3p-~Rinc50Y^6Rf399|9O(PYs0&|_k5 fXwD4z5y1|^l@YQ(=#-a8T&i_F}E;`0y;|0!a^DlA%k0App~44Wc4^TtcR$LBN_ ztHQ7Q-Z080M!!I<0>O^=^KrDWIpraa;UDS)RXeE8(rEaRUrs;SOoN{0or90RSz!eo fU`s||=T~yp<9yB^FtOL;(TZ`*N3!q diff --git a/build/tests/DisplaySystemInformation/banner/icon/0B2A.bmp b/build/tests/DisplaySystemInformation/banner/icon/0B2A.bmp deleted file mode 100644 index 454a960e86aa3d65ffa97f7f61630b5d58e6ce2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7B%MHUY2&GjA=mu)~Bl>b>K_Vv(6!P<-yf#(#>KunLP-9zd?)IK!s!&U@n}-~F>1 zi&fy)b5F>yiIFc*D@U;7y+2wDn^R744EqotsM0}ohDO4V{6_VY!_?_vipe1OsQO5< lzJd-~isc}{&RZ&eA@A8Az-blscuyF;qCTFd@Ck*Z>jOTOy9xjR diff --git a/build/tests/DisplaySystemInformation/banner/icon/0B3A.bmp b/build/tests/DisplaySystemInformation/banner/icon/0B3A.bmp deleted file mode 100644 index fcd2a5293cb6550835a762d404d9d475487d630c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7B!41PO2&7d9=m>pwj{dt&-X6^ZAhD1odVnFZ6jd!THb)M8B(L{&CASUx6aJWf zp&O#r?h9;0Skzh^*b%}T_1^J9eUYj~a6Fd6#($cq@DP@fbpWwu;tcCRw%#i*^_H)0 zESkix=Ux!B!l)OxX2R9+em|}jR+AiN81aGcD9a(Ws9x}+zS;fc&|wnMG!(cV$SZ8& guo>b*K%Mh3Lfp^x158$8<5xSIB=|YtiG*Y710|5U-2eap diff --git a/build/tests/DisplaySystemInformation/banner/icon/0B4A.bmp b/build/tests/DisplaySystemInformation/banner/icon/0B4A.bmp deleted file mode 100644 index f7224baed7881eed0dac60f1c173dcb71393e0ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7B!41PO2&7d9=m>pwj{dt&-X6^ZAh8eY__9y<> z{317^+3pi8A}lE-4|YPl$hxjvSS&H~2)K$c}r{iSPN* zO{?|7ujfw4vVq}O+Ha=XS2dTM=9u_UAE?ujI!c4^qrR>C$zjbU(lix>9^?(| gVe=XCN1!gpX(iG*Y714|{lY5)KL diff --git a/build/tests/DisplaySystemInformation/banner/icon/0B6A.bmp b/build/tests/DisplaySystemInformation/banner/icon/0B6A.bmp deleted file mode 100644 index 2d92ad53c9765198d43586e594ceb6264884f81c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7B%MHUY2&GjA=m8Vx`48`DoNQ>O?9xpeSRfWito h4lF5wov-6t<@@YE0Q4sIde05YF&`TiKA~_7eE_+wydeMp diff --git a/build/tests/DisplaySystemInformation/banner/icon/0B7A.bmp b/build/tests/DisplaySystemInformation/banner/icon/0B7A.bmp deleted file mode 100644 index 400f5e2ed2c290a2a49dafdd456d0174fe23a49a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7x&XTqe@Az%= zlU%sXcAa1mVM{6PAaccvtm{g_bBlZ2a8{%U`lp$jR#U5;2WWds9AU3yN8NSeM}ACG z^WOON+zG91VEBf6Poz5C-{)yl56R5}bARhk)aghatx5P%-!}c=@ERj(F3PE=p?uRS jaw=(Wl28}@*%s3%P=^qz6G#6T7e9&bLmpqqzE9x=i4nXT diff --git a/build/tests/DisplaySystemInformation/banner/icon/0B8A.bmp b/build/tests/DisplaySystemInformation/banner/icon/0B8A.bmp deleted file mode 100644 index b2e14b09b92fbacdc6b7f1d9ae9c6d7231787de3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7=!41PO2t{et0XjmDoul`zle0(j07xu^L_c7hScVwEJ5@*^J*|~4L^m~4u z#$r|Yb=@1XY-;oi+$s@tyx)(jh0T%ETq8czhpKj<&eCZ3k#C%SvY0v|2=dXvqY$MP cI4&%aK$rDS2?KoYPd)1EAJ+M$PY{l&56gYLfdBvi diff --git a/build/tests/DisplaySystemInformation/banner/icon/0B9A.bmp b/build/tests/DisplaySystemInformation/banner/icon/0B9A.bmp deleted file mode 100644 index 342bc36da28a5898482ef611c319d9ed0655fb76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb79!41PO2&7d9=m>pwj{dt&-X6^ZAh8e5Djgcw6$hxjPKrR6yqw|XrgPt^lshgU29zk8LaD?Hkj&tb5kNTLV zhTiyd-w3sBVDgQQUPyJi-OsB{5t6F~X1?oB)ajHuT9fdnzBc_}gL8yaQGImk3DB`q fjsvlRO?COCkeyib2PCcH=#N=Va?ao3WPJ}G!X3OJ diff --git a/build/tests/DisplaySystemInformation/banner/icon/0BBA.bmp b/build/tests/DisplaySystemInformation/banner/icon/0BBA.bmp deleted file mode 100644 index 70f2589dee6209c3559ac82e4627934edabd80be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7A!41PO2&7d9=m>pwj{dt&-X6^ZAhD38>jAbCOHtJlV{@3pM_%vkDq$P-4|FyxTKUkxHF^|skQO~u>|ml&d*ca^iMOGHdAYZN06&0&M+FY^B%hJJwLmt zVHAEncS4p;Ouo@E5}{7__xZFbTymOY#)tYqgHEZlGzdTH>)lTdw2;Slv!Cmsyoo(@ ejQkN)m*cdQMDcOYnuXun`6O9C20W2)Onm@(@Vm_b diff --git a/build/tests/DisplaySystemInformation/banner/icon/gameIcon.bmp b/build/tests/DisplaySystemInformation/banner/icon/gameIcon.bmp deleted file mode 100644 index 8ec56f1cb8439577aae80658921dc540a9bd6dfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmY+BKX21O7{(8T#0Z(20Y@2-Jk^e}L}G|L2);9H_b8K_SR3yWp%k)n8x z6xGKF0m-*QrKtA_XgndB(ttlf?eO}K5IoYI{k!+^H$S@4l?RHVW-$&!|7)>S<N4|DcCXFFICQ-#Dv5}pLUv$dfI6>C}}5vSarZL=O)xUDx*;9z#c;IsZRpWV1j z(3aUYFw{f7{OP?tq8-x4IK4a-!1L8-;2y9XiEtV3Ud3_8>X|u - -#define DISPINFO_SHARED_SCFG_REG_ADDR (void*)0x02fff000 -#define DISPINFO_SHARED_SCFG_REG_SIZE 0x26U -#define DISPINFO_SHARED_SCFG_WRAM_ADDR (void*)0x02fff030 -#define DISPINFO_SHARED_SCFG_WRAM_SIZE 0x06U - -#endif \ No newline at end of file diff --git a/build/tests/ErrorLogTest/ARM9/Makefile b/build/tests/ErrorLogTest/ARM9/Makefile deleted file mode 100644 index 32b13e36..00000000 --- a/build/tests/ErrorLogTest/ARM9/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = -SUBMAKES = Makefile.0 Makefile.1 - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/ErrorLogTest/ARM9/Makefile.0 b/build/tests/ErrorLogTest/ARM9/Makefile.0 deleted file mode 100644 index 3ebe7c11..00000000 --- a/build/tests/ErrorLogTest/ARM9/Makefile.0 +++ /dev/null @@ -1,56 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tests - ErrorLogTest -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -SUBDIRS = $(TWL_IPL_RED_ROOT)/build/libraries_sysmenu/errorLog - -GAMECODE = 0B5A -MEDIA = gamecard -TARGET_BIN = main.srl - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED -TWL_NANDAPP = TRUE -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(MEDIA) - -#---------------------------------------------------------------------------- - - - -MISC_DIR = ../../../systemMenu_RED/misc -LINCLUDES += $(MISC_DIR)/include - -SRCS = ErrorLogTest.c $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LLIBRARIES += liberrorlog$(TWL_LIBSUFFIX).a - -ROM_SPEC = main.rsf -MAKETAD_OPTION += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -MAKEROM_FLAGS += -DERRLOGTEST_GAMECODE=$(GAMECODE) \ - -DERRLOGTEST_MEDIA=$(MEDIA) - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/ErrorLogTest/ARM9/Makefile.1 b/build/tests/ErrorLogTest/ARM9/Makefile.1 deleted file mode 100644 index 5f502fdb..00000000 --- a/build/tests/ErrorLogTest/ARM9/Makefile.1 +++ /dev/null @@ -1,55 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tests - ErrorLogTest -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -SUBDIRS = $(TWL_IPL_RED_ROOT)/build/libraries_sysmenu/errorLog - -GAMECODE = 013A -MEDIA = NAND -TARGET_BIN = main.tad - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED -TWL_NANDAPP = TRUE -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(MEDIA) -#---------------------------------------------------------------------------- - - - -MISC_DIR = ../../../systemMenu_RED/misc -LINCLUDES += $(MISC_DIR)/include - -SRCS = ErrorLogTest.c $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LLIBRARIES += liberrorlog$(TWL_LIBSUFFIX).a - -ROM_SPEC = main.rsf -MAKETAD_OPTION += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -MAKEROM_FLAGS += -DERRLOGTEST_GAMECODE=$(GAMECODE) \ - -DERRLOGTEST_MEDIA=$(MEDIA) - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/ErrorLogTest/ARM9/main.rsf b/build/tests/ErrorLogTest/ARM9/main.rsf deleted file mode 100644 index 8ba5e5dd..00000000 --- a/build/tests/ErrorLogTest/ARM9/main.rsf +++ /dev/null @@ -1,269 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "MY APP NAME" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner.bnr - - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess FALSE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - #NANDAccess FALSE - NANDAccess TRUE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - # - # Disable debug [TRUE/FALSE] - # - DisableDebug FALSE - - # - # Agree EULA [TRUE/FALSE] - # - #AgreeEULA FALSE - - # - # Agree EULA version [0 - 255] - # - #AgreeEULAVersion 0 - - ### - #### END -} - -AppendProperty -{ - # - # Boot allowed Media: [GameCard] - # - Media $(ERRLOGTEST_MEDIA) - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(ERRLOGTEST_GAMECODE) - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Use Shared2 file index: [0-65535] - #Shared2FileIndex 0 - - # - # Use Shared2 file size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - #Shared2FileSize 0K - - # - # Game card power on: [TRUE/FALSE] - # - #GameCardOn FALSE - - Secure TRUE - AppType System -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} - -Rating -{ - # - # Permited age to play for each rating organization [0 - 31, ALWAYS, FREE] - # - # Supported organization - # - CERO (OGN0) : for Japan - # - ESRB (OGN1) : for North America - # - BBFC (OGN2) : obsolete organization - # - USK (OGN3) : for German - # - PEGI_GEN (OGN4) : for Europe - # - PEGI_FINLAND (OGN5) : obsolete organization - # - PEGI_PRT (OGN6) : for Portugal - # - PEGI_BBFC (OGN7) : for UK - # - OFLC (OGN8) : for Australia and NewZealand - # - GRB (OGN9) : for Korea - # - OGN10 : reserved - # - OGN11 : reserved - # - OGN12 : reserved - # - OGN13 : reserved - # - OGN14 : reserved - # - OGN15 : reserved - # - # Available age [ 0 - 31 / ALWAYS / FREE ] - - CERO FREE -# ESRB FREE -# USK FREE -# PEGI_GEN FREE -# PEGI_PRT FREE -# PEGI_BBFC FREE -# OFLC FREE -# GRB FREE -} diff --git a/build/tests/ErrorLogTest/ARM9/src/ErrorLogTest.c b/build/tests/ErrorLogTest/ARM9/src/ErrorLogTest.c deleted file mode 100644 index a3a23892..00000000 --- a/build/tests/ErrorLogTest/ARM9/src/ErrorLogTest.c +++ /dev/null @@ -1,137 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - ErrorLog - File: errorLog.h - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "misc.h" - -// Ȃobt@TCY256byte𒴂Əo͂悤ɂȂ -// _vƁAOS_TPrintf()Ăяoɂobt@ɂ͂Ɗi[Ă͗l -// ͌ݒ -#define BUFSIZE 128 - -void VBlankIntr(void); - - -void TwlMain( void ) -{ - int numEntry; - - OS_Init(); - RTC_Init(); - - //---- interrupt setting - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - OS_EnableIrqMask(OS_IE_V_BLANK); - OS_EnableIrq(); - GX_VBlankIntr(TRUE); - - FS_Init( FS_DMA_NOT_USE ); - InitAllocator(); -// FS_DeleteFile("nand:/sys/log/sysmenu.log"); - - ERRORLOG_Init( Alloc, Free ); - - numEntry = ERRORLOG_GetNum(); - OS_TPrintf("API: before numEntry : %d\n", numEntry ); - ERRORLOG_Write( 0x80000 ); - ERRORLOG_Printf( "this is overflow message!\nthis is overflow message!\nthis is overflow message!\n" - "this is overflow message!\nthis is overflow message!\nthis is overflow message!\n" - "this is overflow message!\nthis is overflow message!\nthis is overflow message!\n" - "this is overflow message!\nthis is overflow message!\nthis is overflow message!\n" - "this is overflow message!\nthis is overflow message!\nthis is overflow message!\n" - "this is overflow message!\nthis is overflow message!\nthis is overflow message!\n" ); - -/* - ERRORLOG_Write( (u64)0x77700040051LL ); - ERRORLOG_Printf( "%d hyoooo nyoronyoro\naboooon dogaaaaaaaan", 2+5 ); - - - ERRORLOG_Printf( "menuRedIplManager.cpp [l.73] RED FATAL 0" ); - ERRORLOG_Printf( "this is too long long long long long long long long long long long long string.\n" - "this is too long long long long long long long long long long long long string.\n" - "this is too long long long long long long long long long long long long string.\n" - "this is too long long long long long long long long long long long long string.\n" ); - */ - -/* - if( numEntry > 2 ) - { - pEntry = ERRORLOG_Read(1); - OS_TPrintf("entry[1] : %02d-%02d-%02d %02d:%02d:%02d errorCode: %d\n", - pEntry->year, - pEntry->month, - pEntry->day, - pEntry->hour, - pEntry->minute, - pEntry->second, - pEntry->errorCode); - } -*/ - OS_TPrintf( "*** log file data\n" ); - - { - // Ot@C̒go - FSFile file; - char buf[BUFSIZE+1]; - int numEntry = 0; - int totalSize = 0, nowSize = 0; - buf[BUFSIZE] = '\0'; - - FS_InitFile( &file ); - FS_OpenFileEx( &file, "nand:/sys/log/sysmenu.log", FS_FILEMODE_R ); - - while( ( nowSize = FS_ReadFile( &file, buf, BUFSIZE ) ) == BUFSIZE ) - { - char *p = buf; - - OS_TPrintf("%s",buf); - totalSize += nowSize; - - while( (p = STD_SearchChar(p, '#')) != NULL) - { - // '#'oĂ񐔂Gg𑝂₷ - numEntry++; - p++; - } - - } - - //OS_TPrintf("%s\n",buf); - OS_TPrintf("\n"); - FS_CloseFile( &file ); - - totalSize += nowSize; - - OS_TPrintf("count: \'#\' count : %d\n", numEntry ); - OS_TPrintf("total Size : %d\n", totalSize); - } - - numEntry = ERRORLOG_GetNum(); - OS_TPrintf("API: end numEntry : %d\n", numEntry ); - - - ERRORLOG_End(); - OS_TPrintf( "*** End of demo\n" ); - OS_Terminate(); -} - -void VBlankIntr(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); -} - diff --git a/build/tests/ErrorLogTest/Makefile b/build/tests/ErrorLogTest/Makefile deleted file mode 100644 index 737d6bcd..00000000 --- a/build/tests/ErrorLogTest/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tests - ErrorLogTest -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -SUBDIRS = ARM9 banner - -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/ErrorLogTest/about.txt b/build/tests/ErrorLogTest/about.txt deleted file mode 100644 index ba84c322..00000000 --- a/build/tests/ErrorLogTest/about.txt +++ /dev/null @@ -1,11 +0,0 @@ -ErrorLogTest - - -`ɑgݍ܂ꂽErrorLogCũeXgpAvłB -sERRORLOG_Write()ĂяoAG[Ȍ݂sĂ -R\[Ɍ݂̃OGg₻̒go͂ďI܂B -񃍃O݂s߁As邽тɃOGg̑͑܂A -Ot@C16KBŒō쐬Ă邽߁AÂO͏폜Ă܂B - -܂AWrite֐Ăł邽߁AFatalErrorۂɔ -G[O̐⏑݂Ƃɗp邱Ƃ”\łB diff --git a/build/tests/ErrorLogTest/banner/Makefile b/build/tests/ErrorLogTest/banner/Makefile deleted file mode 100644 index 1f8aa1d4..00000000 --- a/build/tests/ErrorLogTest/banner/Makefile +++ /dev/null @@ -1,49 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/gameIcon.bmp -BANNER_SPEC = banner_v3.bsf - -TARGETS = banner.bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/ErrorLogTest/banner/banner_v3.bsf b/build/tests/ErrorLogTest/banner/banner_v3.bsf deleted file mode 100644 index d45ce7bcf1672abedee3d05e0883674d3527febd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 820 zcmc(dO>4qH5Qg8YLjS{pXDcG~;L&2VB2tWcU!&DP{2+-+|Gf3tUGK@sGVCxP@6Nol zJAe0<28tEQsO`nzTOEtG}Z85Cv(%S;N{q*I>EOO!=C5lauai<3}N(#17fTuU~gV-2om1|(KsgX8^>NXH=|QR3vs|HqD{ z{N27^T8W->3pN!CTfyFAU1iR>veE3d$s?479&Up@u4n7I12}>cxPUttEqsZXX2lpn zbPp-GCyLS0v?NwYQTtOn-Sc{)fAU@vT4?@MxBI`%{9itiAo7Pp47)_D7IA&OY1t!N Unl7a3Qsb?h(qQ!|75$@8Pl+X@3IG5A diff --git a/build/tests/FakeRomHeader/Makefile b/build/tests/FakeRomHeader/Makefile deleted file mode 100644 index 892956ee..00000000 --- a/build/tests/FakeRomHeader/Makefile +++ /dev/null @@ -1,99 +0,0 @@ -#! make -f -#--------------------------------------------------------------------------- -# Project: TwlSDK - tools - mastering.TWL -# File: Makefile.TWL -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: #$ -# $Rev$ -# $Author$ -#--------------------------------------------------------------------------- -TARGET_PLATFORM = TWL - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - - - -TARGETS = FakeRomHeader$(SUFFIX).exe - -SOURCES_C = main.c keys.c - -SOURCES = $(SOURCES_C) - -OBJECTS = $(SOURCES:.c=.o) - -INCDIR = $(TWLSDK_ROOT)/build/tools/makerom.TWL \ - $(TWL_IPL_RED_ROOT)/include - -REVISION_H = revision.h - -#INSTALL_DIR = $(FIRM_INSTALL_TOOLSDIR)/bin -#INSTALL_TARGETS = $(TARGETS) - -MACROS += $(addprefix -I,$(INCDIR)) -DPLATFORM_ENDIAN_LITTLE - -LIBACSIGN = $(ROOT)/build/tools/makerom.TWL/acsign/lib/X86/libacsign_x86.a -LIBAES = $(ROOT)/build/tools/makerom.TWL/aes/lib/X86/libaes_x86.a -LIBDIGEST = $(ROOT)/build/tools/makerom.TWL/digest/lib/X86/libdigest_x86.a -#LIBDGT = $(ROOT)/build/tools/libdgt.TWL/lib/libdgt.TWL.a - -ifeq ($(KEY_LAUNCHER),TRUE) -MACROS += -DKEY_LAUNCHER -SUFFIX = .launcher -else -ifeq ($(KEY_SECURE),TRUE) -MACROS += -DKEY_SECURE -SUFFIX = .secure -else -ifeq ($(KEY_SYSTEM),TRUE) -MACROS += -DKEY_SYSTEM -SUFFIX = .sys -else -MACROS += -DKEY_USER -SUFFIX = .user -endif -endif -endif - -LDIRT_CLEAN = $(OBJECTS) $(TARGETS) *.BAK $(REVISION_H) - -include $(TWLSDK_ROOT)/build/buildtools/twl/modulerules.x86 - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(REVISION_H) $(OBJECTS) $(LIBACSIGN) $(LIBAES) $(LIBDIGEST) - $(CC_X86) $+ -o $@ -lnetapi32 -lwsock32 - -main.o: main.c - -#main.h: - -# avoid to warning message -#misc.o:WARNING += -Wno-format-y2k - -# - -$(REVISION_H) :: - @if test -e $(TWLSDK_ROOT)/.svn; then \ - LANG=C svn info $(call empath,$(TWLSDK_ROOT)) | grep 'Revision' | sed "s|Revision: \(.*\)|#define SDK_REVISION \"\1\"|" > $(REVISION_H); \ - else \ - echo "#define SDK_REVISION \"-\"" > $(REVISION_H); \ - fi - @if test -e $(TWL_IPL_RED_ROOT)/.svn; then \ - LANG=C svn info $(call empath,$(TWL_IPL_RED_ROOT)) | grep 'Revision' | sed "s|Revision: \(.*\)|#define IPL_REVISION \"\1\"|" >> $(REVISION_H); \ - else \ - echo "#define IPL_REVISION \"-\"" >> $(REVISION_H); \ - fi - -#test: path.c misc.c -# $(CC_X86) -DTEST $+ -o $@ diff --git a/build/tests/FakeRomHeader/README.txt b/build/tests/FakeRomHeader/README.txt deleted file mode 100644 index 6a287402..00000000 --- a/build/tests/FakeRomHeader/README.txt +++ /dev/null @@ -1,35 +0,0 @@ -ROMwb_Uc[ - -What? - -EPCpR}hCc[ -Eo - - : SRL - - o: SRL - - ҂̈Ⴂ: oSRLɂ͐Vȃwb_CRCƏ‚Ă - (‚܂A`FbNʂ) - -rh@ - - ӂ‚ make ƁǍ[UAvpɂȂ܂B - ςƂAȉ̃IvV‚ make ĂB - - make KEY_SYSTEM=TRUE VXeAvp̌I - make KEY_SECURE=TRUE ZLAAvp̌I - make KEY_LAUNCHER=TRUE `Avp̌I - -s@ - - ./fakeRomHeader [Option] input_file output_file - - EIvV - -p: vbgtH[R[h0x01ɂ܂B - -s: LtOOffɂ܂B - -d: VEJpÍtO0ɂāAEJpÍtO1ɂ܂B - - EɂROMwb_肽Ƃ - -> oCiGfB^ȂǂROMwb_ɁA - {c[IvVȂŎsƁA - ROMwb_wb_CRCƏČvZÂ܂B - -ȏ diff --git a/build/tests/FakeRomHeader/keys.c b/build/tests/FakeRomHeader/keys.c deleted file mode 100644 index 67431383..00000000 --- a/build/tests/FakeRomHeader/keys.c +++ /dev/null @@ -1,243 +0,0 @@ -// p̌f[^ from makerom.TWL - -#include -#include "keys.h" - -#ifdef KEY_USER -// J@pROMwb_J -const u8 g_devPubKey_DER[ 0xa2 ] = { - 0x30, 0x81, 0x9F, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, - 0x05, 0x00, 0x03, 0x81, 0x8D, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xAC, 0x93, 0xBB, - 0x3C, 0x15, 0x5C, 0x5F, 0x25, 0xB0, 0x4C, 0x37, 0xA4, 0x2D, 0x85, 0x29, 0x1D, 0x7A, 0x9D, 0x2D, - 0xD5, 0x79, 0xB5, 0x5D, 0xB1, 0x08, 0x20, 0x9C, 0xF0, 0x4C, 0x56, 0x27, 0x97, 0xF8, 0x7E, 0x3E, - 0xCB, 0x94, 0x06, 0x05, 0x94, 0x00, 0x92, 0x9B, 0xB0, 0x5B, 0x06, 0xF6, 0xAF, 0xAA, 0x9C, 0xA5, - 0xF0, 0x11, 0xA7, 0x8A, 0xCB, 0x0C, 0x11, 0xD6, 0x0C, 0x3D, 0x30, 0xAC, 0x51, 0x79, 0x5A, 0xB5, - 0x7F, 0x11, 0x92, 0x74, 0x48, 0x82, 0x81, 0xBF, 0x3B, 0xFA, 0x93, 0xBF, 0x6B, 0x5B, 0x3F, 0x86, - 0x96, 0x4F, 0xCC, 0x90, 0x12, 0xB2, 0x39, 0x8D, 0x68, 0x16, 0x7B, 0xC6, 0x87, 0xF1, 0xF5, 0x60, - 0x62, 0x39, 0xFB, 0x10, 0x7E, 0x48, 0x7F, 0xDD, 0x82, 0x38, 0x38, 0x76, 0xB5, 0xCE, 0x21, 0x4B, - 0xC9, 0x6F, 0x31, 0x8D, 0x23, 0x57, 0x3D, 0xB6, 0x6C, 0xEE, 0xC2, 0x0D, 0x11, 0x02, 0x03, 0x01, - 0x00, 0x01, -}; -// J@pAvROMwb_閧 -const u8 g_devPrivKey_DER[ 0x263 ] = { - 0x30, 0x82, 0x02, 0x5F, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xAC, 0x93, 0xBB, 0x3C, 0x15, - 0x5C, 0x5F, 0x25, 0xB0, 0x4C, 0x37, 0xA4, 0x2D, 0x85, 0x29, 0x1D, 0x7A, 0x9D, 0x2D, 0xD5, 0x79, - 0xB5, 0x5D, 0xB1, 0x08, 0x20, 0x9C, 0xF0, 0x4C, 0x56, 0x27, 0x97, 0xF8, 0x7E, 0x3E, 0xCB, 0x94, - 0x06, 0x05, 0x94, 0x00, 0x92, 0x9B, 0xB0, 0x5B, 0x06, 0xF6, 0xAF, 0xAA, 0x9C, 0xA5, 0xF0, 0x11, - 0xA7, 0x8A, 0xCB, 0x0C, 0x11, 0xD6, 0x0C, 0x3D, 0x30, 0xAC, 0x51, 0x79, 0x5A, 0xB5, 0x7F, 0x11, - 0x92, 0x74, 0x48, 0x82, 0x81, 0xBF, 0x3B, 0xFA, 0x93, 0xBF, 0x6B, 0x5B, 0x3F, 0x86, 0x96, 0x4F, - 0xCC, 0x90, 0x12, 0xB2, 0x39, 0x8D, 0x68, 0x16, 0x7B, 0xC6, 0x87, 0xF1, 0xF5, 0x60, 0x62, 0x39, - 0xFB, 0x10, 0x7E, 0x48, 0x7F, 0xDD, 0x82, 0x38, 0x38, 0x76, 0xB5, 0xCE, 0x21, 0x4B, 0xC9, 0x6F, - 0x31, 0x8D, 0x23, 0x57, 0x3D, 0xB6, 0x6C, 0xEE, 0xC2, 0x0D, 0x11, 0x02, 0x03, 0x01, 0x00, 0x01, - 0x02, 0x81, 0x81, 0x00, 0x95, 0xDC, 0xC8, 0x18, 0x19, 0xF8, 0x98, 0x0B, 0x73, 0x78, 0x0C, 0x4D, - 0x7E, 0xD6, 0x06, 0xE9, 0x39, 0x83, 0xEA, 0xBC, 0x59, 0xAF, 0x7C, 0x87, 0xF2, 0x25, 0xD8, 0x02, - 0xF8, 0x57, 0x4C, 0x94, 0xB4, 0xCE, 0x74, 0x9B, 0x76, 0x94, 0x70, 0x1D, 0xA1, 0x0D, 0xAF, 0x33, - 0x4B, 0x28, 0xD5, 0xE9, 0xA0, 0x3F, 0xDD, 0xFD, 0x86, 0x67, 0x36, 0xA8, 0xB2, 0x77, 0x7E, 0xA8, - 0x2C, 0x2E, 0xEB, 0x43, 0x7B, 0xE4, 0xA3, 0x66, 0x7C, 0x3A, 0x00, 0x90, 0xC5, 0xF5, 0xF8, 0x59, - 0xF9, 0x95, 0x88, 0x2A, 0xA8, 0xF4, 0x94, 0x41, 0x05, 0x02, 0xA0, 0x47, 0xC0, 0xC1, 0xB9, 0x80, - 0x1F, 0x49, 0xBB, 0x09, 0xBF, 0x42, 0xBA, 0xE6, 0xEE, 0x8D, 0x21, 0x1D, 0xFB, 0x8F, 0xC7, 0xB7, - 0x71, 0x00, 0xFB, 0x35, 0x13, 0xD8, 0xBC, 0xA3, 0x3F, 0x3A, 0xCF, 0x96, 0xB0, 0x0B, 0x8A, 0x61, - 0x9C, 0x70, 0xF8, 0x91, 0x02, 0x41, 0x00, 0xD8, 0xAA, 0x14, 0x21, 0x49, 0x7A, 0x2C, 0xC3, 0xAA, - 0xDA, 0xFB, 0x17, 0xB0, 0xD7, 0xF5, 0x5A, 0x77, 0xEE, 0xF0, 0xA9, 0x09, 0x18, 0x85, 0x21, 0xD4, - 0x12, 0x4F, 0x85, 0x35, 0x05, 0x20, 0x36, 0x22, 0x65, 0x2C, 0xDD, 0xFA, 0xF5, 0x8E, 0xA5, 0x2E, - 0xC4, 0xFD, 0xD1, 0xFA, 0xC6, 0x8A, 0x0F, 0x98, 0x69, 0xD9, 0x82, 0x50, 0xDF, 0xFA, 0x80, 0xC3, - 0xFE, 0x5E, 0x15, 0x59, 0xA8, 0xD4, 0x05, 0x02, 0x41, 0x00, 0xCB, 0xE8, 0x9A, 0xF2, 0x5F, 0xC1, - 0x75, 0xA5, 0x1E, 0x95, 0xE4, 0x4F, 0x1A, 0x48, 0xA1, 0x75, 0x9A, 0x6E, 0xDB, 0xA2, 0x31, 0xD6, - 0x66, 0x29, 0xEA, 0x19, 0x37, 0x0C, 0xB2, 0x89, 0xD3, 0x03, 0x15, 0xE6, 0x7A, 0x1A, 0xCB, 0xCE, - 0xB9, 0x79, 0x11, 0x9B, 0x71, 0x78, 0xA5, 0xBB, 0x07, 0x6F, 0xA3, 0x05, 0x3B, 0x84, 0x23, 0x47, - 0xAB, 0x20, 0x34, 0x39, 0xB0, 0x59, 0x87, 0xEC, 0xCE, 0x9D, 0x02, 0x41, 0x00, 0xB8, 0xE0, 0x98, - 0x00, 0xB7, 0x64, 0x0B, 0x22, 0x83, 0x7E, 0x0B, 0xD7, 0xF1, 0x4C, 0xB5, 0xCD, 0x96, 0x9D, 0x4A, - 0xB9, 0xD2, 0x4B, 0x1B, 0xFE, 0xFB, 0xA9, 0x0C, 0x35, 0xCC, 0x42, 0x2D, 0x74, 0x43, 0xF1, 0x35, - 0x51, 0xCD, 0x3D, 0x0F, 0x95, 0x1F, 0xCD, 0x74, 0x10, 0x62, 0xFE, 0x5A, 0xFC, 0x67, 0xBF, 0x9A, - 0x9C, 0x3A, 0x4A, 0x84, 0xC4, 0xAF, 0x79, 0x33, 0xEA, 0xDF, 0xF0, 0xD1, 0xC9, 0x02, 0x41, 0x00, - 0xAA, 0x5B, 0x16, 0x00, 0xC2, 0xB1, 0x5D, 0x39, 0x6B, 0x59, 0x2D, 0x5A, 0x4D, 0x0A, 0x3B, 0x22, - 0x86, 0xB8, 0x71, 0x74, 0x8B, 0x90, 0xA4, 0xE0, 0x05, 0xBD, 0xB5, 0x39, 0x3D, 0x7C, 0x5A, 0x37, - 0xAC, 0xB7, 0x56, 0x72, 0x46, 0xAD, 0xDA, 0x54, 0xE4, 0xB9, 0xEA, 0x4E, 0x32, 0xA0, 0x13, 0xF1, - 0x57, 0xD0, 0x4A, 0x4D, 0xF6, 0x2F, 0xAD, 0x2F, 0x85, 0x92, 0x60, 0xDC, 0x1B, 0xEC, 0x63, 0x1D, - 0x02, 0x41, 0x00, 0xAC, 0x40, 0x43, 0xF2, 0x74, 0x2C, 0x56, 0xF4, 0xB9, 0x52, 0xB0, 0xCC, 0x89, - 0xC7, 0x70, 0x33, 0xA9, 0xC0, 0xD3, 0x4E, 0x35, 0xFC, 0x49, 0x69, 0xCB, 0x22, 0x9C, 0x0D, 0xD0, - 0xE1, 0x8F, 0xCC, 0xF4, 0xAD, 0x25, 0xC2, 0xE1, 0x84, 0xD6, 0x34, 0x35, 0x89, 0xFA, 0xC4, 0xBA, - 0x43, 0x34, 0xF4, 0xD2, 0xB2, 0x36, 0x56, 0xB9, 0x96, 0x78, 0x4D, 0x7A, 0xE3, 0x4D, 0xA9, 0x5E, - 0xF5, 0x3E, 0x88, -}; -#endif //#ifdef KEY_USER - -#ifdef KEY_SYSTEM -// JpVXeAv ROMwb_pJ -const u8 g_devPubKey_DER[ 0xa2 ] = { - 0x30, 0x81, 0x9F, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, - 0x05, 0x00, 0x03, 0x81, 0x8D, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xE9, 0x9E, 0xA7, - 0x9F, 0x59, 0x4D, 0xF4, 0xA7, 0x60, 0x04, 0xBD, 0x47, 0xF2, 0xB3, 0x64, 0xCD, 0x16, 0x79, 0xC1, - 0x47, 0x39, 0xF6, 0xA9, 0xF8, 0xEE, 0x1A, 0xD0, 0x72, 0xCF, 0x43, 0x97, 0x0C, 0x93, 0xA1, 0x38, - 0x4E, 0x13, 0x40, 0x6C, 0x10, 0x59, 0x43, 0xE2, 0x71, 0x29, 0x54, 0x14, 0x2C, 0xC5, 0xDA, 0x59, - 0x4D, 0xB4, 0x6A, 0xEF, 0x85, 0x61, 0x6F, 0x7F, 0x1C, 0x59, 0x34, 0x2C, 0xC6, 0x24, 0xF3, 0x7B, - 0xC3, 0xB7, 0x40, 0xD1, 0x46, 0xF8, 0x90, 0xB7, 0xC2, 0x98, 0x50, 0xAF, 0x95, 0x52, 0x42, 0xDB, - 0xAC, 0xD6, 0x7E, 0xA9, 0xC3, 0x3D, 0x1B, 0x51, 0x56, 0x07, 0x06, 0xD0, 0x0B, 0x01, 0xBB, 0x58, - 0x93, 0xEA, 0xA0, 0x2C, 0xC7, 0x7D, 0x6A, 0x31, 0x7E, 0xC9, 0xE2, 0xDA, 0xFE, 0x1F, 0x2E, 0x9D, - 0xA7, 0x54, 0x84, 0xDC, 0x28, 0xB9, 0x18, 0xEA, 0x16, 0xF2, 0x95, 0x55, 0x6D, 0x02, 0x03, 0x01, - 0x00, 0x01, -}; - -// JpVXeAv ROMwb_p閧 -const u8 g_devPrivKey_DER[ 0x263 ] = { - 0x30, 0x82, 0x02, 0x5E, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xE9, 0x9E, 0xA7, 0x9F, 0x59, - 0x4D, 0xF4, 0xA7, 0x60, 0x04, 0xBD, 0x47, 0xF2, 0xB3, 0x64, 0xCD, 0x16, 0x79, 0xC1, 0x47, 0x39, - 0xF6, 0xA9, 0xF8, 0xEE, 0x1A, 0xD0, 0x72, 0xCF, 0x43, 0x97, 0x0C, 0x93, 0xA1, 0x38, 0x4E, 0x13, - 0x40, 0x6C, 0x10, 0x59, 0x43, 0xE2, 0x71, 0x29, 0x54, 0x14, 0x2C, 0xC5, 0xDA, 0x59, 0x4D, 0xB4, - 0x6A, 0xEF, 0x85, 0x61, 0x6F, 0x7F, 0x1C, 0x59, 0x34, 0x2C, 0xC6, 0x24, 0xF3, 0x7B, 0xC3, 0xB7, - 0x40, 0xD1, 0x46, 0xF8, 0x90, 0xB7, 0xC2, 0x98, 0x50, 0xAF, 0x95, 0x52, 0x42, 0xDB, 0xAC, 0xD6, - 0x7E, 0xA9, 0xC3, 0x3D, 0x1B, 0x51, 0x56, 0x07, 0x06, 0xD0, 0x0B, 0x01, 0xBB, 0x58, 0x93, 0xEA, - 0xA0, 0x2C, 0xC7, 0x7D, 0x6A, 0x31, 0x7E, 0xC9, 0xE2, 0xDA, 0xFE, 0x1F, 0x2E, 0x9D, 0xA7, 0x54, - 0x84, 0xDC, 0x28, 0xB9, 0x18, 0xEA, 0x16, 0xF2, 0x95, 0x55, 0x6D, 0x02, 0x03, 0x01, 0x00, 0x01, - 0x02, 0x81, 0x81, 0x00, 0xCF, 0x67, 0xAA, 0x3B, 0x1F, 0x26, 0xC5, 0x68, 0x7F, 0x27, 0x55, 0xFF, - 0xF5, 0x29, 0x6C, 0xF9, 0x62, 0xD5, 0xCF, 0x50, 0xF3, 0xD5, 0xD8, 0x4B, 0x06, 0xE0, 0xC9, 0x64, - 0xD4, 0x3B, 0x96, 0x73, 0x74, 0xF1, 0x71, 0xB2, 0x67, 0x07, 0x0F, 0xA9, 0x68, 0x06, 0x8B, 0x97, - 0x99, 0x70, 0x6A, 0xC4, 0xE1, 0x16, 0x9B, 0xA8, 0x0F, 0xDF, 0xCC, 0x2B, 0xE7, 0x37, 0xFC, 0x6A, - 0x67, 0x8B, 0x99, 0x9E, 0xD1, 0xDA, 0xCC, 0x68, 0xFC, 0xEB, 0x8D, 0xFE, 0x42, 0x84, 0x72, 0x88, - 0x05, 0xAF, 0x23, 0x32, 0x30, 0x1F, 0xFA, 0xCC, 0x67, 0x52, 0x93, 0x6C, 0xC1, 0x0A, 0xCF, 0xD6, - 0xD3, 0x5F, 0x75, 0xE9, 0x4D, 0x32, 0xC0, 0x31, 0x1B, 0xD4, 0xB5, 0x4B, 0xB4, 0x4E, 0xB0, 0x3E, - 0xD5, 0x6C, 0x3C, 0xDC, 0x57, 0xBB, 0x32, 0x24, 0x41, 0x9C, 0x79, 0xBE, 0xFC, 0xC0, 0x3B, 0x63, - 0x0C, 0x5D, 0xC6, 0xE5, 0x02, 0x41, 0x00, 0xF6, 0x77, 0x12, 0x72, 0x63, 0xD0, 0x9B, 0x22, 0xC6, - 0x4F, 0x19, 0x1E, 0x2A, 0xE1, 0x97, 0xCF, 0x28, 0xD3, 0xC3, 0x5E, 0xFB, 0x22, 0x57, 0xE5, 0x4F, - 0x90, 0x83, 0x53, 0xB0, 0x80, 0xD3, 0x2D, 0xFB, 0x77, 0x55, 0x52, 0x5E, 0x00, 0xD8, 0x72, 0x39, - 0x93, 0xF0, 0x89, 0x83, 0x97, 0xFB, 0x78, 0xD2, 0xB0, 0xCD, 0xED, 0x1C, 0x9B, 0x8F, 0x5D, 0xBD, - 0x00, 0x26, 0x37, 0xA1, 0xE5, 0x38, 0xE7, 0x02, 0x41, 0x00, 0xF2, 0xA8, 0x5D, 0x86, 0xE0, 0x33, - 0xC8, 0x93, 0x5C, 0xB9, 0xBD, 0xCF, 0x27, 0x70, 0x81, 0x79, 0xE1, 0x12, 0x82, 0x09, 0x64, 0xCB, - 0xDB, 0xCF, 0xBB, 0x52, 0xD3, 0x3F, 0x22, 0x90, 0x47, 0x23, 0xAA, 0x20, 0x7D, 0x92, 0xFD, 0xD6, - 0x58, 0x68, 0xF3, 0xB1, 0xFA, 0x7B, 0x81, 0x0D, 0x8F, 0x22, 0xDC, 0x84, 0x08, 0x91, 0x60, 0x07, - 0xE8, 0x98, 0x9A, 0x84, 0xDA, 0x4C, 0x24, 0xC7, 0x10, 0x8B, 0x02, 0x41, 0x00, 0xB3, 0xB0, 0xAA, - 0x75, 0x55, 0xCA, 0x90, 0x60, 0xB1, 0x1E, 0x98, 0x1C, 0x83, 0x7D, 0x08, 0x36, 0x53, 0xF8, 0xD8, - 0x77, 0x16, 0x37, 0xBA, 0xC7, 0x87, 0xD3, 0xBF, 0xBB, 0xB3, 0x72, 0xA9, 0x04, 0xDC, 0x52, 0xEB, - 0x94, 0xEA, 0xCE, 0x49, 0x00, 0x36, 0x74, 0x62, 0xA9, 0x8F, 0x94, 0xAE, 0x16, 0x2F, 0xDE, 0x11, - 0xB4, 0xEE, 0xE7, 0x87, 0x85, 0xFB, 0x36, 0xF1, 0xA6, 0x1B, 0xD5, 0xC8, 0x3F, 0x02, 0x40, 0x73, - 0x18, 0x72, 0xCC, 0x1F, 0x99, 0xD0, 0x40, 0x3D, 0x52, 0x08, 0x7A, 0xB2, 0x5D, 0x45, 0xBC, 0x76, - 0x8A, 0x1D, 0xCD, 0xB0, 0xD6, 0x94, 0xDB, 0x32, 0x21, 0xB5, 0xFB, 0x13, 0x3C, 0xD5, 0xD1, 0x4F, - 0xC7, 0x7B, 0x68, 0x76, 0x27, 0xED, 0xE5, 0x51, 0xF9, 0x90, 0x32, 0x76, 0x62, 0xE5, 0x0A, 0x87, - 0x07, 0xC5, 0x3C, 0x97, 0x0D, 0x09, 0x41, 0x20, 0xC1, 0x74, 0xFD, 0x7A, 0xD0, 0x44, 0xC3, 0x02, - 0x41, 0x00, 0xAF, 0xA3, 0x2C, 0x53, 0x8E, 0x8E, 0xA8, 0xE7, 0x36, 0xC0, 0x5C, 0x9E, 0x95, 0xEE, - 0xC1, 0x97, 0x02, 0x63, 0x7F, 0x3B, 0x4E, 0xB2, 0x0F, 0xF2, 0x7A, 0xBD, 0x57, 0x9C, 0x8B, 0x85, - 0xA8, 0x5D, 0x14, 0x3B, 0x7B, 0xF0, 0xBE, 0xFE, 0x0F, 0x8E, 0x4F, 0xD5, 0xB8, 0x49, 0xE8, 0x90, - 0xF5, 0x12, 0xBF, 0xB2, 0xD6, 0xE2, 0x78, 0x20, 0x26, 0x6C, 0x3F, 0x5C, 0xE4, 0x57, 0x6D, 0xE9, - 0xB4, 0x63, -}; -#endif // #ifdef KEY_SYSTEM - -#ifdef KEY_SECURE -// JpVbvAv ROMwb_pJ -const u8 g_devPubKey_DER[ 0xa2 ] = { - 0x30, 0x81, 0x9F, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, - 0x05, 0x00, 0x03, 0x81, 0x8D, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xA7, 0x9F, 0x54, - 0xA0, 0xC7, 0x45, 0xAE, 0xF6, 0x63, 0xA7, 0x53, 0xB7, 0x0A, 0xCC, 0x0B, 0xCB, 0x65, 0xE1, 0x11, - 0xC6, 0x05, 0x15, 0xB5, 0x6E, 0xBD, 0xAC, 0x0C, 0xCA, 0xF4, 0x7C, 0x68, 0x7A, 0xF9, 0x0E, 0x5D, - 0x98, 0x5B, 0xC8, 0x4D, 0x22, 0x3B, 0xA3, 0xBE, 0x8B, 0x5B, 0x7F, 0x26, 0x44, 0x9F, 0xC4, 0x48, - 0x44, 0xB1, 0x32, 0xB7, 0xBE, 0x63, 0xBA, 0xD6, 0xC1, 0x10, 0xCE, 0xF6, 0xED, 0x47, 0x8F, 0xE1, - 0xFF, 0x7F, 0x5A, 0xD5, 0x5D, 0x94, 0x38, 0x2F, 0xA1, 0xD4, 0xEF, 0x82, 0xB1, 0x0D, 0xC4, 0x43, - 0xEC, 0xBE, 0x77, 0xB6, 0x82, 0x9C, 0xFA, 0x17, 0x87, 0x84, 0x82, 0x25, 0x46, 0xFB, 0xD6, 0x05, - 0xC8, 0x9A, 0x7E, 0xAD, 0x44, 0x40, 0x0D, 0x35, 0x9C, 0x45, 0x44, 0x64, 0x36, 0x61, 0x4B, 0xF7, - 0xE6, 0x31, 0x5C, 0x7D, 0x96, 0x73, 0xE8, 0xAC, 0xB4, 0xE3, 0x5E, 0xD1, 0x9D, 0x02, 0x03, 0x01, - 0x00, 0x01, -}; - -// JpVbvAv ROMwb_p閧 -const u8 g_devPrivKey_DER[ 0x263 ] = { - 0x30, 0x82, 0x02, 0x5D, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xA7, 0x9F, 0x54, 0xA0, 0xC7, - 0x45, 0xAE, 0xF6, 0x63, 0xA7, 0x53, 0xB7, 0x0A, 0xCC, 0x0B, 0xCB, 0x65, 0xE1, 0x11, 0xC6, 0x05, - 0x15, 0xB5, 0x6E, 0xBD, 0xAC, 0x0C, 0xCA, 0xF4, 0x7C, 0x68, 0x7A, 0xF9, 0x0E, 0x5D, 0x98, 0x5B, - 0xC8, 0x4D, 0x22, 0x3B, 0xA3, 0xBE, 0x8B, 0x5B, 0x7F, 0x26, 0x44, 0x9F, 0xC4, 0x48, 0x44, 0xB1, - 0x32, 0xB7, 0xBE, 0x63, 0xBA, 0xD6, 0xC1, 0x10, 0xCE, 0xF6, 0xED, 0x47, 0x8F, 0xE1, 0xFF, 0x7F, - 0x5A, 0xD5, 0x5D, 0x94, 0x38, 0x2F, 0xA1, 0xD4, 0xEF, 0x82, 0xB1, 0x0D, 0xC4, 0x43, 0xEC, 0xBE, - 0x77, 0xB6, 0x82, 0x9C, 0xFA, 0x17, 0x87, 0x84, 0x82, 0x25, 0x46, 0xFB, 0xD6, 0x05, 0xC8, 0x9A, - 0x7E, 0xAD, 0x44, 0x40, 0x0D, 0x35, 0x9C, 0x45, 0x44, 0x64, 0x36, 0x61, 0x4B, 0xF7, 0xE6, 0x31, - 0x5C, 0x7D, 0x96, 0x73, 0xE8, 0xAC, 0xB4, 0xE3, 0x5E, 0xD1, 0x9D, 0x02, 0x03, 0x01, 0x00, 0x01, - 0x02, 0x81, 0x80, 0x48, 0xCA, 0x9C, 0x49, 0xA5, 0xBF, 0xD1, 0x17, 0x16, 0x77, 0x97, 0x97, 0x29, - 0x8D, 0x2A, 0xA2, 0x0D, 0x80, 0x0B, 0xE3, 0xDE, 0x59, 0x6B, 0x0C, 0xC8, 0x39, 0x6A, 0xE4, 0xC7, - 0xFF, 0x2E, 0xB0, 0x18, 0x6F, 0xF0, 0x9D, 0x35, 0x5E, 0x6A, 0x80, 0xAF, 0x3D, 0x90, 0x85, 0x9C, - 0x1A, 0x3F, 0x58, 0x15, 0xB9, 0x7B, 0x58, 0xB9, 0x4A, 0xB9, 0x18, 0x68, 0xDE, 0xBE, 0x5B, 0xE1, - 0x1C, 0xBF, 0x85, 0xDF, 0x5F, 0x30, 0xFD, 0xD2, 0xEC, 0xC0, 0x77, 0x33, 0x62, 0x58, 0xEC, 0xC1, - 0x47, 0xF7, 0x41, 0xE8, 0x2B, 0x21, 0x83, 0xE0, 0x8E, 0xE0, 0xF4, 0x03, 0x5D, 0x07, 0x84, 0x91, - 0xFA, 0x5B, 0xD8, 0xD3, 0x47, 0x90, 0x6E, 0x7D, 0x81, 0x9C, 0x1A, 0xB3, 0x03, 0x2F, 0xBC, 0x1A, - 0x28, 0x01, 0xBB, 0x78, 0x33, 0x60, 0xD2, 0x32, 0x34, 0x09, 0xEE, 0x08, 0x35, 0x50, 0x7A, 0x02, - 0x77, 0xB9, 0x01, 0x02, 0x41, 0x00, 0xCF, 0x39, 0xB3, 0x95, 0xDB, 0x1A, 0x2C, 0xD5, 0x6B, 0x0E, - 0xD8, 0x7B, 0xEC, 0x36, 0x14, 0xC5, 0x6C, 0x6C, 0x03, 0x34, 0xCB, 0x8A, 0x03, 0xF0, 0x94, 0x9C, - 0x2E, 0xBB, 0xA4, 0x24, 0x85, 0x6F, 0x3C, 0x8B, 0xAD, 0x44, 0x88, 0xA1, 0xDC, 0x88, 0xFE, 0xE7, - 0x02, 0x24, 0xB3, 0x73, 0xEA, 0xD1, 0xF6, 0x61, 0x6A, 0x73, 0x00, 0x86, 0x0B, 0x67, 0xAB, 0x00, - 0xFB, 0xF7, 0xFD, 0x0D, 0x92, 0x91, 0x02, 0x41, 0x00, 0xCF, 0x13, 0x5C, 0xD1, 0x72, 0x12, 0xA5, - 0x1D, 0x3A, 0x86, 0xAB, 0xAC, 0x87, 0x11, 0x37, 0x6D, 0xEB, 0x90, 0x14, 0x41, 0x7B, 0xAA, 0x38, - 0x88, 0xFF, 0xAF, 0xAA, 0xAE, 0x12, 0x3E, 0x7C, 0x28, 0x59, 0xDB, 0xBE, 0xAE, 0x79, 0x20, 0x0C, - 0x4F, 0xE5, 0xAB, 0x97, 0x64, 0x0D, 0x1E, 0x31, 0x54, 0x10, 0xB0, 0x1C, 0x7E, 0x5A, 0x7B, 0x98, - 0x32, 0x00, 0xF7, 0xE0, 0x18, 0x15, 0x53, 0xFC, 0x4D, 0x02, 0x41, 0x00, 0x90, 0x5F, 0x38, 0x01, - 0xD0, 0x9B, 0x44, 0xDF, 0x0F, 0x6E, 0x51, 0x5E, 0xCC, 0xEB, 0xC4, 0xBE, 0xE2, 0xD1, 0xC1, 0xCE, - 0x17, 0x7C, 0x39, 0x50, 0x74, 0x88, 0xF7, 0x7A, 0x1D, 0x5A, 0xA0, 0x68, 0x26, 0x3B, 0x7D, 0xE4, - 0xC0, 0x78, 0x5C, 0x68, 0x49, 0x86, 0xF2, 0x14, 0x55, 0xBE, 0x0D, 0xBC, 0x68, 0x35, 0xE8, 0x6E, - 0xE4, 0xCF, 0x7E, 0xC4, 0xA3, 0xFB, 0xD4, 0x90, 0x2A, 0x8A, 0x39, 0x31, 0x02, 0x41, 0x00, 0x93, - 0x88, 0xE3, 0x17, 0xA2, 0xA3, 0xA0, 0x1A, 0x4C, 0x09, 0x89, 0x24, 0xD9, 0xF2, 0xAD, 0x40, 0x56, - 0x96, 0x07, 0xA8, 0x84, 0x18, 0x4A, 0x41, 0x69, 0x92, 0x5A, 0x13, 0xBD, 0x91, 0xE1, 0x59, 0xCA, - 0x73, 0xE2, 0xCE, 0x62, 0x24, 0x30, 0x41, 0x78, 0x8C, 0x21, 0xC7, 0xBA, 0x04, 0xE9, 0xF6, 0x50, - 0x11, 0x79, 0xAB, 0x98, 0x81, 0xF8, 0x74, 0x9F, 0xF5, 0xFB, 0x26, 0x8D, 0x83, 0x91, 0xFD, 0x02, - 0x40, 0x4D, 0xA4, 0x03, 0x7E, 0x00, 0xB6, 0xA2, 0xEE, 0x85, 0x19, 0x5C, 0xB3, 0xBE, 0x06, 0x48, - 0xF7, 0xA8, 0x27, 0xB3, 0xC9, 0xED, 0x60, 0xE1, 0x56, 0x0A, 0x3F, 0x8D, 0x64, 0x56, 0xBA, 0x2E, - 0xC3, 0xF6, 0x2D, 0x95, 0x38, 0x87, 0x58, 0xD6, 0x95, 0xF7, 0xA6, 0xD6, 0xEE, 0x85, 0x7D, 0xD7, - 0x93, 0x80, 0xF5, 0x1D, 0xBF, 0x5F, 0x3E, 0x3A, 0x22, 0x29, 0x18, 0xE5, 0x95, 0x73, 0x0D, 0xEA, - 0x42, -}; -#endif // #ifdef KEY_SECURE - -#ifdef KEY_LAUNCHER -// JpVXeAv ROMwb_pJ -const u8 g_devPubKey_DER[ 0xa2 ] = { - 0x30, 0x81, 0x9F, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, - 0x05, 0x00, 0x03, 0x81, 0x8D, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xBC, 0xFD, 0xA1, - 0xFF, 0x1F, 0x66, 0xDF, 0xEC, 0xB4, 0x69, 0xF8, 0xF7, 0x43, 0x0C, 0x5D, 0x0F, 0x00, 0xD7, 0x20, - 0x49, 0x42, 0x06, 0x03, 0x29, 0x85, 0x0B, 0x99, 0x59, 0x61, 0x98, 0x70, 0x6E, 0xFF, 0xF6, 0xB4, - 0x70, 0x66, 0xF0, 0xDD, 0x8F, 0xDC, 0xE9, 0xF2, 0x0D, 0xD0, 0x21, 0x1D, 0x77, 0xB8, 0x9C, 0x51, - 0x87, 0xC0, 0xB1, 0x33, 0xAB, 0x13, 0x96, 0x0B, 0x47, 0xB8, 0x42, 0x4A, 0x0D, 0xC3, 0x77, 0xE1, - 0x87, 0xB1, 0x6B, 0x24, 0x31, 0x10, 0x8A, 0x47, 0xF2, 0x32, 0xF4, 0xC9, 0x78, 0x25, 0x13, 0xD4, - 0x80, 0x10, 0x05, 0x52, 0xC3, 0xE7, 0x50, 0x7B, 0x29, 0x49, 0xCE, 0x93, 0xD9, 0x8F, 0x2A, 0xB5, - 0x4D, 0xD1, 0xC1, 0x91, 0xD8, 0x07, 0x16, 0x10, 0x15, 0xFF, 0xD6, 0x84, 0x8F, 0x54, 0x3D, 0x91, - 0x5B, 0x37, 0x45, 0x48, 0xE4, 0x6B, 0x62, 0xD2, 0x11, 0x9B, 0x0D, 0x71, 0x69, 0x02, 0x03, 0x01, - 0x00, 0x01, -}; - -// JpVXeAv ROMwb_p閧 -const u8 g_devPrivKey_DER[ 0x263 ] = { - 0x30, 0x82, 0x02, 0x5D, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xBC, 0xFD, 0xA1, 0xFF, 0x1F, - 0x66, 0xDF, 0xEC, 0xB4, 0x69, 0xF8, 0xF7, 0x43, 0x0C, 0x5D, 0x0F, 0x00, 0xD7, 0x20, 0x49, 0x42, - 0x06, 0x03, 0x29, 0x85, 0x0B, 0x99, 0x59, 0x61, 0x98, 0x70, 0x6E, 0xFF, 0xF6, 0xB4, 0x70, 0x66, - 0xF0, 0xDD, 0x8F, 0xDC, 0xE9, 0xF2, 0x0D, 0xD0, 0x21, 0x1D, 0x77, 0xB8, 0x9C, 0x51, 0x87, 0xC0, - 0xB1, 0x33, 0xAB, 0x13, 0x96, 0x0B, 0x47, 0xB8, 0x42, 0x4A, 0x0D, 0xC3, 0x77, 0xE1, 0x87, 0xB1, - 0x6B, 0x24, 0x31, 0x10, 0x8A, 0x47, 0xF2, 0x32, 0xF4, 0xC9, 0x78, 0x25, 0x13, 0xD4, 0x80, 0x10, - 0x05, 0x52, 0xC3, 0xE7, 0x50, 0x7B, 0x29, 0x49, 0xCE, 0x93, 0xD9, 0x8F, 0x2A, 0xB5, 0x4D, 0xD1, - 0xC1, 0x91, 0xD8, 0x07, 0x16, 0x10, 0x15, 0xFF, 0xD6, 0x84, 0x8F, 0x54, 0x3D, 0x91, 0x5B, 0x37, - 0x45, 0x48, 0xE4, 0x6B, 0x62, 0xD2, 0x11, 0x9B, 0x0D, 0x71, 0x69, 0x02, 0x03, 0x01, 0x00, 0x01, - 0x02, 0x81, 0x80, 0x16, 0x65, 0xDC, 0xC8, 0x16, 0x99, 0xA3, 0x9A, 0x32, 0xFB, 0x88, 0x35, 0x0D, - 0xAE, 0x2E, 0x6D, 0x33, 0xC5, 0x4B, 0x1F, 0x43, 0x82, 0xE0, 0xE7, 0x0F, 0xCC, 0x83, 0x1D, 0x13, - 0xB2, 0xF4, 0x48, 0x43, 0x6F, 0xA2, 0x8C, 0xDB, 0xB6, 0x5A, 0x1B, 0xCD, 0xAB, 0xB0, 0x33, 0x30, - 0xE2, 0x6B, 0xD2, 0x9F, 0x7F, 0x6F, 0x2E, 0x2E, 0x89, 0x11, 0xBD, 0x89, 0xB1, 0xB3, 0x9E, 0x89, - 0x58, 0xD9, 0xDB, 0xB9, 0x91, 0x00, 0xDA, 0x17, 0xA9, 0x14, 0xC3, 0x83, 0xFF, 0xFF, 0x46, 0x0F, - 0x5F, 0x81, 0x1B, 0x5B, 0x02, 0xD2, 0x29, 0xEF, 0x48, 0xB7, 0xDF, 0x8C, 0x34, 0xED, 0xA2, 0xEC, - 0xC0, 0x79, 0x50, 0xC6, 0xAD, 0x0B, 0x98, 0x28, 0xC2, 0x17, 0x80, 0x96, 0x67, 0x3A, 0x22, 0xD7, - 0x60, 0x61, 0x98, 0xF6, 0xAB, 0x10, 0x1E, 0xE6, 0x23, 0x06, 0x4B, 0x61, 0xAF, 0xFE, 0xD5, 0xAF, - 0xB8, 0x3D, 0x81, 0x02, 0x41, 0x00, 0xE2, 0x82, 0xC3, 0x83, 0x2A, 0xEF, 0xA0, 0x86, 0x15, 0xFD, - 0x80, 0x23, 0x2B, 0x1C, 0x80, 0x0C, 0xF7, 0xA0, 0xA3, 0x53, 0x2B, 0xAD, 0xF9, 0xF6, 0xF7, 0xA3, - 0x7E, 0x1A, 0x5E, 0xE7, 0x18, 0x6D, 0xF3, 0xD6, 0xDE, 0x68, 0xBB, 0x4A, 0x54, 0xAF, 0xDF, 0xA5, - 0xEC, 0xA7, 0x62, 0xBB, 0xCB, 0x7A, 0xDE, 0x3F, 0xFB, 0x9A, 0x99, 0x2A, 0xF7, 0x2D, 0x23, 0x98, - 0x9A, 0x9F, 0xCE, 0xFB, 0x67, 0xB1, 0x02, 0x41, 0x00, 0xD5, 0x98, 0x63, 0x19, 0x3D, 0x80, 0xDF, - 0x71, 0x13, 0x6A, 0xF4, 0x5E, 0x62, 0x99, 0x16, 0x34, 0x18, 0xF9, 0xDC, 0x58, 0x2F, 0xC3, 0xD8, - 0x8B, 0x68, 0xC1, 0x43, 0x98, 0xF0, 0xEC, 0x39, 0xE3, 0x40, 0x6E, 0x08, 0x9F, 0xED, 0x17, 0xBE, - 0xCC, 0x87, 0x4A, 0xAD, 0x99, 0x15, 0x09, 0xD0, 0xBB, 0xDB, 0x13, 0xF0, 0x53, 0xDF, 0xCB, 0x66, - 0x1A, 0xD1, 0xF2, 0x14, 0xB7, 0x17, 0xFA, 0xCB, 0x39, 0x02, 0x41, 0x00, 0xD8, 0xA2, 0x05, 0x89, - 0x32, 0x8C, 0x41, 0xB3, 0x5B, 0xDE, 0xBA, 0x29, 0x68, 0x76, 0xF6, 0x84, 0xF0, 0x64, 0x23, 0x30, - 0x4D, 0x4B, 0x34, 0x11, 0x1E, 0x60, 0xB0, 0x1F, 0x5A, 0x7A, 0x9C, 0xE3, 0xB3, 0xDC, 0xE1, 0x93, - 0xBA, 0xE4, 0x69, 0x40, 0x57, 0x9E, 0xA2, 0x4A, 0xA8, 0x64, 0x41, 0x44, 0xBE, 0xC0, 0xE4, 0xCA, - 0xC4, 0x08, 0xD2, 0xA3, 0xCA, 0x32, 0x8E, 0x57, 0x9F, 0x26, 0xD4, 0xD1, 0x02, 0x41, 0x00, 0x9B, - 0xD5, 0x50, 0x07, 0xAC, 0x2D, 0x87, 0xD7, 0x71, 0xB9, 0x48, 0x8C, 0x4C, 0x17, 0x30, 0x71, 0xD5, - 0xFF, 0x05, 0x59, 0x79, 0x8F, 0xC3, 0x3F, 0x02, 0xB0, 0x6D, 0xE6, 0xF9, 0x6E, 0xFF, 0x54, 0xE3, - 0x3E, 0xE4, 0x1F, 0xF9, 0xD4, 0xA7, 0x29, 0x85, 0x53, 0x60, 0x90, 0x1D, 0x1F, 0x4A, 0x20, 0xA4, - 0x57, 0x49, 0xB1, 0x87, 0xC7, 0x57, 0xB9, 0x1D, 0x8F, 0x26, 0xB9, 0xE6, 0x4E, 0xDD, 0x51, 0x02, - 0x40, 0x4F, 0xE6, 0xC8, 0x11, 0x14, 0xA2, 0xF9, 0xC3, 0xD1, 0x7B, 0x74, 0x48, 0x8F, 0x33, 0xB4, - 0xF6, 0xFF, 0xEE, 0xDC, 0x4E, 0x34, 0xF9, 0x66, 0xB8, 0x25, 0x3A, 0x05, 0xF5, 0x29, 0x1B, 0x12, - 0x61, 0x6C, 0xCD, 0xF1, 0x0D, 0xE6, 0x68, 0xED, 0x81, 0x44, 0x96, 0x07, 0x5A, 0x43, 0x72, 0x93, - 0xDC, 0xEE, 0xD7, 0x81, 0x82, 0x22, 0x5E, 0x07, 0x15, 0x02, 0xA5, 0xE9, 0x54, 0x59, 0x86, 0x03, - 0x02, -}; -#endif // #ifdef KEY_LAUNCHER diff --git a/build/tests/FakeRomHeader/keys.h b/build/tests/FakeRomHeader/keys.h deleted file mode 100644 index 349ae8e4..00000000 --- a/build/tests/FakeRomHeader/keys.h +++ /dev/null @@ -1,14 +0,0 @@ -// p̌f[^̐錾 - -#include - -// ̎ -//#define KEY_USER -//#define KEY_SYSTEM -//#define KEY_SECURE -//#define KEY_LAUNCHER - -// J@pROMwb_ -extern const u8 g_devPubKey_DER[ 0xa2 ]; -extern const u8 g_devPrivKey_DER[ 0x263 ]; - diff --git a/build/tests/FakeRomHeader/main.c b/build/tests/FakeRomHeader/main.c deleted file mode 100644 index d09d497f..00000000 --- a/build/tests/FakeRomHeader/main.c +++ /dev/null @@ -1,533 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlFirmware - tools - mastering - File: mastering.c - - Copyright 2003 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: #$ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#include -#include -#include // strcasecmp() -#include // getopt() -#include // stat() -#include -#include -#include -#include -#include -#include "revision.h" -#include "keys.h" - -#define CARD_LATENCY_MASK 0x083f1fff -#define CARD_MROM_GAME_LATENCY 0x00010017 -#define CARD_MROM_SECURE_HW_LATENCY 0x001808f8 -#define CARD_MROM_SECURE_SW_LATENCY 0x051e -#define CARD_1TROM_GAME_LATENCY 0x00010657 -#define CARD_1TROM_SECURE_HW_LATENCY 0x081808f8 -#define CARD_1TROM_SECURE_SW_LATENCY 0x0d7e - - -/*---------------------------------------------------------------------------* - - - 錾 & 萔 - - - *---------------------------------------------------------------------------*/ - -// -- p[^ - -// CRC (makerom.TWL/misc.cmakerom.TWL/format_rom_private.hRsy) -#define CRC16_INIT_VALUE (0xffff) -#define CALC_CRC16_SIZE (0x15e) - -// t@CRs[pobt@ -#define BUFSIZE (16*1024) -static u8 buf[ BUFSIZE ]; - -// -- Context - -typedef struct _SContext -{ - // IvV - BOOL bPlatform; - BOOL bSignFlag; - BOOL bDevFlag; - BOOL bVerFlag; - BOOL bDebugger; - BOOL bCheckCard; - int verNum; - BOOL bMROM; - BOOL bNTR; - - FILE *ifp; - FILE *ofp; -} -SContext; - -// -- internal function -static BOOL iMain( SContext *pContext ); -u16 CalcCRC16(u16 start, u8 *data, int size); -BOOL SignRomHeader( ROM_Header *prh ); -static void SetRomSpeedByIndex(ROM_Header * header, tRomSpeedType idx); - -/*---------------------------------------------------------------------------* - - - O[oϐ - - - *---------------------------------------------------------------------------*/ - -BOOL DebugMode = FALSE; - -/*---------------------------------------------------------------------------* - - - Ƃ̖{ - - - *---------------------------------------------------------------------------*/ - -void usage() -{ - printf( "-----------------------------------------------------------------------------\n" ); - printf( "Usage: fakeRomHeader.exe input_file output_file\n" ); - printf( " input_file : a ROM data file (generated by makerom.TWL).\n" ); - printf( " output_file : a destination file.\n" ); - printf( "\nOption:\n" ); - printf( "-h : print help only.\n" ); - printf( "-p : write invalid platform code in a ROM Header.\n" ); - printf( "-s : negate flag for the signature in a ROM Header.\n" ); - printf( "-d : negate a new developer encrypt flag, and assert an old one.\n" ); - printf( "-v NUM: change ROM version in a ROM Header.\n" ); - printf( "-m : [Only NTR limited ROM] Rom speed type replace 1TROM from MROM.\n" ); - printf( "-D : assert a disable flag of debugger alalysis.\n" ); - printf( "-c : assert a check(inspection) card flag.\n" ); - printf( "-N : skip sign [using for NTR limited ROM]" ); - printf( "-f : force to overwrite a output_file.\n" ); - printf( "-----------------------------------------------------------------------------\n" ); -} - -int main(int argc, char *argv[]) -{ - SContext context; - char *pSrc, *pDst; - int opt; - extern char *optarg; - extern int optind, opterr; - struct stat st; - BOOL bResult; - BOOL bForceOverwrite = FALSE; - - printf( "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n" ); - printf( " fakeRomHeader [%s-%s]\n", SDK_REVISION, IPL_REVISION ); - printf( "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n" ); - - // context ̏ - memset( &context, 0, sizeof(SContext) ); - - // IvV - while( (opt = getopt(argc, argv, "hpsdmv:DcfN")) >= 0 ) - { - switch( opt ) - { - case 'h': - usage(); - return 0; - break; - - case 'p': - context.bPlatform = TRUE; - break; - - case 's': - context.bSignFlag = TRUE; - break; - - case 'd': - context.bDevFlag = TRUE; - break; - - case 'v': - context.bVerFlag = TRUE; - context.verNum = atoi(optarg); - break; - - case 'm': - context.bMROM = TRUE; - break; - - case 'D': - context.bDebugger = TRUE; - break; - - case 'c': - context.bCheckCard = TRUE; - break; - - case 'N': - context.bNTR = TRUE; - break; - - case 'f': - bForceOverwrite = TRUE; - break; - - default: // IvVw肳ĂȂƂɂs - usage(); - fprintf( stdout, "error: illegal option\n" ); - exit(1); - break; - } - } - argc = argc - optind; - argv = argv + optind; - - // - if( argc != 2 ) - { - usage(); - printf( "error arguments\n" ); - exit(1); - } - else - { - pSrc = argv[0]; - pDst = argv[1]; - } - - printf( "input_file: %s\n", pSrc ); - printf( "output_file: %s\n", pDst ); - printf( "\n" ); - - // ̓t@CƏo̓t@CȂ_ - if( (strlen(pSrc) == strlen(pDst)) && (memcmp(pSrc, pDst, strlen(pSrc)) == 0) ) - { - printf( "The name of output_file must be different from the one of input_file\n" ); - exit(1); - } - - // o̓t@C݂Ƃ㏑邩ǂmF - if( !bForceOverwrite && stat( pDst, &st )==0 ) - { - char ans; - printf( "The %s already exists. Overwrite it? (y or n) ", pDst ); - //fscanf( stdin, "%c", &ans ); - ans = (char)getch(); // ^[L[Ȃ - printf( "%c\n", ans ); // getch ł͓͂\Ȃ̂Ŏŕ\Kv - printf( "\n" ); - if( !(ans=='y') && !(ans=='Y') ) - { - printf( "mastering is aborted.\n" ); - exit(1); - } - } - - // t@CJ - context.ifp = fopen(pSrc, "rb"); - context.ofp = fopen(pDst, "wb+"); - if( !(context.ifp) || !(context.ofp) ) - { - printf( "fopen failed.\n" ); - bResult = FALSE; - goto FINALIZE; - } - - // { - bResult = iMain( &context ); - -// I -FINALIZE: - - if( !bResult ) - { - printf( "\n" ); - printf( "error.\n" ); - } - else - { - printf( "\n" ); - printf( "succeeded.\n" ); - } - if( context.ifp ) fclose(context.ifp); // ̉ - if( context.ofp ) fclose(context.ofp); - - if( (!bResult) && (stat( pDst, &st ) == 0) ) - { - unlink( pDst ); // o̓t@C폜 - } - return 0; -} - -/*---------------------------------------------------------------------------* - - ROMwb_̋U - - *---------------------------------------------------------------------------*/ - -static BOOL iMain( SContext *pContext ) -{ - ROM_Header rh; - int size; - - // ROMwb_[h - fseek( pContext->ifp, 0, SEEK_SET ); - if( sizeof(ROM_Header) != fread( &rh, 1, sizeof(ROM_Header), pContext->ifp ) ) - { - printf( "fread failed in reading ROM Header\n" ); - return FALSE; - } - - // ROMwb_ - { - if( pContext->bPlatform ) - { - printf( "platform_code: 0x%02x -> 0x01\n", rh.s.platform_code ); - rh.s.platform_code = 0x01; - } - - if( pContext->bSignFlag ) - { - printf( "enable_signature: 0x%02x -> 0x00\n", rh.s.enable_signature ); - rh.s.enable_signature = 0x0; - } - - if( pContext->bDevFlag ) - { - printf( "old dev. encrypt: 0x%02x -> 0x01x\n", rh.s.developer_encrypt_old ); - printf( "new dev. encrypt: 0x%02x -> 0x00x\n", rh.s.exFlags.developer_encrypt ); - rh.s.developer_encrypt_old = 0x1; - rh.s.exFlags.developer_encrypt = 0x0; - } - - if( pContext->bVerFlag ) - { - printf( "ROM version: 0x%02x -> 0x%02x\n", rh.s.rom_version, pContext->verNum ); - rh.s.rom_version = pContext->verNum; - } - - if( pContext->bMROM ) - { - if( rh.s.platform_code != 0x00 ) - { - printf( "ERROR: This option is only for NTR Limited." ); - return FALSE; - } - //if( (rh.s.game_cmd_param & CARD_LATENCY_MASK) != CARD_MROM_GAME_LATENCY ) - //{ - // printf( "ERROR: This option is only for MROM Setting" ); - // return FALSE; - //} - SetRomSpeedByIndex( &rh, ONETROM ); - printf( "ROM Speed Type: **** -> 1TROM\n" ); - } - - if( pContext->bDebugger ) - { - if( rh.s.disable_debug == 0 ) - { - rh.s.disable_debug = 0x1; - printf( "Debugger analysis: Enable -> Disable\n" ); - } - else - { - printf( "Debugger analysis: Originally Disable\n" ); - } - } - - if( pContext->bCheckCard ) - { - if( rh.s.inspect_card == 0 ) - { - rh.s.inspect_card = 0x1; - printf( "Check Card Flag: Disable -> Enable\n" ); - } - else - { - printf( "Check Card Flag: Originally Enable\n" ); - } - } - } - - // wb_CRCvZ - rh.s.header_crc16 = CalcCRC16( CRC16_INIT_VALUE, (u8*)&rh, CALC_CRC16_SIZE ); - - // - if( !(pContext->bMROM) && !(pContext->bNTR) ) // NTRpIvV̂Ƃ͏Ȃ - { - if( !SignRomHeader( &rh ) ) - { - return FALSE; - } - } - else - { - printf( "skip sign\n" ); - } - - // t@CRs - fseek( pContext->ifp, 0, SEEK_END ); - size = ftell( pContext->ifp ); - fseek( pContext->ifp, 0, SEEK_SET ); - fseek( pContext->ofp, 0, SEEK_SET ); - while( size > 0 ) - { - int len = (BUFSIZE < size)?BUFSIZE:size; - - if( len != fread( buf, 1, len, pContext->ifp ) ) - { - printf( "fread failed in a copying file\n" ); - return FALSE; - } - if( len != fwrite( buf, 1, len, pContext->ofp ) ) - { - printf( "fwrite failed in a copying file\n" ); - return FALSE; - } - - size -= len; - } - - // ROMwb_㏑ - fseek( pContext->ofp, 0, SEEK_SET ); - if( sizeof(ROM_Header) != fwrite( &rh, 1, sizeof(ROM_Header), pContext->ofp ) ) - { - printf( "fwrite failed in a copying file\n" ); - return FALSE; - } - - return TRUE; -} - -/*---------------------------------------------------------------------------* - - CRČvZ - - *---------------------------------------------------------------------------*/ - -static u16 crc16_table[16] = { - 0x0000, 0xCC01, 0xD801, 0x1400, - 0xF001, 0x3C00, 0x2800, 0xE401, - 0xA001, 0x6C00, 0x7800, 0xB401, - 0x5000, 0x9C01, 0x8801, 0x4400 -}; - -u16 CalcCRC16(u16 start, u8 *data, int size) -{ - u16 r1; - u16 total = start; - - while (size-- > 0) - { - // 4bit - r1 = crc16_table[total & 0xf]; - total = (total >> 4) & 0x0fff; - total = total ^ r1 ^ crc16_table[*data & 0xf]; - - // 4bit - r1 = crc16_table[total & 0xf]; - total = (total >> 4) & 0x0fff; - total = total ^ r1 ^ crc16_table[(*data >> 4) & 0xf]; - - data++; - } - return total; -} - - -/*---------------------------------------------------------------------------* - - ROMwb_̏ - - *---------------------------------------------------------------------------*/ - -BOOL SignRomHeader( ROM_Header *prh ) -{ - SignatureData signSrc; // ̂ƂƂȂ_CWFXgl - u8 signDst[ RSA_KEY_LENGTH ]; // ̊i[Tmpobt@ - u8 decryptBlock[ RSA_KEY_LENGTH ]; // ubNobt@ - BOOL result; - int pos; - - // ROMwb_̃_CWFXgZo(擪ؖ̈̒O܂łΏ) - ACSign_DigestUnit( - signSrc.digest, - prh, - (u32)&(prh->certificate) - (u32)prh // this->pRomHeader ̓}l[Wq[vɂ̂ŎAhX擾łȂ - ); - -#ifdef KEY_USER - printf( "Signature Key: USER\n" ); -#endif -#ifdef KEY_SYSTEM - printf( "Signature Key: SYSTEM\n" ); -#endif -#ifdef KEY_SECURE - printf( "Signature Key: SECURE\n" ); -#endif -#ifdef KEY_LAUNCHER - printf( "Signature Key: LAUNCHER\n" ); -#endif - - // _CWFXgɏ - result = ACSign_Encrypto( signDst, g_devPrivKey_DER, &signSrc, sizeof(SignatureData) ); - if( !result ) - { - printf( "ACSign_Encrypto encryption failed.\n" ); - return FALSE; - } - - // ă_CWFXgƈv邩xt@C - result = ACSign_Decrypto( decryptBlock, g_devPubKey_DER, signDst, RSA_KEY_LENGTH ); - for( pos=0; pos < RSA_KEY_LENGTH; pos++ ) - { - if( decryptBlock[pos] == 0x0 ) // ubNf[^T[` - break; - } - if( !result || (memcmp( &signSrc, &(decryptBlock[pos+1]), sizeof(SignatureData) ) != 0) ) - { - printf( "Verification a signature failed.\n" ); - return FALSE; - } - - // ROMwb_ɏ㏑ - memcpy( prh->signature, signDst, RSA_KEY_LENGTH ); - - return TRUE; -} // ECSrlResult RCSrl::signRomHeader(void) - - -/*---------------------------------------------------------------------------* - - ROM Speed Type̐ݒ - - *---------------------------------------------------------------------------*/ - -static ROM_LT romSpeedTypeLatencyTable[] = { - {CARD_1TROM_GAME_LATENCY, CARD_1TROM_SECURE_HW_LATENCY, CARD_1TROM_SECURE_SW_LATENCY}, - {CARD_MROM_GAME_LATENCY, CARD_MROM_SECURE_HW_LATENCY, CARD_MROM_SECURE_SW_LATENCY}, -}; - -static void SetRomSpeedByIndex(ROM_Header * header, tRomSpeedType idx) -{ - ROM_LT *l = &romSpeedTypeLatencyTable[idx]; - - header->s.game_cmd_param &= ~CARD_LATENCY_MASK; - header->s.game_cmd_param |= l->game_latency; - header->s.secure_cmd_param &= ~CARD_LATENCY_MASK; - header->s.secure_cmd_param |= l->secure_hw_latency; - header->s.secure_cmd_latency = l->secure_sw_latency; -} - - -// end of file diff --git a/build/tests/FatalErrorChecker/ARM9/Makefile b/build/tests/FatalErrorChecker/ARM9/Makefile deleted file mode 100644 index 12e304a0..00000000 --- a/build/tests/FatalErrorChecker/ARM9/Makefile +++ /dev/null @@ -1,55 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - FatalErrorChecker -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED -TWL_NANDAPP = TRUE - -SUBDIRS = - -SRCS = main.c \ - keypad.c \ - kami_font.c \ - graphics.c \ - font_data.c - -LINCLUDES += $(MISC_DIR)/include - -ROM_SPEC = main.rsf - -TARGET_BIN = menu.srl - -LLIBRARIES += liberrorlog$(TWL_LIBSUFFIX).a - -MAKETAD_OPTION += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe -DEFAULT_MAKEROM_ARM7_BASE = $(TWL_COMPONENTSDIR)/armadillo/$(TWL_BUILDTYPE_ARM7)/armadillo -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - - - -#===== End of Makefile ===== diff --git a/build/tests/FatalErrorChecker/ARM9/main.rsf b/build/tests/FatalErrorChecker/ARM9/main.rsf deleted file mode 100644 index f0fc5c0f..00000000 --- a/build/tests/FatalErrorChecker/ARM9/main.rsf +++ /dev/null @@ -1,245 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - TitleName "FatalChecker" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - MakerCode 01 - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile ./etc/myGameBanner.bnr - BannerFile ../banner/banner.bnr - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping MAP_TS_SCR - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # CommonClientKey: launcher deliver common client Key [TRUE/FALSE] - # - #CommonClientKey FALSE - - # - # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] - # - #HwAESSlotB FALSE - - # - # HwAESSlotC: launcher deliver HW AES slot C setting [TRUE/FALSE] - # - #HwAESSlotC FALSE - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - #NANDAccess FALSE - NANDAccess TRUE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - LockSCFG FALSE - - - ### - #### END -} - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard] - # - Media gamecard - - # - # Data only title : [TRUE/FALSE] - # don't have to edit - #DataOnly FALSE - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode 0G6A - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR - -} diff --git a/build/tests/FatalErrorChecker/ARM9/src/font_data.c b/build/tests/FatalErrorChecker/ARM9/src/font_data.c deleted file mode 100644 index aa1ba501..00000000 --- a/build/tests/FatalErrorChecker/ARM9/src/font_data.c +++ /dev/null @@ -1,734 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: font_data.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include - -/*---------------------- afXN[ ---------------------------*/ - -const u16 BgScDataMain[32 * 24] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -const u16 BgScDataSub[32 * 24] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -/*---------------------- pbgf[^ ---------------------------*/ -#define RGB555(r,g,b) (b<<10|g<<5|r) - -const u16 PlttDataObj[16][16] = { - {RGB555( 0, 0, 0), RGB555(31, 10, 0), RGB555(31, 0, 0), RGB555(5, 5, 20),}, // Black - {RGB555(31, 31, 31), RGB555(31, 0, 0), RGB555(31, 0, 0), RGB555(31, 0, 0),}, // Red - {RGB555(31, 31, 31), RGB555(0, 31, 0), RGB555(0, 31, 0), RGB555(0, 31, 0),}, // Green - {RGB555(31, 31, 31), RGB555(0, 0, 31), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue - {RGB555(31, 31, 31), RGB555(31, 31, 0), RGB555(31, 31, 0), RGB555(31, 31, 0),}, // Yellow - {RGB555(31, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31),}, // Cyan - {RGB555(31, 31, 31), RGB555(31, 0, 31), RGB555(31, 0, 31), RGB555(31, 0, 31),}, // Purple - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White -}; - -// ʃR\[pbg -const u16 PlttDataMain[16][16] = { - {RGB555( 0, 0, 0), RGB555(31, 10, 0), RGB555(0, 0, 0), RGB555(0, 0, 0),}, // Orange - {RGB555(31, 31, 31), RGB555(31, 0, 0), RGB555(31, 0, 0), RGB555(31, 0, 0),}, // Red - {RGB555(31, 31, 31), RGB555(0, 31, 0), RGB555(0, 31, 0), RGB555(0, 31, 0),}, // Green - {RGB555(31, 31, 31), RGB555(0, 0, 31), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue - {RGB555(31, 31, 31), RGB555(31, 31, 0), RGB555(31, 31, 0), RGB555(31, 31, 0),}, // Yellow - {RGB555(31, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31),}, // Cyan - {RGB555(31, 31, 31), RGB555(31, 0, 31), RGB555(31, 0, 31), RGB555(31, 0, 31),}, // Purple - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555( 0, 0, 0), RGB555(0, 0, 0), RGB555(0, 0, 0), RGB555(0, 0, 0),}, // Black -}; - -// ʃR\[pbg -const u16 PlttDataSub[16][16] = { - {RGB555(31, 31, 31), RGB555( 0, 0, 0), RGB555(25, 25, 25), RGB555(31, 31, 31),}, // Black - {RGB555(31, 31, 31), RGB555(21, 0, 0), RGB555(31, 0, 0), RGB555(31, 0, 0),}, // Red - {RGB555(31, 31, 31), RGB555( 0, 21, 0), RGB555(0, 31, 0), RGB555(0, 31, 0),}, // Green - {RGB555(31, 31, 31), RGB555( 0, 0, 21), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue - {RGB555(31, 31, 31), RGB555(21, 21, 0), RGB555(31, 31, 0), RGB555(31, 31, 0),}, // Yellow - {RGB555(31, 31, 31), RGB555(0, 21, 21), RGB555(0, 31, 31), RGB555(0, 31, 31),}, // Cyan - {RGB555(31, 31, 31), RGB555(21, 0, 21), RGB555(31, 0, 31), RGB555(31, 0, 31),}, // Purple - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(20, 20, 20), RGB555(20, 20, 20), RGB555(20, 20, 20),}, // Gray - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - - // wiJ[͂16ԃpbg - // D ނ炳 sN ݂ Ž - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555( 0, 0, 0), RGB555(20, 20, 20), RGB555(31, 15, 31), RGB555(31, 20, 20), RGB555(20, 29, 31), RGB555(20, 31, 20), RGB555(21, 21, 31), RGB555(31, 0, 0), RGB555(31, 31, 10), RGB555(25, 15, 15), RGB555(31, 31, 31), RGB555(31, 31, 31), } // White -}; - -/*---------------------- LN^f[^ -------------------------*/ - -const u32 sampleCharData[8 * 0x100] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0000h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11111111, 0x11111111, // 0001h use for import progress bar - 0x11111111, 0x11111111, 0x00000000, 0x00000000, - 0x00000000, 0x01011010, 0x01010010, 0x00010010, // 0002h - 0x00100010, 0x00100010, 0x00100001, 0x00100001, - 0x00000000, 0x01010001, 0x01010001, 0x01111111, // 0003h - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 0004h - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01010000, 0x01010100, 0x00001010, // 0005h - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011000, 0x01011000, 0x01111111, // 0006h - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01010010, 0x01101111, 0x01010010, // 0007h - 0x00010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x01010010, 0x01011111, 0x00000100, // 0008h - 0x00011111, 0x00001000, 0x00000001, 0x00011110, - 0x00000000, 0x01010000, 0x01011000, 0x00000110, // 0009h - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x01010000, 0x01111101, 0x00010001, // 000ah - 0x00010001, 0x00010001, 0x00010001, 0x00001010, - 0x00000000, 0x01010000, 0x01011110, 0x00100000, // 000bh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010100, 0x01011111, 0x00001000, // 000ch - 0x00010000, 0x00000001, 0x00000001, 0x00011110, - 0x00000000, 0x01010001, 0x01010001, 0x00000001, // 000dh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00011000, // 000eh - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x01010010, 0x01111111, 0x00010010, // 000fh - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00001110, 0x01010100, 0x01010010, // 0010h - 0x00111111, 0x00000100, 0x00000100, 0x00011000, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 0011h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x01010100, 0x01011111, 0x00000010, // 0012h - 0x00011110, 0x00100001, 0x00100000, 0x00011110, - 0x00000000, 0x01010000, 0x01011100, 0x00100011, // 0013h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00010000, // 0014h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x01010010, 0x01010010, 0x00001100, // 0015h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010001, 0x01111101, 0x00010001, // 0016h - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01010100, 0x01010011, 0x01110010, // 0017h - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01011110, 0x01011000, 0x00000100, // 0018h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01010000, 0x01011100, 0x00010010, // 0019h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011101, 0x01010001, 0x00111101, // 001ah - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x01110001, 0x01011101, 0x00110001, // 001bh - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01110100, 0x01010011, 0x00110010, // 001ch - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01101110, 0x01011000, 0x00100100, // 001dh - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01110000, 0x01011100, 0x00110010, // 001eh - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x01010001, 0x00111101, // 001fh - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0020h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 0021h - 0x00001000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x01101100, 0x01001000, 0x00100100, // 0022h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00100100, 0x01111111, 0x00100100, // 0023h - 0x00100100, 0x01111111, 0x00010010, 0x00010010, - 0x00000000, 0x00001000, 0x01111110, 0x00001001, // 0024h - 0x00111110, 0x01001000, 0x00111111, 0x00001000, - 0x00000000, 0x01000010, 0x00100101, 0x00010010, // 0025h - 0x00001000, 0x00100100, 0x01010010, 0x00100001, - 0x00000000, 0x00001110, 0x00010001, 0x00001001, // 0026h - 0x01000110, 0x00101001, 0x00110001, 0x01001110, - 0x00000000, 0x00011000, 0x00010000, 0x00001000, // 0027h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01110000, 0x00001000, 0x00000100, // 0028h - 0x00000100, 0x00000100, 0x00001000, 0x01110000, - 0x00000000, 0x00000111, 0x00001000, 0x00010000, // 0029h - 0x00010000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x00001000, 0x01001001, 0x00101010, // 002ah - 0x00011100, 0x00101010, 0x01001001, 0x00001000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 002bh - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002ch - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002dh - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002eh - 0x00000000, 0x00000000, 0x00000000, 0x00001100, - 0x00000000, 0x01000000, 0x00100000, 0x00010000, // 002fh - 0x00001000, 0x00000100, 0x00000010, 0x00000001, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0030h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00011100, 0x00010000, 0x00010000, // 0031h - 0x00010000, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0032h - 0x00111110, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0033h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00100000, 0x00110000, 0x00101000, // 0034h - 0x00100100, 0x00100010, 0x01111111, 0x00100000, - 0x00000000, 0x01111111, 0x00000001, 0x00111111, // 0035h - 0x01000000, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x00000001, 0x00111111, // 0036h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00100000, 0x00100000, // 0037h - 0x00010000, 0x00010000, 0x00001000, 0x00001000, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0038h - 0x00111110, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0039h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003ah - 0x00000000, 0x00000000, 0x00001100, 0x00000000, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003bh - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x01100000, 0x00011000, 0x00000110, // 003ch - 0x00000001, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00000000, 0x01111111, 0x00000000, // 003dh - 0x00000000, 0x00000000, 0x01111111, 0x00000000, - 0x00000000, 0x00000011, 0x00001100, 0x00110000, // 003eh - 0x01000000, 0x00110000, 0x00001100, 0x00000011, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 003fh - 0x00110000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x00011100, 0x00100010, 0x01001001, // 0040h - 0x01010101, 0x01010101, 0x01010101, 0x00111010, - 0x00000000, 0x00001000, 0x00010100, 0x00010100, // 0041h - 0x00100010, 0x00111110, 0x01000001, 0x01000001, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0042h - 0x00111111, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0043h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x00011111, 0x00100001, 0x01000001, // 0044h - 0x01000001, 0x01000001, 0x00100001, 0x00011111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0045h - 0x01111111, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0046h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0047h - 0x01111001, 0x01000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0048h - 0x01111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x00001000, 0x00001000, // 0049h - 0x00001000, 0x00001000, 0x00001000, 0x00111110, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 004ah - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01100001, 0x00011001, 0x00000101, // 004bh - 0x00000011, 0x00000101, 0x00011001, 0x01100001, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 004ch - 0x00000001, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01000001, 0x01100011, 0x01010101, // 004dh - 0x01001001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x01000001, 0x01000011, 0x01000101, // 004eh - 0x01001001, 0x01010001, 0x01100001, 0x01000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 004fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0050h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 0051h - 0x01000001, 0x01011001, 0x00100010, 0x01011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0052h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x01000001, 0x00000001, // 0053h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00001000, 0x00001000, // 0054h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0055h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01000001, 0x01000001, 0x00100010, // 0056h - 0x00100010, 0x00010100, 0x00010100, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0057h - 0x01001001, 0x01010101, 0x01100011, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0058h - 0x00001000, 0x00010100, 0x00100010, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0059h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01111111, 0x00100000, 0x00010000, // 005ah - 0x00001000, 0x00000100, 0x00000010, 0x01111111, - 0x00000000, 0x01111100, 0x00000100, 0x00000100, // 005bh - 0x00000100, 0x00000100, 0x00000100, 0x01111100, - 0x00000000, 0x00100010, 0x00010100, 0x00111110, // 005ch - 0x00001000, 0x00111110, 0x00001000, 0x00001000, - 0x00000000, 0x00011111, 0x00010000, 0x00010000, // 005dh - 0x00010000, 0x00010000, 0x00010000, 0x00011111, - 0x00000000, 0x00001000, 0x00010100, 0x00100010, // 005eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005fh - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x00010000, 0x00001000, 0x00011000, // 0060h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00011110, 0x00100001, // 0061h - 0x00111110, 0x00100001, 0x00100001, 0x01011110, - 0x00000000, 0x00000001, 0x00000001, 0x00111111, // 0062h - 0x01000001, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00000000, 0x00111100, 0x01000010, // 0063h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000000, 0x01000000, 0x01111110, // 0064h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0065h - 0x01111111, 0x00000001, 0x01000001, 0x00111110, - 0x00000000, 0x00110000, 0x00001000, 0x00001000, // 0066h - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x01111110, 0x01000001, // 0067h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0068h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00001000, 0x00000000, 0x00001000, // 0069h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00100000, 0x00000000, 0x00100000, // 006ah - 0x00100000, 0x00100001, 0x00100001, 0x00011110, - 0x00000000, 0x00000001, 0x00000001, 0x01100001, // 006bh - 0x00011001, 0x00000111, 0x00011001, 0x01100001, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 006ch - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00110111, 0x01001001, // 006dh - 0x01001001, 0x01001001, 0x01001001, 0x01001001, - 0x00000000, 0x00000000, 0x00111111, 0x01000001, // 006eh - 0x01000001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00000000, 0x00011100, 0x00100010, // 006fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00000000, 0x00111101, 0x01000011, // 0070h - 0x01000001, 0x01000011, 0x00111101, 0x00000001, - 0x00000000, 0x00000000, 0x01011110, 0x01100001, // 0071h - 0x01000001, 0x01100001, 0x01011110, 0x01000000, - 0x00000000, 0x00000000, 0x00110001, 0x00001101, // 0072h - 0x00000011, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0073h - 0x00001110, 0x00110000, 0x01000001, 0x00111110, - 0x00000000, 0x00000100, 0x00000100, 0x01111111, // 0074h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0075h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0076h - 0x00100010, 0x00100010, 0x00010100, 0x00001000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0077h - 0x01001001, 0x00101010, 0x00101010, 0x00010100, - 0x00000000, 0x00000000, 0x00100001, 0x00010010, // 0078h - 0x00001100, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0079h - 0x00100010, 0x00011100, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111111, 0x00010000, // 007ah - 0x00001000, 0x00000100, 0x00000010, 0x00111111, - 0x00000000, 0x00001000, 0x00011110, 0x01100100, // 007bh - 0x00011000, 0x00100100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x00011110, 0x00000100, // 007ch - 0x00011110, 0x00110101, 0x00101101, 0x00010010, - 0x00000000, 0x00000000, 0x00000000, 0x00010001, // 007dh - 0x00100001, 0x00100001, 0x00000001, 0x00000010, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007eh - 0x00011110, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007fh - 0x00111110, 0x00010000, 0x00001100, 0x00110010, - 0x00000000, 0x00000000, 0x00000100, 0x00101111, // 0080h - 0x01000100, 0x00011110, 0x00100101, 0x00010110, - 0x00000000, 0x00000000, 0x00001010, 0x00011110, // 0081h - 0x00101011, 0x00100010, 0x00010100, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00011101, // 0082h - 0x00101011, 0x00101001, 0x00011001, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00111000, // 0083h - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00000000, 0x00000000, 0x00011100, // 0084h - 0x00100011, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000110, 0x01001001, 0x00110000, // 0085h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000100, 0x00111111, 0x00000100, // 0086h - 0x00111110, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000000, 0x00100001, 0x01000001, // 0087h - 0x01000001, 0x01000001, 0x00000001, 0x00000010, - 0x00000000, 0x00111100, 0x00000000, 0x00111110, // 0088h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00011100, 0x00000000, 0x00111110, // 0089h - 0x00010000, 0x00001000, 0x00010100, 0x01100010, - 0x00000000, 0x00100100, 0x01011111, 0x00000100, // 008ah - 0x00111110, 0x01000101, 0x01000101, 0x00100010, - 0x00000000, 0x00100010, 0x01001111, 0x01010010, // 008bh - 0x01010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x00000100, 0x00111110, 0x00001000, // 008ch - 0x00111110, 0x00010000, 0x00000010, 0x00111100, - 0x00000000, 0x00100000, 0x00011000, 0x00000110, // 008dh - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x00100000, 0x01111101, 0x00100001, // 008eh - 0x00100001, 0x00100001, 0x00100001, 0x00010010, - 0x00000000, 0x00011110, 0x00100000, 0x00000000, // 008fh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00001000, 0x01111111, 0x00010000, // 0090h - 0x00100000, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0091h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00010000, 0x01111111, 0x00011000, // 0092h - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 0093h - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x00111100, 0x00010000, 0x00001100, // 0094h - 0x01111111, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000100, 0x00011111, 0x00000100, // 0095h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00001000, 0x01111111, 0x00000100, // 0096h - 0x00111100, 0x01000010, 0x01000000, 0x00111100, - 0x00000000, 0x00000000, 0x00011100, 0x00100011, // 0097h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01111111, 0x00010000, 0x00001000, // 0098h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000010, 0x00110010, 0x00001100, // 0099h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00100100, 0x01001111, 0x01000010, // 009ah - 0x00010001, 0x00111100, 0x00010010, 0x00001100, - 0x00000000, 0x00000010, 0x01111010, 0x01000010, // 009bh - 0x00000010, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00100010, 0x00111110, 0x01010010, // 009ch - 0x01001011, 0x01101101, 0x01010101, 0x00110010, - 0x00000000, 0x00110010, 0x01001011, 0x01000110, // 009dh - 0x01000110, 0x01110010, 0x01001011, 0x00110010, - 0x00000000, 0x00011100, 0x00101010, 0x01001001, // 009eh - 0x01001001, 0x01000101, 0x01000101, 0x00110010, - 0x00000000, 0x00100001, 0x01111101, 0x00100001, // 009fh - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00000100, 0x00100011, 0x01100010, // 00a0h - 0x00100001, 0x00100001, 0x00010010, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a1h - 0x00000000, 0x00000100, 0x00001010, 0x00000100, - 0x00000000, 0x01110000, 0x00010000, 0x00010000, // 00a2h - 0x00010000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a3h - 0x00001000, 0x00001000, 0x00001000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a4h - 0x00000000, 0x00000010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00011000, // 00a5h - 0x00011000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x01111111, // 00a6h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00111111, 0x00100000, // 00a7h - 0x00010100, 0x00001100, 0x00000100, 0x00000010, - 0x00000000, 0x00000000, 0x00100000, 0x00100000, // 00a8h - 0x00010000, 0x00001111, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000100, 0x00111111, // 00a9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00aah - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00000000, 0x00010000, 0x00111111, // 00abh - 0x00011000, 0x00010100, 0x00010010, 0x00011001, - 0x00000000, 0x00000000, 0x00000010, 0x00111111, // 00ach - 0x00100010, 0x00010010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00adh - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00aeh - 0x00111110, 0x00100000, 0x00100000, 0x00111110, - 0x00000000, 0x00000000, 0x00100101, 0x00101010, // 00afh - 0x00101010, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00b0h - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x00101000, // 00b1h - 0x00011000, 0x00001000, 0x00001000, 0x00000100, - 0x00000000, 0x01000000, 0x00100000, 0x00011000, // 00b2h - 0x00010111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00001000, 0x01111111, 0x01000001, // 00b3h - 0x01000001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000000, 0x00111110, 0x00001000, // 00b4h - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00100000, 0x01111111, 0x00110000, // 00b5h - 0x00101000, 0x00100100, 0x00100010, 0x00110001, - 0x00000000, 0x00000100, 0x01111111, 0x01000100, // 00b6h - 0x01000100, 0x01000100, 0x01000010, 0x00100001, - 0x00000000, 0x00000100, 0x00111111, 0x00001000, // 00b7h - 0x01111111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x01111100, 0x01000100, 0x01000100, // 00b8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000010, 0x01111110, 0x00100010, // 00b9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00bah - 0x01000000, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 00bbh - 0x00100010, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000011, 0x00000100, 0x01000011, // 00bch - 0x01000100, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x01111111, 0x01000000, 0x00100000, // 00bdh - 0x00010000, 0x00011000, 0x00100100, 0x01000011, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00beh - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x01000001, 0x01000010, 0x01000000, // 00bfh - 0x00100000, 0x00100000, 0x00011000, 0x00000110, - 0x00000000, 0x01111110, 0x01000010, 0x01001110, // 00c0h - 0x01110001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x01100000, 0x00011110, 0x00010000, // 00c1h - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01000101, 0x01001010, 0x01001010, // 00c2h - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00c3h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000010, 0x00000010, 0x00000110, // 00c4h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x00010000, 0x00010000, 0x01111111, // 00c5h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111110, 0x00000000, // 00c6h - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000100, // 00c7h - 0x00101000, 0x00010000, 0x00101000, 0x01000110, - 0x00000000, 0x00001000, 0x01111111, 0x00100000, // 00c8h - 0x00010000, 0x00011100, 0x01101011, 0x00001000, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 00c9h - 0x00100000, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x00010010, 0x00100010, 0x00100010, // 00cah - 0x01000010, 0x01000010, 0x01000001, 0x01000001, - 0x00000000, 0x00000001, 0x00000001, 0x01111111, // 00cbh - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cch - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000100, 0x00001010, // 00cdh - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x01111111, // 00ceh - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cfh - 0x00100010, 0x00010100, 0x00001000, 0x00010000, - 0x00000000, 0x00001110, 0x01110000, 0x00001110, // 00d0h - 0x01110000, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00001000, 0x00001000, 0x00000100, // 00d1h - 0x00000100, 0x00100010, 0x01000010, 0x01111111, - 0x00000000, 0x01000000, 0x01000000, 0x00100100, // 00d2h - 0x00101000, 0x00010000, 0x00101100, 0x01000011, - 0x00000000, 0x01111111, 0x00000100, 0x01111111, // 00d3h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00d4h - 0x00100010, 0x00010100, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00d5h - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00d6h - 0x01111110, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00d7h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00d8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00001010, 0x00001010, 0x00001010, // 00d9h - 0x01001010, 0x01001010, 0x00101010, 0x00011001, - 0x00000000, 0x00000010, 0x00000010, 0x01000010, // 00dah - 0x01000010, 0x00100010, 0x00010010, 0x00001110, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dbh - 0x01000001, 0x01000001, 0x01000001, 0x01111111, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dch - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000011, 0x01000100, 0x01000000, // 00ddh - 0x01000000, 0x00100000, 0x00010000, 0x00001111, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00deh 0 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00dfh 1 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00011110, 0x00001000, 0x00000100, // 00e0h 2 - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x00000000, 0x00001100, 0x00010010, // 00e1h 3 - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x00100001, 0x01111101, // 00e2h 4 - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00111100, 0x00010000, 0x00111100, // 00e3h 5 - 0x00010000, 0x00011100, 0x00110010, 0x00001100, - 0x00000000, 0x00001110, 0x00101000, 0x00101000, // 00e4h 6 - 0x00111110, 0x01100101, 0x00100101, 0x00010010, - 0x00000000, 0x00000100, 0x00101111, 0x01000100, // 00e5h 7 - 0x00000110, 0x01000101, 0x01000101, 0x00111110, - 0x00000000, 0x00100010, 0x00100010, 0x00111110, // 00e6h 8 - 0x01010010, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000100, 0x00011111, 0x00000010, // 00e7h 9 - 0x00011111, 0x01000010, 0x01000010, 0x00111100, - 0x00000000, 0x00010010, 0x00111110, 0x01010011, // 00e8h 10 - 0x01000010, 0x00100100, 0x00000100, 0x00000100, - 0x00000000, 0x00001000, 0x00111101, 0x01001011, // 00e9h 11 - 0x01001001, 0x01001001, 0x00111000, 0x00000100, - 0x00000000, 0x00001000, 0x00111000, 0x00001000, // 00eah 12 - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00011000, 0x00100000, 0x00000100, // 00ebh 13 - 0x00111010, 0x01000110, 0x01000000, 0x00111000, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00ech 14 - 0x01000110, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00edh 15 - 0x01000011, 0x01001100, 0x01010010, 0x00111100, - 0x00000000, 0x00100010, 0x00110011, 0x00101010, // 00eeh 16 - 0x00100110, 0x00100010, 0x00100011, 0x01000010, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00efh 17 - 0x01000011, 0x01000000, 0x01000010, 0x00111100, - 0x00000000, 0x00000010, 0x00111011, 0x01000110, // 00f0h 18 - 0x01000010, 0x01000011, 0x01000010, 0x00110010, - 0x00000000, 0x00000100, 0x00000100, 0x00000010, // 00f1h 19 - 0x01000110, 0x01000101, 0x01000101, 0x00111001, - 0x00000000, 0x01010100, 0x01111111, 0x00100100, // 00f2h 20 - 0x00100100, 0x00100100, 0x00100010, 0x00010001, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 00f3h 21 - 0x00111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01011110, 0x01100010, 0x00100010, // 00f4h 22 - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010010, 0x01111110, 0x00100010, // 00f5h 23 - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - - 0x33330000, - 0x33330000, - 0x33000000, - 0x33000000, // 00f6h - 0x33000000, - 0x33000000, - 0x33330000, - 0x33330000, - - - 0x00020000, // 00f7h - 0x00020000, - 0x00020000, - 0x22222222, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - - 0x00000000, // 00f8h - 0x00000000, - 0x00000000, - 0x00000000, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - - 0x11111111, // 00f9h - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - - 0x11111111, // 00fah - 0x11111111, - 0x11111111, - 0x11111111, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - - 0x00000000, // 00fbh - 0x00000000, - 0x00000000, - 0x22222222, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - - 0x00020000, // 00fch - 0x00020000, - 0x00020000, - 0x22222222, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - - 0x00020000, // 00fdh - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - - 0x00000000, // 00feh - 0x00000000, - 0x00000000, - 0x22222222, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - - 0x00020000, - 0x00220000, - 0x02122222, - 0x21111112, - 0x21111112, - 0x02122222, - 0x00220000, - 0x00020000, - - - -/* - 0x00022222, - 0x00002112, - 0x00021112, - 0x00211122, - 0x02111202, - 0x21112000, - 0x02120000, - 0x00200000, -*/ - -/* - 0x00000000, 0x01011110, 0x01010000, 0x00111111, // 00ffh - 0x00001000, 0x00001000, 0x00001000, 0x00000110 -*/ -}; - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/FatalErrorChecker/ARM9/src/graphics.c b/build/tests/FatalErrorChecker/ARM9/src/graphics.c deleted file mode 100644 index 1de138e9..00000000 --- a/build/tests/FatalErrorChecker/ARM9/src/graphics.c +++ /dev/null @@ -1,160 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: praphics.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -//#include -#include -#include "kami_font.h" -#include "graphics.h" - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: InitGraphics - - Description: \̏ - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void -InitGraphics(void) -{ - GX_DispOff(); - GXS_DispOff(); - - //---- VRAM NA - GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); - MI_CpuClearFast((void *)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE); - - //---- OAMƃpbgNA - MI_CpuFillFast((void *)HW_OAM, 192, HW_OAM_SIZE); - MI_CpuClearFast((void *)HW_PLTT, HW_PLTT_SIZE); - MI_CpuFillFast((void *)HW_DB_OAM, 192, HW_DB_OAM_SIZE); - MI_CpuClearFast((void *)HW_DB_PLTT, HW_DB_PLTT_SIZE); - - //---- naioN̐ݒ - GX_SetBankForOBJ(GX_VRAM_OBJ_128_A); - GX_SetBankForSubOBJ(GX_VRAM_SUB_OBJ_128_D); - - //---- afoN̐ݒ - GX_SetBankForBG(GX_VRAM_BG_128_B); - GX_SetBankForSubBG(GX_VRAM_SUB_BG_128_C); - - //---- \[hݒ - GX_SetGraphicsMode (GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_3D); - GX_SetVisiblePlane (GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_OBJ); - GXS_SetVisiblePlane(GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_OBJ); - - //---- 3D - G3X_Init(); - G3X_InitMtxStack(); - G2_SetBG0Priority(0); - G3X_AlphaTest(FALSE, 0); - G3X_AntiAlias(TRUE); - G3X_EdgeMarking(FALSE); - G3X_SetFog(FALSE, (GXFogBlend)0, (GXFogSlope)0, 0); - G3X_SetClearColor(0, 0, 0x7fff, 63, FALSE); - G3_ViewPort(0, 0, 255, 191); - G3_MtxMode(GX_MTXMODE_POSITION_VECTOR); - - //---- 32KoCgOBJ2D}bv[hŎgp - GX_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_2D); - - // XN[ItZbgyуLN^[ItZbg̐ݒ - GX_SetBGScrOffset(GX_BGSCROFFSET_0x00000); - GX_SetBGCharOffset(GX_BGCHAROFFSET_0x10000); - - G2_SetBG1Control( - GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0x0000 , - GX_BG_CHARBASE_0x00000, - GX_BG_EXTPLTT_01 - ); - - G2S_SetBG0Control( - GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0x0000 , - GX_BG_CHARBASE_0x04000, - GX_BG_EXTPLTT_01 - ); - - G2S_SetBG1Control( - GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0x2000 , - GX_BG_CHARBASE_0x04000, - GX_BG_EXTPLTT_01 - ); - - G2_BG1Mosaic(FALSE); - G2S_BG1Mosaic(FALSE); - - //---- f[^[h - GX_LoadOBJ ( sampleCharData, 0, sizeof(sampleCharData)); - GX_LoadBG1Char( sampleCharData, 0, sizeof(sampleCharData)); - GX_LoadBGPltt ( PlttDataMain, 0, sizeof(PlttDataMain)); - GX_LoadBG1Scr ( BgScDataMain, 0, sizeof(BgScDataMain)); - GX_LoadOBJPltt( PlttDataObj, 0, sizeof(PlttDataObj)); - - GXS_LoadOBJ ( sampleCharData, 0, sizeof(sampleCharData)); - GXS_LoadBG0Char( sampleCharData, 0, sizeof(sampleCharData)); - GXS_LoadBGPltt ( PlttDataSub, 0, sizeof(PlttDataSub)); - GXS_LoadBG0Scr ( BgScDataSub, 0, sizeof(BgScDataSub)); - GXS_LoadOBJPltt( PlttDataObj, 0, sizeof(PlttDataObj)); - - GX_DispOn(); - GXS_DispOn(); -} - -/*---------------------------------------------------------------------------* - Name: DrawLine - - Description: Op|SŐ` - - Arguments: sx - `悷̊Jn_̂W - sy - `悷̊Jn_̂W - ex - `悷̏I_̂W - ey - `悷̏I_̂W - color - `悷̐F - - Returns: None. - *---------------------------------------------------------------------------*/ -void -DrawLine(s16 sx, s16 sy, s16 ex, s16 ey, GXRgb color) -{ - fx16 fsx = (fx16)(((sx - 128) * 0x1000) / 128); - fx16 fsy = (fx16)(((96 - sy) * 0x1000) / 96); - fx16 fex = (fx16)(((ex - 128) * 0x1000) / 128); - fx16 fey = (fx16)(((96 - ey) * 0x1000) / 96); - - G3_Begin(GX_BEGIN_TRIANGLES); - { - G3_Color( color ); - G3_Vtx(fsx, fsy, 0); - G3_Color( color ); - G3_Vtx(fex, fey, 0); - G3_Color( color ); - G3_Vtx(fsx, fsy, 1); - } - G3_End(); -} diff --git a/build/tests/FatalErrorChecker/ARM9/src/graphics.h b/build/tests/FatalErrorChecker/ARM9/src/graphics.h deleted file mode 100644 index ddd8c4f6..00000000 --- a/build/tests/FatalErrorChecker/ARM9/src/graphics.h +++ /dev/null @@ -1,46 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: graphics.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef GRAPHICS_H_ -#define GRAPHICS_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -void InitGraphics(void); -void DrawLine(s16 sx, s16 sy, s16 ex, s16 ey, GXRgb color); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* GRAPHICS_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/FatalErrorChecker/ARM9/src/kami_font.c b/build/tests/FatalErrorChecker/ARM9/src/kami_font.c deleted file mode 100644 index fb3818b6..00000000 --- a/build/tests/FatalErrorChecker/ARM9/src/kami_font.c +++ /dev/null @@ -1,407 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_font.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "kami_font.h" - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define SCREEN_DATA_COLOR_PLTT_SHIFT 12 -#define NUM_OF_PRINT_TARGET 2 - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static u8 sXPos; -static u8 sYPos; - -static u32 sBackColorCharData[24*8]; - -static u16 sFontScreenDataMain[32 * 24] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,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 u16 sFontScreenDataSub[24*32] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,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 u16 sBackColorScreenData[32 * 24] = { - 0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de, - 0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df, - 0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0, - 0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1, - 0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2, - 0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3, - 0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4, - 0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5, - 0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6, - 0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7, - 0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8, - 0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9, - 0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea, - 0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb, - 0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec, - 0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed, - 0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee, - 0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef, - 0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0, - 0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1, - 0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2, - 0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3, - 0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4, - 0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5, -}; - -/*---------------------------------------------------------------------------* - ֐錾 - *---------------------------------------------------------------------------*/ - -static void kamiFontReturnConsole( void ); - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: - - Description: - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontInit(void) -{ - // wipLN^f[^ - MI_CpuCopy32( &sampleCharData[8 * 0xde], sBackColorCharData, sizeof(sBackColorCharData) ); - - // wipXN[f[^Zbg - DC_FlushRange ( sBackColorScreenData, sizeof(sBackColorScreenData) ); - GXS_LoadBG1Scr ( sBackColorScreenData, 0, sizeof(sBackColorScreenData) ); -} - -/*---------------------------------------------------------------------------* - Name: - - Description: - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontLoadScreenData(void) -{ - DC_FlushRange ( sFontScreenDataMain, sizeof(sFontScreenDataMain) ); - GX_LoadBG0Scr ( sFontScreenDataMain, 0, sizeof(sFontScreenDataMain) ); - - DC_FlushRange ( sFontScreenDataSub, sizeof(sFontScreenDataSub) ); - GXS_LoadBG0Scr ( sFontScreenDataSub, 0, sizeof(sFontScreenDataSub) ); - - // wiLN^f[^ - DC_FlushRange( sBackColorCharData, sizeof(sBackColorCharData) ); - GXS_LoadBG0Char( sBackColorCharData, 0xde*32, sizeof(sBackColorCharData) ); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontClear - - Description: zXN[NA - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontClear(void) -{ - MI_CpuClear8( sFontScreenDataSub, sizeof(sFontScreenDataSub) ); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontClearMain - - Description: zXN[NA - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontClearMain(void) -{ - MI_CpuClear8( sFontScreenDataMain, sizeof(sFontScreenDataMain) ); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintf - - Description: zXN[ɕzuB32܂ŁB - - Arguments: x - ̐擪zu x W( ~ 8 hbg )B - y - ̐擪zu y W( ~ 8 hbg )B - color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintf(s16 x, s16 y, u8 color, char *text, ...) -{ - va_list vlist; - char temp[32 + 2]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - *(u16 *)(&temp[32]) = 0x0000; - for (i = 0;temp[i] != 0x00; i++) - { - sFontScreenDataSub[((y * 32) + x + i) % (24 * 32)] = - (u16)((color << SCREEN_DATA_COLOR_PLTT_SHIFT) | temp[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintf - - Description: zXN[ɕzuB32܂ŁB - - Arguments: x - ̐擪zu x W( ~ 8 hbg )B - y - ̐擪zu y W( ~ 8 hbg )B - color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintfMain(s16 x, s16 y, u8 color, char *text, ...) -{ - va_list vlist; - char temp[32 + 2]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - *(u16 *)(&temp[32]) = 0x0000; - for (i = 0;temp[i] != 0x00; i++) - { - sFontScreenDataMain[((y * 32) + x + i) % (24 * 32)] = - (u16)((color << SCREEN_DATA_COLOR_PLTT_SHIFT) | temp[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontFillChar - - Description: zXN[ - - Arguments: x - ̐擪zu x W( ~ 8 hbg )B - y - ̐擪zu y W( ~ 8 hbg )B - color - ̐FpbgԍŎwB - value - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontFillChar(int lineNo, u8 color1, u8 color2) -{ - s32 i; - u32 line; - int charNo = 0xde + lineNo; - - if (color1 < 0x10) - { - line = (u32)(0x11111111 * color1); - - for (i = 0;i<4; i++) - { - sBackColorCharData[8 * lineNo + i] = line; - } - } - - if (color2 < 0x10) - { - line = (u32)(0x11111111 * color2); - - for (i = 4;i<8; i++) - { - sBackColorCharData[8 * lineNo + i] = line; - } - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintfConsole - - Description: zR\[ɕzuB256܂ŁB - - Arguments: color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintfConsole(u8 color, const char *text, ...) -{ - va_list vlist; - char temp[256 + 2]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 256, text, vlist); - va_end(vlist); - - // I[lj - *(u16 *)(&temp[256]) = 0x0000; - - for(i=0; temp[i] != 0x00; i++) - { - if (temp[i] == 0x0A) - { - // sR[h - kamiFontReturnConsole(); - } - else - { - // ꕶ - sFontScreenDataMain[((sYPos * 32) + sXPos) % (24 * 32)] = - (u16)((color << SCREEN_DATA_COLOR_PLTT_SHIFT) | temp[i]); - - // XWE[ɓBꍇ͉s - if (++sXPos >= 32) - { - kamiFontReturnConsole(); - } - } - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintfConsoleEx - - Description: zR\[ɕzuB256܂ŁB - OS_Printf‚łɎsB - - Arguments: color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintfConsoleEx(u8 color, const char *text, ...) -{ - va_list vlist; - char temp[256 + 2]; - - va_start(vlist, text); - (void)vsnprintf(temp, 256, text, vlist); - va_end(vlist); - - kamiFontPrintfConsole(color, temp); - OS_TPrintf(temp); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontReturnConsole - - Description: zR\[ɂss - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -kamiFontReturnConsole( void ) -{ - sXPos = 0; - if (sYPos < 23) - { - // ̍s - sYPos++; - } - else - { - // ɍŏIsɓBĂꍇVtgs - MI_CpuCopy32( &sFontScreenDataMain[32], sFontScreenDataMain, sizeof(u16)*32*23 ); - MI_CpuClear32( &sFontScreenDataMain[32*23], sizeof(u16)*32); - } -} - diff --git a/build/tests/FatalErrorChecker/ARM9/src/kami_font.h b/build/tests/FatalErrorChecker/ARM9/src/kami_font.h deleted file mode 100644 index d9855fd0..00000000 --- a/build/tests/FatalErrorChecker/ARM9/src/kami_font.h +++ /dev/null @@ -1,95 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_font.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef KAMI_FONT_H_ -#define KAMI_FONT_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -extern u8 prog_state; -enum -{ STATE_NONE, STATE_SELECT, STATE_KS_PARENTINIT, STATE_KS_PARENT, STATE_KS_CHILDINIT, - STATE_KS_CHILDSCAN, STATE_KS_CHILD -}; -extern OSHeapHandle heapHandle; // Heapnh; - -extern const u16 BgScDataMain[32 * 24]; -extern const u16 BgScDataSub[32 * 24]; -extern const u32 sampleCharData[8 * 0x100]; -extern const u16 PlttDataObj[16][16]; -extern const u16 PlttDataMain[16][16]; -extern const u16 PlttDataSub[16][16]; - -void kamiFontInit(void); -void kamiFontClear(void); -void kamiFontClearMain(void); -void kamiFontPut(u16 x, u16 y, u16 color, u16 no); -void kamiFontPrintf(s16 x, s16 y, u8 color, char *text, ...); -void kamiFontPrintfMain(s16 x, s16 y, u8 color, char *text, ...); -void kamiFontFill(s16 x, s16 y, u8 color, s16 value, s32 length); -void kamiFontFillChar(int lineNo, u8 color1, u8 color2); -void kamiFontLoadScreenData(void); -void kamiFontPrintfConsole(u8 color, const char *text, ...); -void kamiFontPrintfConsoleEx(u8 color, const char *text, ...); - -// ʃR\[ppbg -#define CONSOLE_ORANGE 0 -#define CONSOLE_RED 1 -#define CONSOLE_GREEN 2 - -// ʃtHgppbg -#define FONT_COLOR_BLACK 0 -#define FONT_COLOR_RED 1 -#define FONT_COLOR_GREEN 2 -#define FONT_COLOR_BLUE 3 -#define FONT_COLOR_YELLOW 4 -#define FONT_COLOR_CYAN 5 -#define FONT_COLOR_PURPLE 6 - -// ʔwippbg -#define BG_COLOR_TRANS 0 -#define BG_COLOR_WHITE 1 -#define BG_COLOR_BLACK 2 -#define BG_COLOR_GRAY 3 -#define BG_COLOR_PURPLE 4 -#define BG_COLOR_PINK 5 -#define BG_COLOR_BLUE 6 -#define BG_COLOR_GREEN 7 -#define BG_COLOR_VIOLET 8 -#define BG_COLOR_RED 9 -#define BG_COLOR_YELLOW 10 -#define BG_COLOR_BROWN 11 - -#define BG_COLOR_NONE 0xff - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* KAMI_FONT_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/FatalErrorChecker/ARM9/src/keypad.c b/build/tests/FatalErrorChecker/ARM9/src/keypad.c deleted file mode 100644 index 155c4bc2..00000000 --- a/build/tests/FatalErrorChecker/ARM9/src/keypad.c +++ /dev/null @@ -1,85 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: keypad.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "keypad.h" - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define KEY_REPEAT_TRIGGER_START 20 -#define KEY_REPEAT_TRIGGER_TERM 5 - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static u16 Cont; -static u16 Trg; -static u16 Release; -static u16 RepeatTrg; -static u8 key = 60; - -static int repeat_counter; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -void -kamiPadRead(void) -{ - u16 ReadData; - - ReadData = PAD_Read(); - Trg = (u16)(ReadData & (ReadData ^ Cont)); - Release = (u16)(Cont & (ReadData ^ Cont)); - Cont = ReadData; - - RepeatTrg = Trg; - if (++repeat_counter > (KEY_REPEAT_TRIGGER_START + KEY_REPEAT_TRIGGER_TERM)) - { - repeat_counter = KEY_REPEAT_TRIGGER_START; - } - if (repeat_counter == KEY_REPEAT_TRIGGER_START) - { - RepeatTrg = ReadData; - } - if (!ReadData) - { - repeat_counter = 0; - } -} - -BOOL -kamiPadIsTrigger(u16 key) -{ - return (Trg & key)? TRUE : FALSE; -} - -BOOL -kamiPadIsRepeatTrigger(u16 key) -{ - return (RepeatTrg & key)? TRUE : FALSE; -} - -BOOL -kamiPadIsPress(u16 key) -{ - return (Cont & key)? TRUE : FALSE; -} - diff --git a/build/tests/FatalErrorChecker/ARM9/src/keypad.h b/build/tests/FatalErrorChecker/ARM9/src/keypad.h deleted file mode 100644 index 2f5a1602..00000000 --- a/build/tests/FatalErrorChecker/ARM9/src/keypad.h +++ /dev/null @@ -1,48 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: keypad.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef KAMI_KEY_PAD_H_ -#define KAMI_KEY_PAD_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -void kamiPadRead(void); -BOOL kamiPadIsTrigger(u16 key); -BOOL kamiPadIsRepeatTrigger(u16 key); -BOOL kamiPadIsPress(u16 key); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* KAMI_KEY_PAD_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/FatalErrorChecker/ARM9/src/main.c b/build/tests/FatalErrorChecker/ARM9/src/main.c deleted file mode 100644 index df65d888..00000000 --- a/build/tests/FatalErrorChecker/ARM9/src/main.c +++ /dev/null @@ -1,652 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - Tests - FatalErrorChecker - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "kami_font.h" -#include "graphics.h" -#include "keypad.h" - -#define BUFSIZE 256 - -#define FATAL_ERROR_MAX 51 -#define NUM_ENTRY_PER_PAGE 5 -#define NUM_LINE_PER_ENTRY 4 -#define SKIP_SPAN 5 -#define FOOTER_Y 22 - -#define ASK_LINE_OFFSET 9 -#define RESULT_LINE_OFFSET 13 - -#define SCREEN_WIDTH 32 - -#define DST_LOGFILE_PATH "sdmc:/sysmenu.log" -#define ERRORLOG_LOGFILE_PATH "nand:/sys/log/sysmenu.log" - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ -static char *s_strError[ FATAL_ERROR_MAX ]; -static BOOL nowEntryView; -static BOOL nowAskingCopy; -static BOOL nowAskingDelete; -static BOOL resetConsoleFlag; -static int drawIndex = 0; -static int numEntry; -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void VBlankIntr(void); -static void InitAllocation(void); -static void drawErrorLog( void ); -static BOOL deleteLogfile(); -static void control(); -static void removeLC( char *dst, const char *src ); -static void drawMessage( void ); -static void kamiFontPrintfWrap( s16 x, s16 y, u8 color, char *fmt, ... ); -static s16 kamiFontPrintfWrapSub( s16 x, s16 y, u8 color, char *str ); -static BOOL copyLogToSD( void ); -int convertLF( char *dst, char *src ); -static void drawMenu( void ); -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: main - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void -TwlMain() -{ - char tst[] = "\n\n\n\n\na"; - - OS_Init(); - OS_InitArena(); - PXI_Init(); - OS_InitLock(); - OS_InitArenaEx(); - OS_InitIrqTable(); - OS_SetIrqStackChecker(); - MI_Init(); - OSi_InitVramExclusive(); - OS_InitThread(); - OS_InitReset(); - GX_Init(); - - - // VuN荞ݐݒ - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)OS_EnableIrqMask(OS_IE_FIFO_RECV); - (void)OS_EnableIrq(); - (void)GX_VBlankIntr(TRUE); - - // initialize file-system - FS_Init(FS_DMA_NOT_USE); - - // FS_Iniť̕ǂ͗l - InitAllocation(); - - // \֘A - InitGraphics(); - kamiFontInit(); - - /* always preload FS table for faster directory access. */ - { - u32 need_size = FS_GetTableSize(); - void *p_table = OS_Alloc(need_size); - SDK_ASSERT(p_table != NULL); - (void)FS_LoadTable(p_table, need_size); - } - - ERRORLOG_Init( OS_AllocFromMain, OS_FreeToMain ); - - numEntry = ERRORLOG_GetNum(); - nowEntryView = FALSE; - nowAskingCopy = FALSE; - nowAskingDelete = FALSE; - resetConsoleFlag = TRUE; - - while (1) - { - static i = 0 ; - kamiPadRead(); - - // VuN҂ - OS_WaitVBlankIntr(); - - // tHgXN[f[^[h - kamiFontLoadScreenData(); - - if( resetConsoleFlag ) - { - drawMenu(); - resetConsoleFlag = FALSE; - } - - // 쌟oƕ` - control(); - - if( nowEntryView ) - { - drawMessage(); - } - else - { - drawErrorLog(); - } - - } - -} - -static void drawMessage( void ) -{ - char titlebuf[5]; - const ErrorLogEntry *entry = ERRORLOG_Read( drawIndex ); - kamiFontClear(); - - if( entry->isBroken ) - { - kamiFontPrintf( 0, 0 , FONT_COLOR_BLACK, "%02d: Broken Entry", drawIndex); - - kamiFontPrintfWrap( 0, 2, FONT_COLOR_BLACK, "%s\n" ,entry->errorStr ); - - } - else if( entry->isLauncherError ) - { - STD_CopyLStringZeroFill( titlebuf, (char*)&entry->titleId, 5); - - kamiFontPrintf( 0, 0, FONT_COLOR_BLACK, "%02d: RED %02d/%02d/%02d %02d:%02d:%02d" , - drawIndex , entry->year, entry->month, entry->day, - entry->hour, entry->minute, entry->second ); - - kamiFontPrintf( 0, 1, FONT_COLOR_BLACK, "titleID: %s errorCode: %d", - titlebuf, entry->errorCode ); - - kamiFontPrintfWrap( 0, 3, FONT_COLOR_BLACK, s_strError[entry->errorCode] ); - - } - else{ - STD_CopyLStringZeroFill( titlebuf, (char*)&entry->titleId, 5); - - kamiFontPrintf( 0, 0 , FONT_COLOR_BLACK, "%02d: FFT %02d/%02d/%02d %02d:%02d:%02d" , - drawIndex , entry->year, entry->month, entry->day, - entry->hour, entry->minute, entry->second ); - - kamiFontPrintf( 0, 1, FONT_COLOR_BLACK, "titleID: %s", titlebuf ); - - kamiFontPrintfWrap( 0, 3, FONT_COLOR_BLACK, entry->errorStr ); - - } - -} - -static void drawErrorLog( void ) -{ - char titlebuf[5]; - s16 i; - - kamiFontClear(); - - for( i = 0; i < NUM_ENTRY_PER_PAGE && i+drawIndex < numEntry ; i++ ) - { - u8 color = (i == 0) ? (u8)FONT_COLOR_BLUE : (u8)FONT_COLOR_BLACK; - s16 posY = (s16)(i * NUM_LINE_PER_ENTRY); - const ErrorLogEntry *entry = ERRORLOG_Read( i + drawIndex ); - char drawBuf[256 + 1]; - - if( entry->isBroken ) - { -// kamiFontPrintf( 0, posY , color, "%02d: Broken Entry", i + drawIndex); - kamiFontPrintf( 0, posY , color, "%02d: Broken Entry", i + drawIndex); - - // s菜Ă\ - removeLC( drawBuf, entry->errorStr ); - kamiFontPrintf( 0, (s16)( posY + 1), color, drawBuf ); - - } - else if( entry->isLauncherError ) - { - STD_CopyLStringZeroFill( titlebuf, (char*)&entry->titleId, 5); - - kamiFontPrintf( 0, posY , color, "%02d: RED %02d/%02d/%02d %02d:%02d:%02d" , - i + drawIndex , entry->year, entry->month, entry->day, - entry->hour, entry->minute, entry->second ); - - kamiFontPrintf( 0, (s16)( posY + 1), color, "titleID: %s errorCode: %d", - titlebuf, entry->errorCode ); - - kamiFontPrintf( 0, (s16)( posY + 2), color, s_strError[entry->errorCode] ); - } - else{ - STD_CopyLStringZeroFill( titlebuf, (char*)&entry->titleId, 5); - - kamiFontPrintf( 0, posY , color, "%02d: FFT %02d/%02d/%02d %02d:%02d:%02d" , - i + drawIndex , entry->year, entry->month, entry->day, - entry->hour, entry->minute, entry->second ); - - kamiFontPrintf( 0, (s16)( posY + 1), color, "titleID: %s", titlebuf ); - - // s菜Ă\ - removeLC( drawBuf, entry->errorStr ); - kamiFontPrintf( 0, (s16)( posY + 2), color, drawBuf ); - - } - } - - kamiFontPrintf( 0, FOOTER_Y , FONT_COLOR_BLACK, "numEntry : %d", numEntry ); -} - -static void control() -{ - if( nowAskingCopy ) - { - // {ɂ́HĕĂŒ - if( kamiPadIsTrigger( PAD_BUTTON_A )) - { - BOOL result; - kamiFontPrintfMain( 0, ASK_LINE_OFFSET+2, CONSOLE_ORANGE, "now copying..."); - result = copyLogToSD(); - nowAskingCopy = FALSE; - } - - if( kamiPadIsTrigger( PAD_BUTTON_B )) - { - drawMenu(); - nowAskingCopy = FALSE; - } - - return; - } - - if( nowAskingDelete ) - { - // {ɂ́HĕĂŒ - if( kamiPadIsTrigger( PAD_BUTTON_A )) - { - BOOL result; - kamiFontPrintfMain( 0, ASK_LINE_OFFSET+2, CONSOLE_ORANGE, "now deleting..."); - result = deleteLogfile(); - nowAskingDelete = FALSE; - } - - if( kamiPadIsTrigger( PAD_BUTTON_B )) - { - drawMenu(); - nowAskingDelete = FALSE; - } - - return; - } - - if( kamiPadIsTrigger( PAD_KEY_UP ) ) - { - drawIndex--; - } - else if( kamiPadIsTrigger( PAD_KEY_DOWN ) ) - { - drawIndex++; - } - - if( kamiPadIsTrigger( PAD_KEY_LEFT ) ) - { - drawIndex -= SKIP_SPAN; - } - else if( kamiPadIsTrigger( PAD_KEY_RIGHT ) ) - { - drawIndex += SKIP_SPAN; - } - - if( kamiPadIsTrigger( PAD_BUTTON_A ) ) - { - if( 0 < numEntry ) - { - nowEntryView = !nowEntryView ; - } - } - else if( kamiPadIsTrigger( PAD_BUTTON_X ) ) - { - drawMenu(); - kamiFontPrintfMain( 0, ASK_LINE_OFFSET, CONSOLE_ORANGE, "Copy Logfile to SD. OK ?"); - kamiFontPrintfMain( 0, ASK_LINE_OFFSET + 1, CONSOLE_ORANGE, "A: Decide B: Cancel"); - - nowAskingCopy = TRUE; - } - else if ( kamiPadIsTrigger( PAD_BUTTON_Y ) ) - { - drawMenu(); - kamiFontPrintfMain( 0, ASK_LINE_OFFSET, CONSOLE_ORANGE, "Delete Logfile From NAND. OK ?"); - kamiFontPrintfMain( 0, ASK_LINE_OFFSET + 1, CONSOLE_ORANGE, "A: Decide B: Cancel"); - - nowAskingDelete = TRUE; - } - - // ̌ʁA`CfNX͂ݏoC - drawIndex = numEntry-1 < drawIndex ? numEntry-1 : drawIndex ; - drawIndex = drawIndex < 0 ? 0: drawIndex; -} - -// srcs菜dstɈn -static void removeLC( char *dst, const char *src ) -{ - char *idx; - STD_StrCpy( dst, src ); - - while( ( idx = STD_StrChr( dst, '\n' )) != NULL ) - { - *idx = ' '; - } -} - - -static void kamiFontPrintfWrap( s16 x, s16 y, u8 color, char *fmt, ... ) -{ - va_list vlist; - char temp[BUFSIZE + 1]; - char *head, *tail; - - va_start(vlist, fmt); - (void)vsnprintf(temp, BUFSIZE+1, fmt, vlist); - va_end(vlist); - - head = temp; - - // I[lj - temp[BUFSIZE] = '\0'; - - // OctokIȎĉsʁXɏo͂ - tail = STD_StrChr( temp, '\n' ); - while( tail != NULL ) - { - *tail = '\0'; - y += kamiFontPrintfWrapSub( x, y, color, head ); - head = tail+1; - tail = STD_StrChr( head, '\n' ); - } - - kamiFontPrintfWrapSub( x, y, color, head ); -} - -// \”\Ŏ܂Ԃ -// Ԃl͕`ɗps -static s16 kamiFontPrintfWrapSub( s16 x, s16 y, u8 color, char *str ) -{ - char *head = str; - char buf[SCREEN_WIDTH+1]; - s16 linecount = 0; - int length; - - while( SCREEN_WIDTH <= ( length = STD_StrLen( head )) ) - { - STD_StrLCpy( buf, head, SCREEN_WIDTH+1 ); - kamiFontPrintf( x, (s16)(y + linecount++), color, buf ); - head += SCREEN_WIDTH; - } - - kamiFontPrintf( x, (s16)(y + linecount++), color, head ); - - return linecount; - -} - - -static BOOL deleteLogfile( void ) -{ - - if( !FS_DeleteFile( ERRORLOG_LOGFILE_PATH ) ) - { - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Delete Failed!") ; - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+1, CONSOLE_ORANGE, "func: FS_DeleteFile" ); - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+2, CONSOLE_ORANGE, - "errorCode : %d", FS_GetArchiveResultCode( ERRORLOG_LOGFILE_PATH ) ); - - return FALSE; - } - - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Delete Succeeded!") ; - return TRUE; -} - -static BOOL copyLogToSD( void ) -{ - FSFile src, dst; - // ňœǂݍ񂾃TCY̔{̕ɂȂ”\ - char buf[BUFSIZE + 1]; - char winbuf[BUFSIZE*2 +1]; - s32 readSize; - s32 writeSize = 0; - - buf[256] = '\0'; - FS_InitFile( &dst ); - - // ܂t@C폜 - FS_DeleteFile( DST_LOGFILE_PATH ); - - if( ! FS_CreateFile( DST_LOGFILE_PATH, FS_PERMIT_R | FS_PERMIT_W ) ) - { - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Copy Failed!") ; - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+1, CONSOLE_ORANGE, "func: FS_CreateFile" ); - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+2, CONSOLE_ORANGE, "errorCode : %d", FS_GetArchiveResultCode( DST_LOGFILE_PATH ) ); - return FALSE; - } - - // t@C쐬ɐ - if( !FS_OpenFileEx( &dst , DST_LOGFILE_PATH, FS_FILEMODE_RW )) - { - // 쐬t@CopenłȂꍇ - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Copy Failed!") ; - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+1, CONSOLE_ORANGE, "func: FS_OpenFile / FS_SetFileLength" ); - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+2, CONSOLE_ORANGE, "errorCode : %d", FS_GetArchiveResultCode( DST_LOGFILE_PATH ) ); - return FALSE; - } - - // TCYύXIAÔ߃t@CTCYύXs‚RWL[hŊJȂĂ - // t@CTCY•ϒɕύX - FS_CloseFile( &dst ); - - if( !FS_OpenFileEx( &dst, DST_LOGFILE_PATH, FS_FILEMODE_RW ) ) - { - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Copy Failed!") ; - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+1, CONSOLE_ORANGE, "func: FS_OpenFile dst" ); - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+2, CONSOLE_ORANGE, "errorCode : %d", FS_GetArchiveResultCode( DST_LOGFILE_PATH ) ); - return FALSE; - } - - if( !FS_OpenFileEx( &src, ERRORLOG_LOGFILE_PATH, FS_FILEMODE_R ) ) - { - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Copy Failed!") ; - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+1, CONSOLE_ORANGE, "func: FS_OpenFile src" ); - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+2, CONSOLE_ORANGE, "errorCode : %d", FS_GetArchiveResultCode( DST_LOGFILE_PATH ) ); - } - - if( !FS_SeekFileToBegin( &src )) - { - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Copy Failed!") ; - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+1, CONSOLE_ORANGE, "func: FS_SeekFileToBegin" ); - return FALSE; - } - - while( ( readSize = FS_ReadFile( &src, buf, 256 )) > 0 ) - { - int size; - size = convertLF( winbuf, buf ); - - if( FS_WriteFile( &dst, winbuf, size ) < 0 ) - { - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Copy Failed!") ; - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+1, CONSOLE_ORANGE, "func: FS_WriteFile" ); - return FALSE; - } - - } - - - if( !FS_CloseFile( &src )) - { - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Copy Failed!") ; - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+1, CONSOLE_ORANGE, "func: FS_CloseFile(src)" ); - } - - - if( !FS_CloseFile( &dst )) - { - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Copy Failed!") ; - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+1, CONSOLE_ORANGE, "func: FS_CloseFile(dst)" ); - } - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Copy Succeeded!") ; - - return TRUE; - -} - -static void drawMenu( void ) -{ - int line = 0; - - kamiFontClearMain(); - kamiFontPrintfMain( 0, (s16)(line++), CONSOLE_ORANGE, "How to"); - kamiFontPrintfMain( 0, (s16)(line++), CONSOLE_ORANGE, "+-----------------------------+"); - kamiFontPrintfMain( 0, (s16)(line++), CONSOLE_ORANGE, "l U/D Key : Scroll Line l"); - kamiFontPrintfMain( 0, (s16)(line++), CONSOLE_ORANGE, "l L/R Key : Scroll Page l"); - kamiFontPrintfMain( 0, (s16)(line++), CONSOLE_ORANGE, "l A Button : Switch View Mode l"); - kamiFontPrintfMain( 0, (s16)(line++), CONSOLE_ORANGE, "l X Button : Copy to SDCard l"); - kamiFontPrintfMain( 0, (s16)(line++), CONSOLE_ORANGE, "l Y Button : Delete Logfile l"); - kamiFontPrintfMain( 0, (s16)(line++), CONSOLE_ORANGE, "+-----------------------------+"); -} - -// LFLFCRɒuď߂ -// dst͍ňsrc̓{̗̈悪Kv -int convertLF( char *dst, char *src ) -{ - char *head = src, *tail; - int writesize = 0; - - tail = STD_StrChr( src, '\n' ); - - while( tail != NULL ) - { - *tail = '\0'; - writesize += STD_StrLCpy( &dst[writesize], head,BUFSIZE ); - dst[writesize] = 0x0d; - dst[writesize+1] = 0x0a; - writesize += 2; - - head = tail + 1; - tail = STD_StrChr( head, '\n' ); - } - - writesize += STD_StrLCpy( &dst[writesize], head, BUFSIZE ); - - return writesize; -} - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - - Description: VBlank荞ݏ - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -VBlankIntr(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); // checking VBlank interrupt -} - -/*---------------------------------------------------------------------------* - Name: InitAllocation - - Description: q[v̏. - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void InitAllocation(void) -{ - void *tmp; - OSHeapHandle hh; - - /* A[ȉ */ - tmp = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetArenaLo(OS_ARENA_MAIN, tmp); - hh = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - if (hh < 0) - OS_Panic("ARM9: Fail to create heap...\n"); - hh = OS_SetCurrentHeap(OS_ARENA_MAIN, hh); -} - - - -static char *s_strError[ FATAL_ERROR_MAX ] = { - "UNDEFINED", - "NAND", - "HWINFO_NORMAL", - "HWINFO_SECURE", - "TWLSETTINGS", - "SHARED_FONT", - "WLANFIRM_AUTH", - "WLANFIRM_LOAD", - "TITLE_LOAD_FAILED", - "TITLE_POINTER_ERROR", - "AUTHENTICATE_FAILED", - "ENTRY_ADDRESS_ERROR", - "TITLE_BOOTTYPE_ERROR", - "SIGN_DECRYPTION_FAILED", - "SIGN_COMPARE_FAILED", - "HEADER_HASH_CALC_FAILED", - "TITLEID_COMPARE_FAILED", - "VALID_SIGN_FLAG_OFF", - "CHECK_TITLE_LAUNCH_RIGHTS_FAILED", - "MODULE_HASH_CHECK_FAILED", - "MODULE_HASH_CALC_FAILED", - "MEDIA_CHECK_FAILED", - "DL_MAGICCODE_CHECK_FAILED", - "DL_SIGN_DECRYPTION_FAILED", - "DL_HASH_CALC_FAILED", - "DL_SIGN_COMPARE_FAILED", - "WHITELIST_INITDB_FAILED", - "WHITELIST_NOTFOUND", - "DHT_PHASE1_FAILED", - "DHT_PHASE2_FAILED", - "LANDING_TMP_JUMP_FLAG_OFF", - "TWL_BOOTTYPE_UNKNOWN", - "NTR_BOOTTYPE_UNKNOWN", - "PLATFORM_UNKNOWN", - "LOAD_UNFINISHED", - "LOAD_OPENFILE_FAILED", - "LOAD_MEMALLOC_FAILED", - "LOAD_SEEKFILE_FAILED", - "LOAD_READHEADER_FAILED", - "LOAD_LOGOCRC_ERROR = 39", - "LOAD_READDLSIGN_FAILED", - "LOAD_RELOCATEINFO_FAILED", - "LOAD_READMODULE_FAILED", - "NINTENDO_LOGO_CHECK_FAILED", - "SYSMENU_VERSION", - "DHT_PHASE1_CALC_FAILED", - "LOAD_UNKNOWN_BOOTTYPE", - "LOAD_AUTH_HEADER_FAILED", - "LOAD_NEVER_STARTED", - "EJECT_CARD_AFTER_LOAD_START", - "TITLEID_COMPARE_FAILED_NTR" -}; diff --git a/build/tests/FatalErrorChecker/Makefile b/build/tests/FatalErrorChecker/Makefile deleted file mode 100644 index 35985393..00000000 --- a/build/tests/FatalErrorChecker/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - - #---------------------------------------------------------------------------- - -SUBDIRS = banner ARM9 - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/FatalErrorChecker/banner/Makefile b/build/tests/FatalErrorChecker/banner/Makefile deleted file mode 100644 index e373c033..00000000 --- a/build/tests/FatalErrorChecker/banner/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/gameIcon.bmp -BANNER_SPEC = banner_v3.bsf - -TARGETS = banner.bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) -BANNER_ICON_MIDDLE = $(addprefix $(BANNER_ICON_NAME), .nbfs .nbfc .nbfp) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_MIDDLE) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) $(BANNER_ICON_MIDDLE) - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/FatalErrorChecker/banner/banner_v3.bsf b/build/tests/FatalErrorChecker/banner/banner_v3.bsf deleted file mode 100644 index 3690eee110a693f8c032463a8489f820239838bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 900 zcmc(eK~KU!5QX1W6aT{|oW&Ru4jdsZN(?a+xGxn$W2vMRiGN=GW|tqpUNoCbc4pp8 z-^| AX#fBK diff --git a/build/tests/FatalErrorChecker/banner/icon/gameIcon.bmp b/build/tests/FatalErrorChecker/banner/icon/gameIcon.bmp deleted file mode 100644 index 1a32e5af89e7bc8f752f7c3abeb21f56bb6f547e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmbu5%MAiC3`7H>07~FU9o%VW&nYbhL~=ux%o{r^u@|HjUVk#{PbPl7w`)t;@K5Zq z?9y(Wj&eW1-Wu9^uYl)>^)|*J5veUgCyY -#include -#include "misc.h" -#include "fatalErrorMaker.h" - -#define NORMAL_INFO_PATH "nand:/sys/HWINFO_N.dat" -#define SECURE_INFO_PATH "nand:/sys/HWINFO_S.dat" -#define SHARED_FONT_PATH "nand:/sys/TWLFontTable.dat" -#define WIRELESS_TITLEID 0x0003000F484E4341 - -#define NOR_BUFSIZE 128 -#define NOR_SETTING_ADDRESS_OFFSET 0x20 -#define NOR_NANDFLAG_NEGATIVE_OFFSET ( 0x1fe00 - 0x1f380 ) -#define NOR_NANDFLAG_MASK 0x10 - -#define SELECT_MESSAGE "select data for breaking." -#define SUCCESS_MESSAGE "breaking data succeeded." -#define FAIL_MESSAGE "breaking data failed." -#define ALREADY_MESSAGE "this data is broken already." - -#define MENU_LINES 5 -#define INFORMATION_LEFT 20 -#define INFORMATION_UP 150 -#define SELECTION_LEFT 40 -#define RESULT_LEFT 190 -#define SELECTION_UP 30 -#define ALLOW_LEFT 25 -#define LINE_OFFSET 20 -#define HEADER_LEFT 5 -#define HEADER_UP 0 - -typedef enum FatalErrorTarget { - BREAK_HW_NORMAL = 0, - BREAK_HW_SECURE = 1, - BREAK_FONT = 2, - BREAK_WIRELESS = 3, - BREAK_NAND = 4 -} FatalErrorTarget; - - -typedef enum ControlResult { - CONTROL_RESULT_INITIAL = 0, - CONTROL_RESULT_SUCCESS = 1, - CONTROL_RESULT_FAILED = 2, - CONTROL_RESULT_ALREADY = 3, - CONTROL_RESULT_MOVE = 4, - CONTROL_RESULT_NONE = -1 -} ControlResult; - -ControlResult control( int *line, u8 *flag ); -void draw( int select, int result, int flag ); -BOOL breakNAND( void ); -BOOL breakData( FatalErrorTarget tgt ); -static void DumpBinary(u32 offset, void* data, u32 size); -void setParity( u8 *data ); - -static char* s_strInfo[4]; -static char* s_strMenu[ MENU_LINES ]; -static char* s_strFilePath[ MENU_LINES ]; - -void fatalMakerMain( void ) -{ - static int selectLine = 0; - static u8 brokenFlag = 0; // 0: NORMAL, 1: SECURE, 2: FONT, 3: WL, 4: NAND - ControlResult result ; - - result = control( &selectLine, &brokenFlag ); // ͂ĂŏԂXV - - // ʂ̕` - draw( selectLine, result , brokenFlag ); -} - -void draw( int select, int result, int flag ) -{ - static int lastBreakData; - static int lastStatus = CONTROL_RESULT_INITIAL; - int i; - - // 炩̌蓮삪ꍇlastBreakDataXV - if( result != CONTROL_RESULT_NONE && result != CONTROL_RESULT_MOVE ) - { - lastBreakData = select; - lastStatus = result; - } - - // 삪Ƃ̓LpXNA - if( result != CONTROL_RESULT_NONE ) - { - NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); - } - - // ڂ̗ - for( i = 0; i < MENU_LINES; i++ ) - { - if( i == select ) - { - PrintfSJIS( SELECTION_LEFT, SELECTION_UP + (i * LINE_OFFSET), TXT_COLOR_GREEN, s_strMenu[i] ); - } - else - { - PrintfSJIS( SELECTION_LEFT, SELECTION_UP + (i * LINE_OFFSET), TXT_COLOR_BLACK, s_strMenu[i] ); - } - - // j󂵂ǂ̕\ - if( flag & (1 << i) ) - { - PrintfSJIS( RESULT_LEFT, SELECTION_UP + (i * LINE_OFFSET), TXT_COLOR_RED, "BROKEN" ); - } - } - - PrintfSJIS( HEADER_LEFT, HEADER_UP, TXT_COLOR_RED, "Fatal Error Maker" ); - PrintfSJIS( INFORMATION_LEFT, INFORMATION_UP, TXT_COLOR_BLACK, s_strInfo[ lastStatus ] ); - PrintfSJIS( ALLOW_LEFT, SELECTION_UP + (select * LINE_OFFSET), TXT_COLOR_BLACK, "" ); - -} - -ControlResult control( int *line, u8 *flag ) -{ - BOOL controlFlag = FALSE; // 炩̑삪ǂ - - if( pad.trg & PAD_KEY_UP ) - { - controlFlag = TRUE; - - // fNgă}CiXɂȂ烋[v - if( --*line < 0 ) - { - *line = MENU_LINES-1; - } - } - else if( pad.trg & PAD_KEY_DOWN ) - { - controlFlag = TRUE; - - // CNgmax𒴂烋[v - if( MENU_LINES <= ++*line ) - { - *line = 0; - } - } - - if( pad.trg & PAD_BUTTON_A ) - { - controlFlag = TRUE; - - // Iڂj󂷂 - if( *flag & (1 << *line) ) - { - // tOĂɔjς݂Ȃ̂ʼnȂ - return CONTROL_RESULT_ALREADY; - } - - // f[^ۂɔj󂷂 - if( ! breakData( (FatalErrorTarget)*line ) ) - { - // jɎs - return CONTROL_RESULT_FAILED; - } - - // j󐬌 - *flag |= 1 << *line ; - return CONTROL_RESULT_SUCCESS; - } - - // ɉj󂵂Ȃ - return controlFlag ? CONTROL_RESULT_MOVE : CONTROL_RESULT_NONE; -} - -BOOL breakData( FatalErrorTarget tgt ) -{ - switch( tgt ) - { - case BREAK_FONT: - case BREAK_HW_NORMAL: - case BREAK_HW_SECURE: - case BREAK_WIRELESS: - // SharedFont, NormalInfo, SecureInfoɂ‚Ă͊YpX߂ō폜Ă܂ - if( ! FS_DeleteFile( s_strFilePath[tgt] ) ) - { - OS_TPrintf( "FS_DeleteFile Error. file: %s err: %d\n" , - s_strFilePath[tgt], FS_GetArchiveResultCode( s_strFilePath[tgt] ) ); - - return FALSE; - } - - OS_TPrintf( "delete file succeeded. : %s\n", s_strFilePath[tgt] ); - return TRUE; - - case BREAK_NAND: - return breakNAND() ; - } - - // illegal argument - return FALSE; -} - -BOOL breakNAND( void ) -{ - static u8 buf[NOR_BUFSIZE] ; - u32 settingAddress; - NVRAMResult result; - - - // ܂IPLwb_{̐ݒ̂ItZbg擾 - - // LbVj - DC_InvalidateRange( buf, NOR_BUFSIZE); - result = NVRAMi_Read( NOR_SETTING_ADDRESS_OFFSET , NOR_BUFSIZE, buf ); - - if( result != NVRAM_RESULT_SUCCESS ) - { - // readɎs - OS_TPrintf( "nvram_read() failed. errorcode: %d\n", result ); - return FALSE; - } - - OS_TPrintf("reading address... %x %x \n", buf[0], buf[1] ); - - // i[Ăl8{ݒAhX̊JnAhX - settingAddress = ( (u32)(buf[1]) << 8 | (u32)buf[0]) * 8 ; - OS_TPrintf("settingAddress : %x\n", settingAddress ); - - DC_InvalidateRange( buf, NOR_BUFSIZE); - result = NVRAMi_Read( settingAddress - NOR_NANDFLAG_NEGATIVE_OFFSET , NOR_BUFSIZE, buf ); - - if( result != NVRAM_RESULT_SUCCESS ) - { - // readɎs - OS_TPrintf( "nvram_read() failed. errorcode: %d\n", result ); - return FALSE; - } - - DumpBinary( settingAddress - NOR_NANDFLAG_NEGATIVE_OFFSET , buf, NOR_BUFSIZE ); - - OS_TPrintf(" now flag : %x\n", buf[NOR_BUFSIZE-1] ); - buf[ NOR_BUFSIZE - 1 ] |= NOR_NANDFLAG_MASK; - setParity( &buf[NOR_BUFSIZE-1] ); - OS_TPrintf(" now flag : %x\n", buf[NOR_BUFSIZE-1] ); - - // LbV߂āAꂩnvramɏ - DC_StoreRange(buf, sizeof(buf)); - result = NVRAMi_Write( settingAddress - NOR_NANDFLAG_NEGATIVE_OFFSET , NOR_BUFSIZE, buf ); - - // ǂݒ - DC_InvalidateRange( buf, NOR_BUFSIZE); - result = NVRAMi_Verify( settingAddress - NOR_NANDFLAG_NEGATIVE_OFFSET , NOR_BUFSIZE, buf ); - - if( result != NVRAM_RESULT_SUCCESS ) - { - // writeɎs - OS_TPrintf( "nvram_verify() failed. errorcode: %d\n", result ); - return FALSE; - } - - // ݐ - return TRUE; -} - -void fatalMakerInit( void ) -{ - static char filePath[NAM_PATH_LEN+1]; - - GX_DispOff(); - GXS_DispOff(); - NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); - GXS_SetVisiblePlane( GX_PLANEMASK_BG0 ); - GX_DispOn(); - GXS_DispOn(); - - // t@[̃pX擾 - NAM_GetTitleBootContentPath( filePath , WIRELESS_TITLEID); // - s_strFilePath[ BREAK_WIRELESS ] = filePath; - OS_TPrintf( "wireless path : %s\n", filePath ); -} - -static char* s_strInfo[] = { - SELECT_MESSAGE, - SUCCESS_MESSAGE, - FAIL_MESSAGE, - ALREADY_MESSAGE -}; - -static char* s_strMenu[] = { - "HW Normal Info", - "HW Secure Info", - "Shared Font", - "Wireless Firmware", - "NAND" -}; - -static char* s_strFilePath[] = { - NORMAL_INFO_PATH, - SECURE_INFO_PATH, - SHARED_FONT_PATH, - NULL, // t@[̃pX͂ƂNAMoRœ - NULL -}; - - -/*---------------------------------------------------------------------------* - Name: DumpBinary - Description: oCif[^ 16 i\LŃ_vo͂B - Arguments: offset - 擪AhXwB - data - _v\f[^ւ̃|C^B - size - _v\f[^ʂoCgPʂŎwB - Returns: None. - *---------------------------------------------------------------------------*/ -static void -DumpBinary(u32 offset, void* data, u32 size) -{ -#pragma unused(data) - s32 i; - - if (size > 0) - { - if ((offset % 16) != 0) - { - OS_TPrintf("%08x:", (u32)(offset & ~0xf)); - for (i = 0; i < (offset % 16); i ++) - { - OS_TPrintf(" "); - if ((i % 16) == 7) - { - OS_TPrintf(" -"); - } - } - } - for (i = 0; i < size; i ++) - { - if (((offset + i) % 16) == 0) - { - OS_TPrintf("%08x:", offset + i); - } - OS_TPrintf(" %02x", ((u8*)data)[i]); - if (((offset + i) % 16) == 7) - { - OS_TPrintf(" -"); - } - else if (((offset + i) % 16) == 15) - { - OS_TPrintf("\n"); - } - } - if (((offset + i - 1) % 16) != 15) - { - OS_TPrintf("\n"); - } - } -} - -void setParity( u8 *data ) -{ - u8 i, parity; - - parity = 1; /* ʏƋti1‚0ɂȂj*/ - for( i=0; i<7; i++) { /* 0-7iŏʃrbgparityj */ - parity += ((*data >> i) & 0x01); - } - /* peBrbg㏑ */ - *data &= (u8)(~(0x80)); - *data |= ((parity << 7) & 0x80); -} \ No newline at end of file diff --git a/build/tests/FatalErrorMaker/ARM9/src/fatalErrorMaker.h b/build/tests/FatalErrorMaker/ARM9/src/fatalErrorMaker.h deleted file mode 100644 index 5ac04b27..00000000 --- a/build/tests/FatalErrorMaker/ARM9/src/fatalErrorMaker.h +++ /dev/null @@ -1,34 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - FatalErrorMaker - File: fatalErrorMaker.h - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __FATAL_ERROR_MAKE__ -#define __FATAL_ERROR_MAKE__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -void fatalMakerMain( void ); -void fatalMakerInit( void ); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/build/tests/FatalErrorMaker/ARM9/src/main.c b/build/tests/FatalErrorMaker/ARM9/src/main.c deleted file mode 100644 index c3b8f043..00000000 --- a/build/tests/FatalErrorMaker/ARM9/src/main.c +++ /dev/null @@ -1,101 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: main.c - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include - - -#include "misc.h" -#include "fatalErrorMaker.h" - -///////////////////////////// - -void VBlankHandler( void ); - -///////////////////////////// - - -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: main - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ - - - -void TwlMain( void ) -{ - - OS_Init(); - OS_InitTick(); - OS_TPrintf("Initialize begin\n"); - - //---- interrupt setting - OS_EnableIrq(); - OS_EnableInterrupts(); - - GX_Init(); - - OS_SetIrqFunction( OS_IE_V_BLANK, VBlankHandler ); - OS_EnableIrqMask( OS_IE_V_BLANK ); - GX_VBlankIntr( TRUE ); - - OS_TPrintf("RTC Initilize...\n"); - RTC_Init(); - - OS_TPrintf("Allocator Initialize...\n"); - InitAllocator(); - - - InitBG(); - OS_TPrintf("Initialize Finished\n"); - - NVRAMi_Init(); - FS_Init( FS_DMA_NOT_USE ); - CRYPTO_SetAllocator( Alloc, Free ); - NAM_Init( Alloc, Free ); - - - fatalMakerInit(); - OS_TPrintf("begin mainloop\n"); - - - // C[v - while( 1 ) - { - OS_WaitIrq(1, OS_IE_V_BLANK); // VuN荞ݑ҂ - - ReadKeyPad(); // L[͂̎擾 - - fatalMakerMain(); // r[AXV - } - - OS_Terminate(); - -} - - -void VBlankHandler(void) -{ - OS_SetIrqCheckFlag( OS_IE_V_BLANK ); // VuN`FbÑZbg -} diff --git a/build/tests/FatalErrorMaker/Makefile b/build/tests/FatalErrorMaker/Makefile deleted file mode 100644 index 66754bca..00000000 --- a/build/tests/FatalErrorMaker/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS = banner ARM9 - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/FatalErrorMaker/about.txt b/build/tests/FatalErrorMaker/about.txt deleted file mode 100644 index c58fb52b..00000000 --- a/build/tests/FatalErrorMaker/about.txt +++ /dev/null @@ -1,22 +0,0 @@ -FatalErrorMaker - -NANDAt@[ALtHgAm[}HWAZLAHW -j󂵁AӐ}IFatal ErrorNeXgłB -Nƃj[\̂ŁAj󂵂ڂɃJ[\킹A{^ĂB -LtHgȊO͎NɊmFatal ErrorNƍl̂ŁA -NAND Initializerpł邱ƂmFŎsق悢Ǝv܂B - -@ƂẮANANDȊO̊ef[^͂ꂼ̃t@CFS_DeleteFile()ō폜邱ƂŁA -NANDɊւĂNORtbVɂNAND FATALG[tO(IPL/docs/tbV}bv_NOR.xlsQ) -Ă邱ƂŊYڂ̔jĂ܂B - - -j󂵂Ăt@C͋̓IɈȉ̒ʂłB - -LtHgFnand:/sys/TWLFontTable.dat -m[}Fnand:/sys/HWINFO_N.dat -ZLAFnand:/sys/HWINFO_S.dat - -܂At@[ɊւĂ̓RecƂtitletH_ȉɔzuĂ̂ŁA -NAMCu𗘗păpX擾Ă폜ɂĂ܂B - diff --git a/build/tests/FatalErrorMaker/banner/Makefile b/build/tests/FatalErrorMaker/banner/Makefile deleted file mode 100644 index 960abdc6..00000000 --- a/build/tests/FatalErrorMaker/banner/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = -SUBMAKES = \ - Makefile.012A Makefile.0G4A - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/FatalErrorMaker/banner/Makefile.012A b/build/tests/FatalErrorMaker/banner/Makefile.012A deleted file mode 100644 index cc294ddc..00000000 --- a/build/tests/FatalErrorMaker/banner/Makefile.012A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 012A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/FatalErrorMaker/banner/Makefile.0G4A b/build/tests/FatalErrorMaker/banner/Makefile.0G4A deleted file mode 100644 index 53a0164b..00000000 --- a/build/tests/FatalErrorMaker/banner/Makefile.0G4A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0G4A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/FatalErrorMaker/banner/banner.bnr b/build/tests/FatalErrorMaker/banner/banner.bnr deleted file mode 100644 index 7faf2304ca1487fca26bc606bb91cd27e800c539..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9152 zcmeI2Pf7zZ6vn?Y7w`aq9>QKg&Fn>z0}NFts0h`CV4*wj;mx}5!iAs{&eXsStnI&m#_J>`#P+FMN?|G?2M>K-5F5VwLs%; z=n}JrM4wg{h=?A$HkneZ9n7r*8znlGgJWQfRe{B(7%x`K`|0Fi?VjC>dvot@<4!Qc z1*W*fDdy~5;RY4Xsa4b~T+?>PHpgx2{u;Vb>(~9){@3qc&p$o?_woHV^!K;sF9ISU z0wN#+BG8{eYKmYV2A|%`hUO>*VJdu JBY@xklTX&bd>sG) diff --git a/build/tests/FatalErrorMaker/banner/banner012A_v3.bsf b/build/tests/FatalErrorMaker/banner/banner012A_v3.bsf deleted file mode 100644 index eaf83c8d4dd4ad3339cb1b6754509c403df4a4f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 824 zcmc(cy$ZrG6ot=fz;_6Ac5rcUR9b&f5v#M*s#w%2ZN;}&zt+A$Gbkb9o|}7;FE{U( zr-4ERvg%aBq9dh@gEF$A?nE(BphOp9Bd@OgI)1a3w_2@rf+8n6)-+aEJ;)T~cF#@NYaB=Z5E8gzF6 diff --git a/build/tests/FatalErrorMaker/banner/banner0G4A_v3.bsf b/build/tests/FatalErrorMaker/banner/banner0G4A_v3.bsf deleted file mode 100644 index 248fcb42c4a03579b9f31a895c49d364fa4eddfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 792 zcmc(c%L>9U6hvohz9P`I3pXxYDvb|R#Ohk&3yWH%t@!uqY3&bWqlAV#H<{*4@_t3? zE0L2`yB-$pl`#&==_a~U?WmkmU8s$sX7AVWo4GpGYNZnt1=X>kvAXI(r=+)q&guzw ziY`$ZI<4m&PR~j~x7xerUyd9dbv0G|w^T+GE!0yB8V{N0j$=4;-S}qcGsL+zq^RCy h4{5A$Lf>J)buA)v;j&`1MMRpm`!P`r#at7tJ*O*U4&8 zcsd#}gYmJ&uF*cv@%<~d9Tj*nTW6h)L5`9F~O}H@z=Nnwa)TNQ{GKzecX=Gj4 z-XI+e8CMltmwb({9JZG_BRAL$f89{eoD=-kWaa9SSrYL&vLUwZ9$!X$N1k;I-EYPy BkNE%q diff --git a/build/tests/FatalErrorMaker/banner/icon/012A.bmp b/build/tests/FatalErrorMaker/banner/icon/012A.bmp deleted file mode 100644 index 8fb6cafb33638fba6207dc00d9979ddc4970f397..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmbV|%MHRn3`7@10hGXzI=ItL&Rbdvu;hj;nKyO_$_;SVj%UZ8NgmJTJjxd09lvdU z8W*yoT@P@M!5MS*i%5#kv92pb))|?~a2{O|>_>BR%ZTvw>U7K^Ex4Bniq8*k7GdEY z#Zz0=TokUpq69%br@$Y9Zr6s4?0sxUV4a>XKHxXKDb0j82BMY;8($hUiWK#j}_HTRY_o}MpkV!o)JLboBOUt28>Q(fOy#VQ}yqpkc? rhWcv3I1S*E_rbN7bk>&|sQr=(r};lxY;AO6)x&x4t>)^#;~yk9whz4; diff --git a/build/tests/FatalErrorMaker/banner/icon/gameIcon.bmp b/build/tests/FatalErrorMaker/banner/icon/gameIcon.bmp deleted file mode 100644 index 876eca5ba7f3b6743090775ac5fa180c1fa2f566..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmd6ju?+$-3`GrM07jr>i<3}N(vg}it|gn$u?AN&0}?B+L3p;4Q=q#JU;fYk`p!xA z;W)0vYJ~S-SFw@}>bthp=A5f4B7V3Fk`F&UCwV_^G7M*M0atJbFHj^btVn-4g#@V# zPz*>T_a3#JX3Z;Uzdq)ebn0Xzs%8IghWpod(H~3ZkIc$g2ps~_mFVd_GU@0ox0I&Y V+lt*seW?$0Y}>D2^X3+;;{$QOqip~H diff --git a/build/tests/FileRecoveryTest/Makefile b/build/tests/FileRecoveryTest/Makefile deleted file mode 100644 index c06e7830..00000000 --- a/build/tests/FileRecoveryTest/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - FileRecoveryTest -# File: Makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev:$ -# $Author:$ -#---------------------------------------------------------------------------- -SUBDIRS = $(TWL_IPL_RED_ROOT)/build/libraries_sysmenu/util/ - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -#---------------------------------------------------------------------------- - -TARGET_BIN = main.srl - -SRCS = main.c - -LLIBRARIES += libsysmutil$(TWL_LIBSUFFIX).a - -ROM_SPEC = main.rsf - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/FileRecoveryTest/main.rsf b/build/tests/FileRecoveryTest/main.rsf deleted file mode 100644 index 30b63f3e..00000000 --- a/build/tests/FileRecoveryTest/main.rsf +++ /dev/null @@ -1,269 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "MY APP NAME" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile ./etc/myGameBanner.bnr - BannerFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess FALSE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - #NANDAccess FALSE - NANDAccess TRUE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - # - # Disable debug [TRUE/FALSE] - # - DisableDebug FALSE - - # - # Agree EULA [TRUE/FALSE] - # - #AgreeEULA FALSE - - # - # Agree EULA version [0 - 255] - # - #AgreeEULAVersion 0 - - ### - #### END -} - -AppendProperty -{ - # - # Boot allowed Media: [GameCard] - # - Media NAND - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - #GameCode ABCJ - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Use Shared2 file index: [0-65535] - #Shared2FileIndex 0 - - # - # Use Shared2 file size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - #Shared2FileSize 0K - - # - # Game card power on: [TRUE/FALSE] - # - #GameCardOn FALSE - - Secure TRUE - AppType System -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} - -Rating -{ - # - # Permited age to play for each rating organization [0 - 31, ALWAYS, FREE] - # - # Supported organization - # - CERO (OGN0) : for Japan - # - ESRB (OGN1) : for North America - # - BBFC (OGN2) : obsolete organization - # - USK (OGN3) : for German - # - PEGI_GEN (OGN4) : for Europe - # - PEGI_FINLAND (OGN5) : obsolete organization - # - PEGI_PRT (OGN6) : for Portugal - # - PEGI_BBFC (OGN7) : for UK - # - OFLC (OGN8) : for Australia and NewZealand - # - GRB (OGN9) : for Korea - # - OGN10 : reserved - # - OGN11 : reserved - # - OGN12 : reserved - # - OGN13 : reserved - # - OGN14 : reserved - # - OGN15 : reserved - # - # Available age [ 0 - 31 / ALWAYS / FREE ] - - CERO FREE -# ESRB FREE -# USK FREE -# PEGI_GEN FREE -# PEGI_PRT FREE -# PEGI_BBFC FREE -# OFLC FREE -# GRB FREE -} diff --git a/build/tests/FileRecoveryTest/src/main.c b/build/tests/FileRecoveryTest/src/main.c deleted file mode 100644 index 460c313b..00000000 --- a/build/tests/FileRecoveryTest/src/main.c +++ /dev/null @@ -1,60 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: util_recoveryFile.h - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev:$ - $Author:$ -*---------------------------------------------------------------------------*/ - -#include -#include - -static char *s_strResult[4]; - -void VBlankIntr(void); - -void TwlMain( void ) -{ - char path[] = "nand:/tmp/a/b/c/d/hogehoge.dat"; - UTL_RecoveryStatus result; - - OS_Init(); - - //---- interrupt setting - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - OS_EnableIrqMask(OS_IE_V_BLANK); - OS_EnableIrq(); - GX_VBlankIntr(TRUE); - - - // Ƃ肠t@CTCY16bytew - result = UTL_RecoveryFile( path, 0x0010 ); - - OS_TPrintf("recovery result: %d\n", result); - OS_TPrintf("%s\n", s_strResult[result] ); - OS_TPrintf( "*** End of demo\n" ); - OS_Terminate(); - - -} - -void VBlankIntr(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); -} - -static char *s_strResult[] = { - "Target file exists and file size matched.", - "File size didn't match. Changing size succeeded.", - "Target file didn't exist. Creating file and setting size succeeded.", - "ERROR: File Recovery Failed." -}; \ No newline at end of file diff --git a/build/tests/HashCheckTemplate/ARM7/Makefile b/build/tests/HashCheckTemplate/ARM7/Makefile deleted file mode 100644 index e2d8e1b7..00000000 --- a/build/tests/HashCheckTemplate/ARM7/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - racoon.TWL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBMAKES = Makefile_ltd Makefile_hyb Makefile_ltd_offset - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/ARM7/Makefile_hyb b/build/tests/HashCheckTemplate/ARM7/Makefile_hyb deleted file mode 100644 index 0f47bbf5..00000000 --- a/build/tests/HashCheckTemplate/ARM7/Makefile_hyb +++ /dev/null @@ -1,88 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - mongoose.TWL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL -override TWL_PROC = ARM7 -override TWL_ARCHGEN = HYBRID -override TWL_CODEGEN = ARM -TWL_NO_STD_PCHDR = True - -#---------------------------------------------------------------------------- - -SRCDIR += $(ROOT)/build/components/mongoose.TWL/src - -SRCS = main.c initScfg.c - -TARGET_NAME = mongoose_hct - -TARGET_NEF = $(TARGET_NAME).tef -LCFILE_SPEC = mongoose_hct.lsf -LCFILE_TEMPLATE = $(ROOT)/build/components/mongoose.TWL/mongoose.lcf.template -LDRES_TEMPLATE = $(ROOT)/build/components/mongoose.TWL/mongoose.response.template - -LLIBRARY_DIRS += ../crt/ARM7/obj/ARM7-TS.HYB/$(TWL_BUILD_DIR) -CRT0_O = crt0_hct.HYB.TWL.o - -# X^bNsh~ׁ̈ACCWJɃRpC -CCFLAGS_OPT = -O4 -inline off - -# If THUMB, use ARM libraries -# CODEGEN THUMB ̏ꍇAARM Ńrĥ THUMB Ƃđ܂B -ifeq ($(TARGET_CODEGEN),THUMB) -TWL_LIBSUFFIX = .TWL$(ARCHGEN_TYPE) -CODEGEN_CC = ARM -endif - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -MAKELCF_FLAGS += -DISDBG_LIBS_TWL='$(if $(ISDBG_LIBS_TWL),$(ISDBG_LIBS_TWL),libstubsistd_sp$(TWL_LIBSUFFIX).a)' \ - -DISDBG_LIBS_NITRO='$(if $(ISDBG_LIBS_NITRO),$(ISDBG_LIBS_NITRO),libstubsisd_sp$(TWL_LIBSUFFIX).a)' - -#-------------------------------- -# install target -#-------------------------------- -INSTALL_TARGETS = $(BINDIR)/$(TARGET_NAME).tef \ - $(BINDIR)/$(TARGET_NAME).TWL.FLX.sbin \ - $(BINDIR)/$(TARGET_NAME)_defs.TWL.FLX.sbin \ - $(BINDIR)/$(TARGET_NAME).TWL.LTD.sbin \ - $(BINDIR)/$(TARGET_NAME)_defs.TWL.LTD.sbin - -INSTALL_DIR = $(TWL_INSTALL_COMPONENTSDIR)/$(TARGET_NAME)/$(TWL_BUILDTYPE) - -LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include - -#LLIBRARIES += libwl_sp$(TWL_LIBSUFFIX).a \ -# libcdc_sp$(TWL_LIBSUFFIX).a \ -# libtpex_sp$(TWL_LIBSUFFIX).a \ -# libmicex_sp$(TWL_LIBSUFFIX).a \ -# libsdio_hcd_twl$(TWL_LIBSUFFIX).a \ -# libsdio_busdriver$(TWL_LIBSUFFIX).a \ -# libsdio_lib$(TWL_LIBSUFFIX).a \ -# librompatch_sp$(TWL_LIBSUFFIX).a \ -# libARM7athdrv$(TWL_LIBSUFFIX).a \ - - -LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES) - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/ARM7/Makefile_ltd b/build/tests/HashCheckTemplate/ARM7/Makefile_ltd deleted file mode 100644 index 5893c9ca..00000000 --- a/build/tests/HashCheckTemplate/ARM7/Makefile_ltd +++ /dev/null @@ -1,81 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - racoon.TWL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL -override TWL_PROC = ARM7 -override TWL_ARCHGEN = LIMITED -override TWL_CODEGEN = ARM -TWL_NO_STD_PCHDR = True - -#---------------------------------------------------------------------------- - -SRCDIR += $(ROOT)/build/components/mongoose.TWL/src - -SRCS = main.c initScfg.c - -TARGET_NAME = racoon_hct - -TARGET_NEF = $(TARGET_NAME).tef -LCFILE_SPEC = racoon_hct.lsf -LCFILE_TEMPLATE = $(ROOT)/build/components/racoon.TWL/racoon.lcf.template -LDRES_TEMPLATE = $(ROOT)/build/components/racoon.TWL/racoon.response.template - -LLIBRARY_DIRS += ../crt/ARM7/obj/ARM7-TS.LTD/$(TWL_BUILD_DIR) -CRT0_O = crt0_hct.LTD.TWL.o - -# X^bNsh~ׁ̈ACCWJɃRpC -CCFLAGS_OPT = -O4 -inline off - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#MACRO_FLAGS += -DSDK_ARM7COMP_LTD - -ifeq ($(TWL_PLATFORM),BB) -MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037e0000' -else -MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037c0000' -endif - -MAKELCF_FLAGS += -DADDRESS_FLXMAIN='0x02380000' - -MAKELCF_FLAGS += -DISDBG_LIBS_TWL='$(if $(ISDBG_LIBS_TWL),$(ISDBG_LIBS_TWL),libstubsistd_sp$(TWL_LIBSUFFIX).a)' \ - -DISDBG_LIBS_NITRO='libstubsisd_sp$(TWL_LIBSUFFIX).a' - - -LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include -#LLIBRARIES += libwl_sp.TWL.LTD.a libsdio_hcd_twl$(TWL_LIBSUFFIX).a libsdio_busdriver$(TWL_LIBSUFFIX).a libsdio_lib$(TWL_LIBSUFFIX).a libARM7athdrv$(TWL_LIBSUFFIX).a -LLIBRARIES += libwl_sp.TWL.LTD.a -#LLIBRARIES += libwl_sp$(TWL_LIBSUFFIX).a \ -# libcdc_sp$(TWL_LIBSUFFIX).a \ -# libtpex_sp$(TWL_LIBSUFFIX).a \ -# libmicex_sp$(TWL_LIBSUFFIX).a \ -# libsdio_hcd_twl$(TWL_LIBSUFFIX).a \ -# libsdio_busdriver$(TWL_LIBSUFFIX).a \ -# libsdio_lib$(TWL_LIBSUFFIX).a \ -# librompatch_sp$(TWL_LIBSUFFIX).a \ -# libARM7athdrv$(TWL_LIBSUFFIX).a - -LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES) - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/ARM7/Makefile_ltd_offset b/build/tests/HashCheckTemplate/ARM7/Makefile_ltd_offset deleted file mode 100644 index 123e2195..00000000 --- a/build/tests/HashCheckTemplate/ARM7/Makefile_ltd_offset +++ /dev/null @@ -1,83 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - racoon.TWL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL -override TWL_PROC = ARM7 -override TWL_ARCHGEN = LIMITED -override TWL_CODEGEN = ARM -TWL_NO_STD_PCHDR = True - -#---------------------------------------------------------------------------- - -SRCDIR += $(ROOT)/build/components/mongoose.TWL/src - -SRCS = main.c initScfg.c - -TARGET_NAME = racoon_hct_offset - -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) - -TARGET_NEF = $(TARGET_NAME).tef -LCFILE_SPEC = racoon_hct.lsf -LCFILE_TEMPLATE = $(ROOT)/build/components/racoon.TWL/racoon.lcf.template -LDRES_TEMPLATE = $(ROOT)/build/components/racoon.TWL/racoon.response.template - -LLIBRARY_DIRS += ../crt/ARM7/obj/ARM7-TS.LTD/$(TWL_BUILD_DIR) -CRT0_O = crt0_hct.LTD.TWL.o - -# X^bNsh~ׁ̈ACCWJɃRpC -CCFLAGS_OPT = -O4 -inline off - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#MACRO_FLAGS += -DSDK_ARM7COMP_LTD - -ifeq ($(TWL_PLATFORM),BB) -MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037e0000' -else -MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037c0000' -endif - -MAKELCF_FLAGS += -DADDRESS_FLXMAIN='0x02390000' - -MAKELCF_FLAGS += -DISDBG_LIBS_TWL='$(if $(ISDBG_LIBS_TWL),$(ISDBG_LIBS_TWL),libstubsistd_sp$(TWL_LIBSUFFIX).a)' \ - -DISDBG_LIBS_NITRO='libstubsisd_sp$(TWL_LIBSUFFIX).a' - - -LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include -#LLIBRARIES += libwl_sp.TWL.LTD.a libsdio_hcd_twl$(TWL_LIBSUFFIX).a libsdio_busdriver$(TWL_LIBSUFFIX).a libsdio_lib$(TWL_LIBSUFFIX).a libARM7athdrv$(TWL_LIBSUFFIX).a -LLIBRARIES += libwl_sp.TWL.LTD.a -#LLIBRARIES += libwl_sp$(TWL_LIBSUFFIX).a \ -# libcdc_sp$(TWL_LIBSUFFIX).a \ -# libtpex_sp$(TWL_LIBSUFFIX).a \ -# libmicex_sp$(TWL_LIBSUFFIX).a \ -# libsdio_hcd_twl$(TWL_LIBSUFFIX).a \ -# libsdio_busdriver$(TWL_LIBSUFFIX).a \ -# libsdio_lib$(TWL_LIBSUFFIX).a \ -# librompatch_sp$(TWL_LIBSUFFIX).a \ -# libARM7athdrv$(TWL_LIBSUFFIX).a - -LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES) - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/ARM7/mongoose_hct.lsf b/build/tests/HashCheckTemplate/ARM7/mongoose_hct.lsf deleted file mode 100644 index 78e6357d..00000000 --- a/build/tests/HashCheckTemplate/ARM7/mongoose_hct.lsf +++ /dev/null @@ -1,172 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - mongoose.TWL -# File: mongoose.lsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# Nitro LCF SPEC FILE -# -#-------- -Static $(TARGET_NAME) -{ - Address 0x02380000 - Library $(CRT0_O) \ - libos_sp$(LIBSUFFIX).a \ - libsyscall_sp.twl.a \ - libmi_sp$(LIBSUFFIX).a - Object $(OBJDIR)/initScfg.o - StackSize 1024 1024 -} - -#-------- -Autoload WRAM -{ - Address 0x037f8000 - - Library libsubpsyscall.a - Library $(CW_LIBS) - Library libpad_sp$(LIBSUFFIX).a - Library libpxi_sp$(LIBSUFFIX).a - Library libexi_sp$(LIBSUFFIX).a - Library libsnd_sp$(LIBSUFFIX).a - Library libspi_sp$(LIBSUFFIX).a - Library libpm_sp$(LIBSUFFIX).a - Library libmath_sp$(LIBSUFFIX).a - Library libtp_sp$(LIBSUFFIX).a - Library libmic_sp$(LIBSUFFIX).a - Library libfs_sp$(LIBSUFFIX).a - Library libcard_sp$(LIBSUFFIX).a - Library libstd_sp$(LIBSUFFIX).a - Library libctrdg_sp$(LIBSUFFIX).a - - Object * (.etable) - Object * (.wram) - Object $(OBJDIR)/main.o - - ##### - # Sub-routines in WL library , that should be on WRAM. - # in TaskMan.o - Object OBJECT( MainTaskRoutine , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( AddTask , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( DeleteTask , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( LowestIdleTask , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( ExecuteMessage , libwl_sp.TWL$(ARCHGEN).a ) (.text) - # in BufMan.o - Object OBJECT( NewHeapBuf , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( DeleteHeapBuf , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( AllocateHeapBuf , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( ReleaseHeapBuf , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( MoveHeapBuf , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( AddHeapBuf , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( GetHeapBufNextAdrs , libwl_sp.TWL$(ARCHGEN).a ) (.text) - # in WlCmdIf.o - ## Object OBJECT( RequestCmdTask , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( SendMessageToWmDirect , libwl_sp.TWL$(ARCHGEN).a ) (.text) - # in WlNic.o - Object OBJECT( WStart , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WStop , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WSetStaState , libwl_sp.TWL$(ARCHGEN).a ) (.text) - # in WlIntr.o - Object OBJECT( WlIntr , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrPreTbtt , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrTbtt , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrActEnd , libwl_sp.TWL$(ARCHGEN).a ) (.text) -# Object OBJECT( WlIntrAckCntOvf , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrCntOvf , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrTxErr , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrRxCntup , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrTxEnd , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrRxEnd , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrMpEnd , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrStartTx , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrStartRx , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( SetParentTbttTxq , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( MacBugTxMp , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( AdjustRingPointer , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( CheckKeyTxEnd , libwl_sp.TWL$(ARCHGEN).a ) (.text) - # in WlIntrTask.o - Object OBJECT( WlIntrTxBeaconTask , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrTxEndTask , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrRxEndTask , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrMpEndTask , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( SetParentTbttTxqTask , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( TakeoutRxFrame , libwl_sp.TWL$(ARCHGEN).a ) (.text) - # in TxCtrl.o - Object OBJECT( InitTxCtrl , libwl_sp.TWL$(ARCHGEN).a ) (.text) - # in RxCtrl.o - Object OBJECT( InitRxCtrl , libwl_sp.TWL$(ARCHGEN).a ) (.text) - # in WaitLoop.o - Object OBJECT( WaitLoop_Rxpe , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WaitLoop_Waitus , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WaitLoop_ClrAid , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WaitLoop_BbpAccess , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WaitLoop_RfAccess , libwl_sp.TWL$(ARCHGEN).a ) (.text) - -} - -#-------- -Autoload MAIN -{ - Address 0x02fe0000 - Library librtc_sp$(LIBSUFFIX).a - Library libnvram_sp$(LIBSUFFIX).a - Library libwvr_sp$(LIBSUFFIX).a - Library libwm_sp$(LIBSUFFIX).a - Library libwl_sp.TWL$(ARCHGEN).a - Library $(ISDBG_LIBS_NITRO) - Library $(ISDBG_LIBS_TWL) -} - -#-------- -Ltdautoload LTDWRAM -{ - Address 0x03000000 - Object * (.ltdwram) - Library libi2c_sp$(LIBSUFFIX).a - Library libcamera_sp$(LIBSUFFIX).a - Library libcdc_sp$(LIBSUFFIX).a - Library libsndex_sp$(LIBSUFFIX).a - Library libtpex_sp$(LIBSUFFIX).a - Library libmicex_sp$(LIBSUFFIX).a - Library libmcu_sp$(LIBSUFFIX).a - Library libscfg_sp$(LIBSUFFIX).a - Library libaes_sp$(LIBSUFFIX).a - - Library libsdio_sp$(LIBSUFFIX).a - Library libathdrv_sp$(LIBSUFFIX).a - - Object OBJECT( wpa_sm_rx_eapol , libwpa_sp$(LIBSUFFIX).a ) (.text) - - # FATFS core symbols - Object OBJECT(FATFSi_lfi2text, libfatfs_sp$(LIBSUFFIX).a) (.text) # 360 BYTEs - Object OBJECT(FATFSi_pc_findin, libfatfs_sp$(LIBSUFFIX).a) (.text) # 904 BYTEs - Object OBJECT(FATFSi_pc_patcmp_vfat, libfatfs_sp$(LIBSUFFIX).a) (.text) # 436 BYTEs - Object OBJECT(FATFSi_pc_ascii_mfile, libfatfs_sp$(LIBSUFFIX).a) (.text) # 160 BYTEs - Object OBJECT(FATFSi_map_ascii_to_unicode, libfatfs_sp$(LIBSUFFIX).a) (.text) # 48 BYTEs - Object OBJECT(SDCARD_Intr_Thread, libfatfs_sp$(LIBSUFFIX).a) (.text) # 520 BYTEs - Object OBJECT(FATFSi_unicode_cmp_to_ascii_char, libfatfs_sp$(LIBSUFFIX).a) (.text) # 40 BYTEs - Object OBJECT(FATFSi_pc_read_blk, libfatfs_sp$(LIBSUFFIX).a) (.text) # 352 BYTEs - -} - -#-------- -Ltdautoload LTDMAIN -{ - Address 0x02f88000 - Object * (.ltdmain) - Library libnwm_sp$(LIBSUFFIX).a - Library libfatfs_sp$(LIBSUFFIX).a - - Library libwpa_sp$(LIBSUFFIX).a -} diff --git a/build/tests/HashCheckTemplate/ARM7/racoon_hct.lsf b/build/tests/HashCheckTemplate/ARM7/racoon_hct.lsf deleted file mode 100644 index 2928fee8..00000000 --- a/build/tests/HashCheckTemplate/ARM7/racoon_hct.lsf +++ /dev/null @@ -1,231 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - racoon.TWL -# File: racoon.lsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# Nitro LCF SPEC FILE -# -#-------- -Static $(TARGET_NAME) -{ - Address $(ADDRESS_FLXMAIN) - Library $(CRT0_O) \ - libos_sp$(LIBSUFFIX).a \ - libsyscall_sp.twl.a \ - libmi_sp$(LIBSUFFIX).a - Object $(OBJDIR)/initScfg.o - StackSize 1024 1024 -} - -#-------- -Autoload WRAM -{ - Address $(ADDRESS_LTDWRAM) - - Library libsubpsyscall.a \ - $(CW_LIBS) \ - libpad_sp$(LIBSUFFIX).a \ - libpxi_sp$(LIBSUFFIX).a \ - libstd_sp$(LIBSUFFIX).a \ - libexi_sp$(LIBSUFFIX).a \ - libsnd_sp$(LIBSUFFIX).a \ - libspi_sp$(LIBSUFFIX).a \ - libpm_sp$(LIBSUFFIX).a \ - libmath_sp$(LIBSUFFIX).a \ - libscfg_sp$(LIBSUFFIX).a \ - libtp_sp$(LIBSUFFIX).a \ - libmic_sp$(LIBSUFFIX).a \ - libfs_sp$(LIBSUFFIX).a \ - libcard_sp$(LIBSUFFIX).a \ - libi2c_sp$(LIBSUFFIX).a \ - libcamera_sp$(LIBSUFFIX).a \ - libcdc_sp$(LIBSUFFIX).a \ - libsndex_sp$(LIBSUFFIX).a \ - libtpex_sp$(LIBSUFFIX).a \ - libmicex_sp$(LIBSUFFIX).a \ - libmcu_sp$(LIBSUFFIX).a \ - - Library libsdio_sp$(LIBSUFFIX).a - - Library libnvram_sp$(LIBSUFFIX).a - Library librtc_sp$(LIBSUFFIX).a - - - Object * (.etable) - Object * (.wram) - Object * (.ltdwram) - Object $(OBJDIR)/main.o - - # caches in fatfs library, that should be on WRAM. - # 2007/12/11 OBJECT() ɂ .bss V{̃N܂Ȃ̂ŁA - # ϐ`ӏ pragma .ltdwram ZNVɊ܂܂悤Ɏb΍􂵂܂B -# Object OBJECT( FATFSi___mem_drives_structures , libfatfs_sp$(LIBSUFFIX).a) (.bss) - - ##### - # Sub-routines in WL library , that should be on WRAM. - # in TaskMan.o - Object OBJECT( MainTaskRoutine , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AddTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DeleteTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( LowestIdleTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ExecuteMessage , libwl_sp$(LIBSUFFIX).a ) (.text) - # in BufMan.o - Object OBJECT( NewHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DeleteHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AllocateHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ReleaseHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( MoveHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AddHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( GetHeapBufNextAdrs , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WlCmdIf.o - Object OBJECT( RequestCmdTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( SendMessageToWmDirect , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WlNic.o - Object OBJECT( WStart , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WStop , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WSetStaState , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WlIntr.o - Object OBJECT( WlIntr , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrPreTbtt , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrTbtt , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrActEnd , libwl_sp$(LIBSUFFIX).a ) (.text) -# Object OBJECT( WlIntrAckCntOvf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrCntOvf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrTxErr , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrRxCntup , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrTxEnd , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrRxEnd , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrMpEnd , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrStartTx , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrStartRx , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( SetParentTbttTxq , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( MacBugTxMp , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AdjustRingPointer , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( CheckKeyTxEnd , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WlIntrTask.o - Object OBJECT( WlIntrTxBeaconTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrTxEndTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrRxEndTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrMpEndTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( SetParentTbttTxqTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( TakeoutRxFrame , libwl_sp$(LIBSUFFIX).a ) (.text) - # in TxCtrl.o - Object OBJECT( InitTxCtrl , libwl_sp$(LIBSUFFIX).a ) (.text) - # in RxCtrl.o - Object OBJECT( InitRxCtrl , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WaitLoop.o - Object OBJECT( WaitLoop_Rxpe , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WaitLoop_Waitus , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WaitLoop_ClrAid , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WaitLoop_BbpAccess , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WaitLoop_RfAccess , libwl_sp$(LIBSUFFIX).a ) (.text) - - -} - -#-------- -Ltdautoload RSVWRAM -{ - Address 0x03040000 - Object * (.rsvwram) - Library libathdrv_sp$(LIBSUFFIX).a (.bss) - Library libathdrv_sp$(LIBSUFFIX).a (.data) - - ##### - # Sub-routines in TWL WIRELESS Driver , that should be on WRAM. - Object OBJECT( HTCSendPktCompletionHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCIssueSend, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCTrySend, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCSendPkt, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCProcessCreditRpt, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevRecvPacket, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCProcessRecvHeader, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCRecvCompleteHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCRecvMessagePendingHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCAddReceivePkt, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AR6KFreeIOPacket, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AR6KAllocIOPacket, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevRWCompletionHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevGetEventAsyncHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevCheckPendingRecvMsgsAsync, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevDsrHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HIFReadWrite, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( hifRWCompletionHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( hifIRQHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HIFAckInterrupt, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ar6000_credit_distribute, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_alloc, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_alloc_rx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_put, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_push, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_pull, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_free, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_to_data, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_to_len, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_headroom, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( nin_drv_return_netbuf, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ath_queue_remove_from_head, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ath_queue_insert_tail, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ar6000_alloc_cookie, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( nin_driver_tx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( nin_tx_complete, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_dix_2_dot3, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_data_hdr_add, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_data_hdr_remove, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( nin_rx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ar6000_ibss_map_epid, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DL_ListInsertTail, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DL_ListRemove, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_control_rx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_cmd_send, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ar6000_control_tx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_implicit_create_pstream, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCAllocControlBuffer, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCFreeControlBuffer, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( BMILZData, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( bmiBufferSend, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( BMIWriteMemory, libathdrv_sp$(LIBSUFFIX).a ) (.text) - - - # FATFS core symbols - Object OBJECT(FATFSi_lfi2text, libfatfs_sp$(LIBSUFFIX).a) (.text) # 360 BYTEs - Object OBJECT(FATFSi_pc_findin, libfatfs_sp$(LIBSUFFIX).a) (.text) # 904 BYTEs - Object OBJECT(FATFSi_pc_patcmp_vfat, libfatfs_sp$(LIBSUFFIX).a) (.text) # 436 BYTEs - Object OBJECT(FATFSi_pc_ascii_mfile, libfatfs_sp$(LIBSUFFIX).a) (.text) # 160 BYTEs - Object OBJECT(FATFSi_map_ascii_to_unicode, libfatfs_sp$(LIBSUFFIX).a) (.text) # 48 BYTEs - Object OBJECT(SDCARD_Intr_Thread, libfatfs_sp$(LIBSUFFIX).a) (.text) # 520 BYTEs - Object OBJECT(FATFSi_unicode_cmp_to_ascii_char, libfatfs_sp$(LIBSUFFIX).a) (.text) # 40 BYTEs - Object OBJECT(FATFSi_pc_read_blk, libfatfs_sp$(LIBSUFFIX).a) (.text) # 352 BYTEs -} - -#-------- -Ltdautoload LTDMAIN -{ - Address 0x02f88000 - - Object * (.ltdmain) - Library libwm_sp$(LIBSUFFIX).a \ - libnwm_sp$(LIBSUFFIX).a \ - libwvr_sp$(LIBSUFFIX).a \ - libwl_sp$(LIBSUFFIX).a - - Library libwpa_sp$(LIBSUFFIX).a - Library libathdrv_sp$(LIBSUFFIX).a - - Library libfatfs_sp$(LIBSUFFIX).a \ - libaes_sp$(LIBSUFFIX).a - Library $(ISDBG_LIBS_TWL) - Library $(ISDBG_LIBS_NITRO) -} diff --git a/build/tests/HashCheckTemplate/ARM9/Makefile b/build/tests/HashCheckTemplate/ARM9/Makefile deleted file mode 100644 index a63deeb2..00000000 --- a/build/tests/HashCheckTemplate/ARM9/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBMAKES = Makefile_ltd Makefile_hyb - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/ARM9/Makefile_hyb b/build/tests/HashCheckTemplate/ARM9/Makefile_hyb deleted file mode 100644 index 79a3f290..00000000 --- a/build/tests/HashCheckTemplate/ARM9/Makefile_hyb +++ /dev/null @@ -1,75 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -override TWL_ARCHGEN = HYBRID - -TARGET_NAME = HashCheckTemplate -TARGET_BIN = $(TARGET_NAME).tad - -TITLEID_LO = 0DTA - -ROM_SPEC = main.rsf -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(TITLEID_LO)/rom_header_$(call toLower,$(TITLEID_LO)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(TITLEID_LO)/libsyscall.a - -MISC_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/misc - -SRCS = main.c HashCheckTemplate.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -F -DTITLEID_LO='$(TITLEID_LO)' \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - -#fobOpp[^lj -MAKEROM_FLAGS += -DSYSCALL_C='$(call empath,$(LIBSYSCALL:.a=_c.bin))' \ - -DARM9FLX_EXPAND=0x27c000 \ - -DARM7FLX_EXPAND=0x40000 \ - -DARM9LTD_EXPAND=0x280000 \ - -DARM7LTD_EXPAND=0x108000 - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.DEBUG.exe - -DEFAULT_COMP_ARM7 = mongoose_hct -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -LDIRT_CLEAN = $(TARGET_TAD) -INSTALL_TARGETS = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/ARM9/Makefile_ltd b/build/tests/HashCheckTemplate/ARM9/Makefile_ltd deleted file mode 100644 index bf6f7936..00000000 --- a/build/tests/HashCheckTemplate/ARM9/Makefile_ltd +++ /dev/null @@ -1,75 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -override TWL_ARCHGEN = LIMITED - -TARGET_NAME = HashCheckTemplate -TARGET_BIN = $(TARGET_NAME).tad - -TITLEID_LO = 0DTA - -ROM_SPEC = main.rsf -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(TITLEID_LO)/rom_header_$(call toLower,$(TITLEID_LO)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(TITLEID_LO)/libsyscall.a - -MISC_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/misc - -SRCS = main.c HashCheckTemplate.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -F -DTITLEID_LO='$(TITLEID_LO)' \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - -#fobOpp[^lj -MAKEROM_FLAGS += -DSYSCALL_C='$(call empath,$(LIBSYSCALL:.a=_c.bin))' \ - -DARM9FLX_EXPAND=0x27c000 \ - -DARM7FLX_EXPAND=0x40000 \ - -DARM9LTD_EXPAND=0x280000 \ - -DARM7LTD_EXPAND=0x108000 - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.DEBUG.exe - -DEFAULT_COMP_ARM7 = racoon_hct -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -LDIRT_CLEAN = $(TARGET_TAD) -INSTALL_TARGETS = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/ARM9/main.rsf b/build/tests/HashCheckTemplate/ARM9/main.rsf deleted file mode 100644 index 8f742b9a..00000000 --- a/build/tests/HashCheckTemplate/ARM9/main.rsf +++ /dev/null @@ -1,185 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - RomHeaderTemplate $(ROM_HEADER_TEMPLATE) - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion Japan - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType User - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media NAND - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/HashCheckTemplate/ARM9/src/HashCheckTemplate.c b/build/tests/HashCheckTemplate/ARM9/src/HashCheckTemplate.c deleted file mode 100644 index 3764fe64..00000000 --- a/build/tests/HashCheckTemplate/ARM9/src/HashCheckTemplate.c +++ /dev/null @@ -1,151 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: HashCheckTemplate.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "misc.h" -#include "HashCheckTemplate.h" - -// define data------------------------------------------ -#define RETURN_BUTTON_TOP_X 2 -#define RETURN_BUTTON_TOP_Y 21 -#define RETURN_BUTTON_BOTTOM_X ( RETURN_BUTTON_TOP_X + 8 ) -#define RETURN_BUTTON_BOTTOM_Y ( RETURN_BUTTON_TOP_Y + 2 ) - -#define UNDEF_CODE 0xe7ffdeff - -// extern data------------------------------------------ - -// function's prototype declaration--------------------- - -// global variable ------------------------------------- -RTCDrawProperty g_rtcDraw = { - TRUE, RTC_DATE_TOP_X, RTC_DATE_TOP_Y, RTC_TIME_TOP_X, RTC_TIME_TOP_Y -}; - -// static variable ------------------------------------- -static BOOL s_switch = TRUE; - -//static u32 dummy[1024*1024/2]={1,2,3,};//2MB - -// const data ----------------------------------------- - -//====================================================== -// Ĕzu`FbJ[i鎖͕\̂݁j -//====================================================== - -/* -static void draw_sub1(u8 *ram_addr, u8 *header_addr, int y) -{ - int l; - PrintfSJIS(8,y,TXT_UCOLOR_DARKGREEN, "ARM9FLX ( VERIFY %s ) :",( (*(u32 *)0x02000180 == UNDEF_CODE) ? "OK" : "NG" )); - - for (l=0; l<20; l++) - { - PrintfSJIS(24+(l%10)*19, y+12+12*(l/10), TXT_COLOR_BLACK, "%.2x", *(ram_addr+l)); - if(s_switch) - { - PrintfSJIS(24+(l%10)*19, y+12+12*(l/10), (*(ram_addr+l) != *(header_addr+l)) ? TXT_COLOR_RED : TXT_COLOR_BLUE, "%.2x", *(header_addr+l)); - } - } -} -*/ - -static void draw_sub2(u8 *ram_addr, u8 *header_addr, int y, const u16 *str) -{ - int l; - PutStringUTF16(8,y,TXT_UCOLOR_DARKGREEN, str); - for (l=0; l<20; l++) - { - PrintfSJIS(24+(l%10)*19, y+12+12*(l/10), TXT_COLOR_BLACK, "%.2x", *(ram_addr+l)); - if(s_switch ) - { - PrintfSJIS(24+(l%10)*19, y+12+12*(l/10), (*(ram_addr+l) != *(header_addr+l)) ? TXT_COLOR_RED : TXT_COLOR_BLUE, "%.2x", *(header_addr+l)); - } - } -} - -static void encryObjdraw(void) -{ - int l; - NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); - PutStringUTF16( 1 * 8, 0 * 8, TXT_COLOR_BLUE, (const u16 *)L"decrypted encryObj (first 200 bytes)"); - for (l=0; l<50; l++) - { - PrintfSJIS(4+(l%4)*64, 24+12*(l/4), TXT_COLOR_BLACK, "%.8x", *(((u32 *)0x02000180)+l) ); - } -} - -static void draw() -{ - NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); - - PutStringUTF16( 1 * 8, 0 * 8, TXT_COLOR_BLUE, (const u16 *)L"SelfDigestChecker"); - PutStringUTF16( 3 * 8, 1 * 12, TXT_COLOR_BLACK, (const u16 *)L"Press A to Check Digest...."); - - draw_sub2((u8 *)0x02000100, (u8 *)(HW_TWL_ROM_HEADER_BUF + 0x38c), 12*2+4, (const u16 *)L"ARM9FLX :" ); - draw_sub2((u8 *)0x02000120, (u8 *)(HW_TWL_ROM_HEADER_BUF + 0x314), 12*5+8, (const u16 *)L"ARM7FLX :" ); - draw_sub2((u8 *)0x02000140, (u8 *)(HW_TWL_ROM_HEADER_BUF + 0x350), 12*8+12, (const u16 *)L"ARM9LTD :" ); - draw_sub2((u8 *)0x02000160, (u8 *)(HW_TWL_ROM_HEADER_BUF + 0x364), 12*11+16, (const u16 *)L"ARM7LTD :" ); -} - -// -void HashCheckTemplateInit( void ) -{ - GX_DispOff(); - GXS_DispOff(); - - draw(); - - GetAndDrawRTCData( &g_rtcDraw, TRUE ); - - GXS_SetVisiblePlane( GX_PLANEMASK_BG0 ); - GX_DispOn(); - GXS_DispOn(); -} - -static u32 c; -// C[v -void HashCheckTemplateMain(void) -{ - BOOL tp_cancel = FALSE; - - ReadTP(); // ^b`pl͂̎擾 - - // [RETURN]{^`FbN - if(tpd.disp.touch) { - tp_cancel = WithinRangeTP( RETURN_BUTTON_TOP_X * 8, RETURN_BUTTON_TOP_Y * 8 - 4, - RETURN_BUTTON_BOTTOM_X * 8, RETURN_BUTTON_BOTTOM_Y * 8 - 4, &tpd.disp ); - } - - if( ( pad.trg & PAD_BUTTON_A )) { - s_switch = !s_switch; - draw(); - } - - if( ( pad.trg & PAD_BUTTON_X )) { - encryObjdraw(); - } - - if( ( pad.trg & PAD_BUTTON_B ) || tp_cancel ) { -// SYSM_RebootLauncher(); - } - - GetAndDrawRTCData( &g_rtcDraw, FALSE ); -} - - diff --git a/build/tests/HashCheckTemplate/ARM9/src/HashCheckTemplate.h b/build/tests/HashCheckTemplate/ARM9/src/HashCheckTemplate.h deleted file mode 100644 index fe20f46a..00000000 --- a/build/tests/HashCheckTemplate/ARM9/src/HashCheckTemplate.h +++ /dev/null @@ -1,37 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: HashCheckTemplate.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __HASH_CHECK_TEMPLATE_H__ -#define __HASH_CHECK_TEMPLATE_H__ - -#ifdef __cplusplus -extern "C" { -#endif - - -#include - -// define data---------------------------------------------------------- - -void HashCheckTemplateInit( void ); -void HashCheckTemplateMain( void ); - -#ifdef __cplusplus -} -#endif - -#endif // __HASH_CHECK_TEMPLATE_H__ diff --git a/build/tests/HashCheckTemplate/ARM9/src/main.c b/build/tests/HashCheckTemplate/ARM9/src/main.c deleted file mode 100644 index c42a2d4d..00000000 --- a/build/tests/HashCheckTemplate/ARM9/src/main.c +++ /dev/null @@ -1,87 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: main.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "misc.h" -#include "HashCheckTemplate.h" - -// extern data----------------------------------------------------------------- - -// define data----------------------------------------------------------------- - -// function's prototype------------------------------------------------------- -static void INTR_VBlank( void ); - -// global variable------------------------------------------------------------- - -// static variable------------------------------------------------------------- - -// const data------------------------------------------------------------------ - - -// ============================================================================ -// function's description -// ============================================================================ -void TwlMain(void) -{ - - // ---------------------------------- - OS_Init(); - - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - GX_Init(); - GX_SetPower(GX_POWER_ALL); // eWbN p[ON - - // 荞݋---------------------------- - (void)OS_SetIrqFunction(OS_IE_V_BLANK, INTR_VBlank); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - - // foCX------------------------------- - TP_Init(); - (void)RTC_Init(); - - // VXȅ------------------ - OS_SetArenaHi(OS_ARENA_MAIN, (void *)0x02d00000);// arm9MMEMheap - InitAllocator(); - - InitBG(); - HashCheckTemplateInit(); - // C[v---------------------------- - while(1){ - OS_WaitIrq(1, OS_IE_V_BLANK); // VuN荞ݑ҂ - - ReadKeyPad(); // L[͂̎擾 - ReadTP(); // TP͂̎擾 - - HashCheckTemplateMain(); - } -} - - -// ============================================================================ -// 荞ݏ -// ============================================================================ - -// VuN荞 -static void INTR_VBlank(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); // VuN`FbÑZbg -} - diff --git a/build/tests/HashCheckTemplate/Makefile b/build/tests/HashCheckTemplate/Makefile deleted file mode 100644 index 96d468e9..00000000 --- a/build/tests/HashCheckTemplate/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS = banner crt ARM7 ARM9 - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/banner/Makefile b/build/tests/HashCheckTemplate/banner/Makefile deleted file mode 100644 index cf9ea411..00000000 --- a/build/tests/HashCheckTemplate/banner/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/gameIcon.bmp -BANNER_SPEC = banner_v3.bsf - -TARGETS = banner.bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) -BANNER_ICON_MIDDLE = $(addprefix $(BANNER_ICON_NAME), .nbfs .nbfc .nbfp) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_MIDDLE) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) $(BANNER_ICON_MIDDLE) - $(MAKEBANNER) -d -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/HashCheckTemplate/banner/banner_v3.bsf b/build/tests/HashCheckTemplate/banner/banner_v3.bsf deleted file mode 100644 index fb39aad4a39033b30dcca5d04739ce8e3c204888..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 942 zcmc(dze>YU7{$+8!FRZjS-m1SbhI>95f!6u9n!SYU>i#kEsj2oqocD3u8ux|i@1op z`nxyr0n$OaY_gA1TMG9rK;*Y_Pm2pPOiAI`XC0Lq@b>@dj96F z<{BMq43YvwXEh?DsV<3>#0DTVnu9&XFYz+`)ZYo6F`0s>t3BbZ5GL!|)SkNk%FMAl z1(!pY>H@rN5N>!(F1M>gA}zh$eDt5~qrJDU_QBp_-C37!>B)ZD7yItLuJ(QP0ZL@* z!McEZhtKWu9Nr@|o3YQ>Yvf)Cb=0_L8`T`DCUbU}-n1vG**BTfSwMr{0zFQA;Ei`9%D(-@D8 diff --git a/build/tests/HashCheckTemplate/banner/icon/gameIcon.bmp b/build/tests/HashCheckTemplate/banner/icon/gameIcon.bmp deleted file mode 100644 index 2d6194b192ca27707fe3bef9abd4c538e1860a8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmY+BF;Buk7=}NMiKDVJ*rp~XOj5!RphXuQh*xj`6M|f1fG}vAFu4#KR+e^VqPvM{ zS2ZEtFHkzElgclk#qX{)(KorfKKH%%-q&2|)Z7Fi6XydQd+FGKE&M{I^#qbR#wDB0 zLN1qsVzCICra`4rfo8J_{eB+?g8>YOLzqk^Fr7}p_kEbp=MaV=tk-J*{hwglFbv$$ zR8^HxyDO8n4Wg@gS<0Z4l|?B!G~7sd#Jzd6a>TlQA`EYdfwT1|L5ZBYNOEK!+6JgBv~*TdQ0BJpr} zGi25a?rqw!Z-`z#BZ33Zb9s|A;br*Z%^dz0Ed%S=&1-59{PcDA>U%R64Xrkb7p(XA zDH3e!l9D)NPamH_APm=>7mO~y@wr0A9yp_cqVS!FZgO5Q_KXKa4{g2=W2Lcb` diff --git a/build/tests/HashCheckTemplate/crt/ARM7/Makefile b/build/tests/HashCheckTemplate/crt/ARM7/Makefile deleted file mode 100644 index 75aef4bf..00000000 --- a/build/tests/HashCheckTemplate/crt/ARM7/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - libraries - init - ARM7.TWL -# File: Makefile.LTD -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBMAKES = Makefile_ltd Makefile_hyb - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/crt/ARM7/Makefile_hyb b/build/tests/HashCheckTemplate/crt/ARM7/Makefile_hyb deleted file mode 100644 index 1af439e1..00000000 --- a/build/tests/HashCheckTemplate/crt/ARM7/Makefile_hyb +++ /dev/null @@ -1,52 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - libraries - init - ARM7.TWL -# File: Makefile.HYB -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL - -# Codegen for sub processer -override TWL_PROC = ARM7 - -# Avoid to use pre-compile-header of "nitro.h" -TWL_NO_STD_PCHDR = True - -# Avoid to build THUMB version object -override TARGET_CODEGEN = ARM - -# Avoid to build LIMITED version object -override TWL_ARCHGEN = HYBRID - -SRCDIR = src -INCDIR = ../common/include - -SRCS = crt0_hct.HYB.c -TARGET_OBJ = crt0_hct.HYB.TWL.o - -MACRO_FLAGS += -DSDK_NOINIT - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -$(OBJDIR)/$(TARGET_OBJ): $(OBJDIR)/$(SRCS:.c=.o) - $(CP) $< $@ - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/crt/ARM7/Makefile_ltd b/build/tests/HashCheckTemplate/crt/ARM7/Makefile_ltd deleted file mode 100644 index 9b602b3f..00000000 --- a/build/tests/HashCheckTemplate/crt/ARM7/Makefile_ltd +++ /dev/null @@ -1,52 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - libraries - init - ARM7.TWL -# File: Makefile.LTD -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL - -# Codegen for sub processer -override TWL_PROC = ARM7 - -# Avoid to use pre-compile-header of "nitro.h" -TWL_NO_STD_PCHDR = True - -# Avoid to build THUMB version object -override TARGET_CODEGEN = ARM - -# Avoid to build HYBRID version object -override TWL_ARCHGEN = LIMITED - -SRCDIR = src -INCDIR = ../common/include - -SRCS = crt0_hct.LTD.c -TARGET_OBJ = crt0_hct.LTD.TWL.o - -MACRO_FLAGS += -DSDK_NOINIT - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -$(OBJDIR)/$(TARGET_OBJ): $(OBJDIR)/$(SRCS:.c=.o) - $(CP) $< $@ - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/crt/ARM7/src/crt0_hct.HYB.c b/build/tests/HashCheckTemplate/crt/ARM7/src/crt0_hct.HYB.c deleted file mode 100644 index 1e2a39f7..00000000 --- a/build/tests/HashCheckTemplate/crt/ARM7/src/crt0_hct.HYB.c +++ /dev/null @@ -1,918 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - libraries - init - ARM7.TWL - File: crt0.HYB.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "boot_sync.h" - - - -/*---------------------------------------------------------------------------*/ -void _start(void); -void _start_AutoloadDoneCallback(void* argv[]); -void WVR_ShelterExtWram(void); -void INIT_InitializeScfg(void); - -#define SDK_NITROCODE_LE 0x2106c0de -#define SDK_NITROCODE_BE 0xdec00621 - -#define SDK_TWLCODE_LE 0x6314c0de -#define SDK_TWLCODE_BE 0xdec01463 - -/* O֐Qƒ` */ -extern void OS_IrqHandler(void); -extern void _fp_init(void); -extern void __call_static_initializers(void); - -/* ֐vg^Cv` */ -static void INITi_SetHMACSHA1ToAppParam(void); -static void INITi_DoAutoload(void); -static void INITi_ShelterLtdBinary(void); -static BOOL INITi_IsRunOnTwl( void ); -static void INITi_CopySysConfig( void ); -static void INITi_DetectMainMemorySize(void); -#ifndef SDK_NOINIT -static void INITi_ShelterStaticInitializer(u32* ptr); -static void INITi_CallStaticInitializers(void); -#endif -static void* INITi_Copy32(void* dst, void* src, u32 size); -static void* INITi_Fill32(void* dst, u32 value, u32 size); - -/* JXNvgɂ`V{Q */ -extern void SDK_WRAM_ARENA_LO(void); -extern void SDK_AUTOLOAD_LIST(void); -extern void SDK_AUTOLOAD_LIST_END(void); -extern void SDK_AUTOLOAD_START(void); -extern void SDK_STATIC_BSS_START(void); -extern void SDK_STATIC_BSS_END(void); - -void* const _start_ModuleParams[] = -{ - (void*)SDK_AUTOLOAD_LIST, - (void*)SDK_AUTOLOAD_LIST_END, - (void*)SDK_AUTOLOAD_START, - (void*)SDK_STATIC_BSS_START, - (void*)SDK_STATIC_BSS_END, - (void*)0, // CompressedStaticEnd. This fixed number will be updated by compstatic tool. - (void*)SDK_CURRENT_VERSION_NUMBER, - (void*)SDK_NITROCODE_BE, - (void*)SDK_NITROCODE_LE, -}; - -extern void SDK_LTDAUTOLOAD_LIST(void); -extern void SDK_LTDAUTOLOAD_LIST_END(void); -extern void SDK_LTDAUTOLOAD_START(void); - -void* const _start_LtdModuleParams[] = -{ - (void*)SDK_LTDAUTOLOAD_LIST, - (void*)SDK_LTDAUTOLOAD_LIST_END, - (void*)SDK_LTDAUTOLOAD_START, - (void*)0, // CompressedLtdautoloadEnd. This fixed number will be updated by compstatic tool. - (void*)SDK_TWLCODE_BE, - (void*)SDK_TWLCODE_LE, -}; - -extern void SDK_LTDAUTOLOAD_LTDMAIN_START(void); - -void* const _start_LtdMainParams[] = -{ - (void*)SDK_LTDAUTOLOAD_LTDMAIN_START, -}; - -#ifdef DEBUG_WRAM_SETTING -u32 const wramMapping[12] = { - 0x8d898581, 0x8c888480, 0x9c989490, 0x8c888480, - 0x9c989490, 0x00000000, 0x09403900, 0x09803940, - 0x00403000, 0x09403900, 0x09803940, 0x0300000f -}; -#endif - -#define DIGEST_HASH_BLOCK_SIZE_SHA1 (512/8) -static const u8 s_digestDefaultKey[ DIGEST_HASH_BLOCK_SIZE_SHA1 ] = -{ - 0x21, 0x06, 0xc0, 0xde, - 0xba, 0x98, 0xce, 0x3f, - 0xa6, 0x92, 0xe3, 0x9d, - 0x46, 0xf2, 0xed, 0x01, - - 0x76, 0xe3, 0xcc, 0x08, - 0x56, 0x23, 0x63, 0xfa, - 0xca, 0xd4, 0xec, 0xdf, - 0x9a, 0x62, 0x78, 0x34, - - 0x8f, 0x6d, 0x63, 0x3c, - 0xfe, 0x22, 0xca, 0x92, - 0x20, 0x88, 0x97, 0x23, - 0xd2, 0xcf, 0xae, 0xc2, - - 0x32, 0x67, 0x8d, 0xfe, - 0xca, 0x83, 0x64, 0x98, - 0xac, 0xfd, 0x3e, 0x37, - 0x87, 0x46, 0x58, 0x24, -}; - -/* IPL ɂăCɓWJ̃AhX` */ -#define IPL_PARAM_DOWNLOAD_PARAMETER 0x023fe904 -#define IPL_PARAM_CARD_ROM_HEADER 0x023fe940 - -/*---------------------------------------------------------------------------* - Name: ShakeHand - Description: ARM9 ShakeHand ֐ƓB - CłȂԂŎsKvB - Arguments: r0 - ARM9 pϐւ̃|C^B - r1 - ARM7 pϐւ̃|C^B - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_ShakeHand[10] = -{ - 0xe1d020b0, /* ldrh r2, [r0] ; ϐXLǂ */ - 0xe1d130b0, /* ldrh r3, [r1] ; ϐVLǂ */ - 0xe2833001, /* @1: add r3, r3, #1 ; ϐV ++ */ - 0xe1c130b0, /* strh r3, [r1] ; ϐVLɏ */ - 0xe1d0c0b0, /* ldrh r12, [r0] ; ϐX̌Lǂ */ - 0xe152000c, /* cmp r2, r12 ; ϐX̕ω𔻒肷 */ - 0x0afffffa, /* beq @1 ; ωĂȂ΃[v */ - 0xe2833001, /* add r3, r3, #1 ; ϐV ++ */ - 0xe1c130b0, /* strh r3, [r1] ; ϐVLɏ */ - 0xe12fff1e /* bx lr ; nhVFCN */ -}; - -#ifdef DEBUG_WRAM_SETTING -/*---------------------------------------------------------------------------* - Name: WaitAgreement - Description: ARM9 ̋NxN^̏ԂɂȂ܂ő҂B - CłȂԂŎsKvB - Arguments: r0 - ptF[YǗϐւ̃|C^B - r1 - ҋ@tF[YԍB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_WaitAgreement[7] = -{ - 0xe1d020b0, /* @1: ldrh r2, [r0] ; tF[YǗϐLǂ */ - 0xe1510002, /* cmp r1, r2 ; ҋ@tF[YԍƔr */ - 0x012fff1e, /* bxeq lr ; vĂΑҋ@ */ - 0xe3a03010, /* mov r3, #16 ; 󃋁[v񐔏 */ - 0xe2533001, /* @2: subs r3, r3, #1 ; 󃋁[v -- */ - 0x1afffffd, /* bne @2 ; 16 񃋁[v */ - 0xeafffff8 /* b @1 ; 擪ɖ߂ */ -}; -#endif - -/*---------------------------------------------------------------------------* - Name: GotoMain - Description: ARM9 ɓ̏ԂɂȂƂ`ŁAMain ֐փWv - BCłȂԂŎsKvB - Arguments: r0 - Main ֐̃|C^BMain ֐ Thumb R[hłꍇ - ɂ́Abx ߂ŃWv邽ߍʼnʃrbg 1 ɂȂ - KvB - r1 - ptF[YǗϐւ̃|C^B - r2 - ARM9 ɓ`tF[YԍB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_GotoMain[2] = -{ - 0xe1c120b0, /* strh r2, [r1] ; tF[YǗϐXV */ - 0xe12fff10 /* bx r0 ; Main ֐փWv */ -}; - -/*---------------------------------------------------------------------------*/ -#include - -/*---------------------------------------------------------------------------* - Name: _start - Description: NxN^B - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL asm void -_start(void) -{ -@000: - /* 荞݋֎~ */ - mov r12, #HW_REG_BASE - str r12, [r12, #REG_IME_OFFSET] // Use that LSB of HW_REG_BASE is 0b0 - - /* nhVFCNp}CNR[hp WRAM ɃRs[ */ - ldr r1, =microcode_ShakeHand - ldr r2, =HW_PRV_WRAM - add r3, r2, #40 -@001: ldr r0, [r1], #4 - str r0, [r2], #4 - cmp r2, r3 - blt @001 - - /* p WRAM ̃R[h ARM9 ƃnhVFCN */ - ldr r0, =HW_BOOT_SHAKEHAND_9 - ldr r1, =HW_BOOT_SHAKEHAND_7 - ldr r2, =HW_PRV_WRAM - mov lr, pc - bx r2 - - // [hꂽAṽ_CWFXgvZăAvԃp[^Ɋi[ - bl INITi_SetHMACSHA1ToAppParam - -@010: - /* X^bN|C^ݒ */ - mov r0, #HW_PSR_SVC_MODE // SuperVisor mode - msr cpsr_c, r0 - ldr sp, =HW_PRV_WRAM_SVC_STACK_END - mov r0, #HW_PSR_IRQ_MODE // IRQ mode - msr cpsr_c, r0 - ldr sp, =HW_PRV_WRAM_IRQ_STACK_END - ldr r1, =SDK_IRQ_STACKSIZE - sub r1, sp, r1 - sub sp, sp, #4 // 4 bytes for stack check code - mov r0, #HW_PSR_SYS_MODE // System mode - msr cpsr_csfx, r0 - sub sp, r1, #4 // 4 bytes for stack check code - - /* X^bN̈NA */ - ldr r0, =SDK_SYS_STACKSIZE - sub r1, r1, r0 - ldr r2, =HW_PRV_WRAM_IRQ_STACK_END - mov r0, #0 -@011: cmp r1, r2 - strlt r0, [r1], #4 - blt @011 - - /* SCFG HW_SYS_CONF_BUF փRs[ */ - bl INIT_InitializeScfg - bl INITi_CopySysConfig - - /* TWL n[hEFAœ삵Ă邩ǂ𒲍 */ - bl INITi_IsRunOnTwl - bne @013 - - /* TWL n[hEFAœ삵Ăꍇ */ - /* v[hp[^AhXi[ĂȂꍇ́AftHglZbg */ - ldr r0, =HW_PRELOAD_PARAMETER_ADDR - ldr r1, [r0] - cmp r1, #0 - ldreq r1, =HW_PARAM_TWL_SETTINGS_DATA_DEFAULT - streq r1, [r0] - - b @020 - -@013: /* NTR n[hEFAœ삵Ăꍇ */ - /* u[g^Cv MB ̏ꍇ̂݁AROM wb_ʒuɃRs[ */ - ldr r0, =HW_WM_BOOT_BUF - ldrh r0, [r0] - cmp r0, #OS_BOOTTYPE_DOWNLOAD_MB - bne @020 - /* J[h ROM wb_LGAɑޔ */ - ldr r0, =HW_CARD_ROM_HEADER - ldr r1, =IPL_PARAM_CARD_ROM_HEADER - mov r2, #HW_CARD_ROM_HEADER_SIZE - bl INITi_Copy32 - /* _E[hp[^LGAɑޔ */ - ldr r0, =HW_DOWNLOAD_PARAMETER - ldr r1, =IPL_PARAM_DOWNLOAD_PARAMETER - mov r2, #HW_DOWNLOAD_PARAMETER_SIZE - bl INITi_Copy32 - -@020: - /* Autoload { */ - bl INITi_DoAutoload - - /* STATIC ubN .bss ZNV 0 NA */ - mov r1, #0 // r1 = clear value for STATIC bss section - ldr r3, =_start_ModuleParams - ldr r0, [r3, #12] // r0 = start address of STATIC bss section - ldr r2, [r3, #16] - subs r2, r2, r0 // r2 = size of STATIC bss section - blgt INITi_Fill32 - - //---- detect main memory size - bl INITi_DetectMainMemorySize - -#ifndef SDK_FINALROM - //---- set debug print window - ldr r1, =HW_PRINT_OUTPUT_ARM9 - mov r0, #OS_PRINT_OUTPUT_DEFAULT_ARM9 - orr r0, r0, #(OS_PRINT_OUTPUT_DEFAULT_ARM7<<8) - strh r0, [r1] - mov r0, #OS_PRINT_OUTPUT_DEFAULT_ARM9ERR - orr r0, r0, #(OS_PRINT_OUTPUT_DEFAULT_ARM7ERR<<8) - strh r0, [r1, #2] -#endif - - /* 荞݃xN^ݒ */ - ldr r1, =HW_INTR_VECTOR_BUF - ldr r0, =OS_IrqHandler - str r0, [r1] - -#ifndef SDK_NOINIT - /* c++ p */ - bl _fp_init - bl TwlSpStartUp - bl __call_static_initializers - bl INITi_CallStaticInitializers -#endif - -@030: - /* Main ֐ւ̃Wvp}CNR[hX^bN̒ɃRs[ */ - ldr r1, =microcode_GotoMain - ldr r0, [r1], #4 - str r0, [sp, #-4] - ldr r0, [r1] - str r0, [sp] - - /* }CNR[hoR Main ֐փWv */ - ldr r0, =TwlSpMain - ldr r1, =HW_BOOT_SYNC_PHASE - mov r2, #BOOT_SYNC_PHASE_4 - ldr lr, =HW_RESET_VECTOR - sub r3, sp, #4 - bx r3 -} - -#include -#include -#include -/*---------------------------------------------------------------------------* - Name: INITi_SetHMACSHA1ToAppParam - Description: ROM[hꂽeAv̈HMACSHA1vZÃAh - Xɕۑ - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -#define UNDEF_CODE 0xe7ffdeff -#define ENCRYPT_DEF_SIZE 0x800 -#define DGT_TGT_ADDR ( HW_MAIN_MEM + 0x0100 ) - -static void INITi_SetHMACSHA1ToAppParam(void) -{ - SVCHMACSHA1Context *pCon = ( SVCHMACSHA1Context * ) (0x2000300 - sizeof(SVCHMACSHA1Context)); - ROM_Header_Short *pROMH = (ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF; - u32 bak; - - // arm9_flx - bak = *(u32 *)pROMH->main_autoload_done; - *(u32 *)pROMH->main_autoload_done = 0xE12FFF1E; - SVC_HMACSHA1Init(pCon, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1); - SVC_HMACSHA1Update(pCon, pROMH->main_ram_address, pROMH->main_size); - SVC_HMACSHA1GetHash(pCon, (void *)DGT_TGT_ADDR); - *(u32 *)pROMH->main_autoload_done = bak; - // arm7_flx - bak = *(u32 *)pROMH->sub_autoload_done; - *(u32 *)pROMH->sub_autoload_done = 0xE12FFF1E; - SVC_HMACSHA1Init(pCon, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1); - SVC_HMACSHA1Update(pCon, pROMH->sub_ram_address, pROMH->sub_size); - SVC_HMACSHA1GetHash(pCon, (void *)(DGT_TGT_ADDR + 32)); - *(u32 *)pROMH->sub_autoload_done = bak; - // arm9_ltd - SVC_HMACSHA1Init(pCon, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1); - SVC_HMACSHA1Update(pCon, pROMH->main_ltd_ram_address, pROMH->main_ltd_size); - SVC_HMACSHA1GetHash(pCon, (void *)(DGT_TGT_ADDR + 2 * 32)); - // arm7_ltd - SVC_HMACSHA1Init(pCon, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1); - SVC_HMACSHA1Update(pCon, pROMH->sub_ltd_ram_address, pROMH->sub_ltd_size); - SVC_HMACSHA1GetHash(pCon, (void *)(DGT_TGT_ADDR + 3 * 32)); -} - -/*---------------------------------------------------------------------------* - Name: INITi_DoAutoload - Description: NɉāAeI[g[hubŇŒf[^̓WJ - yѕϐ 0 NAsB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -/* - * < iKI[g[h > - * 0x02380000 crt0 yшiڃ[hoCizuĂB - * NITRO ƋL”\ WRAM ɔzuׂoCif[^ 0x037f8000 Ƀ[hB - * NITRO ƋL”\ MAIN ɔzuׂoCif[^ 0x02fe0000 Ƀ[hB - * NITRO ƋL”\ VRAM ɔzuׂoCif[^ꍇ WVR Cũ[_֐ĂяoB - * 0x02400000 ARM9 ̓iڃ[hoCizuĂB - * 0x04000 oCg̓J[h ROM ēǂݏos‚Ȃ̂ŁA0x02f80000 - 0x02f84000 ɑޔB - * 0x02e80000 ɓiڃ[hoCizuĂB - * 0x04000 oCg̓J[h ROM ēǂݏos‚Ȃ̂ŁA0x02f84000 - 0x02f88000 ɑޔB - * TWL ł삵Ȃ WRAM ɔzuׂoCif[^ 0x03000000 Ƀ[hB - * TWL ł삵Ȃ MAIN ɔzuׂoCif[^ 0x02f88000 Ƀ[hB - */ -static asm void -INITi_DoAutoload(void) -{ - stmfd sp!, {lr} - -@01_autoload: - /* NITRO pubNI[g[h */ - ldr r0, =_start_ModuleParams - ldr r12, [r0] // r12 = SDK_AUTOLOAD_LIST - ldr r3, [r0, #4] // r3 = SDK_AUTOLOAD_LIST_END - ldr r1, [r0, #8] // r1 = SDK_AUTOLOAD_START -@01_segments_loop: - cmp r12, r3 - bge @02_start - /* VRAM ւ̃I[g[hubNǂ𒲍 */ - ldr r0, [r12], #4 // r0 = start address of destination range of fixed section - ldr r2, =HW_EXT_WRAM - cmp r0, r2 - beq @01_shelter_vram_segment - /* ŒZNV */ - ldr r2, [r12], #4 // r2 = size of fixed section - bl INITi_Copy32 - stmfd sp!, {r0, r1} - /* static initializer e[u */ - ldr r0, [r12], #4 // r0 = start address of source range of static initializers table -#ifndef SDK_NOINIT - stmfd sp!, {r3, r12} - bl INITi_ShelterStaticInitializer - ldmfd sp!, {r3, r12} -#endif - /* bss ZNV */ - ldmfd sp!, {r0} // r0 = start address of destination range of bss section - mov r1, #0 // r1 = clear value for bss section - ldr r2, [r12], #4 // r2 = size of bss section - bl INITi_Fill32 - ldmfd sp!, {r1} // r1 = end address of source range of the autoload segment - b @01_segments_loop - -@01_shelter_vram_segment: - ldr r2, [r12], #12 // r2 = size of fixed section - add r1, r1, r2 // r1 = end address of source range of the autoload segment - /* VRAM ւ̃I[g[hubNobNAbv */ - stmfd sp!, {r1, r3, r12} - bl WVR_ShelterExtWram - ldmfd sp!, {r1, r3, r12} - b @01_segments_loop - -@02_start: - /* TWL n[hEFAœ삵Ă邩ǂ */ - bl INITi_IsRunOnTwl - bne @03_start - /* ēǂݏos•ޔ */ - bl INITi_ShelterLtdBinary - - /* TWL pI[g[hubN݂̑mF */ - ldr r1, =HW_TWL_ROM_HEADER_BUF - ldr r0, [r1, #ROM_Header.s.sub_ltd_size] - cmp r0, #0 - beq @03_start - -@02_autoload: - /* TWL pubNI[g[h */ - ldr r0, =_start_LtdModuleParams - ldr r12, [r0] // r12 = SDK_LTDAUTOLOAD_LIST - ldr r3, [r0, #4] // r3 = SDK_LTDAUTOLOAD_LIST_END - ldr r1, [r0, #8] // r1 = SDK_LTDAUTOLOAD_START -@02_segments_loop: - cmp r12, r3 - bge @03_start - /* ŒZNV */ - ldr r0, [r12], #4 // r0 = start address of destination range of fixed section - ldr r2, [r12], #4 // r2 = size of fixed section - bl INITi_Copy32 - stmfd sp!, {r0, r1} - /* static initializer e[u */ - ldr r0, [r12], #4 -#ifndef SDK_NOINIT - stmfd sp!, {r3, r12} - bl INITi_ShelterStaticInitializer - ldmfd sp!, {r3, r12} -#endif - /* bss ZNV */ - ldmfd sp!, {r0} // r0 = start address of destination range of bss section - mov r1, #0 // r1 = clear value for bss section - ldr r2, [r12], #4 // r2 = size of bss section - bl INITi_Fill32 - ldmfd sp!, {r1} // r1 = end address of source range of the ltdautoload segment - b @02_segments_loop - -@03_start: - /* I[g[hR[obN֐Ăяo */ - ldr r0, =_start_ModuleParams - ldr r1, =_start_LtdModuleParams - ldmfd sp!, {lr} - b _start_AutoloadDoneCallback -} - -/*---------------------------------------------------------------------------* - Name: INITi_ShelterLtdBinary - Description: TWL p̃I[g[hoCif[^̓AJ[h ROM - ēǂݏołȂ̈̃f[^ޔGAɑޔB - ēǂݏołȂ̈̃f[^ ARM7 p ARM9 p̊g풓 - W[̂Q‚ɕÔ\̂ŁA璷ł͂邪 - ̐擪 0x4000 ꂼޔB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_ShelterLtdBinary(void) -{ - stmfd sp!, {lr} - - /* NAND u[gꍇɂ͑ޔf[^̎gȂׁAXLbv */ - ldr r3, =HW_TWL_ROM_HEADER_BUF - ldr r0, [r3, #ROM_Header.s.titleID_Hi] - tst r0, #TITLE_ID_HI_MEDIA_MASK - ldmnefd sp!, {pc} - -@shelter_arm7_ltdautoload_src: - /* ARM7 pg풓W[݂̑mF */ - ldr r1, [r3, #ROM_Header.s.sub_ltd_size] - cmp r1, #0 - beq @shelter_arm9_ltdautoload_src - - /* ARM7 pg풓W[̐擪 16K bytes ޔ */ - ldr r1, [r3, #ROM_Header.s.sub_ltd_ram_address] - ldr r0, =_start_LtdMainParams - ldr r0, [r0] - mov r2, #0x4000 // r2 = size of shelter buffer - sub r0, r0, r2 // r0 = SDK_LTDAUTOLOAD_LTDMAIN_START - 0x4000 - bl INITi_Copy32 - -@shelter_arm9_ltdautoload_src: - /* ARM9 pg풓W[݂̑mF */ - ldr r3, =HW_TWL_ROM_HEADER_BUF - ldr r1, [r3, #ROM_Header.s.main_ltd_size] - cmp r1, #0 - beq @end - - /* ARM9 pg풓W[̐擪 16K bytes ޔ */ - ldr r1, [r3, #ROM_Header.s.main_ltd_ram_address] - ldr r0, =_start_LtdMainParams - ldr r0, [r0] - mov r2, #0x4000 // r2 = size of shelter buffer - sub r0, r0, r2 - sub r0, r0, r2 // r0 = SDK_LTDAUTOLOAD_LTDMAIN_START - 0x8000 - bl INITi_Copy32 - -@end: - ldmfd sp!, {pc} -} - -#ifndef SDK_NOINIT -/*---------------------------------------------------------------------------* - Name: INITi_ShelterStaticInitializer - Description: eI[g[hZOg static initializer ւ̃|C^ - e[u IRQ X^bN̍ŏ㕔ɑޔB - Arguments: ptr - ZOg̃|C^e[uւ̃|C^B - e[u NULL ŏI[ĂKvB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_ShelterStaticInitializer(u32* ptr) -{ - /* mF */ - cmp r0, #0 - bxeq lr - - /* ޔꏊ擪AhXvZ */ - ldr r1, =HW_PRV_WRAM_IRQ_STACK_END - ldr r2, =SDK_IRQ_STACKSIZE - sub r1, r1, r2 - add r1, r1, #4 - - /* ޔꏊ擪󂫏ꏊ𒲍 */ -@001: ldr r2, [r1] - cmp r2, #0 - addne r1, r1, #4 - bne @001 - - /* 󂫏ꏊɃe[uRs[ */ -@002: ldr r2, [r0], #4 - str r2, [r1], #4 - cmp r2, #0 - bne @002 - - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_CallStaticInitializers - Description: eI[g[hZOg static initializer ĂяoB - I[g[hɂ IRQ X^bN̍ŏ㕔ɑޔĂ - ֐|C^e[u‚ŒĂяoB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_CallStaticInitializers(void) -{ - stmdb sp!, {lr} - - /* e[uޔꏊ擪AhXvZ */ - ldr r1, =HW_PRV_WRAM_IRQ_STACK_END - ldr r2, =SDK_IRQ_STACKSIZE - sub r1, r1, r2 - add r1, r1, #4 - - /* e[uɊǗĂ|C^‚ŒĂяo */ -@001: ldr r0, [r1] - cmp r0, #0 - beq @002 - stmdb sp!, {r1} - mov lr, pc - bx r0 - ldmia sp!, {r1} - /* UĂяo|C^̓[NA (IRQX^bNԎ؂肵Ă) */ - mov r0, #0 - str r0, [r1], #4 - b @001 - -@002: ldmia sp!, {lr} - bx lr -} -#endif - -/*---------------------------------------------------------------------------* - Name: _start_AutoloadDoneCallback - Description: I[g[hR[obNB - Arguments: argv - I[g[hp[^ێĂzB - argv[0] = SDK_AUTOLOAD_LIST - argv[1] = SDK_AUTOLOAD_LIST_END - argv[2] = SDK_AUTOLOAD_START - argv[3] = SDK_STATIC_BSS_START - argv[4] = SDK_STATIC_BSS_END - Returns: ȂB - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL asm void -_start_AutoloadDoneCallback(void* argv[]) -{ - bx lr -} - -/*---------------------------------------------------------------------------* - Name: NitroSpStartUp - Description: Hook for user start up. - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL void -NitroSpStartUp(void) -{ -} - -/*---------------------------------------------------------------------------* - Name: INITi_IsRunOnTwl - - Description: check running platform - - This function is used in only Nitro-TWL hybrid mode. - (In Nitro mode and TWL limited mode, treated as constant) - - Arguments: None - - Returns: TRUE : running on TWL - FALSE : running on NITRO - *---------------------------------------------------------------------------*/ -static asm BOOL INITi_IsRunOnTwl( void ) -{ - ldr r0, =HW_PRV_WRAM_SYSRV - ldrb r0, [r0,#HWi_WSYS08_WRAMOFFSET] - and r0, r0, #HWi_WSYS08_ROM_ARM9SEC_MASK | HWi_WSYS08_ROM_ARM9RSEL_MASK - cmp r0, #HWi_WSYS08_ROM_ARM9SEC_MASK - moveq r0, #TRUE - movne r0, #FALSE - - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INIT_InitializeScfg - - Description: [_[s SCFG ubNւ̐ݒ菈sׂ̊֐B - ̎̂ crt0 ̊Oɒ`邽߁AV{ƂB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL asm void -INIT_InitializeScfg(void) -{ - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_CopySysConfig - - Description: copy SCFG registers to HW_SYS_CONF_BUF and HW_PRV_WRAM_SYSRV - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static asm void INITi_CopySysConfig( void ) -{ - //---- copy scfg setting - ldr r2, =HW_PRV_WRAM_SYSRV - ldr r3, =HW_SYS_CONF_BUF - ldr r0, [r2, #HWi_WSYS04_WRAMOFFSET] - str r0, [r3, #HWi_WSYS04_OFFSET] - ldrh r0, [r2, #HWi_WSYS08_WRAMOFFSET] - strh r0, [r3, #HWi_WSYS08_OFFSET] - - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_DetectMainMemorySize - - Description: detect main memory size. - result is written into (u32*)HW_MMEMCHECKER_SUB. - value is [OS_CONSOLE_SIZE_4MB|OS_CONSOLE_SIZE_8MB| - OS_CONSOLE_SIZE_16MB|OS_CONSOLE_SIZE_32MB] - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -#define OSi_IMAGE_DIFFERENCE 0x400000 -#define OSi_IMAGE_DIFFERENCE2 0xb000000 -#define OSi_DETECT_NITRO_MASK (REG_SND_SMX_CNT_E_MASK | REG_SND_SMX_CNT_FSEL_MASK) -#define OSi_DETECT_NITRO_VAL (REG_SND_SMX_CNT_E_MASK) - -#define OSi_CHECKNUM1 0x55 -#define OSi_CHECKNUM2 0xaa -#define OSi_100usWAIT 3352 // 100us = 3351.4cycles(33.514MHz) - -static asm void INITi_DetectMainMemorySize( void ) -{ - stmfd sp!, {lr} - - //---- detect memory size - mov r0, #OS_CONSOLE_SIZE_4MB - mov r1, #0 - - ldr r2, =HW_MMEMCHECKER_SUB - sub r3, r2, #OSi_IMAGE_DIFFERENCE -@1: - strh r1, [r2] - ldrh r12, [r3] - cmp r1, r12 - bne @2 - - add r1, r1, #1 - cmp r1, #2 // check 2 loop - bne @1 - - //---- 4MB - b @3 - - //---- 8MB or 16MB or 32MB -@2: - // check if running on twl/nitro - bl INITi_IsRunOnTwl - movne r0, #OS_CONSOLE_SIZE_8MB - bne @3 - - //---- 16MB or 32MB - add r3, r2, #OSi_IMAGE_DIFFERENCE2 - mov r0, #OS_CONSOLE_SIZE_16MB - ldrb r2, [r3] - - mov r1, #OSi_CHECKNUM1 - strb r1, [r3] - - ldr r12, =OSi_100usWAIT -@4 subs r12, r12, #4 - bcs @4 - - ldrb r1, [r3] - cmp r1, #OSi_CHECKNUM1 - bne @3 - - mov r1, #OSi_CHECKNUM2 - strb r1, [r3] - - ldr r12, =OSi_100usWAIT -@5 subs r12, r12, #4 - bcs @5 - - ldrb r1, [r3] - cmp r1, #OSi_CHECKNUM2 - moveq r0, #OS_CONSOLE_SIZE_32MB - -@3: - //---- check SMX_CNT - strb r2, [r3] - ldr r3, =REG_SMX_CNT_ADDR - ldrh r1, [r3] - and r1, r1, #OSi_DETECT_NITRO_MASK - cmp r1, #OSi_DETECT_NITRO_VAL - orreq r0, r0, #OS_CHIPTYPE_SMX_MASK - - ldr r2, =HW_MMEMCHECKER_SUB - strh r0, [r2] - - ldmfd sp!, {lr} - bx lr -} - -/*---------------------------------------------------------------------------* - Name: WVR_ShelterExtWram - Description: WVR Cup g WRAM ɔzuI[g[hubN - Cɑޔ֐̃_~[B - ۂɊg WRAM ɃCuzuKv̂R|[lg - ł́A֐̋V{ʓrNB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL void -WVR_ShelterExtWram(void) -{ -} - -/*---------------------------------------------------------------------------* - Name: INITi_Copy32 - Description: ”\Ȍ 32 oCgPʂŁA[ȕ 4 oCgPʂŃRs[ - sB - X^bN 36 oCg邪AWX^ r3 - r12 ͔j󂵂ȂB - Arguments: r0 - Rs[ւ̃|C^ ( 4 oCgAC )B - r1 - Rs[ւ̃|C^ ( 4 oCgAC )B - r2 - Rs[钷oCgPʂŎw ( 4 ̔{ )B - Returns: r0 - Rs[̃Rs[ւ̃|C^ ( r0 + r2 )B - r1 - Rs[̃Rs[ւ̃|C^ ( r1 + r2 )B - *---------------------------------------------------------------------------*/ -static asm void* -INITi_Copy32(void* dst, void* src, u32 size) -{ - stmfd sp!, {r3-r11} - bics r3, r2, #0x0000001f - beq @next - add r3, r0, r3 -@loop: - ldmia r1!, {r4-r11} - stmia r0!, {r4-r11} - cmp r3, r0 - bgt @loop -@next: - tst r2, #0x00000010 - ldmneia r1!, {r4-r7} - stmneia r0!, {r4-r7} - tst r2, #0x00000008 - ldmneia r1!, {r4-r5} - stmneia r0!, {r4-r5} - tst r2, #0x00000004 - ldmneia r1!, {r4} - stmneia r0!, {r4} - ldmfd sp!, {r3-r11} - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_Fill32 - Description: ”\Ȍ 32 oCgPʂŁA[ȕ 4 oCgPʂŃobt@ - ewf[^Ŗ߂B - X^bN 36 oCg邪AWX^ r3 - r12 ͔j󂵂ȂB - Arguments: r0 - obt@ւ̃|C^ ( 4 oCgAC )B - r1 - obt@𖄂߂e 32 bit lŎwB - r2 - obt@𖄂߂钷oCgPʂŎw ( 4 ̔{ )B - Returns: r0 - ̃obt@ւ̃|C^ ( r0 + r2 )B - *---------------------------------------------------------------------------*/ -static asm void* -INITi_Fill32(void* dst, u32 value, u32 size) -{ - stmfd sp!, {r3-r11} - mov r4, r1 - mov r5, r1 - mov r6, r1 - mov r7, r1 - mov r8, r1 - mov r9, r1 - mov r10, r1 - mov r11, r1 - bics r3, r2, #0x0000001f - beq @next - add r3, r0, r3 -@loop: - stmia r0!, {r4-r11} - cmp r3, r0 - bgt @loop -@next: - tst r2, #0x00000010 - stmneia r0!, {r4-r7} - tst r2, #0x00000008 - stmneia r0!, {r4-r5} - tst r2, #0x00000004 - stmneia r0!, {r4} - ldmfd sp!, {r3-r11} - bx lr -} - -#include diff --git a/build/tests/HashCheckTemplate/crt/ARM7/src/crt0_hct.LTD.c b/build/tests/HashCheckTemplate/crt/ARM7/src/crt0_hct.LTD.c deleted file mode 100644 index 110841fd..00000000 --- a/build/tests/HashCheckTemplate/crt/ARM7/src/crt0_hct.LTD.c +++ /dev/null @@ -1,861 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - libraries - init - ARM7.TWL - File: crt0.LTD.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "boot_sync.h" - -/*---------------------------------------------------------------------------*/ -void _start(void); -void _start_AutoloadDoneCallback(void* argv[]); -void INIT_InitializeScfg(void); - -#define SDK_NITROCODE_LE 0x2106c0de -#define SDK_NITROCODE_BE 0xdec00621 - -#define SDK_TWLCODE_LE 0x6314c0de -#define SDK_TWLCODE_BE 0xdec01463 - -/* O֐Qƒ` */ -extern void OS_IrqHandler(void); -extern void _fp_init(void); -extern void __call_static_initializers(void); - -/* ֐vg^Cv` */ -static void INITi_SetHMACSHA1ToAppParam(void); -static void INITi_DoAutoload(void); -static void INITi_ShelterLtdBinary(void); -static BOOL INITi_IsRunOnTwl( void ); -static void INITi_CopySysConfig( void ); -static void INITi_DetectMainMemorySize(void); -#ifndef SDK_NOINIT -static void INITi_ShelterStaticInitializer(u32* ptr); -static void INITi_CallStaticInitializers(void); -#endif -static void* INITi_Copy32(void* dst, void* src, u32 size); -static void* INITi_Fill32(void* dst, u32 value, u32 size); - -/* JXNvgɂ`V{Q */ -extern void SDK_AUTOLOAD_LIST(void); -extern void SDK_AUTOLOAD_LIST_END(void); -extern void SDK_AUTOLOAD_START(void); -extern void SDK_STATIC_BSS_START(void); -extern void SDK_STATIC_BSS_END(void); - -void* const _start_ModuleParams[] = -{ - (void*)SDK_AUTOLOAD_LIST, - (void*)SDK_AUTOLOAD_LIST_END, - (void*)SDK_AUTOLOAD_START, - (void*)SDK_STATIC_BSS_START, - (void*)SDK_STATIC_BSS_END, - (void*)0, // CompressedStaticEnd. This fixed number will be updated by compstatic tool. - (void*)SDK_CURRENT_VERSION_NUMBER, - (void*)SDK_NITROCODE_BE, - (void*)SDK_NITROCODE_LE, -}; - -extern void SDK_LTDAUTOLOAD_LIST(void); -extern void SDK_LTDAUTOLOAD_LIST_END(void); -extern void SDK_LTDAUTOLOAD_START(void); - -void* const _start_LtdModuleParams[] = -{ - (void*)SDK_LTDAUTOLOAD_LIST, - (void*)SDK_LTDAUTOLOAD_LIST_END, - (void*)SDK_LTDAUTOLOAD_START, - (void*)0, // CompressedLtdautoloadEnd. This fixed number will be updated by compstatic tool. - (void*)SDK_TWLCODE_BE, - (void*)SDK_TWLCODE_LE, -}; - -extern void SDK_LTDAUTOLOAD_LTDMAIN_START(void); - -void* const _start_LtdMainParams[] = -{ - (void*)SDK_LTDAUTOLOAD_LTDMAIN_START, -}; - -#ifdef DEBUG_WRAM_SETTING -u32 const wramMapping[12] = { - 0x8d898581, 0x8c888480, 0x9c989490, 0x8c888480, - 0x9c989490, 0x00000000, 0x09403900, 0x09803940, - 0x080037c0, 0x09403900, 0x09803940, 0x0000000f -}; -#endif - -#define DIGEST_HASH_BLOCK_SIZE_SHA1 (512/8) -static const u8 s_digestDefaultKey[ DIGEST_HASH_BLOCK_SIZE_SHA1 ] = -{ - 0x21, 0x06, 0xc0, 0xde, - 0xba, 0x98, 0xce, 0x3f, - 0xa6, 0x92, 0xe3, 0x9d, - 0x46, 0xf2, 0xed, 0x01, - - 0x76, 0xe3, 0xcc, 0x08, - 0x56, 0x23, 0x63, 0xfa, - 0xca, 0xd4, 0xec, 0xdf, - 0x9a, 0x62, 0x78, 0x34, - - 0x8f, 0x6d, 0x63, 0x3c, - 0xfe, 0x22, 0xca, 0x92, - 0x20, 0x88, 0x97, 0x23, - 0xd2, 0xcf, 0xae, 0xc2, - - 0x32, 0x67, 0x8d, 0xfe, - 0xca, 0x83, 0x64, 0x98, - 0xac, 0xfd, 0x3e, 0x37, - 0x87, 0x46, 0x58, 0x24, -}; - -/*---------------------------------------------------------------------------* - Name: ShakeHand - Description: ARM9 ShakeHand ֐ƓB - CłȂԂŎsKvB - Arguments: r0 - ARM9 pϐւ̃|C^B - r1 - ARM7 pϐւ̃|C^B - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_ShakeHand[10] = -{ - 0xe1d020b0, /* ldrh r2, [r0] ; ϐXLǂ */ - 0xe1d130b0, /* ldrh r3, [r1] ; ϐVLǂ */ - 0xe2833001, /* @1: add r3, r3, #1 ; ϐV ++ */ - 0xe1c130b0, /* strh r3, [r1] ; ϐVLɏ */ - 0xe1d0c0b0, /* ldrh r12, [r0] ; ϐX̌Lǂ */ - 0xe152000c, /* cmp r2, r12 ; ϐX̕ω𔻒肷 */ - 0x0afffffa, /* beq @1 ; ωĂȂ΃[v */ - 0xe2833001, /* add r3, r3, #1 ; ϐV ++ */ - 0xe1c130b0, /* strh r3, [r1] ; ϐVLɏ */ - 0xe12fff1e /* bx lr ; nhVFCN */ -}; - -#ifdef DEBUG_WRAM_SETTING -/*---------------------------------------------------------------------------* - Name: WaitAgreement - Description: ARM9 ̋NxN^̏ԂɂȂ܂ő҂B - CłȂԂŎsKvB - Arguments: r0 - ptF[YǗϐւ̃|C^B - r1 - ҋ@tF[YԍB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_WaitAgreement[7] = -{ - 0xe1d020b0, /* @1: ldrh r2, [r0] ; tF[YǗϐLǂ */ - 0xe1510002, /* cmp r1, r2 ; ҋ@tF[YԍƔr */ - 0x012fff1e, /* bxeq lr ; vĂΑҋ@ */ - 0xe3a03010, /* mov r3, #16 ; 󃋁[v񐔏 */ - 0xe2533001, /* @2: subs r3, r3, #1 ; 󃋁[v -- */ - 0x1afffffd, /* bne @2 ; 16 񃋁[v */ - 0xeafffff8 /* b @1 ; 擪ɖ߂ */ -}; -#endif - -/*---------------------------------------------------------------------------* - Name: GotoMain - Description: ARM9 ɓ̏ԂɂȂƂ`ŁAMain ֐փWv - BCłȂԂŎsKvB - Arguments: r0 - Main ֐̃|C^BMain ֐ Thumb R[hłꍇ - ɂ́Abx ߂ŃWv邽ߍʼnʃrbg 1 ɂȂ - KvB - r1 - ptF[YǗϐւ̃|C^B - r2 - ARM9 ɓ`tF[YԍB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_GotoMain[2] = -{ - 0xe1c120b0, /* strh r2, [r1] ; tF[YǗϐXV */ - 0xe12fff10 /* bx r0 ; Main ֐փWv */ -}; - -/*---------------------------------------------------------------------------*/ -#include - -/*---------------------------------------------------------------------------* - Name: _start - Description: NxN^B - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL asm void -_start(void) -{ -@000: - /* 荞݋֎~ */ - mov r12, #HW_REG_BASE - str r12, [r12, #REG_IME_OFFSET] // Use that LSB of HW_REG_BASE is 0b0 - - /* nhVFCNp}CNR[hp WRAM ɃRs[ */ - ldr r1, =microcode_ShakeHand - ldr r2, =HW_PRV_WRAM - add r3, r2, #40 -@001: ldr r0, [r1], #4 - str r0, [r2], #4 - cmp r2, r3 - blt @001 - - /* p WRAM ̃R[h ARM9 ƃnhVFCN */ - ldr r0, =HW_BOOT_SHAKEHAND_9 - ldr r1, =HW_BOOT_SHAKEHAND_7 - ldr r2, =HW_PRV_WRAM - mov lr, pc - bx r2 - - // [hꂽAṽ_CWFXgvZăAvԃp[^Ɋi[ - bl INITi_SetHMACSHA1ToAppParam - -@010: - /* X^bN|C^ݒ */ - mov r0, #HW_PSR_SVC_MODE // SuperVisor mode - msr cpsr_c, r0 - ldr sp, =HW_PRV_WRAM_SVC_STACK_END - mov r0, #HW_PSR_IRQ_MODE // IRQ mode - msr cpsr_c, r0 - ldr sp, =HW_PRV_WRAM_IRQ_STACK_END - ldr r1, =SDK_IRQ_STACKSIZE - sub r1, sp, r1 - sub sp, sp, #4 // 4 bytes for stack check code - mov r0, #HW_PSR_SYS_MODE - msr cpsr_csfx, r0 - sub sp, r1, #4 // 4 bytes for stack check code - - /* X^bN̈NA */ - ldr r0, =SDK_SYS_STACKSIZE - sub r1, r1, r0 - ldr r2, =HW_PRV_WRAM_IRQ_STACK_END - mov r0, #0 -@011: cmp r1, r2 - strlt r0, [r1], #4 - blt @011 - - /* SCFG HW_SYS_CONF_BUF փRs[ */ - bl INIT_InitializeScfg - bl INITi_CopySysConfig - - /* TWL n[hEFAœ삵Ă邩ǂ𒲍 */ - bl INITi_IsRunOnTwl - /* TWL n[hEFAœ삵ĂȂꍇ͉iv[v */ -@012: bne @012 - - /* v[hp[^AhXi[ĂȂꍇ́AftHglZbg */ - ldr r0, =HW_PRELOAD_PARAMETER_ADDR - ldr r1, [r0] - cmp r1, #0 - ldreq r1, =HW_PARAM_TWL_SETTINGS_DATA_DEFAULT - streq r1, [r0] - -@020: - /* Autoload { */ - bl INITi_DoAutoload - - /* STATIC ubN .bss ZNV 0 NA */ - mov r1, #0 // r1 = clear value for STATIC bss section - ldr r3, =_start_ModuleParams - ldr r0, [r3, #12] // r0 = start address of STATIC bss section - ldr r2, [r3, #16] - subs r2, r2, r0 // r2 = size of STATIC bss section - blgt INITi_Fill32 - - //---- detect main memory size - bl INITi_DetectMainMemorySize - -#ifndef SDK_FINALROM - //---- set debug print window - ldr r1, =HW_PRINT_OUTPUT_ARM9 - mov r0, #OS_PRINT_OUTPUT_DEFAULT_ARM9 - orr r0, r0, #(OS_PRINT_OUTPUT_DEFAULT_ARM7<<8) - strh r0, [r1] - mov r0, #OS_PRINT_OUTPUT_DEFAULT_ARM9ERR - orr r0, r0, #(OS_PRINT_OUTPUT_DEFAULT_ARM7ERR<<8) - strh r0, [r1, #2] -#endif - - /* 荞݃xN^ݒ */ - ldr r1, =HW_INTR_VECTOR_BUF - ldr r0, =OS_IrqHandler - str r0, [r1] - -#ifndef SDK_NOINIT - /* c++ p */ - bl _fp_init - bl TwlSpStartUp - bl __call_static_initializers - bl INITi_CallStaticInitializers -#endif - -@030: - /* Main ֐ւ̃Wvp}CNR[hX^bN̒ɃRs[ */ - ldr r1, =microcode_GotoMain - ldr r0, [r1], #4 - str r0, [sp, #-4] - ldr r0, [r1] - str r0, [sp] - - /* }CNR[hoR Main ֐փWv */ - ldr r0, =TwlSpMain - ldr r1, =HW_BOOT_SYNC_PHASE - mov r2, #BOOT_SYNC_PHASE_4 - ldr lr, =HW_RESET_VECTOR - sub r3, sp, #4 - bx r3 -} - -#include -#include -#include -/*---------------------------------------------------------------------------* - Name: INITi_SetHMACSHA1ToAppParam - Description: ROM[hꂽeAv̈HMACSHA1vZÃAh - Xɕۑ - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -#define UNDEF_CODE 0xe7ffdeff -#define ENCRYPT_DEF_SIZE 0x800 -#define DGT_TGT_ADDR ( HW_MAIN_MEM + 0x0100 ) - -static void INITi_SetHMACSHA1ToAppParam(void) -{ - SVCHMACSHA1Context *pCon = ( SVCHMACSHA1Context * ) (0x2000300 - sizeof(SVCHMACSHA1Context)); - ROM_Header_Short *pROMH = (ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF; - u32 bak; - - // arm9_flx - bak = *(u32 *)pROMH->main_autoload_done; - *(u32 *)pROMH->main_autoload_done = 0xE12FFF1E; - SVC_HMACSHA1Init(pCon, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1); - SVC_HMACSHA1Update(pCon, pROMH->main_ram_address, pROMH->main_size); - SVC_HMACSHA1GetHash(pCon, (void *)DGT_TGT_ADDR); - *(u32 *)pROMH->main_autoload_done = bak; - // arm7_flx - bak = *(u32 *)pROMH->sub_autoload_done; - *(u32 *)pROMH->sub_autoload_done = 0xE12FFF1E; - SVC_HMACSHA1Init(pCon, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1); - SVC_HMACSHA1Update(pCon, pROMH->sub_ram_address, pROMH->sub_size); - SVC_HMACSHA1GetHash(pCon, (void *)(DGT_TGT_ADDR + 32)); - *(u32 *)pROMH->sub_autoload_done = bak; - // arm9_ltd - SVC_HMACSHA1Init(pCon, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1); - SVC_HMACSHA1Update(pCon, pROMH->main_ltd_ram_address, pROMH->main_ltd_size); - SVC_HMACSHA1GetHash(pCon, (void *)(DGT_TGT_ADDR + 2 * 32)); - // arm7_ltd - SVC_HMACSHA1Init(pCon, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1); - SVC_HMACSHA1Update(pCon, pROMH->sub_ltd_ram_address, pROMH->sub_ltd_size); - SVC_HMACSHA1GetHash(pCon, (void *)(DGT_TGT_ADDR + 3 * 32)); -} - -/*---------------------------------------------------------------------------* - Name: INITi_DoAutoload - Description: NɉāAeI[g[hubŇŒf[^̓WJ - yѕϐ 0 NAsB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -/* - * < iKI[g[h > - * 0x02380000 crt0 yшiڃ[hoCizuĂB - * NITRO ƋL”\ WRAM ɔzuׂoCif[^ 0x037c0000 Ƀ[hB - * TWL ł삵Ȃ WRAM ɔzuׂoCif[^𑱂̃AhXɃ[hB - * 0x02400000 ARM9 ̓iڃ[hoCizuĂB - * 0x04000 oCg̓J[h ROM ēǂݏos‚Ȃ̂ŁA0x02f80000 - 0x02f84000 ɑޔB - * 0x02e80000 ɓiڃ[hoCizuĂB - * 0x04000 oCg̓J[h ROM ēǂݏos‚Ȃ̂ŁA0x02f84000 - 0x02f88000 ɑޔB - * NITRO ƋL”\ MAIN ɔzuׂoCif[^ 0x02f88000 Ƀ[hB - * TWL ł삵Ȃ MAIN ɔzuׂoCif[^𑱂̃AhXɃ[hB - */ -static asm void -INITi_DoAutoload(void) -{ - stmfd sp!, {lr} - -@01_autoload: - /* WRAM pubNI[g[h */ - ldr r0, =_start_ModuleParams - ldr r12, [r0] // r12 = SDK_AUTOLOAD_LIST - ldr r3, [r0, #4] // r3 = SDK_AUTOLOAD_LIST_END - ldr r1, [r0, #8] // r1 = SDK_AUTOLOAD_START -@01_segments_loop: - cmp r12, r3 - bge @02_start - /* ŒZNV */ - ldr r0, [r12], #4 // r0 = start address of destination range of fixed section - ldr r2, [r12], #4 // r2 = size of fixed section - bl INITi_Copy32 - stmfd sp!, {r0, r1} - /* static initializer e[u */ - ldr r0, [r12], #4 // r0 = start address of source range of static initializers table -#ifndef SDK_NOINIT - stmfd sp!, {r3, r12} - bl INITi_ShelterStaticInitializer - ldmfd sp!, {r3, r12} -#endif - /* bss ZNV */ - ldmfd sp!, {r0} // r0 = start address of destination range of bss section - mov r1, #0 // r1 = clear value for bss section - ldr r2, [r12], #4 // r2 = size of bss section - bl INITi_Fill32 - ldmfd sp!, {r1} // r1 = end address of source range of the autoload segment - b @01_segments_loop - -@02_start: -#ifndef SDK_SYSMENU_BUILD - /* ēǂݏos•ޔ */ - bl INITi_ShelterLtdBinary -#endif // SDK_SYSMENU_BUILD - - /* CpI[g[hubN݂̑mF */ - ldr r1, =HW_TWL_ROM_HEADER_BUF - ldr r0, [r1, #ROM_Header.s.sub_ltd_size] - cmp r0, #0 - beq @03_start - -@02_autoload: - /* CpubNI[g[h */ - ldr r0, =_start_LtdModuleParams - ldr r12, [r0] // r12 = SDK_LTDAUTOLOAD_LIST - ldr r3, [r0, #4] // r3 = SDK_LTDAUTOLOAD_LIST_END - ldr r1, [r0, #8] // r1 = SDK_AUTOLOAD_START -@02_segments_loop: - cmp r12, r3 - bge @03_start - /* ŒZNV */ - ldr r0, [r12], #4 - ldr r2, [r12], #4 - bl INITi_Copy32 - stmfd sp!, {r0, r1} - /* static initializer e[u */ - ldr r0, [r12], #4 -#ifndef SDK_NOINIT - stmfd sp!, {r3, r12} - bl INITi_ShelterStaticInitializer - ldmfd sp!, {r3, r12} -#endif - /* bss ZNV */ - ldmfd sp!, {r0} - mov r1, #0 - ldr r2, [r12], #4 - bl INITi_Fill32 - ldmfd sp!, {r1} - b @02_segments_loop - -@03_start: - /* I[g[hR[obN֐Ăяo */ - ldr r0, =_start_ModuleParams - ldr r1, =_start_LtdModuleParams - ldmfd sp!, {lr} - b _start_AutoloadDoneCallback -} - -/*---------------------------------------------------------------------------* - Name: INITi_ShelterLtdBinary - Description: TWL p̃I[g[hoCif[^̓AJ[h ROM - ēǂݏołȂ̈̃f[^ޔGAɑޔB - ēǂݏołȂ̈̃f[^ ARM7 p ARM9 p̊g풓 - W[̂Q‚ɕÔ\̂ŁA璷ł͂邪 - ̐擪 0x4000 ꂼޔB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_ShelterLtdBinary(void) -{ - stmfd sp!, {lr} - - /* NAND u[gꍇɂ͑ޔf[^̎gȂׁAXLbv */ - ldr r3, =HW_TWL_ROM_HEADER_BUF - ldr r0, [r3, #ROM_Header.s.titleID_Hi] - tst r0, #TITLE_ID_HI_MEDIA_MASK - ldmnefd sp!, {pc} - -@shelter_arm7_ltdautoload_src: - /* ARM7 pg풓W[݂̑mF */ - ldr r1, [r3, #ROM_Header.s.sub_ltd_size] - cmp r1, #0 - beq @shelter_arm9_ltdautoload_src - - /* ARM7 pg풓W[̐擪 16K bytes ޔ */ - ldr r1, [r3, #ROM_Header.s.sub_ltd_ram_address] - ldr r0, =_start_LtdMainParams - ldr r0, [r0] - mov r2, #0x4000 // r2 = size of shelter buffer - sub r0, r0, r2 // r0 = SDK_LTDAUTOLOAD_LTDMAIN_START - 0x4000 - bl INITi_Copy32 - -@shelter_arm9_ltdautoload_src: - /* ARM9 pg풓W[݂̑mF */ - ldr r3, =HW_TWL_ROM_HEADER_BUF - ldr r1, [r3, #ROM_Header.s.main_ltd_size] - cmp r1, #0 - beq @end - - /* ARM9 pg풓W[̐擪 16K bytes ޔ */ - ldr r1, [r3, #ROM_Header.s.main_ltd_ram_address] - ldr r0, =_start_LtdMainParams - ldr r0, [r0] - mov r2, #0x4000 // r2 = size of shelter buffer - sub r0, r0, r2 - sub r0, r0, r2 // r0 = SDK_LTDAUTOLOAD_LTDMAIN_START - 0x8000 - bl INITi_Copy32 - -@end: - ldmfd sp!, {pc} -} - -#ifndef SDK_NOINIT -/*---------------------------------------------------------------------------* - Name: INITi_ShelterStaticInitializer - Description: eI[g[hZOg static initializer ւ̃|C^ - e[u IRQ X^bN̍ŏ㕔ɑޔB - Arguments: ptr - ZOg̃|C^e[uւ̃|C^B - e[u NULL ŏI[ĂKvB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_ShelterStaticInitializer(u32* ptr) -{ - /* mF */ - cmp r0, #0 - bxeq lr - - /* ޔꏊ擪AhXvZ */ - ldr r1, =HW_PRV_WRAM_IRQ_STACK_END - ldr r2, =SDK_IRQ_STACKSIZE - sub r1, r1, r2 - add r1, r1, #4 - - /* ޔꏊ擪󂫏ꏊ𒲍 */ -@001: ldr r2, [r1] - cmp r2, #0 - addne r1, r1, #4 - bne @001 - - /* 󂫏ꏊɃe[uRs[ */ -@002: ldr r2, [r0], #4 - str r2, [r1], #4 - cmp r2, #0 - bne @002 - - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_CallStaticInitializers - Description: eI[g[hZOg static initializer ĂяoB - I[g[hɂ IRQ X^bN̍ŏ㕔ɑޔĂ - ֐|C^e[u‚ŒĂяoB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_CallStaticInitializers(void) -{ - stmdb sp!, {lr} - - /* e[uޔꏊ擪AhXvZ */ - ldr r1, =HW_PRV_WRAM_IRQ_STACK_END - ldr r2, =SDK_IRQ_STACKSIZE - sub r1, r1, r2 - add r1, r1, #4 - - /* e[uɊǗĂ|C^‚ŒĂяo */ -@001: ldr r0, [r1] - cmp r0, #0 - beq @002 - stmdb sp!, {r1} - mov lr, pc - bx r0 - ldmia sp!, {r1} - /* UĂяo|C^̓[NA (IRQX^bNԎ؂肵Ă) */ - mov r0, #0 - str r0, [r1], #4 - b @001 - -@002: ldmia sp!, {lr} - bx lr -} -#endif - -/*---------------------------------------------------------------------------* - Name: _start_AutoloadDoneCallback - Description: I[g[hR[obNB - Arguments: argv - I[g[hp[^ێĂzB - argv[0] = SDK_AUTOLOAD_LIST - argv[1] = SDK_AUTOLOAD_LIST_END - argv[2] = SDK_AUTOLOAD_START - argv[3] = SDK_STATIC_BSS_START - argv[4] = SDK_STATIC_BSS_END - Returns: ȂB - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL asm void -_start_AutoloadDoneCallback(void* argv[]) -{ - bx lr -} - -/*---------------------------------------------------------------------------* - Name: NitroSpStartUp - Description: Hook for user start up. - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL void -NitroSpStartUp(void) -{ -} - -/*---------------------------------------------------------------------------* - Name: INITi_IsRunOnTwl - - Description: check running platform - - This function is used in only Nitro-TWL hybrid mode. - (In Nitro mode and TWL limited mode, treated as constant) - - Arguments: None - - Returns: TRUE : running on TWL - FALSE : running on NITRO - *---------------------------------------------------------------------------*/ -static asm BOOL INITi_IsRunOnTwl( void ) -{ - ldr r0, =HW_PRV_WRAM_SYSRV - ldrb r0, [r0,#HWi_WSYS08_WRAMOFFSET] - and r0, r0, #HWi_WSYS08_ROM_ARM9SEC_MASK | HWi_WSYS08_ROM_ARM9RSEL_MASK - cmp r0, #HWi_WSYS08_ROM_ARM9SEC_MASK - moveq r0, #TRUE - movne r0, #FALSE - - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INIT_InitializeScfg - - Description: [_[s SCFG ubNւ̐ݒ菈sׂ̊֐B - ̎̂ crt0 ̊Oɒ`邽߁AV{ƂB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL asm void -INIT_InitializeScfg(void) -{ - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_CopySysConfig - - Description: copy SCFG registers to HW_SYS_CONF_BUF and HW_PRV_WRAM_SYSRV - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static asm void INITi_CopySysConfig( void ) -{ - //---- copy scfg setting - ldr r2, =HW_PRV_WRAM_SYSRV - ldr r3, =HW_SYS_CONF_BUF - ldr r0, [r2, #HWi_WSYS04_WRAMOFFSET] - str r0, [r3, #HWi_WSYS04_OFFSET] - ldrh r0, [r2, #HWi_WSYS08_WRAMOFFSET] - strh r0, [r3, #HWi_WSYS08_OFFSET] - - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_DetectMainMemorySize - - Description: detect main memory size. - result is written into (u32*)HW_MMEMCHECKER_SUB. - value is [OS_CONSOLE_SIZE_4MB|OS_CONSOLE_SIZE_8MB| - OS_CONSOLE_SIZE_16MB|OS_CONSOLE_SIZE_32MB] - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -#define OSi_IMAGE_DIFFERENCE 0x400000 -#define OSi_IMAGE_DIFFERENCE2 0xb000000 -#define OSi_DETECT_NITRO_MASK (REG_SND_SMX_CNT_E_MASK | REG_SND_SMX_CNT_FSEL_MASK) -#define OSi_DETECT_NITRO_VAL (REG_SND_SMX_CNT_E_MASK) - -#define OSi_CHECKNUM1 0x55 -#define OSi_CHECKNUM2 0xaa -#define OSi_100usWAIT 3352 // 100us = 3351.4cycles(33.514MHz) - -static asm void INITi_DetectMainMemorySize( void ) -{ - stmfd sp!, {lr} - - //---- detect memory size - mov r0, #OS_CONSOLE_SIZE_4MB - mov r1, #0 - - ldr r2, =HW_MMEMCHECKER_SUB - sub r3, r2, #OSi_IMAGE_DIFFERENCE -@1: - strh r1, [r2] - ldrh r12, [r3] - cmp r1, r12 - bne @2 - - add r1, r1, #1 - cmp r1, #2 // check 2 loop - bne @1 - - //---- 4MB - b @3 - - //---- 8MB or 16MB or 32MB -@2: - // check if running on twl/nitro - bl INITi_IsRunOnTwl - movne r0, #OS_CONSOLE_SIZE_8MB - bne @3 - - //---- 16MB or 32MB - add r3, r2, #OSi_IMAGE_DIFFERENCE2 - mov r0, #OS_CONSOLE_SIZE_16MB - ldrb r2, [r3] - - mov r1, #OSi_CHECKNUM1 - strb r1, [r3] - - ldr r12, =OSi_100usWAIT -@4 subs r12, r12, #4 - bcs @4 - - ldrb r1, [r3] - cmp r1, #OSi_CHECKNUM1 - bne @3 - - mov r1, #OSi_CHECKNUM2 - strb r1, [r3] - - ldr r12, =OSi_100usWAIT -@5 subs r12, r12, #4 - bcs @5 - - ldrb r1, [r3] - cmp r1, #OSi_CHECKNUM2 - moveq r0, #OS_CONSOLE_SIZE_32MB - -@3: - //---- check SMX_CNT - strb r2, [r3] - ldr r3, =REG_SMX_CNT_ADDR - ldrh r1, [r3] - and r1, r1, #OSi_DETECT_NITRO_MASK - cmp r1, #OSi_DETECT_NITRO_VAL - orreq r0, r0, #OS_CHIPTYPE_SMX_MASK - - ldr r2, =HW_MMEMCHECKER_SUB - strh r0, [r2] - - ldmfd sp!, {lr} - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_Copy32 - Description: ”\Ȍ 32 oCgPʂŁA[ȕ 4 oCgPʂŃRs[ - sB - X^bN 36 oCg邪AWX^ r3 - r12 ͔j󂵂ȂB - Arguments: r0 - Rs[ւ̃|C^ ( 4 oCgAC )B - r1 - Rs[ւ̃|C^ ( 4 oCgAC )B - r2 - Rs[钷oCgPʂŎw ( 4 ̔{ )B - Returns: r0 - Rs[̃Rs[ւ̃|C^ ( r0 + r2 )B - r1 - Rs[̃Rs[ւ̃|C^ ( r1 + r2 )B - *---------------------------------------------------------------------------*/ -static asm void* -INITi_Copy32(void* dst, void* src, u32 size) -{ - stmfd sp!, {r3-r11} - bics r3, r2, #0x0000001f - beq @next - add r3, r0, r3 -@loop: - ldmia r1!, {r4-r11} - stmia r0!, {r4-r11} - cmp r3, r0 - bgt @loop -@next: - tst r2, #0x00000010 - ldmneia r1!, {r4-r7} - stmneia r0!, {r4-r7} - tst r2, #0x00000008 - ldmneia r1!, {r4-r5} - stmneia r0!, {r4-r5} - tst r2, #0x00000004 - ldmneia r1!, {r4} - stmneia r0!, {r4} - ldmfd sp!, {r3-r11} - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_Fill32 - Description: ”\Ȍ 32 oCgPʂŁA[ȕ 4 oCgPʂŃobt@ - ewf[^Ŗ߂B - X^bN 36 oCg邪AWX^ r3 - r12 ͔j󂵂ȂB - Arguments: r0 - obt@ւ̃|C^ ( 4 oCgAC )B - r1 - obt@𖄂߂e 32 bit lŎwB - r2 - obt@𖄂߂钷oCgPʂŎw ( 4 ̔{ )B - Returns: r0 - ̃obt@ւ̃|C^ ( r0 + r2 )B - *---------------------------------------------------------------------------*/ -static asm void* -INITi_Fill32(void* dst, u32 value, u32 size) -{ - stmfd sp!, {r3-r11} - mov r4, r1 - mov r5, r1 - mov r6, r1 - mov r7, r1 - mov r8, r1 - mov r9, r1 - mov r10, r1 - mov r11, r1 - bics r3, r2, #0x0000001f - beq @next - add r3, r0, r3 -@loop: - stmia r0!, {r4-r11} - cmp r3, r0 - bgt @loop -@next: - tst r2, #0x00000010 - stmneia r0!, {r4-r7} - tst r2, #0x00000008 - stmneia r0!, {r4-r5} - tst r2, #0x00000004 - stmneia r0!, {r4} - ldmfd sp!, {r3-r11} - bx lr -} - -#include diff --git a/build/tests/HashCheckTemplate/crt/Makefile b/build/tests/HashCheckTemplate/crt/Makefile deleted file mode 100644 index e7337139..00000000 --- a/build/tests/HashCheckTemplate/crt/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - libraries - init -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TARGET_PLATFORM := TWL NITRO - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS = ARM7 - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/crt/common/include/boot_sync.h b/build/tests/HashCheckTemplate/crt/common/include/boot_sync.h deleted file mode 100644 index c744ffe2..00000000 --- a/build/tests/HashCheckTemplate/crt/common/include/boot_sync.h +++ /dev/null @@ -1,35 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - libraries - init - common - File: boot_sync.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef TWL_LIBRARIES_INIT_COMMON_BOOT_SYNC_H_ -#define TWL_LIBRARIES_INIT_COMMON_BOOT_SYNC_H_ -#ifdef __cplusplus -extern "C" { -#endif -/*---------------------------------------------------------------------------*/ - -#define BOOT_SYNC_PHASE_1 1 -#define BOOT_SYNC_PHASE_2 2 -#define BOOT_SYNC_PHASE_3 3 -#define BOOT_SYNC_PHASE_4 4 -#define BOOT_SYNC_PHASE_5 5 -#define BOOT_SYNC_PHASE_6 6 - -/*---------------------------------------------------------------------------*/ -#ifdef __cplusplus -} /* extern "C" */ -#endif -#endif /* TWL_LIBRARIES_INIT_COMMON_BOOT_SYNC_H_ */ diff --git a/build/tests/HashCheckTemplate/memo.txt b/build/tests/HashCheckTemplate/memo.txt deleted file mode 100644 index cf41343d..00000000 --- a/build/tests/HashCheckTemplate/memo.txt +++ /dev/null @@ -1,49 +0,0 @@ -yISfobKR[hύXӏz -EARM9.flx.static, ARM7.flx.static - _start_AutoloadDoneCallback̐擪R[hISfobK̃j^vOւ̕ɏ̂ŁA -@nbV𐳂vZꍇ́ÃAhX̃R[hX̒lł0xE12FFF1E(= BX LR)ɃAvŏĂ -@KvB -Eu[N|Cgݒӏ -@u[N|Cgݒӏ́AfobKɂĖ`߂ߍ܂̂ŁAnbV𐳂vZꍇ́ASĂ -@u[N|Cg𖳌ɂKvB - -ȂÁAP̃u[gȂ牽PAȂOK. - - - -yblowfishÍVXeR[z -ARM9FLX̐擪0x800oCg(2koCg)̓VXeR[zuABlowfishÍĂiÍ̈jB -ŁA`[u[gOɈÍB -wb_ɖߍ܂ĂARM9FLX̃nbV́AÍꂽԂł̃nbVłB -HashCheckTemplateARM9FLX̃nbVvZ鎞_ł́AłɈÍĂ邽߁AvZȂB -ǂɂĉÖÍ̈ɓKvB - - -EROMwb_"NTRJ"̏ꍇ -@AvP[VŏLÍ̈00Ŗ߂ΌvZB -@HashCheckTemplatê悤ȃeXgvOł́AÍ̈00Ŗ߂邽߂łB -@Í̈悪00ł̊mF -@1)ÍA擪0x800oCĝ擪2oCg̈Íʂ"encryObj"łȂꍇ͑Ŝ̈ÍAꏈ -@ ƂĖ`߃R[hi0xe7ffdeffjŖ߂B -@ āAÍ̈ɓ镔sɖ`߃R[hŖ܂Ă̂mFΗǂB - -@2)makeromʔłmakerom.TWL.DEBUG.exe/makerom.TWL.sys.DEBUG.exe/makerom.TWL.secure.DEBUG.exegpBiSDKɓYtj -@ makeromgpāAMAKEROM_FLAGSŁA-DSYSCALL_C̎wȂꍇAROMwb_nitro_whitelist_phase2_diegst -@ LÍ̈ԂARM9.FLX.static̃nbVli[B - -EROMwb_"NTRJ"ȊO̐ROMwb_gpĂꍇ -@makeromʔłmakerom.TWL.DEBUG.exe/makerom.TWL.sys.DEBUG.exe/makerom.TWL.secure.DEBUG.exegpBiSDKɓYtj -@makeromgpāAMAKEROM_FLAGS += -DSYSCALL_C='hoge/libsyscall_c.bin'̌`ŁAROMwb_ɓYtĂ -@N[u[gp̃fR[hς݃VXeR[oCiw肷邱ƂŁAROMwb_nitro_whitelist_phase2_diegst -@LÍ̈fR[hԂARM9.FLX.static̃nbVli[B - - - -ystaticTCYgz -@makeromʔłmakerom.TWL.DEBUG.exe/makerom.TWL.sys.DEBUG.exe/makerom.TWL.secure.DEBUG.exegpBiSDKɓYtj -@MAKEROM_FLAGSɉL`lj邱ƂŁAΏۃZOgwTCY_lŊgłB - ARM9.FLX.static : -DARM9FLX_EXPAND=gTCY@i`[Őu[g”\ max TCY = 0x27c000) - ARM7.FLX.static : -DARM7FLX_EXPAND=gTCY@i@@V@@@@@@@@@@ max TCY = 0x40000) - ARM9.LTD.static : -DARM9LTD_EXPAND=gTCY@i@@V@@@@@@@@@@ max TCY = 0x280000) - ARM7.LTD.static : -DARM7LTD_EXPAND=gTCY@i@@V@@@@@@@@@@ max TCY = 0x108000) - diff --git a/build/tests/HashCheckTemplate/test_roms/rombreak.bat b/build/tests/HashCheckTemplate/test_roms/rombreak.bat deleted file mode 100644 index 83c6ea10..00000000 --- a/build/tests/HashCheckTemplate/test_roms/rombreak.bat +++ /dev/null @@ -1,199 +0,0 @@ -mkdir break_dev -mkdir prod -mkdir break_prod - -"../../../tools/rombreaker/rombreaker.exe" -i twl_0E8A.srl -b HEADER -o "break_dev/twl_0E8A.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0E9A.nand.srl -b HEADER -o "break_dev/twl_0E9A.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EAA.srl -b ARM9FLX -o "break_dev/twl_0EAA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EBA.nand.srl -b ARM9FLX -o "break_dev/twl_0EBA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0ECA.srl -b ARM7FLX -o "break_dev/twl_0ECA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EDA.nand.srl -b ARM7FLX -o "break_dev/twl_0EDA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EEA.srl -b ARM9LTD -o "break_dev/twl_0EEA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EFA.nand.srl -b ARM9LTD -o "break_dev/twl_0EFA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EGA.srl -b ARM7LTD -o "break_dev/twl_0EGA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EHA.nand.srl -b ARM7LTD -o "break_dev/twl_0EHA.nand.srl" - -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EIA.nand.srl -b HEADER -o "break_dev/twl_0EIA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EJA.nand.srl -b ARM9FLX -o "break_dev/twl_0EJA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EKA.nand.srl -b ARM7FLX -o "break_dev/twl_0EKA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0ELA.nand.srl -b ARM9LTD -o "break_dev/twl_0ELA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EMA.nand.srl -b ARM7LTD -o "break_dev/twl_0EMA.nand.srl" - -"../../../tools/rombreaker/rombreaker.exe" -i twl_0ENA.srl -b HEADER -o "break_dev/twl_0ENA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EOA.nand.srl -b HEADER -o "break_dev/twl_0EOA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EPA.srl -b ARM9FLX -o "break_dev/twl_0EPA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EQA.nand.srl -b ARM9FLX -o "break_dev/twl_0EQA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0ERA.srl -b ARM7FLX -o "break_dev/twl_0ERA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0ESA.nand.srl -b ARM7FLX -o "break_dev/twl_0ESA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0ETA.srl -b ARM9LTD -o "break_dev/twl_0ETA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EUA.nand.srl -b ARM9LTD -o "break_dev/twl_0EUA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EVA.srl -b ARM7LTD -o "break_dev/twl_0EVA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EWA.nand.srl -b ARM7LTD -o "break_dev/twl_0EWA.nand.srl" - -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0E8A.srl "prod/twl_0E8A.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0E9A.nand.srl "prod/twl_0E9A.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EAA.srl "prod/twl_0EAA.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EBA.nand.srl "prod/twl_0EBA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0ECA.srl "prod/twl_0ECA.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EDA.nand.srl "prod/twl_0EDA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EEA.srl "prod/twl_0EEA.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EFA.nand.srl "prod/twl_0EFA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EGA.srl "prod/twl_0EGA.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EHA.nand.srl "prod/twl_0EHA.nand.srl" - -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EIA.nand.srl "prod/twl_0EIA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EJA.nand.srl "prod/twl_0EJA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EKA.nand.srl "prod/twl_0EKA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0ELA.nand.srl "prod/twl_0ELA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EMA.nand.srl "prod/twl_0EMA.nand.srl" - -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0ENA.srl "prod/twl_0ENA.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EOA.nand.srl "prod/twl_0EOA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EPA.srl "prod/twl_0EPA.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EQA.nand.srl "prod/twl_0EQA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0ERA.srl "prod/twl_0ERA.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0ESA.nand.srl "prod/twl_0ESA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0ETA.srl "prod/twl_0ETA.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EUA.nand.srl "prod/twl_0EUA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EVA.srl "prod/twl_0EVA.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EWA.nand.srl "prod/twl_0EWA.nand.srl" - -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0E8A.srl -b HEADER -o "break_prod/twl_0E8A.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0E9A.nand.srl -b HEADER -o "break_prod/twl_0E9A.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EAA.srl -b ARM9FLX -o "break_prod/twl_0EAA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EBA.nand.srl -b ARM9FLX -o "break_prod/twl_0EBA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0ECA.srl -b ARM7FLX -o "break_prod/twl_0ECA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EDA.nand.srl -b ARM7FLX -o "break_prod/twl_0EDA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EEA.srl -b ARM9LTD -o "break_prod/twl_0EEA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EFA.nand.srl -b ARM9LTD -o "break_prod/twl_0EFA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EGA.srl -b ARM7LTD -o "break_prod/twl_0EGA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EHA.nand.srl -b ARM7LTD -o "break_prod/twl_0EHA.nand.srl" - -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EIA.nand.srl -b HEADER -o "break_prod/twl_0EIA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EJA.nand.srl -b ARM9FLX -o "break_prod/twl_0EJA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EKA.nand.srl -b ARM7FLX -o "break_prod/twl_0EKA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0ELA.nand.srl -b ARM9LTD -o "break_prod/twl_0ELA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EMA.nand.srl -b ARM7LTD -o "break_prod/twl_0EMA.nand.srl" - -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0ENA.srl -b HEADER -o "break_prod/twl_0ENA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EOA.nand.srl -b HEADER -o "break_prod/twl_0EOA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EPA.srl -b ARM9FLX -o "break_prod/twl_0EPA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EQA.nand.srl -b ARM9FLX -o "break_prod/twl_0EQA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0ERA.srl -b ARM7FLX -o "break_prod/twl_0ERA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0ESA.nand.srl -b ARM7FLX -o "break_prod/twl_0ESA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0ETA.srl -b ARM9LTD -o "break_prod/twl_0ETA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EUA.nand.srl -b ARM9LTD -o "break_prod/twl_0EUA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EVA.srl -b ARM7LTD -o "break_prod/twl_0EVA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EWA.nand.srl -b ARM7LTD -o "break_prod/twl_0EWA.nand.srl" - - -mkdir "break_dev/tad" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0E9A.nand.srl -v 0 -o break_dev/tad/twl_0E9A.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EBA.nand.srl -v 0 -o break_dev/tad/twl_0EBA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EDA.nand.srl -v 0 -o break_dev/tad/twl_0EDA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EFA.nand.srl -v 0 -o break_dev/tad/twl_0EFA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EHA.nand.srl -v 0 -o break_dev/tad/twl_0EHA.tad - -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EIA.nand.srl -s -v 0 -o break_dev/tad/twl_0EIA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EJA.nand.srl -s -v 0 -o break_dev/tad/twl_0EJA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EKA.nand.srl -s -v 0 -o break_dev/tad/twl_0EKA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0ELA.nand.srl -s -v 0 -o break_dev/tad/twl_0ELA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EMA.nand.srl -s -v 0 -o break_dev/tad/twl_0EMA.tad - -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EOA.nand.srl -s -v 0 -o break_dev/tad/twl_0EOA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EQA.nand.srl -s -v 0 -o break_dev/tad/twl_0EQA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0ESA.nand.srl -s -v 0 -o break_dev/tad/twl_0ESA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EUA.nand.srl -s -v 0 -o break_dev/tad/twl_0EUA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EWA.nand.srl -s -v 0 -o break_dev/tad/twl_0EWA.tad - -mkdir "break_prod/0E9A/v0" -cd "break_prod/0E9A/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0E9A.nand.srl -v 0 -p -o twl_0E9A.tad -mv properties ../ -cd ../../ - -mkdir "0EBA/v0" -cd "0EBA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EBA.nand.srl -v 0 -p -o twl_0EBA.tad -mv properties ../ -cd ../../ - -mkdir "0EDA/v0" -cd "0EDA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EDA.nand.srl -v 0 -p -o twl_0EDA.tad -mv properties ../ -cd ../../ - -mkdir "0EFA/v0" -cd "0EFA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EFA.nand.srl -v 0 -p -o twl_0EFA.tad -mv properties ../ -cd ../../ - -mkdir "0EHA/v0" -cd "0EHA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EHA.nand.srl -v 0 -p -o twl_0EHA.tad -mv properties ../ -cd ../../ - - -mkdir "0EIA/v0" -cd "0EIA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EIA.nand.srl -s -v 0 -p -o twl_0EIA.tad -mv properties ../ -cd ../../ - -mkdir "0EJA/v0" -cd "0EJA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EJA.nand.srl -s -v 0 -p -o twl_0EJA.tad -mv properties ../ -cd ../../ - -mkdir "0EKA/v0" -cd "0EKA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EKA.nand.srl -s -v 0 -p -o twl_0EKA.tad -mv properties ../ -cd ../../ - -mkdir "0ELA/v0" -cd "0ELA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0ELA.nand.srl -s -v 0 -p -o twl_0ELA.tad -mv properties ../ -cd ../../ - -mkdir "0EMA/v0" -cd "0EMA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EMA.nand.srl -s -v 0 -p -o twl_0EMA.tad -mv properties ../ -cd ../../ - - -mkdir "0EOA/v0" -cd "0EOA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EOA.nand.srl -s -v 0 -p -o twl_0EOA.tad -mv properties ../ -cd ../../ - -mkdir "0EQA/v0" -cd "0EQA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EQA.nand.srl -s -v 0 -p -o twl_0EQA.tad -mv properties ../ -cd ../../ - -mkdir "0ESA/v0" -cd "0ESA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0ESA.nand.srl -s -v 0 -p -o twl_0ESA.tad -mv properties ../ -cd ../../ - -mkdir "0EUA/v0" -cd "0EUA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EUA.nand.srl -s -v 0 -p -o twl_0EUA.tad -mv properties ../ -cd ../../ - -mkdir "0EWA/v0" -cd "0EWA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EWA.nand.srl -s -v 0 -p -o twl_0EWA.tad -mv properties ../ -cd ../../ diff --git a/build/tests/HashCheckTemplate/test_roms/破壊ずみROMの作り方.txt b/build/tests/HashCheckTemplate/test_roms/破壊ずみROMの作り方.txt deleted file mode 100644 index 10b74350..00000000 --- a/build/tests/HashCheckTemplate/test_roms/破壊ずみROMの作り方.txt +++ /dev/null @@ -1,9 +0,0 @@ -TestMaker - -make boottest -make - -ƁÃfBNgƃfBNgɂȂĂԂrombreak.batsB -ivexplorer_uNbNOKj - -braek_devbreak_prod̒srltad܂łB diff --git a/build/tests/Launcher_sdlog/Makefile b/build/tests/Launcher_sdlog/Makefile deleted file mode 100644 index 4b5881c4..00000000 --- a/build/tests/Launcher_sdlog/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -export SDLOG ?= ARM9 - -TARGET_FIRM = SYSTEMMENU - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -LAUNCHER_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/Launcher - -SUBMAKES = sdlog/Makefile scripts/Makefile \ - $(LAUNCHER_DIR)/banner/Makefile $(LAUNCHER_DIR)/ARM9/Makefile_sdlog - -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/Launcher_sdlog/jackal.TWL/Makefile b/build/tests/Launcher_sdlog/jackal.TWL/Makefile deleted file mode 100644 index c72c408c..00000000 --- a/build/tests/Launcher_sdlog/jackal.TWL/Makefile +++ /dev/null @@ -1,58 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - mongoose.TWL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -# Definition to override for jackal with sdlog -# - -LLIBRARIES += libossdlog_sp$(TWL_LIBSUFFIX).a -LLIBRARY_DIRS += $(call eupath, $(TWL_IPL_RED_ROOT)/build/tests/Launcher_sdlog/lib/$(TWL_LIBTYPE)) - -COMPONENT_DIR += $(SYSMENU_ROOT)/build/components/jackal.TWL -COMPONENT_SRC_DIR += $(COMPONENT_DIR)/../hyena.TWL/src - -override SUBDIRS = $(SYSMENU_ROOT)/build/libraries/aes \ - $(SYSMENU_ROOT)/build/components/jackal.TWL/wram_regs - -override SRCS =$(COMPONENT_SRC_DIR)/crt0.LTD.c $(COMPONENT_SRC_DIR)/main.c $(COMPONENT_SRC_DIR)/initScfg.c - -override TARGET_NAME = jackal - -# Generate my own lsf from original lsf of mongoose -LSF_ORG = $(COMPONENT_DIR)/$(TARGET_NAME).lsf -MAKE_LSF = make_lsf.pl -AUTOGEN_LSF = $(TARGET_NAME)_sdlog.lsf - -LDIRT_CLEAN = $(AUTOGEN_LSF) - -override TARGET_NEF = $(TARGET_NAME).tef -override LCFILE_SPEC = $(AUTOGEN_LSF) -override LCFILE_TEMPLATE = $(COMPONENT_DIR)/$(TARGET_NAME).lcf.template - -override TWL_INSTALL_COMPONENTSDIR= $(call eupath, $(TWL_IPL_RED_ROOT)/build/tests/Launcher_sdlog/components) -override INSTALL_DIR = $(TWL_INSTALL_COMPONENTSDIR)/$(TARGET_NAME)/$(TWL_BUILDTYPE) - -# - -include $(TWL_IPL_RED_ROOT)/build/components/jackal.TWL/Makefile - -$(AUTOGEN_LSF): $(LSF_ORG) $(MAKE_LSF) - @echo " make:" $@ - @perl $(MAKE_LSF) $(TARGET_NAME) - -#===== End of Makefile ===== - diff --git a/build/tests/Launcher_sdlog/jackal.TWL/make_lsf.pl b/build/tests/Launcher_sdlog/jackal.TWL/make_lsf.pl deleted file mode 100755 index cc4770f1..00000000 --- a/build/tests/Launcher_sdlog/jackal.TWL/make_lsf.pl +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlWLAN - components - mongoose_sdlog.TWL -# File: make_lsf.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $ROOT; - -my $COMPONENT = $ARGV[0]; -print $COMPONENT; -# search TWL_IPL_RED_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWL_IPL_RED_ROOT/s) { - $ROOT = $ENV{$_}; - } -} - -my $src = sprintf("$ROOT/build/components/%s.TWL/%s.lsf", $COMPONENT, $COMPONENT); -my $dst = sprintf("%s_sdlog.lsf", $COMPONENT); - - -my $rn = "\x0D\x0A"; - -open(F, $src) or die "cant open $src\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst") or die "cant open $dst\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/libos_sp/ ) - { - my $tmp = $line; - $tmp =~ s/libos_sp/libossdlog_sp/; - - print OUT $tmp; - next; - } - - print OUT $line; -} -close(OUT); diff --git a/build/tests/Launcher_sdlog/readme.txt b/build/tests/Launcher_sdlog/readme.txt deleted file mode 100644 index 1a1c542a..00000000 --- a/build/tests/Launcher_sdlog/readme.txt +++ /dev/null @@ -1,48 +0,0 @@ - SDLOGΉŃ`[ɂ‚ - -@ł̂ŃfobOpɁASDJ[hɃfobOvgo͂郉`[łB - -TwlIPL/build/tests/Launcher_sdlogɈړărhƁA -fBNgHNAA.tad쐬܂̂ŁANandInitializerImportĉB - -ARM9̃fobOvĝ݂o - -$ make SDLOG=ARM9 - -ARM9/ARM7̃fobOvgo - -$ make SDLOG=ALL - - - SDLOG()CuKt@X - -// SDLOGVXe̊JnBJnȍ~AOS_PrintfnASDOobt@ɒ~ρSDJ[hos܂B -// -// path: o͂t@CuSDJ[h̃fBNg(:sdmc:/log) -// filename: o͂t@C -// buffer: ÖꎞBʂ̃Ocꍇ 1KB ȏ𐄏 -// partitionSize: SD J[hɏރTCYB bufferSize 1/n 𐄏 -// writeType: ㏑ or NjL̎wBt@C݂Ȃꍇ͂ǂVK쐬ƂȂ - -BOOL SDLOG_InitEx(const char* path, const char* filename, char* buffer, u16 bufferSize, u16 partitionSize, SDLOGWriteType writeType); - -// OS_PrintfnȂ -// path: ۑB sdmc:/sample Ǝw肷 sdmc:/sample/Log0.log -// Oۑ(t@C͌ŒłB) -BOOL SDLOG_Init(const char* path, char* buffer, u16 bufferSize, u16 partitionSize, SDLOGWriteType writeType); - - -// SDLOGɃfobOoB -void SDLOG_Printf(const char *fmt, ...); - -// obt@ɒ߂ꂽOI SD J[hɏ -// ł͊mɃOoƂꏊɒlj邱Ƃ𐄏B -void SDLOG_Flush(void); - -// ܂oĂȂO SD J[hɏŃt@CN[Y -void SDLOG_FinishEx(void); // OS_Printf -void SDLOG_Finish(void); // OS_PrintfȂ - -// ARM7̃fobOOo -void SDLOG_PrintServer(void); - diff --git a/build/tests/Launcher_sdlog/scripts/Makefile b/build/tests/Launcher_sdlog/scripts/Makefile deleted file mode 100644 index 75bcf9e9..00000000 --- a/build/tests/Launcher_sdlog/scripts/Makefile +++ /dev/null @@ -1,60 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: SystemUpdater -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -LAUNCHER_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/Launcher - -SYSMENU_LIBRARIES_DIR = $(SYSMENU_ROOT)/build/libraries_sysmenu - -SYSTEMUPDATER_DIR = $(SYSMENU_ROOT)/build/systemMenu_tools/SystemUpdater - -SCRIPTS_DIR = . - -MAKEFILES_ORG = $(LAUNCHER_DIR)/ARM9/Makefile -MAKE_MAKEFILES = $(SCRIPTS_DIR)/sdlog_makefile.pl -AUTOGEN_MAKEFILES = $(LAUNCHER_DIR)/ARM9/Makefile_sdlog -LDIRT_CLEAN += $(AUTOGEN_MAKEFILES) - -MAIN_ORG = $(LAUNCHER_DIR)/ARM9/src/main.c -MAKE_MAIN = $(SCRIPTS_DIR)/sdlog_main_c.pl -AUTOGEN_MAIN = $(LAUNCHER_DIR)/ARM9/src/main_sdlog.c -LDIRT_CLEAN += $(AUTOGEN_MAIN) - - - -TARGETS = $(AUTOGEN_MAKEFILES) $(AUTOGEN_MAIN) - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -$(AUTOGEN_MAKEFILES): $(MAKEFILES_ORG) $(MAKE_MAKEFILES) - @echo " make:" $@ - @perl $(MAKE_MAKEFILES) - -$(AUTOGEN_MAIN): $(MAIN_ORG) $(MAKE_MAIN) - @echo " make:" $@ - @perl $(MAKE_MAIN) - -#===== End of Makefile ===== diff --git a/build/tests/Launcher_sdlog/scripts/sdlog_main_c.pl b/build/tests/Launcher_sdlog/scripts/sdlog_main_c.pl deleted file mode 100755 index 4ac96bbd..00000000 --- a/build/tests/Launcher_sdlog/scripts/sdlog_main_c.pl +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - -# File: sdlog_main_c.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $IPLROOT; - -# search TWL_IPL_RED_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWL_IPL_RED_ROOT/s) { - $IPLROOT = $ENV{$_}; - } -} - -my $src = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/src/main.c"; -my $dst = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/src/main_sdlog.c"; - - -my $rn = "\x0D\x0A"; - -open(F, $src) or die "cant open $src\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst") or die "cant open $dst\n"; -foreach my $line ( @lines ) -{ - print OUT $line; - - if( $line =~ m/^\#include \"scanWDS\.h\"/ ) - { - print OUT "//\t[AUTO COMMENT] SDLOG̃wb_CN[hAOpobt@`܂B", $rn; - print OUT <<__SDLOG_DEFINE__; -\#ifdef USE_SDLOG -\#include "sd_log_wrapper.h" -\#define BUFFER_SIZE 0x800 -char logBuffer[ (BUFFER_SIZE + 1) ]; -\#endif -__SDLOG_DEFINE__ - } - if( $line =~ m/^[\t ]*RTC_Init\(\);/ ) - { - print OUT "//\t[AUTO COMMENT] SDJ[hOS_Printf̃OL^邽߂ɁASDLOG܂B", $rn; - print OUT <<__SDLOG_INITEX__; -\#ifdef USE_SDLOG - { - RTCDate rDate; - RTCTime rTime; - char filename[FS_ENTRY_LONGNAME_MAX]; - - (void)RTC_GetDateTime(&rDate, &rTime); - OS_SPrintf(filename, "Launcher_%02d%02d%02d_%02d%02d.txt", - rDate.year, rDate.month, rDate.day, - rTime.hour, rTime.minute); - - SDLOG_InitEx("sdmc:/log", filename, logBuffer, - BUFFER_SIZE, 0x80, SDLOG_WRITE_TYPE_CONTINUANCE); - } -\#endif -__SDLOG_INITEX__ - } - - if( $line =~ m/^[\t ]*OS_SetIrqCheckFlag\(OS_IE_V_BLANK\);/ ) - { - print OUT <<__SDLOG_PRINTARM7__; -\#ifdef USE_SDLOG -\#ifdef USE_SDLOG_SUBP - SDLOG_PrintServer(); -\#endif -\#endif -__SDLOG_PRINTARM7__ - } - -} -close(OUT); - diff --git a/build/tests/Launcher_sdlog/scripts/sdlog_makefile.pl b/build/tests/Launcher_sdlog/scripts/sdlog_makefile.pl deleted file mode 100755 index 04931aa7..00000000 --- a/build/tests/Launcher_sdlog/scripts/sdlog_makefile.pl +++ /dev/null @@ -1,103 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - -# File: sdlog_makefile.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $IPLROOT; - -# search TWL_IPL_RED_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWL_IPL_RED_ROOT/s) { - $IPLROOT = $ENV{$_}; - } -} - -my $rn = "\x0D\x0A"; - -my $src = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/Makefile"; -my $dst = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/Makefile_sdlog"; - -open(F, $src) or die "cant open $src\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst") or die "cant open $dst\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/main\.c/ ) - { - $line =~ s/main\.c/main_sdlog\.c/; - } - - if( $line =~ m/^COMPONENT_DIR/ ) - { - $line =~ s/\/build\/components/\/build\/tests\/Launcher_sdlog/; - print OUT $line; - print OUT "override COMPONENTSDIR\t=\t\$(call eupath, \$(COMPONENT_DIR)/../components)", $rn; - next; - } - - if( $line =~ m/^WRAM_MAP_FILE[\t ]*=[\t ]*\$\(COMPONENT_DIR\)\/wram_regs\/wram_regs.rbin/ ) - { - $line =~ s/\$\(COMPONENT_DIR\)/\$\(TWL_IPL_RED_ROOT\)\/build\/components\/\$\(DEFAULT_COMP_ARM7\)\.TWL/; - } - - if( $line =~ m/^INSTALL_DIR/ ) - { - $line =~ s/\$\(SDK_NMENU_DATADIR\)/\$\(TWL_IPL_RED_ROOT\)\/build\/tests\/Launcher_sdlog/; - } - - if( $line =~ m/^TARGET_BIN[\t ]*=[\t ]*\$\(TITLEID_LO\)\.tad/ ) - { - $line =~ s/\.tad/_sdlog\.tad/; - print OUT <<__SDLOG_DESCRIPTIONS__; -\# -------------------------------------------------------------- -\# SDLOG -ifeq (\$(TWL_FINALROM),) \# SDLOG is enabled only on Release and Debug - -ifeq (\$(SDLOG), TRUE) -override SDLOG = ARM9 -endif - -ifneq (\$(filter ARM7,\$(SDLOG)),) -\$(error "Invalid SDLOG option : should be SDLOG=[ARM9/ALL]") -endif - -SDLOG_LIST = \$(if \$(filter ALL,\$(SDLOG)),ARM7 ARM9,\$(SDLOG)) - -ifneq (\$(filter ARM9,\$(SDLOG_LIST)),) -MACRO_FLAGS += -DUSE_SDLOG -ELIBRARIES += libsdlogRed\$(TWL_LIBSUFFIX).a -ELIBRARY_DIRS += \$(SYSMENU_ROOT)/build/tests/Launcher_sdlog/lib/\$(TWL_LIBTYPE) -EINCLUDES += \$(SYSMENU_ROOT)/build/tests/Launcher_sdlog/sdlog/ARM9.TWL/include \\ - \$(ROOT)/build/tests/sdlog/sdlog/include -ifneq (\$(filter ARM7,\$(SDLOG_LIST)),) -MACRO_FLAGS += -DUSE_SDLOG_SUBP -endif \# SDLOG [ARM7] -endif \# SDLOG [ARM9] - -endif \# FINALROM - -__SDLOG_DESCRIPTIONS__ - } - - print OUT $line; -} -close(OUT); - diff --git a/build/tests/Launcher_sdlog/sdlog/ARM7.TWL/Makefile b/build/tests/Launcher_sdlog/sdlog/ARM7.TWL/Makefile deleted file mode 100644 index 75ec2c71..00000000 --- a/build/tests/Launcher_sdlog/sdlog/ARM7.TWL/Makefile +++ /dev/null @@ -1,100 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- -override TARGET_PLATFORM = TWL - -TARGET_CODEGEN ?= ARM -TWL_ARCHGEN ?= LIMITED -TWL_PROC = ARM7 - -OS_LIBRARY_SRC_DIR_BASE = $(ROOT)/build/libraries/os -OS_LIBSRC_ARM7 = $(OS_LIBRARY_SRC_DIR_BASE)/ARM7/src -OS_LIBSRC_ARM7TWL = $(OS_LIBRARY_SRC_DIR_BASE)/ARM7.TWL/src -OS_LIBSRC_COMMON = $(OS_LIBRARY_SRC_DIR_BASE)/common/src - -SRCDIR = src ../common/src ../ARM7/src -INCDIR = $(OS_LIBSRC_ARM7TWL)/../../common/include - -SRCS = $(OS_LIBSRC_ARM7TWL)/os_irqHandler.c \ - $(OS_LIBSRC_COMMON)/os_irqTable.c \ - $(OS_LIBSRC_COMMON)/os_interrupt.c \ - $(OS_LIBSRC_COMMON)/os_pxi.c \ - $(OS_LIBSRC_COMMON)/os_spinLock.c \ - os_printf.c \ - $(OS_LIBSRC_COMMON)/os_thread.c \ - $(OS_LIBSRC_COMMON)/os_context.c \ - $(OS_LIBSRC_COMMON)/os_emulator.c \ - $(OS_LIBSRC_COMMON)/os_message.c \ - $(OS_LIBSRC_COMMON)/os_mutex.c \ - $(OS_LIBSRC_COMMON)/os_init.c \ - $(OS_LIBSRC_COMMON)/os_arena.c \ - $(OS_LIBSRC_COMMON)/os_alloc.c \ - $(OS_LIBSRC_COMMON)/os_exception.c \ - $(OS_LIBSRC_COMMON)/os_timer.c \ - $(OS_LIBSRC_COMMON)/os_tick.c \ - $(OS_LIBSRC_COMMON)/os_alarm.c \ - $(OS_LIBSRC_COMMON)/os_valarm.c \ - $(OS_LIBSRC_COMMON)/os_system.c \ - $(OS_LIBSRC_COMMON)/os_systemWork.c \ - $(OS_LIBSRC_COMMON)/os_profile.c \ - $(OS_LIBSRC_COMMON)/os_reset.c \ - $(OS_LIBSRC_COMMON)/os_ownerInfo.c \ - $(OS_LIBSRC_COMMON)/os_ownerInfoEx.c \ - $(OS_LIBSRC_COMMON)/os_entropy.c \ - $(OS_LIBSRC_ARM7)/os_terminate_sp.c \ - $(OS_LIBSRC_COMMON)/os_event.c \ - $(OS_LIBSRC_COMMON)/os_application_jump.c - -TARGET_LIB = libossdlog_sp$(TWL_LIBSUFFIX).a - -#---------------------------------------------------------------------------- - -# DEBUGŃrh̏ꍇARELEASEłŃrh -# DEBUGł̃Cu𑕂܂B - -ifdef TARGET_DEBUG -TWL_BUILD_TYPE = RELEASE -else -ifdef TWL_DEBUG -TWL_BUILD_TYPE = RELEASE -else -ifdef NITRO_DEBUG -TWL_BUILD_TYPE = RELEASE -endif -endif -endif - -#---------------------------------------------------------------------------- -# HYBRID / LIMITED ̃Cu쐬܂ -TWL_ARCHGEN ?= ALL - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -INSTALL_TARGETS = $(TARGETS) -INSTALL_DIR = $(TWL_IPL_RED_ROOT)/build/tests/Launcher_sdlog/lib/$(TWL_LIBTYPE) - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/Launcher_sdlog/sdlog/ARM7.TWL/src/os_printf.c b/build/tests/Launcher_sdlog/sdlog/ARM7.TWL/src/os_printf.c deleted file mode 100644 index 44c337ea..00000000 --- a/build/tests/Launcher_sdlog/sdlog/ARM7.TWL/src/os_printf.c +++ /dev/null @@ -1,1536 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - libraries - OS - File: os_printf.c - - Copyright 2003 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#include -#include - -//---------------- for IS-NITRO-DEBUGGER -#ifdef SDK_LINK_ISD -# pragma warn_extracomma off -# include // has extracomma in enum -# pragma warn_extracomma reset -#else -void ISDPrint(const char *); -#endif - -//---------------- for IS-TWL-DEBUGGER -#ifdef SDK_LINK_ISTD -# pragma warn_extracomma off -# include // has extracomma in enum -# pragma warn_extracomma reset -#else -void ISTDPrintEx(int console, const char *); -#endif -//---- print output -#ifdef SDK_ARM9 -#define OSi_PRINT_OUTPUT (*(u8*)HW_PRINT_OUTPUT_ARM9) -#define OSi_PRINT_ERR_OUTPUT (*(u8*)HW_PRINT_OUTPUT_ARM9ERR) -#else -#define OSi_PRINT_OUTPUT (*(u8*)HW_PRINT_OUTPUT_ARM7) -#define OSi_PRINT_ERR_OUTPUT (*(u8*)HW_PRINT_OUTPUT_ARM7ERR) -#endif - -#ifndef SDK_FINALROM -static char common_buffer[256]; // thread unsafe, but less use of stack -#endif - -#if !defined(SDK_FINALROM) && defined(SDK_NO_MESSAGE) -#undef OSi_Warning -#undef OSi_TWarning -#undef OSi_Panic -#undef OSi_TPanic -void OSi_Warning(const char *file, int line, const char *fmt, ...); -void OSi_TWarning(const char *file, int line, const char *fmt, ...); -void OSi_Panic(const char *file, int line, const char *fmt, ...); -void OSi_TPanic(const char *file, int line, const char *fmt, ...); -#endif /* SDK_NO_MESSAGE */ - - -/*---------------------------------------------------------------------------* - Name: OS_PutChar - OS_FPutChar - - Description: put a letter for debug console - - Arguments: console : output window - c : char code , shuild be 0x01-0xff - - Returns: None. - *---------------------------------------------------------------------------*/ -#ifndef SDK_FINALROM -SDK_WEAK_SYMBOL void OS_PutChar(char c) -{ - OS_FPutChar((int)OSi_PRINT_OUTPUT, c); -} - -SDK_WEAK_SYMBOL void OS_FPutChar(int console, char c) -{ - char str[2]; - - str[0] = c; - str[1] = '\0'; - - // Because of no putchar-type function on ISDebugger library, - // use 'putstring' for a single letter outputting - OS_FPutString(console, str); -} -#endif - -/*---------------------------------------------------------------------------* - Name: OS_FPutString - - Description: put a string to debug console. - console port are automatically switched depends on emu/hw - - Arguments: console : output window - str : string - - Returns: None. - *---------------------------------------------------------------------------*/ -static void OS_PutStringDefault(const char* str); -static void OS_FPutStringInit(int console, const char *str); - -#ifndef SDK_FINALROM -static void OS_FPutStringDummy(int console, const char *str); -static void OS_FPutStringAris(int console, const char *str); -static void OS_FPutStringISD(int console, const char *str); -static void OS_FPutStringISTD(int console, const char *str); -#ifdef SDK_ARM7 -static void OS_FPutStringPrnSrv(int console, const char *str); -#endif -#endif - -#ifndef SDK_FINALROM -void (*OS_PutString) (const char *str) = OS_PutStringDefault; -void (*OS_FPutString) (int console, const char *str) = OS_FPutStringInit; -void (*OSi_FuncTerminate) (void) = OS_Terminate; -//---- hook function -static OSFPutStringHookType OSi_FPutStringHook = NULL; -#endif - - -/*---------------------------------------------------------------------------* - Name: OS_PutStringDefault - Description: OS_PutString initializer - *---------------------------------------------------------------------------*/ -static void OS_PutStringDefault(const char* str) -{ -#pragma unused(str) -#ifndef SDK_FINALROM - OS_FPutString(OS_PRINT_OUTPUT_CURRENT, str); -#endif -} - -/*---------------------------------------------------------------------------* - Name: OS_FPutStringInit - Description: OS_FPutString initializer - *---------------------------------------------------------------------------*/ -static void OS_FPutStringInit(int console, const char *str) -{ -#ifndef SDK_FINALROM - OSIntrMode intr = OS_DisableInterrupts(); - u32 consoleType = OS_GetConsoleType(); - - OS_FPutString = OS_FPutStringDummy; - -#ifdef SDK_ARM9 - //---- arm9 - if ( consoleType & OS_CONSOLE_ENSATA ) - { - OS_FPutString = OS_FPutStringAris; - } - else if ( consoleType & OS_CONSOLE_TWLDEBUGGER ) - { - OS_FPutString = OS_FPutStringISTD; - } - else if ( consoleType & OS_CONSOLE_ISDEBUGGER ) - { -#ifndef SDK_TWLLTD - OS_FPutString = OS_FPutStringISD; -#endif - } -#else - //---- arm7 -// if ( consoleType & OS_CONSOLE_TWLDEBUGGER ) -// { -// OS_FPutString = OS_FPutStringISTD; -// } -// else - { - OS_FPutString = OS_FPutStringPrnSrv; - } -#endif - - OS_FPutString(console, str); - - (void)OS_RestoreInterrupts(intr); - -#else -#pragma unused(console, str) -#endif -} - -/*---------------------------------------------------------------------------* - Name: OS_FPutStringDummy - Description: dummy OS_FPutString. do nothing. - *---------------------------------------------------------------------------*/ -static void OS_FPutStringDummy(int console, const char *str) -{ -#pragma unused(console, str) -#ifndef SDK_FINALROM - if ( OSi_FPutStringHook ) - { - OSi_FPutStringHook(OS_FPUTSTRING_DUMMY, console, str); - } -#endif -} - -/*---------------------------------------------------------------------------* - Name: OS_FPutStringAris - Description: OS_FPutString for software simulator called ARIS - *---------------------------------------------------------------------------*/ -#ifndef SDK_FINALROM -#ifdef SDK_CW_WARNOFF_SAFESTRB -#include -#endif -static void OS_FPutStringAris(int console, const char *str) -{ - char c; - - if ( console == OS_PRINT_OUTPUT_CURRENT ) - { - console = (int)OSi_PRINT_OUTPUT; - } - else if ( console == OS_PRINT_OUTPUT_ERROR ) - { - console = (int)OSi_PRINT_ERR_OUTPUT; - } - - if ( console != OS_PRINT_OUTPUT_NONE ) - { - while ('\0' != (c = *str)) - { - reg_OS_EMU_CONSOLE_OUT = (u8)c; // Console out - str++; - } - if ( OSi_FPutStringHook ) - { - OSi_FPutStringHook(OS_FPUTSTRING_ARIS, console, str); - } - } -} -#ifdef SDK_CW_WARNOFF_SAFESTRB -#include -#endif -#endif - -/*---------------------------------------------------------------------------* - Name: OS_FPutStringISD - Description: OS_FPutString for hardware emulator called IS Debugger - *---------------------------------------------------------------------------*/ -#ifndef SDK_FINALROM -static void OS_FPutStringISD(int console, const char *str) -{ - // ISDPrint ̏ - OS_InitLock(); - - if ( console == OS_PRINT_OUTPUT_CURRENT ) - { - console = (int)OSi_PRINT_OUTPUT; - } - else if ( console == OS_PRINT_OUTPUT_ERROR ) - { - console = (int)OSi_PRINT_ERR_OUTPUT; - } - - if ( console != OS_PRINT_OUTPUT_NONE ) - { - ISDPrint(str); - if ( OSi_FPutStringHook ) - { - OSi_FPutStringHook(OS_FPUTSTRING_ISD, console, str); - } - } -} -#endif - -/*---------------------------------------------------------------------------* - Name: OS_FPutStringISTD - Description: OS_FPutString for hardware emulator called IS TWL Debugger - *---------------------------------------------------------------------------*/ -#ifndef SDK_FINALROM -static void OS_FPutStringISTD(int console, const char *str) -{ - // ISTDPrintEx ̏ - OS_InitLock(); - - if ( console == OS_PRINT_OUTPUT_CURRENT ) - { - console = (int)OSi_PRINT_OUTPUT; - } - else if ( console == OS_PRINT_OUTPUT_ERROR ) - { - console = (int)OSi_PRINT_ERR_OUTPUT; - } - - if ( console != OS_PRINT_OUTPUT_NONE ) - { - ISTDPrintEx(console, str); - if ( OSi_FPutStringHook ) - { - OSi_FPutStringHook(OS_FPUTSTRING_ISTD, console, str); - } - } -} -#endif - - -/*---------------------------------------------------------------------------* - Name: OS_VPrintf/OS_TVPrintf - - Description: print formatted strings (vprintf ver.) - - Arguments: fmt : format string - vlist : parameters - - Returns: None. - *---------------------------------------------------------------------------*/ -// If you want to use "vsnprintf()" in ARM7, define SDK_USE_VSNPRINTF. -// "vsnprintf()" is able to print float format but the code size become hugely bigger. -// #define SDK_USE_VSNPRINTF - -#ifndef SDK_FINALROM -#if defined(SDK_ARM9) || defined(SDK_USE_VSNPRINTF) -SDK_WEAK_SYMBOL void OS_VPrintf(const char *fmt, va_list vlist) -{ - OS_VFPrintf(OS_PRINT_OUTPUT_CURRENT, fmt, vlist); -} -SDK_WEAK_SYMBOL void OS_VFPrintf(int console, const char *fmt, va_list vlist) -{ - (void)vsnprintf(common_buffer, sizeof(common_buffer), fmt, vlist); - OS_FPutString(console, common_buffer); -} -#else -SDK_WEAK_SYMBOL void OS_VPrintf(const char *fmt, va_list vlist) -{ - OS_TVFPrintf(OS_PRINT_OUTPUT_CURRENT, fmt, vlist); -} -SDK_WEAK_SYMBOL void OS_VFPrintf(int console, const char *fmt, va_list vlist) -{ - OS_TVFPrintf(console, fmt, vlist); -} -#endif -SDK_WEAK_SYMBOL void OS_TVPrintf(const char *fmt, va_list vlist) -{ - OS_TVFPrintf(OS_PRINT_OUTPUT_CURRENT, fmt, vlist); -} -SDK_WEAK_SYMBOL void OS_TVFPrintf(int console, const char *fmt, va_list vlist) -{ - (void)OS_VSNPrintf(common_buffer, sizeof(common_buffer), fmt, vlist); - OS_FPutString(console, common_buffer); -} -SDK_WEAK_SYMBOL void OS_TVPrintfEx(const char *fmt, va_list vlist) -{ - OS_TVFPrintfEx(OS_PRINT_OUTPUT_CURRENT, fmt, vlist); -} -SDK_WEAK_SYMBOL void OS_TVFPrintfEx(int console, const char *fmt, va_list vlist) -{ - (void)OS_VSNPrintfEx(common_buffer, sizeof(common_buffer), fmt, vlist); - OS_FPutString(console, common_buffer); -} -#endif - -/*---------------------------------------------------------------------------* - Name: OS_Printf/OS_TPrintf/OS_TPrintfEx - OS_FPrintf/OS_TFPrintf/OS_TFPrintfEx - - Description: print formatted strings. - - Arguments: console : output window - fmt : format string - ... and parameters - - Returns: None. - *---------------------------------------------------------------------------*/ -#ifndef SDK_FINALROM -SDK_WEAK_SYMBOL void OS_Printf(const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - OS_VFPrintf(OS_PRINT_OUTPUT_CURRENT, fmt, vlist); - va_end(vlist); -} - -SDK_WEAK_SYMBOL void OS_FPrintf(int console, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - OS_VFPrintf(console, fmt, vlist); - va_end(vlist); -} - -SDK_WEAK_SYMBOL void OS_TPrintf(const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - OS_TVFPrintf(OS_PRINT_OUTPUT_CURRENT, fmt, vlist); - va_end(vlist); -} - -SDK_WEAK_SYMBOL void OS_TFPrintf(int console, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - OS_TVFPrintf(console, fmt, vlist); - va_end(vlist); -} - -SDK_WEAK_SYMBOL void OS_TPrintfEx(const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - OS_TVFPrintfEx(OS_PRINT_OUTPUT_CURRENT, fmt, vlist); - va_end(vlist); -} - -SDK_WEAK_SYMBOL void OS_TFPrintfEx(int console, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - OS_TVFPrintfEx(console, fmt, vlist); - va_end(vlist); -} -#endif - - -/*---------------------------------------------------------------------------* - Name: OSi_Warning / OSi_TWarning - - Description: print warning message. - - Arguments: file : filename of warning location - line : line number of warning location - fmt : format string - ... and parameters - - Returns: None. - *---------------------------------------------------------------------------*/ -#ifndef SDK_FINALROM -SDK_WEAK_SYMBOL void OSi_Warning(const char *file, int line, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - OS_FPrintf(OS_PRINT_OUTPUT_ERROR, "%s:%d Warning:", file, line); - OS_VFPrintf(OS_PRINT_OUTPUT_ERROR, fmt, vlist); - OS_FPrintf(OS_PRINT_OUTPUT_ERROR, "\n"); - va_end(vlist); -} - - -SDK_WEAK_SYMBOL void OSi_TWarning(const char *file, int line, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - OS_TPrintf("%s:%d Warning:", file, line); - OS_TVPrintf(fmt, vlist); - OS_TPrintf("\n"); - va_end(vlist); -} -#endif - -/*---------------------------------------------------------------------------* - Name: OSi_Panic/OSi_TPanic - - Description: print panic message and halt cpu. - - Arguments: file : filename of panic location - line : line number of panic location - fmt : format string - ... and parameters - - Returns: None. - *---------------------------------------------------------------------------*/ -#ifndef SDK_FINALROM -SDK_WEAK_SYMBOL void OSi_Panic(const char *file, int line, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - (void)OS_DisableInterrupts(); - OS_FPrintf(OS_PRINT_OUTPUT_ERROR, "%s:%d Panic:", file, line); - OS_VFPrintf(OS_PRINT_OUTPUT_ERROR, fmt, vlist); - OS_FPrintf(OS_PRINT_OUTPUT_ERROR, "\n"); - OSi_FuncTerminate(); // Never Returns -} - -SDK_WEAK_SYMBOL void OSi_TPanic(const char *file, int line, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - (void)OS_DisableInterrupts(); - OS_TPrintf("%s:%d Panic:", file, line); - OS_TVPrintf(fmt, vlist); - OS_TPrintf("\n"); - OSi_FuncTerminate(); // Never Returns -} -#endif - -/*---------------------------------------------------------------------------* - Name: OSi_FWarning / OSi_TFWarning - - Description: print warning message. - - Arguments: console : output window - file : filename of warning location - line : line number of warning location - fmt : format string - ... and parameters - - Returns: None. - *---------------------------------------------------------------------------*/ -#ifndef SDK_FINALROM -SDK_WEAK_SYMBOL void OSi_FWarning(int console, const char *file, int line, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - OS_FPrintf(console, "%s:%d Warning:", file, line); - OS_VFPrintf(console, fmt, vlist); - OS_FPrintf(console, "\n"); - va_end(vlist); -} - - -SDK_WEAK_SYMBOL void OSi_TFWarning(int console, const char *file, int line, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - OS_TFPrintf(console, "%s:%d Warning:", file, line); - OS_TVFPrintf(console, fmt, vlist); - OS_TFPrintf(console, "\n"); - va_end(vlist); -} -#endif - -/*---------------------------------------------------------------------------* - Name: OSi_FPanic/OSi_TFPanic - - Description: print panic message and halt cpu. - - Arguments: file : filename of panic location - line : line number of panic location - fmt : format string - ... and parameters - - Returns: None. - *---------------------------------------------------------------------------*/ -#ifndef SDK_FINALROM -SDK_WEAK_SYMBOL void OSi_FPanic(int console, const char *file, int line, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - (void)OS_DisableInterrupts(); - OS_FPrintf(console, "%s:%d Panic:", file, line); - OS_VFPrintf(console, fmt, vlist); - OS_FPrintf(console, "\n"); - OSi_FuncTerminate(); // Never Returns -} - -SDK_WEAK_SYMBOL void OSi_TFPanic(int console, const char *file, int line, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - (void)OS_DisableInterrupts(); - OS_TFPrintf(console, "%s:%d Panic:", file, line); - OS_TVFPrintf(console, fmt, vlist); - OS_TFPrintf(console, "\n"); - OSi_FuncTerminate(); // Never Returns -} -#endif - -/*---------------------------------------------------------------------------* - Name: OS_InitPrintServer - - Description: initialize print server - - this code should be called before OS_InitLock() - - OS_InitLock() are also called from OS_Init() - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -#ifdef SDK_ARM9 -#ifndef SDK_FINALROM -void OS_InitPrintServer(void) -{ - OSPrintServerBuffer *p; - - // first, allocate buffer and register it. - OS_InitArena(); - p = OS_AllocFromSharedArenaHi(sizeof(OSPrintServerBuffer), 4); - p->in = p->out = 0UL; - PXI_SetComponentParam((u32)p); -} -#endif //SDK_FINALROM -#endif //SDK_ARM9 - - -/*---------------------------------------------------------------------------* - Name: OS_PrintServer - - Description: print a string comes from ARM7 via shared memory - - Arguments: str : string - - Returns: None. - *---------------------------------------------------------------------------*/ -#ifdef SDK_ARM9 -#ifndef SDK_FINALROM -#include // to access 'common_buffer' via cache -void OS_PrintServer(void) -{ - OSPrintServerBuffer *p; - register OSPrintWChar word; - - u32 in, out; - int i; - - p = (OSPrintServerBuffer *)PXI_GetComponentParam(); - - //---- If print buffer isn't set up, do nothing. - if (!p) - { - return; - } - - out = p->out; - in = p->in; - - while (in != out) - { - i = 0; - - while (in != out && i < sizeof(common_buffer) - 3) - { - word.s = p->buffer[out].s; - if (word.c[0]) - { - common_buffer[i++] = word.c[0]; // store via cache - - if (word.c[1]) - { - common_buffer[i++] = word.c[1]; // store via cache - } - } - out++; - if (out >= OS_PRINTSRV_WCHARSIZE) - out = 0; - } - common_buffer[i] = '\0'; // store via cache - OS_FPutString(OS_PRINT_OUTPUT_CURRENT, common_buffer); - } - - // tell finished - p->out = out; -} - -#include -#endif //SDK_FINALROM -#endif //SDK_ARM9 - - -/*---------------------------------------------------------------------------* - Name: OS_FPutStringPrnSrv - - Description: sends string to ARM9 via shared memory - - Arguments: console : output window - str : string to be sent - - Returns: None - *---------------------------------------------------------------------------*/ -#ifdef SDK_ARM7 -static void OS_FPutStringPrnSrv(int console, const char *str) -{ -#pragma unused(console, str) -#ifndef SDK_FINALROM - OSPrintServerBuffer *p; - register OSPrintWChar word; - - u32 in, in_tmp, out; - u32 isOdd; - - if ( console == OS_PRINT_OUTPUT_NONE ) - { - return; - } - - p = (OSPrintServerBuffer *)PXI_GetComponentParam(); - in = p->in; - out = p->out; - isOdd = ((u32)str) & 1; - - while (1) - { - in_tmp = in + 1; - if (in_tmp >= OS_PRINTSRV_WCHARSIZE) - in_tmp = 0; - if (out == in_tmp) - break; // Buffer full, then exit - - if (isOdd) - { - p->buffer[in].s = word.s = (u16)((*(u16 *)(str - 1)) & 0xff00); - str++; - isOdd = 0UL; - if (!word.c[1]) - break; - in = in_tmp; - } - else - { - p->buffer[in].s = word.s = *(u16 *)str; - str += 2; - if (!word.c[0]) - break; - in = in_tmp; - if (!word.c[1]) - break; - } - } - p->in = in; -#endif //SDK_FINALROM -} -#endif //SDK_ARM7 - - -#if defined(SDK_CW_WARNOFF_SAFESTRB) -#include -#endif - -/* inner function for sized-buffer output */ -typedef struct dst_string_tag -{ - size_t len; - char *cur; - char *base; -} -dst_string; - -static void string_put_char(dst_string * p, char c) -{ - if (p->len > 0) - *p->cur = c, --p->len; - ++p->cur; -} - -static void string_fill_char(dst_string * p, char c, int n) -{ - if (n > 0) - { - size_t i, k = p->len; - if (k > (size_t) n) - k = (size_t) n; - for (i = 0; i < k; ++i) - p->cur[i] = c; - p->len -= k; - p->cur += n; - } -} - -static void string_put_string(dst_string * p, const char *s, int n) -{ - if (n > 0) - { - size_t i, k = p->len; - if (k > (size_t) n) - k = (size_t) n; - for (i = 0; i < k; ++i) - p->cur[i] = s[i]; - p->len -= k; - p->cur += n; - } -} - -/*---------------------------------------------------------------------------* - Name: OS_SPrintf - - Description: equal to 'OS_VSPrintf' except argument style. - - Arguments: dst : destination buffer. - fmt : format string. - - Returns: length of the generated string. - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL int OS_SPrintf(char *dst, const char *fmt, ...) -{ - int ret; - va_list va; - va_start(va, fmt); - ret = OS_VSPrintf(dst, fmt, va); - va_end(va); - return ret; -} - -/*---------------------------------------------------------------------------* - Name: OS_VSPrintf - - Description: equal to 'OS_VSNPrintf' except buffer size argument. - - Arguments: dst : destination buffer. - fmt : format string. - vlist : parameters. - - Returns: length of the generated string. - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL int OS_VSPrintf(char *dst, const char *fmt, va_list vlist) -{ - return OS_VSNPrintf(dst, 0x7FFFFFFF, fmt, vlist); -} - -/*---------------------------------------------------------------------------* - Name: OS_SNPrintf - - Description: equal to 'OS_VSNPrintf' except argument style. - - Arguments: dst : destination buffer. - len : destination buffer size. - fmt : format string. - - Returns: length of the generated string. (except '\0') - if(result < len), - put NUL in dst[result]. - else if(len > 0), - put NUL in dst[len - 1]. - else, - do nothing. - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL int OS_SNPrintf(char *dst, size_t len, const char *fmt, ...) -{ - int ret; - va_list va; - va_start(va, fmt); - ret = OS_VSNPrintf(dst, len, fmt, va); - va_end(va); - return ret; -} - -/*---------------------------------------------------------------------------* - Name: OS_VSNPrintf - - Description: small-size vsnprintf which is similar to 'vsnprintf' - without following supports. - * CodeWarrior Extensions (#s) - * MSL AltiVec Extensions (v, vh, vl, hv, lv, @) - * indexed argments (%m$, *m$) - * floating-point - * wchar_t - - Note: '+' and '#' do not work, MSL's sprintf(). - to keep same result, they are no implement. - { // exsample - char buf[5]; - sprintf(buf, "%-i\n", 45); // "45" (OK) - sprintf(buf, "%0i\n", 45); // "45" (OK) - sprintf(buf, "% i\n", 45); // " 45" (OK) - sprintf(buf, "%+i\n", 45); // "%+i" ("+45" expected) - sprintf(buf, "%#x\n", 45); // "%#x" ("0x2d" expected) - // but, this works correctly! - sprintf(buf, "% +i\n", 45); // "+45" (OK) - } - - Arguments: dst : destination buffer. - len : destination buffer size. - fmt : format string. - vlist : parameters. - - Returns: length of the generated string. (except '\0') - if(result < len), - put NUL in dst[result]. - else if(len > 0), - put NUL in dst[len - 1]. - else, - do nothing. - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL int OS_VSNPrintf(char *dst, size_t len, const char *fmt, va_list vlist) -{ - return STD_TVSNPrintf(dst, len, fmt, vlist); -} - -/*---------------------------------------------------------------------------* - Name: OS_VSNPrintfEx - - Description: OS_VSNPrintfEx is an addition of binary output to OS_VSNPrintfEx. - - Arguments: dst : destination buffer. - len : destination buffer size. - fmt : format string. - vlist : parameters. - - Returns: length of the generated string. (except '\0') - if(result < len), - put NUL in dst[result]. - else if(len > 0), - put NUL in dst[len - 1]. - else, - do nothing. - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL int OS_VSNPrintfEx(char *dst, size_t len, const char *fmt, va_list vlist) -{ - char buf[24]; - int n_buf; - char prefix[2]; - int n_prefix; - - const char *s = fmt; - - dst_string str; - str.len = len, str.cur = str.base = dst; - - while (*s) - { - if ((unsigned int)(((unsigned char)*s ^ 0x20) - 0xA1) < 0x3C) - { - /* Shift JIS character */ - string_put_char(&str, *s++); - if (*s) - string_put_char(&str, *s++); - } - else if (*s != '%') - { - /* normal ASCII character */ - string_put_char(&str, *s++); - } - else - { - /* output with format */ - enum - { - flag_blank = 000001, /* ' ' */ - flag_plus = 000002, /* '+' */ - flag_sharp = 000004, /* '#' */ - flag_minus = 000010, /* '-' */ - flag_zero = 000020, /* '0' */ - flag_l1 = 000040, /* "l" */ - flag_h1 = 000100, /* "h" */ - flag_l2 = 000200, /* "ll" */ - flag_h2 = 000400, /* "hh" */ - flag_unsigned = 010000, /* 'o', 'u', ... */ - flag_binary = 020000, /* 'b' */ - flag_colon = 040000, /* ':' */ - flag_end - }; - int flag = 0, width = 0, precision = -1, radix = 10; - char hex_char = 'a' - 10; - const char *p_start = s; - /* flags */ - for (;;) - { - switch (*++s) - { - case '+': - if (s[-1] != ' ') - break; - flag |= flag_plus; - continue; - case ' ': - flag |= flag_blank; - continue; - case '-': - flag |= flag_minus; - continue; - case '0': - flag |= flag_zero; - continue; - case ':': - flag |= flag_colon; - continue; - } - break; - } - /* width */ - if (*s == '*') - { - ++s, width = va_arg(vlist, int); - if (width < 0) - width = -width, flag |= flag_minus; - } - else - { - while ((*s >= '0') && (*s <= '9')) - width = (width * 10) + *s++ - '0'; - } - /* precision */ - if (*s == '.') - { - ++s, precision = 0; - if (*s == '*') - { - ++s, precision = va_arg(vlist, int); - if (precision < 0) - precision = -1; - } - else - { - while ((*s >= '0') && (*s <= '9')) - precision = (precision * 10) + *s++ - '0'; - } - } - /* option */ - switch (*s) - { - case 'h': - if (*++s != 'h') - flag |= flag_h1; - else - ++s, flag |= flag_h2; - break; - case 'l': - if (*++s != 'l') - flag |= flag_l1; - else - ++s, flag |= flag_l2; - break; - } - - /* type */ - switch (*s) - { - case 'd': /* signed decimal */ - case 'i': /* signed decimal */ - goto put_integer; - case 'o': /* unsigned octal */ - radix = 8; - flag |= flag_unsigned; - goto put_integer; - case 'u': /* unsigned decimal */ - flag |= flag_unsigned; - goto put_integer; - case 'X': /* unsigned hexadecimal */ - hex_char = 'A' - 10; - goto put_hexadecimal; - case 'x': /* unsigned hexadecimal */ - goto put_hexadecimal; - case 'p': /* pointer */ - /* equal to code warrior */ - flag |= flag_sharp; - precision = 8; - goto put_hexadecimal; - - case 'C': /* unicode-character */ - flag |= flag_l1; - case 'c': /* character */ - if (precision >= 0) - goto put_invalid; - { - int c = va_arg(vlist, int); - width -= 1; - if (flag & flag_minus) - { - if (flag & flag_l1) - { - char dst[2]; - - if (STD_ConvertCharUnicodeToSjis(dst, (u16)c) == 1) - { - string_put_char(&str, dst[0]); - } - else - { - string_put_string(&str, dst, 2); - } - } - else - { - string_put_char(&str, (char)c); - } - string_fill_char(&str, ' ', width); - } - else - { - char pad = (char)((flag & flag_zero) ? '0' : ' '); - string_fill_char(&str, pad, width); - - if (flag & flag_l1) - { - char dst[2]; - - if (STD_ConvertCharUnicodeToSjis(dst, (u16)c) == 1) - { - string_put_char(&str, dst[0]); - } - else - { - string_put_string(&str, dst, 2); - } - } - else - { - string_put_char(&str, (char)c); - } - } - ++s; - } - break; - - case 'S': /* unicode-string */ - flag |= flag_l1; - case 's': /* string */ - { - int n_buf = 0; - const char *p_buf = va_arg(vlist, const char *); - - if (precision < 0) - { - while (p_buf[n_buf]) - { - if (flag & flag_l1) - { - n_buf += 2; - } - else - { - ++n_buf; - } - } - } - else - { - while ((n_buf < precision) && p_buf[n_buf]) - { - if (flag & flag_l1) - { - n_buf += 2; - } - else - { - ++n_buf; - } - } - } - if (flag & flag_l1) - { - n_buf /= 2; - } - width -= n_buf; - if (flag & flag_minus) - { - if (flag & flag_l1) - { - u16 *w_buf = (u16 *)p_buf; - char dst[2]; - - while (n_buf--) - { - if (STD_ConvertCharUnicodeToSjis(dst, *w_buf) == 1) - { - string_put_char(&str, dst[0]); - } - else - { - string_put_string(&str, dst, 2); - } - w_buf++; - } - } - else - { - string_put_string(&str, p_buf, n_buf); - } - string_fill_char(&str, ' ', width); - } - else - { - char pad = (char)((flag & flag_zero) ? '0' : ' '); - string_fill_char(&str, pad, width); - - if (flag & flag_l1) - { - u16 *w_buf = (u16 *)p_buf; - char dst[2]; - - while (n_buf--) - { - if (STD_ConvertCharUnicodeToSjis(dst, *w_buf) == 1) - { - string_put_char(&str, dst[0]); - } - else - { - string_put_string(&str, dst, 2); - } - w_buf++; - } - } - else - { - string_put_string(&str, p_buf, n_buf); - } - } - ++s; - } - break; - - case 'B': /* binary */ - hex_char = 'A' - 10; - case 'b': /* binary */ - { - int n_buf = width; - int count = 0; - char *p_buf = va_arg(vlist, char *); - int column_count; - - if (n_buf <= 0) - { - n_buf = 1; - } - if (precision == 0) - { - precision = -1; - } - column_count = precision; - - while (1) - { - char left_char, right_char; - int left = ((p_buf[count] & 0xF0) >> 4); - int right = (p_buf[count] & 0x0F); - - left_char = (char)((left < 10) ? (left + '0') : (left + hex_char)); - right_char = (char)((right < 10) ? (right + '0') : (right + hex_char)); - - string_put_char(&str, left_char); - string_put_char(&str, right_char); - - count++; - - if (count >= n_buf) - break; - - if (column_count > 0) - { - --column_count; - } - - if (column_count == 0) - { - string_put_char(&str, '\n'); - if ((flag & flag_blank) && !(flag & flag_minus)) - { - string_put_char(&str, ' '); - } - column_count = precision; - } - else if (flag & flag_colon) - { - string_put_char(&str, ':'); - } - else if (flag & flag_blank) - { - string_put_char(&str, ' '); - } - } - ++s; - } - break; - - case 'n': /* store the number of output */ - { - int pos = str.cur - str.base; - if (flag & flag_h2) - ; - else if (flag & flag_h1) - *va_arg(vlist, signed short *) = (signed short)pos; - else if (flag & flag_l2) - *va_arg(vlist, u64 *) = (u64)pos; - else - *va_arg(vlist, signed int *) = (signed int)pos; - } - ++s; - break; - - case '%': /* output '%' */ - if (p_start + 1 != s) - goto put_invalid; - string_put_char(&str, *s++); - break; - - default: /* invalid type */ - goto put_invalid; - - put_invalid: - string_put_string(&str, p_start, s - p_start); - break; - - put_hexadecimal: - radix = 16; - flag |= flag_unsigned; - put_integer: - { - u64 val = 0; - n_prefix = 0; - - if (flag & flag_minus) - flag &= ~flag_zero; - if (precision < 0) - precision = 1; - else - flag &= ~flag_zero; - - if (flag & flag_unsigned) - { - if (flag & flag_h2) - val = va_arg(vlist, unsigned char); - else if (flag & flag_h1) - val = va_arg(vlist, unsigned short); - else if (flag & flag_l2) - val = va_arg(vlist, u64); - else - val = va_arg(vlist, unsigned long); - flag &= ~(flag_plus | flag_blank); - if (flag & flag_sharp) - { - if (radix == 16) - { - if (val != 0) - { - prefix[0] = (char)(hex_char + (10 + 'x' - 'a')); - prefix[1] = '0'; - n_prefix = 2; - } - } - else if (radix == 8) - { - prefix[0] = '0'; - n_prefix = 1; - } - } - } - else - { - if (flag & flag_h2) - val = va_arg(vlist, char); - else if (flag & flag_h1) - val = va_arg(vlist, short); - else if (flag & flag_l2) - val = va_arg(vlist, u64); - else - val = va_arg(vlist, long); - if ((val >> 32) & 0x80000000) - { - val = ~val + 1; - prefix[0] = '-'; - n_prefix = 1; - } - else - { - if (val || precision) - { - if (flag & flag_plus) - { - prefix[0] = '+'; - n_prefix = 1; - } - else if (flag & flag_blank) - { - prefix[0] = ' '; - n_prefix = 1; - } - } - } - } - n_buf = 0; - switch (radix) - { - case 8: - while (val != 0) - { - int d = (int)(val & 0x07); - val >>= 3; - buf[n_buf++] = (char)(d + '0'); - } - break; - case 10: - if ((val >> 32) == 0) - { -#if defined(SDK_CW) || defined(SDK_RX) || defined(__MWERKS__) -#pragma optimize_for_size off -#endif - u32 v = (u32)val; - while (v != 0) - { - // u32 ƒ萔̏Zł΁ARpCI - // }WbNio[gpώZɕϊ - u32 r = v / 10; - int d = (int)(v - (r * 10)); - v = r; - buf[n_buf++] = (char)(d + '0'); - } - } - else - { - while (val != 0) - { - u64 r = val / 10; - int d = (int)(val - (r * 10)); - val = r; - buf[n_buf++] = (char)(d + '0'); - } - } - break; - case 16: - while (val != 0) - { - int d = (int)(val & 0x0f); - val >>= 4; - buf[n_buf++] = (char)((d < 10) ? (d + '0') : (d + hex_char)); - } - break; - } - if ((n_prefix > 0) && (prefix[0] == '0')) - { - n_prefix = 0; - buf[n_buf++] = '0'; - } - } - goto put_to_stream; - - put_to_stream: - { - int n_pad = precision - n_buf; - if (flag & flag_zero) - { - if (n_pad < width - n_buf - n_prefix) - n_pad = width - n_buf - n_prefix; - } - if (n_pad > 0) - width -= n_pad; - width -= n_prefix + n_buf; - if (!(flag & flag_minus)) - string_fill_char(&str, ' ', width); - while (n_prefix > 0) - string_put_char(&str, prefix[--n_prefix]); - string_fill_char(&str, '0', n_pad); - while (n_buf > 0) - string_put_char(&str, buf[--n_buf]); - if (flag & flag_minus) - string_fill_char(&str, ' ', width); - ++s; - } - break; - } - } - } - - if (str.len > 0) - *str.cur = '\0'; - else if (len > 0) - str.base[len - 1] = '\0'; - return str.cur - str.base; -} - - -#if defined(SDK_CW_WARNOFF_SAFESTRB) -#include -#endif - -//================================================================================ -// Set output of print (for IS-TWL-DEBUGGER) -//================================================================================ -#ifndef SDK_FINALROM -#ifdef SDK_LINK_ISTD -/*---------------------------------------------------------------------------* - Name: OS_SetPrintOutput - - Description: Specify the output window OS_Printf uses. - This is only for IS-TWL-DEBUGGER. - - Arguments: proc : processor - OS_PRINT_OUTPUT_PROC_ARM9 : ARM9 - OS_PRINT_OUTPUT_PROC_ARM7 : ARM7 - OS_PRINT_OUTPUT_PROC_ARM9ERR : ARM9 for error - OS_PRINT_OUTPUT_PROC_ARM7ERR : ARM7 for error - num : window number (0-3) - - Returns: None. - *---------------------------------------------------------------------------*/ -void OS_SetPrintOutput( OSPrintOutputProc proc, int num ) -{ - SDK_ASSERT( (0<=num && num<=OS_PRINT_OUTPUT_WINDOW_MAX) || num==OS_PRINT_OUTPUT_NONE ); - SDK_ASSERT( 0<=(int)proc && (int)proc<=OS_PRINT_OUTPUT_PROC_ARM7ERR ); - *(u8*)(HW_PRINT_OUTPUT_ARM9 + proc) = (u8)num; -} -#endif -#endif - -//================================================================================ -// FPutString hook -//================================================================================ -#ifndef SDK_FINALROM -/*---------------------------------------------------------------------------* - Name: OS_SetFPutStringHook - - Description: set hook function in FPutString - - Arguments: func : hook function - - Returns: None. - *---------------------------------------------------------------------------*/ -void OS_SetFPutStringHook( OSFPutStringHookType func ) -{ - OSi_FPutStringHook = func; -} - -/*---------------------------------------------------------------------------* - Name: OS_GetFPutStringHook - - Description: get hook function in FPutString - - Arguments: None. - - Returns: hook function - *---------------------------------------------------------------------------*/ -OSFPutStringHookType OS_GetFPutStringHook(void) -{ - return OSi_FPutStringHook; -} -#endif - -//================================================================================ -// DUMMY PRINT (stub for FINALROM) -//================================================================================ -#ifdef SDK_FINALROM -#ifdef OS_Printf -#undef OS_Printf -#endif -void OS_Printf(const char *fmt, ...); -void OS_Printf(const char *fmt, ...) -{ -#pragma unused( fmt ) -} -#endif diff --git a/build/tests/Launcher_sdlog/sdlog/ARM9.TWL/Makefile b/build/tests/Launcher_sdlog/sdlog/ARM9.TWL/Makefile deleted file mode 100644 index dca6850a..00000000 --- a/build/tests/Launcher_sdlog/sdlog/ARM9.TWL/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TWL WLAN - libraries - os -# File: Makefile -# -# Copyright 2003 - 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -#---------------------------------------------------------------------------- - -TARGET_PLATFORM := TWL - -TWL_PROC = ARM9 - -TARGET_CODEGEN ?= ARM -TWL_ARCHGEN ?= LIMITED - -SRCDIR = ./src -INCDIR = ./include $(ROOT)/build/tests/sdlog/sdlog/include \ - $(ROOT)/build/tests/sdlog/sdlog/src - -SRCS = sd_log_wrapper.c - -SRCS += $(ROOT)/build/tests/sdlog/sdlog/src/os_log.c - -#---------------------------------------------------------------------------- - -TARGET_LIB = libsdlogRed$(TWL_LIBSUFFIX).a - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -INSTALL_TARGETS = $(TARGETS) -INSTALL_DIR = $(TWL_IPL_RED_ROOT)/build/tests/Launcher_sdlog/lib/$(TWL_LIBTYPE) - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/Launcher_sdlog/sdlog/ARM9.TWL/include/sd_log_wrapper.h b/build/tests/Launcher_sdlog/sdlog/ARM9.TWL/include/sd_log_wrapper.h deleted file mode 100644 index d32dc48e..00000000 --- a/build/tests/Launcher_sdlog/sdlog/ARM9.TWL/include/sd_log_wrapper.h +++ /dev/null @@ -1,44 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - SDLOG - include - File: sd_log_wrapper.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef TWL_SD_LOG_WRAPPER_H_ -#define TWL_SD_LOG_WRAPPER_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include "log.h" -#include "sd_log.h" - -BOOL SDLOG_InitEx(const char* path, const char* filename, char* buffer, u16 bufferSize, u16 partitionSize, SDLOGWriteType writeType); - -void SDLOG_FinishEx(void); - -inline -void SDLOG_PrintServer(void) -{ - OS_PrintServer(); -} - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -/* TWL_SD_LOG_WRAPPER_H_ */ -#endif diff --git a/build/tests/Launcher_sdlog/sdlog/ARM9.TWL/src/sd_log_wrapper.c b/build/tests/Launcher_sdlog/sdlog/ARM9.TWL/src/sd_log_wrapper.c deleted file mode 100644 index d974dd09..00000000 --- a/build/tests/Launcher_sdlog/sdlog/ARM9.TWL/src/sd_log_wrapper.c +++ /dev/null @@ -1,179 +0,0 @@ - -#include -#include -#include "sd_log_wrapper.h" - -#include "sd_log.c" - -/* Function Prototype */ -static void OS_FPutStringSD(int console, const char *str); -static void SDLOGi_WriteThreadEx(void* arg); - -/* Static */ -static void (*HookedFPutString)(int console, const char *string); - -void TwlStartUp(void) -{ - OS_InitPrintServer(); // Should be called before PXI_Init() -} - -/*---------------------------------------------------------------------------* - Name: SDLOG_Init - - Description: Initialize - - Arguments: None - - Returns: t@C̍쐬Ɏsꍇ FALSE Ԃ - *---------------------------------------------------------------------------*/ -BOOL SDLOG_InitEx(const char* path, const char* filename, char* buffer, u16 bufferSize, u16 partitionSize, SDLOGWriteType writeType) -{ - if( isInitialized ) - { - return FALSE; - } - - if( !FS_IsAvailable() ) - { - FS_Init(FS_DMA_NOT_USE); - } - - OS_InitLog(); - - { - int i = 0; - FS_InitFile(&work.logInfo[i].file); - - /* t@CVXȅ */ - { - char tmpPath[256]; - - STD_TSPrintf(tmpPath, "%s/%s", path, filename); - - if( writeType == SDLOG_WRITE_TYPE_OVERWRITE ) - { - /* ㏑ݒ̏ꍇ̓t@C폜 */ - (void)FS_DeleteFileAuto(tmpPath); - } - - if( !FS_CreateDirectoryAuto( path, FS_PERMIT_W | FS_PERMIT_R ) ) - { - //OS_TPrintf("%s L:%04d Error(%d)\n", __FILE__, __LINE__, FS_GetArchiveResultCode(tmpPath) ); - } - - if( !FS_CreateFile( tmpPath, FS_PERMIT_W | FS_PERMIT_R ) ) - { - //OS_TPrintf("%s L:%04d Error(%d)\n", __FILE__, __LINE__, FS_GetArchiveResultCode(tmpPath) ); - } - - if(!FS_OpenFileEx(&work.logInfo[i].file, tmpPath, FS_PERMIT_R | FS_PERMIT_W)) - { - //OS_TPrintf("%s L:%04d Error(%d)\n", __FILE__, __LINE__, FS_GetArchiveResultCode(tmpPath) ); - goto file_error; - } - - if( writeType == SDLOG_WRITE_TYPE_CONTINUANCE ) - { - /* NjLݒ̏ꍇ̓t@C[܂ŃV[N */ - FS_SeekFileToEnd(&work.logInfo[i].file); - } - } - - /* OS_Log ̏ݒ */ - work.logInfo[i].buffer = buffer; - work.logInfo[i].current = 0; - work.logInfo[i].bufferSize = bufferSize; - work.logInfo[i].partitionSize = partitionSize; - work.logInfo[i].writeType = writeType; - - OS_InitLogBuffer(&work.logInfo[i].info, buffer, partitionSize); - OS_SetLogWarningOffset(&work.logInfo[i].info, OS_LOG_WARNING_OFFSET_FULL ); - OS_SetLogAnnounceType(&work.logInfo[i].info, OS_LOG_ANNOUNCE_IMM); - - OS_SetLogCallback(&work.logInfo[i].info, SDlogCallback, (void *)i ); - } - - /* Jg IS_TWL_DEBBUGER Ɠo̓[ */ - OS_SetLogCurrentInfo(&work.logInfo[0].info); - - /* Thread */ - if( OS_IsThreadAvailable() == FALSE ) - { - /*XbhVXeオĂȂꍇ͗グ*/ - OS_InitThread(); - } - - OS_InitMessageQueue(&work.writeQueue, work.writeMsg, WRITE_MESSAGE_COUNT ); - OS_CreateThread(&work.writeThread, SDLOGi_WriteThreadEx, NULL, - work.writeThreadStack+SDLOG_THREAD_STACK_SIZE/sizeof(u32), SDLOG_THREAD_STACK_SIZE, 15); - OS_WakeupThreadDirect(&work.writeThread); - - HookedFPutString = OS_FPutString; - OS_FPutString = OS_FPutStringSD; - - SDLOG_Printf("------------ START ------------\n"); - - isInitialized =TRUE; - - return TRUE; - -file_error: - return FALSE; -} - - -void OS_FPutStringSD(int console, const char *str) -{ -#pragma unused (console) - OS_LockMutex( &work.logInfo[0].info.mutex ); - OS_LogFPutString( &work.logInfo[0].info, str ); - OS_UnlockMutex( &work.logInfo[0].info.mutex ); -} - - -void SDLOG_FinishEx(void) -{ - SDLOG_Finish(); - - if (OS_FPutString == OS_FPutStringSD) { - OS_FPutString = HookedFPutString; - } -} - - -static void SDLOGi_WriteThreadEx(void* arg) -{ -#pragma unused(arg) - - u32 num; - const char* buffer; - u32 dataSize; - - OSMessage msg; - - while(TRUE) - { - - (void)OS_ReceiveMessage(&work.writeQueue, &msg, OS_MESSAGE_BLOCK); - num =(u32) msg; - (void)OS_ReceiveMessage(&work.writeQueue, &msg, OS_MESSAGE_BLOCK); - buffer =(const char*) msg; - (void)OS_ReceiveMessage(&work.writeQueue, &msg, OS_MESSAGE_BLOCK); - dataSize =(u32) msg; - - if(FS_WriteFile(&work.logInfo[num].file, buffer, (u16)dataSize) < 0) - { - if (OS_FPutString == OS_FPutStringSD) { - OS_FPutString = HookedFPutString; - OS_TPrintf("%s L:%d SD Write Error\n",__FILE__, __LINE__); - } - } else { - if (OS_FPutString == HookedFPutString) { - OS_FPutString = OS_FPutStringSD; - } - } - - FS_FlushFile(&work.logInfo[num].file); - - } -} \ No newline at end of file diff --git a/build/tests/Launcher_sdlog/sdlog/Makefile b/build/tests/Launcher_sdlog/sdlog/Makefile deleted file mode 100644 index b3a6c676..00000000 --- a/build/tests/Launcher_sdlog/sdlog/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TWL WLAN - libraries - os -# File: Makefile -# -# Copyright 2003 - 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -#---------------------------------------------------------------------------- - -TARGET_PLATFORM := TWL - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -SUBDIRS := $(GSUBDIRS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/Makefile b/build/tests/Makefile deleted file mode 100644 index f1c4722d..00000000 --- a/build/tests/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS_P = \ - CheckDSHashTable \ - FatalErrorMaker \ - RomTypeTest \ - WirelessChecker \ - CheckPreloadParameters \ - FileRecoveryTest \ - Shared2File \ - build4WLDev \ - CheckSharedFont \ - HashCheckTemplate \ - SimpleBenchmark \ - compressSharedFontLoad/compSharedFont \ - compressSharedFontLoad/testLoadSpeed \ - DisplaySystemInformation \ - Launcher_sdlog \ - TestMaker \ - yuv2rgb \ - ErrorLogTest \ - Makefile \ - WDSTest \ - FatalErrorChecker \ - WDSWrapperTest \ - - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/NotLaunchRom/Makefile b/build/tests/NotLaunchRom/Makefile deleted file mode 100644 index 103cac67..00000000 --- a/build/tests/NotLaunchRom/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = -SUBMAKES = Makefile.0 Makefile.1 Makefile.2 - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/NotLaunchRom/Makefile.0 b/build/tests/NotLaunchRom/Makefile.0 deleted file mode 100644 index a464e703..00000000 --- a/build/tests/NotLaunchRom/Makefile.0 +++ /dev/null @@ -1,51 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CheckPreloadParameters -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -IS_NAND_APP = TRUE -TWL_ARCHGEN = LIMITED - -TWL_NANDAPP = TRUE - -TARGET_BIN = notLaunch_secure.tad -ROM_SPEC = secure.rsf - -TARGET_PLATFORM = TWL - -SRCS = data.c main.c - - -BINDIR = ./bin/$(TWL_BUILDTYPE) - - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib - -MAKETAD_OPTION += -s -MAKEROM = $(TWLSDK_ROOT)/tools/bin/makerom.TWL.secure.exe -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/NotLaunchRom/Makefile.1 b/build/tests/NotLaunchRom/Makefile.1 deleted file mode 100644 index d01da319..00000000 --- a/build/tests/NotLaunchRom/Makefile.1 +++ /dev/null @@ -1,51 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CheckPreloadParameters -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -IS_NAND_APP = TRUE -TWL_ARCHGEN = LIMITED - -TWL_NANDAPP = TRUE - -TARGET_BIN = notLaunch_system.tad -ROM_SPEC = system.rsf - -TARGET_PLATFORM = TWL - -SRCS = data.c main.c - - -BINDIR = ./bin/$(TWL_BUILDTYPE) - - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib - -MAKETAD_OPTION += -s -MAKEROM = $(call eupath,$(TWLSDK_ROOT)/tools/bin/makerom.TWL.sys.exe) -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/NotLaunchRom/Makefile.2 b/build/tests/NotLaunchRom/Makefile.2 deleted file mode 100644 index b893f5e1..00000000 --- a/build/tests/NotLaunchRom/Makefile.2 +++ /dev/null @@ -1,54 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CheckPreloadParameters -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -FILE_IDX = 0 -IS_NAND_APP = TRUE -TWL_ARCHGEN = LIMITED -GAMECODE = 010A - -TWL_NANDAPP = TRUE -TARGET_BIN = notLaunch_user.tad - -TARGET_PLATFORM = TWL - -SRCS = data.c main.c -ROM_SPEC = user.rsf - -BINDIR = ./bin/$(TWL_BUILDTYPE) - - - -MAKEROM_FLAGS += -DLOGOCHECK_MEDIA=$(MEDIA) \ - -DLOGOCHECK_BANNERPATH=$(BANNERPATH) \ - -DLOGOCHECK_GAMECODE=$(GAMECODE) - - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib - -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/NotLaunchRom/include/data.h b/build/tests/NotLaunchRom/include/data.h deleted file mode 100644 index 524c8fe8..00000000 --- a/build/tests/NotLaunchRom/include/data.h +++ /dev/null @@ -1,28 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - GX - demos - UnitTours/2D_CharBg_1 - File: data.h - - Copyright 2003 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef BG_DATA_H_ -#define BG_DATA_H_ - -#define SCREEN_SIZE (32 * 24) - -/*-------------------------- Data -------------------------------*/ -#define CHAR_SIZE (16 * 128 * sizeof(int)) -extern const unsigned int d_64_256_bg_schDT[16 * 128]; -extern const unsigned int d_64_256_bg_sclDT[8 * 16]; - -#endif diff --git a/build/tests/NotLaunchRom/secure.rsf b/build/tests/NotLaunchRom/secure.rsf deleted file mode 100644 index a267fce7..00000000 --- a/build/tests/NotLaunchRom/secure.rsf +++ /dev/null @@ -1,196 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - MakerCode "01" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile $(LOGOCHECK_BANNERPATH) - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion Japan - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - NANDAccess TRUE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType System - Secure TRUE - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch FALSE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media NAND - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode 011A - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Use Shared2 file index: [0-65535] - #Shared2FileIndex 1 - - # - # Use Shared2 file size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - #Shared2FileSize 128K -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/NotLaunchRom/src/data.c b/build/tests/NotLaunchRom/src/data.c deleted file mode 100644 index a8c960e0..00000000 --- a/build/tests/NotLaunchRom/src/data.c +++ /dev/null @@ -1,573 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - GX - demos - UnitTours/2D_CharBg_1 - File: data.c - - Copyright 2003 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "data.h" - -/*---------------------- Palette Data ---------------------------*/ -const unsigned int d_64_256_bg_sclDT[8 * 16] = { - 0x628a7ffe, 0x6f0d6acb, 0x6aec6f2f, 0x77757352, // 0000h - 0x51e6460d, 0x66f05a27, 0x41845a8f, 0x49c53943, - 0x41c73567, 0x4e2c5668, 0x62ad41cb, 0x566c2924, // 0010h - 0x5eb1524f, 0x45e93566, 0x1ca16f55, 0x24e26b13, - 0x31442d02, 0x10607798, 0x7bba39aa, 0x7bdc779b, // 0020h - 0x66c90820, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0030h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0040h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0050h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0060h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0070h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0080h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0090h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a0h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00b0h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00c0h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00d0h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00e0h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00f0h - 0x00000000, 0x00000000, 0x00000000, 0x00000000 -}; - -/*---------------------- Character Data -------------------------*/ -const unsigned int d_64_256_bg_schDT[16 * 128] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0000h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0001h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0f000000, - 0x00000000, 0x090d0000, 0x00000000, 0x0f0f0d0f, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0002h - 0x00000000, 0x01010000, 0x09000000, 0x0201010a, - 0x0f0e0d00, 0x0101010a, 0x090f0f0f, 0x1101010a, - 0x0a090f09, 0x11010101, 0x010a090f, 0x11010109, - 0x00000000, 0x00000000, 0x02010000, 0x04030302, // 0003h - 0x05020201, 0x04040403, 0x03050101, 0x06040404, - 0x04121110, 0x06060604, 0x17111016, 0x0b070603, - 0x1b111a1a, 0x0815171b, 0x17131b1b, 0x08080817, - 0x00000000, 0x00000000, 0x04030304, 0x00000304, // 0004h - 0x06070706, 0x06070706, 0x07060b04, 0x07070707, - 0x06151413, 0x06070b06, 0x0c080808, 0x18181318, - 0x0c180808, 0x18180c18, 0x0c18080c, 0x0c0c0c18, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0005h - 0x00000808, 0x00000000, 0x0b0c0b06, 0x00000006, - 0x0707060b, 0x00080b07, 0x07060c18, 0x13190b07, - 0x07060c18, 0x180b1c07, 0x0b0c1919, 0x1c060707, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0006h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x0000000c, 0x00000000, - 0x00000b06, 0x00000000, 0x0b0b0707, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0007h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0008h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0009h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 000ah - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 000bh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 000ch - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 000dh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 000eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 000fh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0010h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x0d000000, 0x00000000, 0x23000000, - 0x00000000, 0x1d0e0000, 0x00000000, 0x0e0e0e00, - 0x1d000000, 0x0f090d0d, 0x0f0f0000, 0x0a0a0f0d, // 0011h - 0x1f0e0f00, 0x0a0a0d1d, 0x201d0e0f, 0x21090f0d, - 0x0f1d0e0f, 0x16200f0f, 0x0f0e0e20, 0x201f160d, - 0x0f090f0e, 0x161f2016, 0x0d0f090d, 0x1f1f0e1f, - 0x01010a0d, 0x1b020201, 0x0101010a, 0x03030502, // 0012h - 0x0201010a, 0x04030201, 0x01010a21, 0x04040111, - 0x11112121, 0x1317021b, 0x1a1a2121, 0x1b241b16, - 0x16090a09, 0x1b101b10, 0x1a020201, 0x151b1b1b, - 0x0604171b, 0x0c180c06, 0x0606171b, 0x180b0b06, // 0013h - 0x06041313, 0x0b0c180b, 0x0c0c130b, 0x0b0c0c0c, - 0x08150b17, 0x180c1813, 0x13041314, 0x19181308, - 0x0c0c141b, 0x19181813, 0x17141b15, 0x0c181808, - 0x180c0b0b, 0x190c0c0c, 0x0c0c070b, 0x070c0c0c, // 0014h - 0x0c181e07, 0x0707190c, 0x0c0c0b1e, 0x0722071e, - 0x19180c18, 0x1c220707, 0x1e190c0b, 0x1c1c0707, - 0x1c070707, 0x25071c07, 0x07070707, 0x1c1c0722, - 0x190c0c1e, 0x07070706, 0x1919191e, 0x19191e1e, // 0015h - 0x1e19191e, 0x1919191e, 0x1c1e1e1c, 0x1e19191e, - 0x221e1e1e, 0x1e1e1e22, 0x221c1c1c, 0x1c220722, - 0x221c1c25, 0x22222225, 0x22262525, 0x25252525, - 0x0707071c, 0x0000000b, 0x071c190c, 0x00000b06, // 0016h - 0x07061919, 0x000b061c, 0x1e1e1e1e, 0x0b0b0707, - 0x071e1e1e, 0x06060707, 0x07071e1c, 0x1c07071c, - 0x1e070722, 0x1c071e19, 0x1e1c2222, 0x0707070b, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0017h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0000000c, 0x00000000, 0x00000006, 0x00000000, - 0x00000c0b, 0x00000000, 0x000c0b06, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0018h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0019h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 001ah - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 001bh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 001ch - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 001dh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 001eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 001fh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x20200e00, 0x00000000, 0x200e0e1d, // 0020h - 0x00000000, 0x0d0e201d, 0x0e000000, 0x0e201f20, - 0x20000000, 0x0d0e0e0d, 0x20000000, 0x0f0f0d0e, - 0x1f200000, 0x0d0f0f20, 0x200e0000, 0x200d0e1d, - 0x1f0d090d, 0x0921211f, 0x2009090d, 0x0a211621, // 0021h - 0x0d09090f, 0x0a201f21, 0x0909090f, 0x090d0d0f, - 0x0f090f0f, 0x1f1a090f, 0x0a0f0f09, 0x110a0909, - 0x0a0d0d09, 0x01110a01, 0x0a210f0f, 0x0a090102, - 0x1a020502, 0x0b1b101b, 0x1a120505, 0x04131010, // 0022h - 0x11161103, 0x0404131a, 0x1111110a, 0x04060b1a, - 0x1a1b0a21, 0x0c03151b, 0x101b020a, 0x24111a10, - 0x1b120105, 0x0b171313, 0x1b110102, 0x0b131b15, - 0x0c141506, 0x19181819, 0x0c140b06, 0x07190c0b, // 0023h - 0x14140b06, 0x071c1e06, 0x08081904, 0x07070618, - 0x13142414, 0x07071813, 0x130c1414, 0x1c1e1918, - 0x0c040604, 0x0c180808, 0x14080b0b, 0x0c181808, - 0x221e1e1c, 0x221c1c1c, 0x221e191e, 0x25221c22, // 0024h - 0x221e191e, 0x25252225, 0x221e1919, 0x25221c22, - 0x1c1e1e07, 0x25221c07, 0x1e1e1c07, 0x221c1c1e, - 0x2207071e, 0x221c1c22, 0x1e19190c, 0x22221e1e, - 0x25252525, 0x25252626, 0x27272525, 0x22262627, // 0025h - 0x27272725, 0x22262727, 0x27272725, 0x22262727, - 0x27272725, 0x25252727, 0x27272525, 0x25252527, - 0x25252525, 0x25252525, 0x25252522, 0x25252525, - 0x07222222, 0x07070707, 0x22222222, 0x07070722, // 0026h - 0x22221c1c, 0x07071e07, 0x22071c1c, 0x190c0c19, - 0x1c071c22, 0x180c191e, 0x07222222, 0x180c1e1e, - 0x07070722, 0x18191c1e, 0x071c1c22, 0x191e1c07, - 0x000c0c1e, 0x00000000, 0x13131819, 0x00000000, // 0027h - 0x17180c06, 0x00000000, 0x14180b1e, 0x00000014, - 0x08130b0b, 0x00000014, 0x130c0b0b, 0x00000008, - 0x080c0b19, 0x00001308, 0x080c060b, 0x00001408, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0028h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0029h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002ah - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002bh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002ch - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002dh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002fh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x201d0000, 0x090f0e23, 0x201f0000, 0x090f0f20, // 0030h - 0x0d0d2000, 0x090f0f0d, 0x0d0d0e00, 0x090f0f0f, - 0x0d0d2000, 0x0f090f0d, 0x0d0e1d00, 0x0e090f0f, - 0x0e1d1d00, 0x200f0f0f, 0x1d1f2000, 0x0d0e0f0f, - 0x0f200d09, 0x02020202, 0x0f0e0d0a, 0x0201010a, // 0031h - 0x090f090a, 0x020a010a, 0x0d210d0f, 0x0502010a, - 0x1f1f231d, 0x0a0a0a20, 0x20201d23, 0x1f20161d, - 0x1f201d1d, 0x201f1d1d, 0x1f1f0e0e, 0x211d1f1f, - 0x1b111102, 0x1311241b, 0x11112112, 0x1b1b1110, // 0032h - 0x1a111b02, 0x141b1116, 0x10111103, 0x13150b13, - 0x15101a11, 0x04040404, 0x1b1a1a1f, 0x06040415, - 0x101a1a1a, 0x04040413, 0x1b112111, 0x24241b1b, - 0x14141b14, 0x190c0c13, 0x08131414, 0x18180c08, // 0033h - 0x08142414, 0x180c0b0c, 0x08131713, 0x0c0b070b, - 0x17131315, 0x0b06070b, 0x15241404, 0x080c0406, - 0x13141b0b, 0x0814130c, 0x1414241b, 0x13081314, - 0x1919190c, 0x25071e19, 0x190c1818, 0x22221e19, // 0034h - 0x19191813, 0x22221c19, 0x0c190c0c, 0x07220719, - 0x0b18180c, 0x07070706, 0x07190c18, 0x07070707, - 0x1e181813, 0x07070707, 0x180c1813, 0x07070618, - 0x25222222, 0x22252525, 0x22072222, 0x07222222, // 0035h - 0x22072222, 0x1e071e1c, 0x1c070707, 0x1e071c1e, - 0x07070707, 0x07070707, 0x07070707, 0x071e061e, - 0x07070707, 0x1c1e0b1e, 0x07070707, 0x1c1e0707, - 0x07071c07, 0x06061c07, 0x071e1e07, 0x06061c1c, // 0036h - 0x0719191e, 0x06061c06, 0x1e1e0619, 0x1c1c060b, - 0x180c0707, 0x06071c19, 0x18181e22, 0x06061c0c, - 0x18190707, 0x0606060c, 0x06060707, 0x06060604, - 0x0b06060b, 0x00001717, 0x0b0c0b0c, 0x00000403, // 0037h - 0x1914180b, 0x00130b04, 0x15170606, 0x00130c0c, - 0x0b0b0606, 0x00131b14, 0x06060606, 0x00041413, - 0x030b0606, 0x000b1413, 0x24241706, 0x000b1414, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0038h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0039h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 003ah - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 003bh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 003ch - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 003dh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 003eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 003fh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x20200e00, 0x0f0d090f, 0x0e1d2000, 0x2021210f, // 0040h - 0x0d201d00, 0x1f0f0f0f, 0x0d0e2000, 0x0f090d0d, - 0x0d0d0e00, 0x090f0d0d, 0x0d0d0e00, 0x0f090f0f, - 0x0f0e0000, 0x1f0f0f0f, 0x20230000, 0x230e0f0f, - 0x1d0e0909, 0x11211f1d, 0x0d09090d, 0x090d200d, // 0041h - 0x0a0a0d1f, 0x020a090a, 0x0a09201f, 0x0201010a, - 0x09090d0e, 0x01020a0f, 0x0909090d, 0x020a0d0f, - 0x0a090f1d, 0x09200e0a, 0x090f0920, 0x161f210f, - 0x1b1b1a1a, 0x1b111010, 0x05151201, 0x17030117, // 0042h - 0x05030502, 0x04041701, 0x02010502, 0x04041717, - 0x05010101, 0x03151112, 0x02010102, 0x151b1112, - 0x17120a0a, 0x1b161202, 0x11111a1f, 0x12161112, - 0x1314141b, 0x08131313, 0x1314141b, 0x13140813, // 0043h - 0x24241013, 0x17241b1b, 0x13131504, 0x17241414, - 0x13130404, 0x04132413, 0x04040404, 0x04031703, - 0x04060404, 0x04040404, 0x04040604, 0x03030b04, - 0x0b060c08, 0x07070b0b, 0x0604060b, 0x0604060c, // 0044h - 0x0b040606, 0x0b0b0617, 0x0b040606, 0x0b040404, - 0x0b0b0406, 0x0b0b190b, 0x15030304, 0x0b15130b, - 0x03030304, 0x1b0b0b0b, 0x03030b0b, 0x240b0b03, - 0x071c061c, 0x06060707, 0x06060606, 0x06060606, // 0045h - 0x0606040b, 0x0c0b0404, 0x06060b0c, 0x170c0406, - 0x06040b03, 0x0404040b, 0x0b041513, 0x040b150b, - 0x0b040b1b, 0x15151503, 0x030b0414, 0x03170303, - 0x0606071c, 0x0b0b0b0b, 0x0604040b, 0x04030b0b, // 0046h - 0x0b040b15, 0x1504040b, 0x0b150b0b, 0x0b040603, - 0x0b17150b, 0x04040b04, 0x0b150b03, 0x04151503, - 0x15040404, 0x04030303, 0x15040404, 0x03121215, - 0x13241413, 0x00051b1b, 0x04131b17, 0x00151503, // 0047h - 0x040b1b17, 0x00171704, 0x13150b17, 0x00010117, - 0x10111504, 0x00010512, 0x10111504, 0x0001051b, - 0x11130504, 0x00000312, 0x13111703, 0x00000104, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0048h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0049h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 004ah - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 004bh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 004ch - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 004dh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 004eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 004fh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x1d280000, 0x1d231d1d, 0x23280000, 0x0e231d1d, // 0050h - 0x20000000, 0x0f1d1d0e, 0x20000000, 0x090d0d0e, - 0x0e000000, 0x090f0e0d, 0x00000000, 0x0f0d200e, - 0x00000000, 0x0e0d0d0e, 0x00000000, 0x23200e00, - 0x200f0a0f, 0x0d201d1d, 0x0d0a0909, 0x011f1f20, // 0051h - 0x0a21200a, 0x0f0d0d0f, 0x0a1f0e09, 0x0f210f01, - 0x0a0a0e0d, 0x2020090a, 0x1d0d0d0d, 0x211d200e, - 0x231d1d1d, 0x0a1d231d, 0x23282323, 0x011f1f0f, - 0x1a1a1209, 0x03131111, 0x16120305, 0x121b101a, // 0052h - 0x21111209, 0x12161111, 0x1221090a, 0x1b160911, - 0x0101120f, 0x11161a01, 0x0212090a, 0x121a1101, - 0x1e180102, 0x120a1212, 0x14150202, 0x12091b16, - 0x03050303, 0x03031703, 0x0403171b, 0x15151504, // 0053h - 0x04030505, 0x17150304, 0x04030505, 0x03030304, - 0x03030502, 0x02020404, 0x03051201, 0x17050403, - 0x03051201, 0x05050303, 0x05021212, 0x02050305, - 0x15031515, 0x17171515, 0x03151b1b, 0x04040b15, // 0054h - 0x12101b17, 0x04040315, 0x1b130504, 0x03040312, - 0x03040101, 0x03030305, 0x0305171b, 0x05030303, - 0x03050502, 0x05030303, 0x03051212, 0x01050303, - 0x15050415, 0x04150517, 0x15151504, 0x04151512, // 0055h - 0x01050304, 0x04041513, 0x05150303, 0x04040305, - 0x05050503, 0x03040217, 0x05050502, 0x03030117, - 0x03011b02, 0x05030303, 0x03051112, 0x01050503, - 0x03040404, 0x17101715, 0x03040404, 0x121b1205, // 0056h - 0x05030304, 0x12020215, 0x05040403, 0x01121705, - 0x05030303, 0x01010205, 0x01050505, 0x1b05111a, - 0x1b030505, 0x12011111, 0x01121212, 0x01111205, - 0x031b1203, 0x00001205, 0x05111705, 0x00002111, // 0057h - 0x1b1b0205, 0x00000016, 0x11010502, 0x00000016, - 0x02011212, 0x00000012, 0x2912011b, 0x00000000, - 0x12120111, 0x00000000, 0x00091112, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0058h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0059h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005ah - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005bh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005ch - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005dh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005fh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x23281d00, 0x00000000, 0x23280000, // 0060h - 0x00000000, 0x23000000, 0x00000000, 0x23000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x1f231d23, 0x091d0f0e, 0x1f1d1d1d, 0x201d201f, // 0061h - 0x1d1d1d23, 0x20231d1d, 0x1d1d2323, 0x0e201f23, - 0x1f1d201d, 0x200f1d23, 0x1f1f2300, 0x1d0d1623, - 0x1f230000, 0x1d1d1f23, 0x1d000000, 0x1f1d1f1d, - 0x1f160a02, 0x1a16211d, 0x1f200e0a, 0x1f23231f, // 0062h - 0x1d0e0e0e, 0x1d1d1d1d, 0x1d1f1d1d, 0x1f1f1d1d, - 0x1d201d1d, 0x0d0f201f, 0x201d1d1d, 0x2902201d, - 0x1d0e2323, 0x090a0d23, 0x231d1d1f, 0x0f0a0a1d, - 0x031b1611, 0x05020503, 0x0112161f, 0x05052902, // 0063h - 0x12291a1f, 0x09010212, 0x09291220, 0x1f0d0a12, - 0x09290512, 0x0d1f110a, 0x29292929, 0x29090a01, - 0x29120a0a, 0x01292929, 0x2929090f, 0x01091229, - 0x05111f12, 0x12011205, 0x111f1105, 0x11011201, // 0064h - 0x1f1f1a09, 0x0a120511, 0x16211f1f, 0x01122911, - 0x09090a11, 0x0a290202, 0x29292929, 0x1f12091b, - 0x0d120229, 0x0d090916, 0x1d0d0a29, 0x120a0d1f, - 0x05030212, 0x01020205, 0x05030212, 0x05020205, // 0065h - 0x03050501, 0x03291b12, 0x02050505, 0x03011111, - 0x05050501, 0x29122929, 0x05022921, 0x01120105, - 0x02022909, 0x09090205, 0x02020229, 0x09120205, - 0x01091f21, 0x161f0d09, 0x12161601, 0x1f16111b, // 0066h - 0x12110504, 0x21160d01, 0x29010102, 0x12160f01, - 0x01020201, 0x021b1202, 0x12021229, 0x0005020a, - 0x12121201, 0x00002912, 0x2909110a, 0x00000029, - 0x00201101, 0x00000000, 0x00002912, 0x00000000, // 0067h - 0x00000001, 0x00000000, 0x00000029, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0068h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0069h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 006ah - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 006bh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 006ch - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 006dh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 006eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 006fh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0070h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x200d2123, 0x00000000, 0x0d0f0000, // 0071h - 0x00000000, 0x0d000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x1d231d1d, 0x0d0d0f1f, 0x20201f20, 0x1d1f0a0d, // 0072h - 0x0909090d, 0x0e090a0a, 0x20200d00, 0x0a0a0a0e, - 0x23000000, 0x0a091d23, 0x00000000, 0x09090000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x090a090d, 0x12090d0d, 0x0e0e200f, 0x01010e20, // 0073h - 0x290d1d0d, 0x0d110d0a, 0x010e231d, 0x230d0502, - 0x1d1d200e, 0x23210a0e, 0x200e090a, 0x1d231f1d, - 0x090a0000, 0x1d1f2020, 0x00000000, 0x00000000, - 0x1f1d0d29, 0x200d201d, 0x211f2112, 0x20112120, // 0074h - 0x1621201f, 0x09161d0d, 0x1d21201f, 0x1d1d1d23, - 0x0d202121, 0x201f210d, 0x0f0d200d, 0x1f1d200f, - 0x0d201d1d, 0x00001d1d, 0x00000000, 0x00000000, - 0x2912090f, 0x0a292929, 0x121d2021, 0x090a0912, // 0075h - 0x091d210a, 0x09091112, 0x0f1d1111, 0x00090a0f, - 0x091d1d1d, 0x00000009, 0x00001d1d, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0912120a, 0x00000000, 0x00001201, 0x00000000, // 0076h - 0x0000000a, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0077h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0078h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0079h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 007ah - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 007bh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 007ch - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 007dh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 007eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 007fh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 -}; - - -/* EOF */ diff --git a/build/tests/NotLaunchRom/src/main.c b/build/tests/NotLaunchRom/src/main.c deleted file mode 100644 index 32bb2741..00000000 --- a/build/tests/NotLaunchRom/src/main.c +++ /dev/null @@ -1,109 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - GX - demos - UnitTours/2D_CharBg_1 - File: main.c - - Copyright 2003 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -//--------------------------------------------------------------------------- -// A sample that use BG #0 as text mode: -// -// This sample simply displays a sphere on the display. -// -// HOWTO: -// 1. Transfer the character data by GX_LoadBGxChar(). -// 2. Transfer the palette data by GX_LoadBGPltt(). -// 3. Transfer the screen data by GX_LoadBGxScr(). -// -// Do not forget to flush the corresponding cache if you modified the data -// before transfer. -//--------------------------------------------------------------------------- - -#ifdef SDK_TWL -#include -#else -#include -#endif -#include "DEMO.h" -#include "data.h" - -static u16 sScrnBuf[SCREEN_SIZE]; // Buffer for screen data(BG #0) - -#ifdef SDK_TWL -void TwlMain(void) -#else -void NitroMain(void) -#endif -{ - //--------------------------------------------------------------------------- - // Initialize: - // They enable IRQ interrupts, initialize VRAM, and set BG #0 for text mode. - //--------------------------------------------------------------------------- - DEMOInitCommon(); - DEMOInitVRAM(); - DEMOInitDisplayBG0Only(); - - //--------------------------------------------------------------------------- - // Transmitting the character data and the palette data - //--------------------------------------------------------------------------- - GX_LoadBG0Char(d_64_256_bg_schDT, 0, sizeof(d_64_256_bg_schDT)); - GX_LoadBGPltt(d_64_256_bg_sclDT, 0, sizeof(d_64_256_bg_sclDT)); - - { - int i, j; - for (i = 0; i < 8; i++) - { - for (j = 0; j < 8; j++) - { - sScrnBuf[(i * 32) + j] = (u16)((i * 0x10) + j); - } - } - } - // Store the data onto the main memory, and invalidate the cache. - DC_FlushRange(sScrnBuf, sizeof(sScrnBuf)); - /* DMAIOWX^փANZX̂ŃLbV Wait ͕sv */ - // DC_WaitWriteBufferEmpty(); - - // DMA transfer to BG #0 screen - GX_LoadBG0Scr(sScrnBuf, 0, sizeof(sScrnBuf)); - - DEMOStartDisplay(); - - //--------------------------------------------------------------------------- - // Main Loop - //--------------------------------------------------------------------------- - while (1) - { -#ifdef SDK_AUTOTEST - GX_SetBankForLCDC(GX_VRAM_LCDC_C); - EXT_TestSetVRAMForScreenShot(GX_VRAM_LCDC_C); - EXT_TestScreenShot(100, 0xC7953680); - EXT_TestTickCounter(); -#endif //SDK_AUTOTEST - - OS_WaitVBlankIntr(); // Waiting the end of VBlank interrupt - GX_LoadBG0Scr(sScrnBuf, 0, sizeof(sScrnBuf)); - } -} - -//--------------------------------------------------------------------------- -// VBlank interrupt function: -// -// Interrupt handlers are registered on the interrupt table by OS_SetIRQFunction. -// OS_EnableIrqMask selects IRQ interrupts to enable, and -// OS_EnableIrq enables IRQ interrupts. -// Notice that you have to call 'OS_SetIrqCheckFlag' to check a VBlank interrupt. -//--------------------------------------------------------------------------- -void VBlankIntr(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); // checking VBlank interrupt -} diff --git a/build/tests/NotLaunchRom/system.rsf b/build/tests/NotLaunchRom/system.rsf deleted file mode 100644 index 7dd8942e..00000000 --- a/build/tests/NotLaunchRom/system.rsf +++ /dev/null @@ -1,195 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - MakerCode "01" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile $(LOGOCHECK_BANNERPATH) - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion Japan - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - NANDAccess TRUE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType System - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch FALSE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media NAND - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode 011A - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Use Shared2 file index: [0-65535] - #Shared2FileIndex 1 - - # - # Use Shared2 file size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - #Shared2FileSize 128K -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/NotLaunchRom/user.rsf b/build/tests/NotLaunchRom/user.rsf deleted file mode 100644 index 85b18697..00000000 --- a/build/tests/NotLaunchRom/user.rsf +++ /dev/null @@ -1,195 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - MakerCode "01" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile $(LOGOCHECK_BANNERPATH) - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion Japan - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - NANDAccess TRUE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType User - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media NAND - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(LOGOCHECK_GAMECODE) - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Use Shared2 file index: [0-65535] - #Shared2FileIndex 1 - - # - # Use Shared2 file size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - #Shared2FileSize 128K -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/Makefile b/build/tests/RomTypeTest/ARM9/Makefile deleted file mode 100644 index 3ef269e2..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = -SUBMAKES = Makefile.0 Makefile.1 Makefile.2 Makefile.3 Makefile.4 Makefile.5 \ - Makefile.6 Makefile.7 Makefile.8 Makefile.9 Makefile.a Makefile.b \ - Makefile.c Makefile.h \ - Makefile.i Makefile.j Makefile.k - -include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/commondefs - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.0 b/build/tests/RomTypeTest/ARM9/Makefile.0 deleted file mode 100644 index a0db88bd..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.0 +++ /dev/null @@ -1,61 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 0 -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TARGET_BIN = $(TARGET_NAME).srl -TITLEID_LO = RT$(TARGET_NUMBER)A -#TARGET_TAD = $(BINDIR)/$(TITLEID_LO).$(TWL_BUILD_DIR)$(CODEGEN_ARCH).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.1 b/build/tests/RomTypeTest/ARM9/Makefile.1 deleted file mode 100644 index 295a0190..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.1 +++ /dev/null @@ -1,61 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 1 -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TARGET_BIN = $(TARGET_NAME).srl -TITLEID_LO = RT$(TARGET_NUMBER)A -#TARGET_TAD = $(BINDIR)/$(TITLEID_LO).$(TWL_BUILD_DIR)$(CODEGEN_ARCH).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.2 b/build/tests/RomTypeTest/ARM9/Makefile.2 deleted file mode 100644 index fdb9e52e..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.2 +++ /dev/null @@ -1,61 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 2 -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TARGET_BIN = $(TARGET_NAME).srl -TITLEID_LO = RT$(TARGET_NUMBER)A -#TARGET_TAD = $(BINDIR)/$(TITLEID_LO).$(TWL_BUILD_DIR)$(CODEGEN_ARCH).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.3 b/build/tests/RomTypeTest/ARM9/Makefile.3 deleted file mode 100644 index dceb5ad8..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.3 +++ /dev/null @@ -1,61 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 3 -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TARGET_BIN = $(TARGET_NAME).srl -TITLEID_LO = RT$(TARGET_NUMBER)A -#TARGET_TAD = $(BINDIR)/$(TITLEID_LO).$(TWL_BUILD_DIR)$(CODEGEN_ARCH).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.4 b/build/tests/RomTypeTest/ARM9/Makefile.4 deleted file mode 100644 index 023be1e1..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.4 +++ /dev/null @@ -1,61 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 4 -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TARGET_BIN = $(TARGET_NAME).srl -TITLEID_LO = RT$(TARGET_NUMBER)A -#TARGET_TAD = $(BINDIR)/$(TITLEID_LO).$(TWL_BUILD_DIR)$(CODEGEN_ARCH).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.5 b/build/tests/RomTypeTest/ARM9/Makefile.5 deleted file mode 100644 index 25957624..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.5 +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 5 -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.6 b/build/tests/RomTypeTest/ARM9/Makefile.6 deleted file mode 100644 index 9eccec93..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.6 +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 6 -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.7 b/build/tests/RomTypeTest/ARM9/Makefile.7 deleted file mode 100644 index fae03c69..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.7 +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 7 -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.8 b/build/tests/RomTypeTest/ARM9/Makefile.8 deleted file mode 100644 index b1b44b6f..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.8 +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 8 -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.9 b/build/tests/RomTypeTest/ARM9/Makefile.9 deleted file mode 100644 index 26a85d17..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.9 +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 9 -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.a b/build/tests/RomTypeTest/ARM9/Makefile.a deleted file mode 100644 index 83348305..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.a +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = a -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.b b/build/tests/RomTypeTest/ARM9/Makefile.b deleted file mode 100644 index 08b8224b..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.b +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = b -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.c b/build/tests/RomTypeTest/ARM9/Makefile.c deleted file mode 100644 index f8bd7ad8..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.c +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = c -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.h b/build/tests/RomTypeTest/ARM9/Makefile.h deleted file mode 100644 index ad5100a2..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.h +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = h -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -MAKETAD_OPTION += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.i b/build/tests/RomTypeTest/ARM9/Makefile.i deleted file mode 100644 index a1a1cb33..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.i +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = i -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -MAKETAD_OPTION += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.j b/build/tests/RomTypeTest/ARM9/Makefile.j deleted file mode 100644 index be75d339..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.j +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = j -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -MAKETAD_OPTION += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.k b/build/tests/RomTypeTest/ARM9/Makefile.k deleted file mode 100644 index caf16051..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.k +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = k -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -MAKETAD_OPTION += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/main0.rsf b/build/tests/RomTypeTest/ARM9/main0.rsf deleted file mode 100644 index 4ba1965f..00000000 --- a/build/tests/RomTypeTest/ARM9/main0.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_0.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - #Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/main1.rsf b/build/tests/RomTypeTest/ARM9/main1.rsf deleted file mode 100644 index 3f11e2da..00000000 --- a/build/tests/RomTypeTest/ARM9/main1.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_1.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - NANDAccess TRUE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - #Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/main2.rsf b/build/tests/RomTypeTest/ARM9/main2.rsf deleted file mode 100644 index 045dddc3..00000000 --- a/build/tests/RomTypeTest/ARM9/main2.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_2.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - #SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - NANDAccess TRUE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - #Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/main3.rsf b/build/tests/RomTypeTest/ARM9/main3.rsf deleted file mode 100644 index 78932ce2..00000000 --- a/build/tests/RomTypeTest/ARM9/main3.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_3.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - NANDAccess TRUE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - #AppType USER - AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - #Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - #Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/main4.rsf b/build/tests/RomTypeTest/ARM9/main4.rsf deleted file mode 100644 index 68adda4e..00000000 --- a/build/tests/RomTypeTest/ARM9/main4.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_4.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - #SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - NANDAccess TRUE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - #AppType USER - AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - #Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - #Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/main5.rsf b/build/tests/RomTypeTest/ARM9/main5.rsf deleted file mode 100644 index 95188af0..00000000 --- a/build/tests/RomTypeTest/ARM9/main5.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_5.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/main6.rsf b/build/tests/RomTypeTest/ARM9/main6.rsf deleted file mode 100644 index b8155275..00000000 --- a/build/tests/RomTypeTest/ARM9/main6.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_6.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/main7.rsf b/build/tests/RomTypeTest/ARM9/main7.rsf deleted file mode 100644 index bfc391a5..00000000 --- a/build/tests/RomTypeTest/ARM9/main7.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_7.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/main8.rsf b/build/tests/RomTypeTest/ARM9/main8.rsf deleted file mode 100644 index 7ee473d5..00000000 --- a/build/tests/RomTypeTest/ARM9/main8.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_8.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/main9.rsf b/build/tests/RomTypeTest/ARM9/main9.rsf deleted file mode 100644 index 9cdf6617..00000000 --- a/build/tests/RomTypeTest/ARM9/main9.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_9.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - #SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/maina.rsf b/build/tests/RomTypeTest/ARM9/maina.rsf deleted file mode 100644 index b575ba4e..00000000 --- a/build/tests/RomTypeTest/ARM9/maina.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_a.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - #SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/mainb.rsf b/build/tests/RomTypeTest/ARM9/mainb.rsf deleted file mode 100644 index 85a3c914..00000000 --- a/build/tests/RomTypeTest/ARM9/mainb.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_b.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - #SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/mainc.rsf b/build/tests/RomTypeTest/ARM9/mainc.rsf deleted file mode 100644 index ac929d83..00000000 --- a/build/tests/RomTypeTest/ARM9/mainc.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_c.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - #SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/mainh.rsf b/build/tests/RomTypeTest/ARM9/mainh.rsf deleted file mode 100644 index 02d4c355..00000000 --- a/build/tests/RomTypeTest/ARM9/mainh.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_h.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - #AppType USER - AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - #Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/maini.rsf b/build/tests/RomTypeTest/ARM9/maini.rsf deleted file mode 100644 index 28e76872..00000000 --- a/build/tests/RomTypeTest/ARM9/maini.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_i.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - #AppType USER - AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - #Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/mainj.rsf b/build/tests/RomTypeTest/ARM9/mainj.rsf deleted file mode 100644 index 084716a8..00000000 --- a/build/tests/RomTypeTest/ARM9/mainj.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_j.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - #SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - #AppType USER - AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - #Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/maink.rsf b/build/tests/RomTypeTest/ARM9/maink.rsf deleted file mode 100644 index c53b6cd6..00000000 --- a/build/tests/RomTypeTest/ARM9/maink.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_k.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - #SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - #AppType USER - AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - #Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/src/RomTypeTest.c b/build/tests/RomTypeTest/ARM9/src/RomTypeTest.c deleted file mode 100644 index 0f77a0a7..00000000 --- a/build/tests/RomTypeTest/ARM9/src/RomTypeTest.c +++ /dev/null @@ -1,419 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: DS_Chat.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "misc.h" -#include "RomTypeTest.h" - -// define data------------------------------------------ -#define RETURN_BUTTON_TOP_X 2 -#define RETURN_BUTTON_TOP_Y 21 -#define RETURN_BUTTON_BOTTOM_X ( RETURN_BUTTON_TOP_X + 8 ) -#define RETURN_BUTTON_BOTTOM_Y ( RETURN_BUTTON_TOP_Y + 2 ) - -#define ENABLE_CONTENT 0 -#define ENABLE_SHARED2 0 - -#if (ENABLE_CONTENT == 1) -#define CTRUE TRUE -#else -#define CTRUE FALSE -#endif - -#if (ENABLE_SHARED2 == 1) -#define STRUE TRUE -#else -#define STRUE FALSE -#endif - -#define TEST_NUM 15 - -typedef enum AccessPermission { - PERMISSION_NA = 0, - PERMISSION_RO, - PERMISSION_RW, - PERMISSION_ERROR, - PERMISSION_MAX -} -AccessPermission; - -// extern data------------------------------------------ - -// function's prototype declaration--------------------- -static AccessPermission RWExTestCore( char *path, char *testfile ); -static AccessPermission SRLTest( void ); -static AccessPermission ContentTest( void ); -static void FinalizeRWTest( FSFile *file, char* filename ); -static AccessPermission RWTestCore( char *path, char *testfile ); -static AccessPermission RWTest( char *path ); -static void TestFSPermission( void ); - -// global variable ------------------------------------- -RTCDrawProperty g_rtcDraw = { - TRUE, RTC_DATE_TOP_X, RTC_DATE_TOP_Y, RTC_TIME_TOP_X, RTC_TIME_TOP_Y -}; - -// static variable ------------------------------------- -static BOOL s_quiettest = FALSE; - -// const data ----------------------------------------- -static AccessPermission s_answer_data[TEST_NUM]; - -static const u16 *s_answer_str[PERMISSION_MAX] = -{ - L"NA", - L"RO", - L"RW", - L"~", -}; - -static const u16 *s_test_name[TEST_NUM] = -{ - L"nand:", - L"nand2:", - L"content:", - L"shared1:", - L"shared2:", - L"photo:", - L"dataPub:", - L"dataPrv:", - L"sdmc:", - L"nand:/sys", - L"nand:/import", - L"nand:/tmp", - L"nand:/", - L"nand:/", - L"nand:/" -}; - -//====================================================== -// eXgvO -//====================================================== - -static AccessPermission RWExistTestCore( char *path, char *testfile ) -{ - char filename[256]; - int len; - char buf[5]; - FSFile file[1]; - AccessPermission result = PERMISSION_RW; - - FS_InitFile( file ); - STD_TSNPrintf( filename, 256, "%s/%s", path, testfile ); - - // RWL[ht@CI[v - if ( !FS_OpenFileEx( file, filename, FS_FILEMODE_RWL ) ) - { - // RWL[ht@CI[vs - if( !s_quiettest ) OS_TPrintf("%s:RWL mode open failed.\n",filename); - FS_CloseFile( file ); - // R[ht@CI[v - if ( !FS_OpenFileEx( file, filename, FS_FILEMODE_R ) ) - { - // R[ht@CI[vs - if( !s_quiettest ) OS_TPrintf("%s:R mode open failed.\n",filename); - return PERMISSION_NA; - } - result = PERMISSION_RO; - } - - // t@C[h - len = FS_ReadFile( file, buf, 3 ); - if( len != 3 ) - { - // [hs - if( !s_quiettest ) OS_TPrintf("%s:read failed.\n",filename); - FS_CloseFile( file ); - return PERMISSION_ERROR; - } - - // t@CN[Y - if( !FS_CloseFile( file ) ) - { - // N[Ys - if( !s_quiettest ) OS_TPrintf("%s:close failed.\n",filename); - return PERMISSION_ERROR; - } - - return result; -} - -static AccessPermission BannerTest( void ) -{ - return RWExistTestCore( "nand:", "" ); -} - -static AccessPermission SRLTest( void ) -{ - return RWExistTestCore( "nand:", "" ); -} - -static AccessPermission ContentTest( void ) -{ - return RWExistTestCore( "content:", "title.tmd" ); -} - -static AccessPermission Shared1Test( void ) -{ - return RWExistTestCore( "shared1:", "TWLCFG0.dat" ); -} - -static void FinalizeRWTest( FSFile *file, char* filename ) -{ - FS_CloseFile( file ); - FS_DeleteFile( filename ); -} - -// pX͍ŌɃXbVȂ -static AccessPermission RWTestCore( char *path, char *testfile ) -{ - char filename[256]; - int len; - char buf[5]; - FSFile file[1]; - - FS_InitFile( file ); - STD_TSNPrintf( filename, 256, "%s/%s", path, testfile ); - - // t@CcĂƌȂ̂ō폜ɑ点ĂieXgʂɂ͉ej - FS_DeleteFile(filename); - - // t@C쐬eXg - if ( FS_CreateFile(filename, FS_PERMIT_R | FS_PERMIT_W) ) - { - // t@CI[v - if ( !FS_OpenFileEx( file, filename, FS_FILEMODE_W ) ) - { - // t@CI[vs - if( !s_quiettest ) OS_TPrintf("%s:open failed.\n",filename); - FS_DeleteFile( filename ); - return PERMISSION_ERROR; - } - // t@CCg - len = FS_WriteFile( file, "test", 5); - if( len != 5 ) - { - // Cgs - if( !s_quiettest ) OS_TPrintf("%s:write failed.\n",filename); - FinalizeRWTest( file, filename ); - return PERMISSION_ERROR; - } - // t@CN[Y - if( !FS_CloseFile( file ) ) - { - // N[Ys - if( !s_quiettest ) OS_TPrintf("%s:close failed.\n",filename); - FinalizeRWTest( file, filename ); - return PERMISSION_ERROR; - } - - // t@CI[v - if ( !FS_OpenFileEx( file, filename, FS_FILEMODE_R ) ) - { - // t@CI[vs - if( !s_quiettest ) OS_TPrintf("%s:open failed.\n",filename); - FS_DeleteFile( filename ); - return PERMISSION_ERROR; - } - // t@C[h - len = FS_ReadFile( file, buf, len ); - if( len != 5 || STD_CompareString( buf, "test" ) != 0 ) - { - // [hs - if( !s_quiettest ) OS_TPrintf("%s:read failed.\n",filename); - FinalizeRWTest( file, filename ); - return PERMISSION_ERROR; - } - // t@CN[Y - if( !FS_CloseFile( file ) ) - { - // N[Ys - if( !s_quiettest ) OS_TPrintf("%s:close failed.\n",filename); - FinalizeRWTest( file, filename ); - return PERMISSION_ERROR; - } - // t@Cf[g - if( !FS_DeleteFile( filename )) - { - // f[gs - if( !s_quiettest ) OS_TPrintf("%s:delete failed.\n",filename); - FinalizeRWTest( file, filename ); - return PERMISSION_ERROR; - } - }else - { - // t@C쐬s - FSResult fs_result = FS_GetArchiveResultCode( filename ); - if( !s_quiettest ) OS_TPrintf("%s:cleate failed.\n",filename); - OS_TPrintf( "FS_GetArchiveResultCode(%s) : %d\n", filename, fs_result ); - if( FS_RESULT_ERROR == fs_result ) - { - // t@C쐬NO_ENTRY݂ȂfBNg̉Ƀt@C낤Ƃ}EgĂȂ - // ǂɂANZXłȂAfBNg݂̑mF鎖łȂ̂ŁAp[~bVNAƂĈ - return PERMISSION_NA; - }else if( FS_RESULT_PERMISSION_DENIED == fs_result ) - { - // PERMISSION_DENIEDꍇAROłȂmFKv - if ( !FS_OpenFileEx( file, filename, FS_FILEMODE_R ) ) - { - if( FS_RESULT_PERMISSION_DENIED == FS_GetArchiveResultCode( filename ) ) - { - // ˋ̃t@CR[hœǂݍƂʂDENIEDȂp[~bVNA - return PERMISSION_NA; - } - } - return PERMISSION_ERROR; - } - // ƂERROR - return PERMISSION_ERROR; - } - - return PERMISSION_RW; -} - -static AccessPermission RWTest( char *path ) -{ - return RWTestCore( path, "test.txt" ); -} - -static AccessPermission TMPJumpTest( void ) -{ - return RWTestCore( "nand:", "" ); -} - -static void TestFSPermission( void ) -{ - AccessPermission result[TEST_NUM]; - BOOL test_ok = TRUE; - int l; - - result[0] = RWTest( "nand:" ); // nand: - result[1] = RWTest( "nand2:" ); // nand2: - result[2] = ContentTest(); // content: - result[3] = Shared1Test(); // shared1: - result[4] = RWTest( "shared2:" ); // shared2: - result[5] = RWTest( "photo:" ); // photo: - result[6] = RWTest( "dataPub:" ); // dataPub: - result[7] = RWTest( "dataPrv:" ); // dataPrv: - result[8] = RWTest( "sdmc:" ); // sdmc: - result[9] = RWTest( "nand:/sys" ); // nand:/sys - result[10] = RWTest( "nand:/import" ); // nand:/import - result[11] = RWTest( "nand:/tmp" ); // nand:/tmp - result[12] = SRLTest(); // nand:/ - result[13] = BannerTest(); // nand:/ - result[14] = TMPJumpTest(); // nand:/ - - for( l=0; ltitleID_Lo[1]); - PutStringUTF16( 1 * 8, 11 * 8, TXT_COLOR_WHITE, test_ok ? (const u16 *)L"Test Succeeded." : (const u16 *)L"Test Failed..." ); - - for( l=0; l<15; l++ ) - { - PutStringUTF16Sub( 8*1, l * 12, TXT_COLOR_WHITE, s_test_name[l]); - PutStringUTF16Sub( 8*18 + 8, l * 12, TXT_COLOR_WHITE, s_answer_str[ s_answer_data[l] ]); - PutStringUTF16Sub( 8*18 + 8*7, l * 12, ( result[l]==s_answer_data[l] ? TXT_COLOR_CYAN : TXT_COLOR_YELLOW ), s_answer_str[ result[l] ]); - } - -} - -static void makeAnswerData( void ) -{ - ROM_Header_Short *rhs = (ROM_Header_Short *)(HW_TWL_ROM_HEADER_BUF); - - BOOL isNandApp = (rhs->titleID_Hi & TITLE_ID_HI_MEDIA_MASK) ? TRUE : FALSE; - BOOL isSecureApp = (rhs->titleID_Hi & TITLE_ID_HI_SECURE_FLAG_MASK) ? TRUE : FALSE; - BOOL isNandAccessOn = (rhs->access_control.nand_access) ? TRUE : FALSE; - BOOL isSDCardAccessOn = (rhs->access_control.sd_card_access) ? TRUE : FALSE; - BOOL isEnablePublicSaveData = ( rhs->public_save_data_size != 0 ) ? TRUE : FALSE; - BOOL isEnablePrivateSaveData = ( rhs->private_save_data_size != 0 ) ? TRUE : FALSE; - - // ANZXݒ𐶐AMȂ́AwŃtANZX - s_answer_data[0] = ( ( isNandApp || isNandAccessOn ) && isSecureApp ) ? PERMISSION_RW : PERMISSION_NA; // nand: iNANDAv or NANDANZXONjand SecureApp - s_answer_data[1] = ( ( isNandApp || isNandAccessOn ) && isSecureApp ) ? PERMISSION_RW : PERMISSION_NA; // nand2: iNANDAv or NANDANZXONjand SecureApp - s_answer_data[2] = ( isNandApp && CTRUE ) ? PERMISSION_RO : PERMISSION_NA; // content: ݖBL̏ꍇNANDAv̂ReadOnly - s_answer_data[3] = ( isNandApp || isNandAccessOn ) ? PERMISSION_RO : PERMISSION_NA; // shared1: iNANDAv or NANDANZXONjReadOnly - s_answer_data[4] = ( ( isNandApp || isNandAccessOn ) && STRUE ) ? PERMISSION_RW : PERMISSION_NA; // shared2: ݖBL̏ꍇ́iNANDAv or NANDANZXONj - s_answer_data[5] = ( isNandApp || isNandAccessOn ) ? PERMISSION_RW : PERMISSION_NA; // photo: NANDAv or NANDANZXON - s_answer_data[6] = ( isNandApp && isEnablePublicSaveData ) ? PERMISSION_RW : PERMISSION_NA; // dataPub: NANDAv and dataPub TCYݒ肠 - s_answer_data[7] = ( isNandApp && isEnablePrivateSaveData ) ? PERMISSION_RW : PERMISSION_NA; // dataPrv: NANDAv and dataPrv TCYݒ肠 - s_answer_data[8] = isSDCardAccessOn ? PERMISSION_RW : PERMISSION_NA; // sdmc: SDANZXiSDJ[hhĂȂƎsj - s_answer_data[9] = ( ( isNandApp || isNandAccessOn ) && isSecureApp ) ? PERMISSION_RW : PERMISSION_NA; // nand:/sys iNANDAv or NANDANZXONjand SecureApp - s_answer_data[10] = ( ( isNandApp || isNandAccessOn ) && isSecureApp ) ? PERMISSION_RW : PERMISSION_NA; // nand:/import iNANDAv or NANDANZXONjand SecureApp - s_answer_data[11] = ( ( isNandApp || isNandAccessOn ) && isSecureApp ) ? PERMISSION_RW : PERMISSION_NA; // nand:/tmp iNANDAv or NANDANZXONjand SecureApp - s_answer_data[12] = isNandApp ? ( isSecureApp ? PERMISSION_RW : PERMISSION_RO ) : PERMISSION_NA; // nand:/ NANDAvReadOnlyiSecurȅꍇ̓tANZXj - s_answer_data[13] = isNandApp ? PERMISSION_RW : PERMISSION_NA; // nand:/ NANDAv - s_answer_data[14] = ( isNandApp || isNandAccessOn ) ? PERMISSION_RW : PERMISSION_NA; // nand:/ NANDAv or NANDANZXON -} - -// eXgvȌ -void RomTypeTestInit( void ) -{ - GX_DispOff(); - GXS_DispOff(); - NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); - - PrintfSJIS( 1 * 8, 9 * 8, TXT_COLOR_BLACK, "FATFSPermissionCheck %c", (char)((ROM_Header_Short *)(HW_TWL_ROM_HEADER_BUF))->titleID_Lo[1]); - PutStringUTF16( 1 * 8, 11 * 8, TXT_COLOR_BLACK, (const u16 *)L"Start." ); - //GetAndDrawRTCData( &g_rtcDraw, TRUE ); - - GXS_SetVisiblePlane( GX_PLANEMASK_BG0 ); - GX_DispOn(); - GXS_DispOn(); - - s_quiettest = FALSE; - - makeAnswerData(); - - TestFSPermission(); - -} - - -// eXgvÕC[v -void RomTypeTestMain(void) -{ - BOOL tp_cancel = FALSE; - - ReadTP(); // ^b`pl͂̎擾 - - // [RETURN]{^`FbN - if(tpd.disp.touch) { - tp_cancel = WithinRangeTP( RETURN_BUTTON_TOP_X * 8, RETURN_BUTTON_TOP_Y * 8 - 4, - RETURN_BUTTON_BOTTOM_X * 8, RETURN_BUTTON_BOTTOM_Y * 8 - 4, &tpd.disp ); - } - - if( ( pad.trg & PAD_BUTTON_A ) ) { - } - - if( ( pad.trg & PAD_BUTTON_X ) ) { - } - - if( ( pad.trg & PAD_BUTTON_B ) || tp_cancel ) { -// SYSM_RebootLauncher(); - } - - //GetAndDrawRTCData( &g_rtcDraw, FALSE ); -} - - diff --git a/build/tests/RomTypeTest/ARM9/src/RomTypeTest.h b/build/tests/RomTypeTest/ARM9/src/RomTypeTest.h deleted file mode 100644 index 86e4339b..00000000 --- a/build/tests/RomTypeTest/ARM9/src/RomTypeTest.h +++ /dev/null @@ -1,36 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: RomTypeTest.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __ROM_TYPE_TEST_H__ -#define __ROM_TYPE_TEST_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -// define data---------------------------------------------------------- - -void RomTypeTestInit( void ); -void RomTypeTestMain( void ); - -#ifdef __cplusplus -} -#endif - -#endif // __ROM_TYPE_TEST_H__ diff --git a/build/tests/RomTypeTest/ARM9/src/main.c b/build/tests/RomTypeTest/ARM9/src/main.c deleted file mode 100644 index 72fe2c5e..00000000 --- a/build/tests/RomTypeTest/ARM9/src/main.c +++ /dev/null @@ -1,86 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: main.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "misc.h" -#include "RomTypeTest.h" - -// extern data----------------------------------------------------------------- - -// define data----------------------------------------------------------------- - -// function's prototype------------------------------------------------------- -static void INTR_VBlank( void ); - -// global variable------------------------------------------------------------- - -// static variable------------------------------------------------------------- - -// const data------------------------------------------------------------------ - - -// ============================================================================ -// function's description -// ============================================================================ -void TwlMain(void) -{ - - // ---------------------------------- - OS_Init(); - - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - GX_Init(); - GX_SetPower(GX_POWER_ALL); // eWbN p[ON - - // 荞݋---------------------------- - (void)OS_SetIrqFunction(OS_IE_V_BLANK, INTR_VBlank); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - - // foCX------------------------------- - TP_Init(); - (void)RTC_Init(); - - // VXȅ------------------ - InitAllocator(); - - InitBG(); - RomTypeTestInit(); - // C[v---------------------------- - while(1){ - OS_WaitIrq(1, OS_IE_V_BLANK); // VuN荞ݑ҂ - - ReadKeyPad(); // L[͂̎擾 - ReadTP(); // TP͂̎擾 - - RomTypeTestMain(); - } -} - - -// ============================================================================ -// 荞ݏ -// ============================================================================ - -// VuN荞 -static void INTR_VBlank(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); // VuN`FbÑZbg -} - diff --git a/build/tests/RomTypeTest/Makefile b/build/tests/RomTypeTest/Makefile deleted file mode 100644 index 66754bca..00000000 --- a/build/tests/RomTypeTest/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS = banner ARM9 - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/banner/Makefile b/build/tests/RomTypeTest/banner/Makefile deleted file mode 100644 index a03da7d0..00000000 --- a/build/tests/RomTypeTest/banner/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -SUBDIRS = -SUBMAKES = Makefile.0 Makefile.1 Makefile.2 Makefile.3 Makefile.4 Makefile.5 \ - Makefile.6 Makefile.7 Makefile.8 Makefile.9 Makefile.a Makefile.b \ - Makefile.c Makefile.d Makefile.e Makefile.f Makefile.g Makefile.h \ - Makefile.i Makefile.j Makefile.k - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.0 b/build/tests/RomTypeTest/banner/Makefile.0 deleted file mode 100644 index 97c32d52..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.0 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 0 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.1 b/build/tests/RomTypeTest/banner/Makefile.1 deleted file mode 100644 index 54f8cd07..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.1 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 1 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.2 b/build/tests/RomTypeTest/banner/Makefile.2 deleted file mode 100644 index 13eeca27..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.2 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 2 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.3 b/build/tests/RomTypeTest/banner/Makefile.3 deleted file mode 100644 index 5bfadf81..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.3 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 3 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.4 b/build/tests/RomTypeTest/banner/Makefile.4 deleted file mode 100644 index 7ea01f33..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.4 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 4 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.5 b/build/tests/RomTypeTest/banner/Makefile.5 deleted file mode 100644 index 4c44bd16..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.5 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 5 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.6 b/build/tests/RomTypeTest/banner/Makefile.6 deleted file mode 100644 index a3cb390c..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.6 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 6 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.7 b/build/tests/RomTypeTest/banner/Makefile.7 deleted file mode 100644 index c4e38d94..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.7 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 7 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.8 b/build/tests/RomTypeTest/banner/Makefile.8 deleted file mode 100644 index b42bcec4..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.8 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 8 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.9 b/build/tests/RomTypeTest/banner/Makefile.9 deleted file mode 100644 index 5657c255..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.9 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 9 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.a b/build/tests/RomTypeTest/banner/Makefile.a deleted file mode 100644 index fc320423..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.a +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = a - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.b b/build/tests/RomTypeTest/banner/Makefile.b deleted file mode 100644 index 77b38975..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.b +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = b - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.c b/build/tests/RomTypeTest/banner/Makefile.c deleted file mode 100644 index c80098fe..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.c +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = c - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.d b/build/tests/RomTypeTest/banner/Makefile.d deleted file mode 100644 index 1187190a..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.d +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = d - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.e b/build/tests/RomTypeTest/banner/Makefile.e deleted file mode 100644 index 32024fb5..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.e +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = e - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.f b/build/tests/RomTypeTest/banner/Makefile.f deleted file mode 100644 index 2360a8d6..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.f +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = f - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.g b/build/tests/RomTypeTest/banner/Makefile.g deleted file mode 100644 index 3d947db4..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.g +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = g - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.h b/build/tests/RomTypeTest/banner/Makefile.h deleted file mode 100644 index 55893d65..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.h +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = h - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.i b/build/tests/RomTypeTest/banner/Makefile.i deleted file mode 100644 index 298a0bdb..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.i +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = i - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.j b/build/tests/RomTypeTest/banner/Makefile.j deleted file mode 100644 index e8d5ea6a..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.j +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = j - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.k b/build/tests/RomTypeTest/banner/Makefile.k deleted file mode 100644 index b1cff1b6..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.k +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = k - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/banner_v3.bsf b/build/tests/RomTypeTest/banner/banner_v3.bsf deleted file mode 100644 index d595b6d35b72e52619f29b85a7cea0a85f471335..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 762 zcmc(dK}!QM5QX2hg8v~<5IkrR!9$Ohu3Abdt_mL0tb9)y>^dE zV93mSJNw>be!jc9Rjy1%7x5T!s}<)>71dmy+zM`)oR-{Ab)s&=PT%}ZO#d}{(gGzl ziryPVMy1wNJhd4LjkaiaMXc>L03@c^nuYz(jhut!^0RvH$F0knzW#q9$U~moFDJ}z>JQgd8?{HqiSEC9Y(wJ*Wly6 zRcU(T6b&w`xQjJ=XX9JWnaNCF#09x$H~Z>ww#=h~HP(I-nf#Th!L($%5DJTha5`L6s@6ybjn%yN? zRVW_*0osgCYX1V0`n@z_{lZ=Hx%bU`@A8@_&L(AYupeOU!w*rG$gwV8ui2t-`7iaqoEDpxIr^P)f#UzZs0(QsSQt*9@9H z*U3v5MlA`>$3ypd0Ws4kX6(5P%~hCrn6d8-ZIr0!CTmG}KJ`8Ox(K$a)mjo=1^(DR zlKT~IHO*QIp87UQG{g@FzWx6i%$v+YJPf8_r_m8j%SxZFq9Ev^d_#&;uyeTxf$IPUVA8!~?UxO+tjABKw#Pv@%p@SbJx+)K&RSUtYI zM^R?D(L7gj@riN8O5JOQK|)+$ERN>6Qcw6G>w%}RDy5=41OJE4wek$NdgyDSZ$-Qi AC;$Ke diff --git a/build/tests/RomTypeTest/banner/icon/msk_pictchat_icon.bin b/build/tests/RomTypeTest/banner/icon/msk_pictchat_icon.bin deleted file mode 100644 index 5b2734aa29fe5a7cc1474fd910a9f00b579e0a4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4480 zcmeHKJ#Q015Ou!H6)6~qMFFxP5(P>HS0O5hMMHJPrU*((r$~Vi#T7C5Z_VA>o4@S`d;40Nt*5jG@JWUM3#MJ4q~&_3TU_60<<4u z(vY8HU>0jS59BGzd6q4m1s*wsXtfRkNWu_4eh7W8EL(0>N)YKXU{^PsxCBni8~dtE^N z*MIc&54F!dKx>~K`psO>Hq@jT>VJXPnuMqR=w!(H&sUu*LVVkbMD3$@RE zpji979$f#nKJ)r_{p)jD($%l6f6d;P?^FMUcw7Iv_tW>Qf9^ACsM}ze+iTqa1#7^< ztk#7{2T|HBg@zQz5Vb_Hs1$jW{ImiE#gy3bEM|~ELTKJz-XMoV z>%a)k01LMQ5Izd}3(kOn^{>yPI-@C9gGa7=;FY3>!3|aat{2x47a=p+e*M4#k4&T; zn~&>?^-ukU_3xCjKl4kh4;uBiHw!dh9k_aww`YH!{huK>Nq@ZQV7T^?y>riRCxUZP zpxMB&xEfM_?LP~K8O;>9@-~3ZhSmRkzkduD^l$hjcej{~sTpJU(0NHom2wJ~ZAfu0CJ+wfuc?XW{m%2P@s>wT03@ vZsoCPTro5DtQ5^h6V=kWJCo5=wbavUBATz3s^#*nGVr<_O+}N{E6vnzcJN>n diff --git a/build/tests/RomTypeTest/banner/test-utf16_0_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_0_v3.TWL.bsf deleted file mode 100644 index f91f07dd3194e6ae787b476305c9c06eedb7da49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(OACTf5QWdyp#LDWu|*GP5wxqwvPFnW+pq^ErA4}^KVO|Y*9Wx77_N@vH)qc1 z`_;k(K5UriNSJ&MkuVOpv+Co^k6>U>z8kX=AtvGQ8saEf zf<5mKVTZz2oJ;MD;jpu!4D`Ra!iAa_(U+RtxU7hC2@>2L{` zK1_y3jTix*vS~nvDLeJt8CErv1;w;Q*QVBQO^aXA%jr2g>uAMjZHEr)XvJvSuieh# UpLKJ3`p1@v(b|hYXvJvy0|FIXJOBUy diff --git a/build/tests/RomTypeTest/banner/test-utf16_1_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_1_v3.TWL.bsf deleted file mode 100644 index b793ddcf5df669bb94c4fba4e972d4b24724dabb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(%L;;E5QWdypmz}3*rFRPf_4>Iwg^#a8+M_jv`82A^40mr8?;CnejUee&YaQD zyM-xSn9$LY(E02mVjS^c)y19Jo|%aNSLRJLKrJ3pFpGFEzWz88I%{(yOW^JZDZ#Sjm|#cFd!~;R-f= z=nRJ%Aw0ZfQ;!Z~b`FG`V_iWRP)u8BlUn~Z4Sq!@qZjO~q7{>BTXa}OD<-Ag%IysP TSv#X=HMUets=cg1D<-AC2ZdZj diff --git a/build/tests/RomTypeTest/banner/test-utf16_2_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_2_v3.TWL.bsf deleted file mode 100644 index b5bcbdb4bbea1c7d25e2f2519f8d08eefe4751c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(%L;;E5QWdypmz}3*rE%y2-;O-*&;-xZPF4Vk$zSQg^k6>U>z8kX=AtvGQ8saEf zf<5mKVTZz2oJ;MD;jpu!4D`Ra!iAa_(U+RtxU7hC2@>2L{` zK1_y3jTix*vS~nvDLeHpGpuST3yNuru1&4qnijvJm(z20*3pX5+72Do(TdTuU%Q>f UKkMf7^p7nSqqP@*(2CLY2NGpmQ~&?~ diff --git a/build/tests/RomTypeTest/banner/test-utf16_4_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_4_v3.TWL.bsf deleted file mode 100644 index e2025bf5df8fda5164a86d1793cead05878e0ab6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(%L;;E5QWdypmz}3*rE#*1nnxaY!RZ;Hta%4X^}4K<*W0LH)xSE{5p=`oH?VP zcMDUvFrlL(q4U{C#5m%?s*5|bJu?#luFRWg$k_-Hvw9;vhK51$Zo*1{kc7pnkCS8( z4!l2w9SK`0RjLU?$|rXC%}>>LU?$GUPRC`&2R!mBN0T0RjLU?$|rXC%}>>LU?$GUPRC`&2R!mBN0UbqLWB>pF diff --git a/build/tests/RomTypeTest/banner/test-utf16_6_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_6_v3.TWL.bsf deleted file mode 100644 index 9886587c5e481abdf442abfa07b2f72c6ab43094..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(%L;;E5QWdypmz}3*rE#r1??)bY!RZ;Hta%4X^}4K<*W0LH)xSE{5p=`oH?VP zcMDUvFrlL(q4U{C#5m%?s*5|bJu?#luFRWg$k_-Hvw9;vhK51$Zo*1{kc7pnkCS8( z4!l2w9SK`0RjLU?$|rXC%}>>LU?$GUPRC`&2R!mBN0V1_rYybcN diff --git a/build/tests/RomTypeTest/banner/test-utf16_7_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_7_v3.TWL.bsf deleted file mode 100644 index 27726336a524d6349603fa27a754c88e07a7faf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(OACTf5QWdyp#LDWu|*GP5wxqwvPFnW+pq^ErA4}^KVO|Y*9Wx77_N@vH)qc1 z`_;k(K5UriNSJ&MkuVOpv+Co^k6>U>z8kX=AtvGQ8saEf zf<5mKVTZz2oJ;MD;jpu!4D`Ra!iAa_(U+RtxU7hC2@>2L{` zK1_y3jTix*vS~nvDLb{l8CErv1;w;Q*QVBQO^aXA%jr2g>uAMjZHEr)XvJvSuieh# UpLKJ3`p1@v(b|hYXvJvy11Ke2bN~PV diff --git a/build/tests/RomTypeTest/banner/test-utf16_8_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_8_v3.TWL.bsf deleted file mode 100644 index 8cb61ef207d6623ea3b1d96a0867eb005fdc8dbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(%L;;E5QWdypmz}3*rE%xDB4wI*&;-xZPF4Vk$zSQgF4Vk$zSQg<0SuH~!~g&Q diff --git a/build/tests/RomTypeTest/banner/test-utf16_b_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_b_v3.TWL.bsf deleted file mode 100644 index 02983981ce6c926d03d15c1cb7ae6e9ef7f7d57c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(%L;;E5QWdypmz}3*rE%x2-;O-*&;-xZD>VFX^}4K<*W0LH)xSE{5p=`oH?VP zcLy`LFrlL-q4U{C%sAq~s*5|bJu?#_uFTtL$=M2#uzDjsfre4}ZpuoCh=j$fkCS9E z4!l2w9Sd7=HnmfR#mP7iwNeUuyP%GZI{|qgPc+dCr`gvQjX81kB^o;Tkr5 z=nRJ%5j?zPQ;!Z4b_PN&u&JR8D5fj4Nv;2y2EU?{(@S>N(Td5mEjp~D6_e3!?REzL Ttew;I23sm7(_S^86_e3l5(Hh$ diff --git a/build/tests/RomTypeTest/banner/test-utf16_c_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_c_v3.TWL.bsf deleted file mode 100644 index 7475a88ac2e97eb17144dba32b36de9e6d0d63e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(%?pA+5XIlsp#MSWVuwDUL(r`v%MKwbUBf;oDJ{}N{qxn^*;MF|GORm0{`Soq zeZN|mz=sVJ9SM`?5DDXeJF7l!%y!IdM7S_-q9JQ7M9S)w^aut9#k(;p5n>V!pCOKt zCD?O+2s;$Ebg^Zg6b_eg z>BD4r)QAz_DU$|tn2Lg$bB0v~WeL+3U7K3}H7$Nc51O9yW)-a%O*?d0MJq83``f(W|PZJZDZ#St*!4_RQnb;Tkr5 z=nRJ%5j?zPQ;!Z4b_PN&u&JR8D5fj4Nv;2y2EU?{(@S>N(Td5mEjp~D6_e3!?REzL Ttew;I23sm7(_S^86_e3l9OPZx diff --git a/build/tests/RomTypeTest/banner/test-utf16_e_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_e_v3.TWL.bsf deleted file mode 100644 index 69ecd6ec9fb9be75906de9a6551b4d6101788c09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(OACTf5QWdyp#LDWu|*GP5wxqwvPFnW+pq^ErA4}^KVO|Y*9Wx77_N@vH)qc1 z`_;k(K5UriNSJ&MkuVOpv+Co^k6>U>z8kX=AtvGQ8saEf zf<5mKVTZz2oJ;MD;jpu!4D`Ra!iAa_(U+RtxU7hC2@>2L{` zK1_y3jTix*vS~nvDLeI^GpuST3yNuru1&4qnijvJm(z20*3pX5+72Do(TdTuU%Q>f UKkMf7^p7nSqqP@*(2CLY2O?Bm zTbRIw2^}2?ozFfZ#sLpjUEG=Nn3)K0W!^+X&RU3=)f?#%Gz^M&V^#u$BrINioFt2| z=lv<{P}q{Qshuz^c9xWe{tuVCQ1b%%QnP!U5#xdly{cNmbLP~9m7M8f%RDL^E@9J$ z&Tyy^!oy28_2@8W=TXQRRuz;1#k7Sssr6se;8%1qdd|)&S~01%MTb?iVp7_z+|J;i TwKIBJV@t)P+KU>rVp94GC&XRs diff --git a/build/tests/RomTypeTest/banner/test-utf16_g_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_g_v3.TWL.bsf deleted file mode 100644 index 3fcb24cf15f6ee448e41094c2576923b68496397..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(%L;;E5QWdypmz}3*rE%x2-;O-*&;-xZP*2q(jr~d%U9eVf99O0u7_`-ISFO5ebV|AAw{s zj=VpG9Sd7=HnmfR#mP7iwNeUuyP%GZI{|qgPc+dCr`gvQjX8?3u@OB z&>0RjB6xVorXC$8>eVf99O0u7_`-ISFO5ebV|A7{y8 z9C?2VI~KO$Y-*OB z&>0RjB6xVorXC$8>jOWCu87n2z#g=(eIb6b} z50l|hBSwIyY#PvE%Fam08CDv~f@0c2+tm84Y4Iz11wCh{j#f;r?a-l)R!mO&+U+d< US+}64e{89kTzl~ct(ctt05}w01ONa4 diff --git a/build/tests/RomTypeTest/banner/test-utf16_j_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_j_v3.TWL.bsf deleted file mode 100644 index cd034555836a9b02398be9d40332e478c6769fb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(%L;;E5QWdypmz}3*rE%x2-;O-*&;-xZPF4Vk$zSQg zp)(w6gz)f^O+7k{*?AUnhE)Y+KrwBhO=|tuH24*rjGnWzidIajZP8&Bt(cT{E4MTF UXYGuh*4R=psrI4eVf99O0u7_`-ISF85ebV|A7{y8 z9C?2VI~KO$Y-*OB z&>0RjB6xVorXC$8> -#include - -static void PrintBootType(); - -static void InitDEMOSystem(); -static void InitInteruptSystem(); -static void InitAllocSystem(); -static void InitFileSystem(); - -static char* LoadFile(const char* path); -static BOOL SaveFile(const char* path, void* pData, u32 size); -static u32 GetCounter(const char* root); -static void SetCounter(const char* root, u32 counter); -static void PrintBackup(const char* root); -static BOOL AddBackup(const char* root); -static void PrintAndAddBackup(const char* root); - -// OS_Printf̃tbN֐ -#ifndef SDK_FINALROM -void OS_Printf(const char *fmt, ...) -{ - char dst[256]; - - int ret; - va_list va; - va_start(va, fmt); - ret = OS_VSPrintf(dst, fmt, va); - va_end(va); - - OS_PutString(dst); -} -#endif - -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: C֐łB - - Arguments: ȂB - - Returns: ȂB - *---------------------------------------------------------------------------*/ -void TwlMain(void) -{ - OS_Init(); - RTC_Init(); - InitInteruptSystem(); - InitFileSystem(); - InitAllocSystem(); - InitDEMOSystem(); - OS_Printf("*** start nandApp demo\n"); - - OS_Printf("Build:%s %s\n", __DATE__, __TIME__); - - PrintBootType(); - - // Shared2 t@C NAND ɕۑ܂B - // ̂ߎgp API FS API ƂȂA - // t@CVXeƂăANZX邱Ƃł܂B - { - // ushared2v AvԂŋLłt@C̃A[JCułB - OS_Printf("Shared2 file %04x:\n", *(u16 *)( HW_TWL_ROM_HEADER_BUF + 0x020c ) ); - PrintAndAddBackup("shared2:"); - - OS_Printf("\n"); - } - - OS_Printf("*** End of demo\n"); - - - // `[ɖ߂悤ɁA - // IȂ - for (;;) - { - // t[XVB - { - DEMO_DrawFlip(); - OS_WaitVBlankIntr(); - } - } - - OS_Terminate(); -} - - -/*---------------------------------------------------------------------------* - Name: LoadFile - - Description: Ńmۂt@Cǂݍ݂܂B - - Arguments: path: ǂݍރt@C̃pXB - - Returns: t@C݂Ȃt@C̓eǂݍ܂ꂽ - Ŋmۂobt@ւ̃|C^Ԃ܂B - ̃|C^ FS_Free ʼnKv܂B - *---------------------------------------------------------------------------*/ -static char* LoadFile(const char* path) -{ - FSFile f; - BOOL bSuccess; - char* pBuffer; - u32 fileSize; - s32 readSize; - - FS_InitFile(&f); - - bSuccess = FS_OpenFileEx(&f, path, FS_FILEMODE_R); - if( ! bSuccess ) - { - return NULL; - } - - fileSize = FS_GetFileLength(&f); - pBuffer = (char*)OS_Alloc(fileSize + 1); - SDK_POINTER_ASSERT(pBuffer); - - readSize = FS_ReadFile(&f, pBuffer, (s32)fileSize); - SDK_ASSERT( readSize == fileSize ); - - bSuccess = FS_CloseFile(&f); - SDK_ASSERT( bSuccess ); - - pBuffer[fileSize] = '\0'; - return pBuffer; -} - -/*---------------------------------------------------------------------------* - Name: SaveFile - - Description: t@C쐬f[^݂܂B - r̃fBNg͍쐬܂B - - Arguments: path: 쐬t@C̃pXB - pData: ރf[^B - size: ރf[^̃TCYB - - Returns: TRUE - *---------------------------------------------------------------------------*/ -static BOOL SaveFile(const char* path, void* pData, u32 size) -{ - FSFile f; - BOOL bSuccess; - FSResult fsResult; - s32 writtenSize; - - FS_InitFile(&f); - - FS_CreateFile(path, (FS_PERMIT_R|FS_PERMIT_W)); - bSuccess = FS_OpenFileEx(&f, path, FS_FILEMODE_W); - if (bSuccess == FALSE) - { - FSResult res = FS_GetArchiveResultCode(path); - OS_Printf("Failed create file:%d\n", res); - return FALSE; - } - SDK_ASSERT( bSuccess ); - - fsResult = FS_SetFileLength(&f, 0); - SDK_ASSERT( fsResult == FS_RESULT_SUCCESS ); - - writtenSize = FS_WriteFile(&f, pData, (s32)size); - SDK_ASSERT( writtenSize == size ); - - bSuccess = FS_CloseFile(&f); - SDK_ASSERT( bSuccess ); - return TRUE; -} - -/*---------------------------------------------------------------------------* - Name: GetCounter - - Description: /counter.bin ɕۑĂJE^lǂݍ݂܂B - - Arguments: root: counter.bin ۑĂfBNg̃pXB - - Returns: JE^lԂ܂B - /counter.bin ݂Ȃꍇ 0 Ԃ܂B - *---------------------------------------------------------------------------*/ -static u32 GetCounter(const char* root) -{ - char path[FS_FILE_NAME_MAX]; - char* pBuffer; - u32 counter = 0; - - STD_TSNPrintf(path, sizeof(path), "%s/counter.bin", root); - - pBuffer = LoadFile(path); - if( pBuffer != NULL ) - { - counter = MI_LoadLE32(pBuffer); - OS_Free(pBuffer); - } - - OS_Printf("%s counter is %d.\n", root, counter); - - return counter; -} - -/*---------------------------------------------------------------------------* - Name: SetCounter - - Description: /counter.bin ɃJE^lۑ܂B - t@Cꍇ͍쐬܂B - - Arguments: root: counter.bin ۑfBNg̃pXB - counter: ۑJE^lB - - Returns: ȂB - *---------------------------------------------------------------------------*/ -static void SetCounter(const char* root, u32 counter) -{ - char path[FS_FILE_NAME_MAX]; - - STD_TSNPrintf(path, sizeof(path), "%s/counter.bin", root); - (void)SaveFile(path, &counter, sizeof(counter)); -} - -/*---------------------------------------------------------------------------* - Name: PrintBackup - - Description: w肳ꂽfBNg̓e print ܂B - TufBNg̓e print ܂B - - Arguments: root: Ώۂ̃fBNg̃pXB - - Returns: ȂB - *---------------------------------------------------------------------------*/ -static void PrintBackup(const char* root) -{ - FSFile dir; - FSDirectoryEntryInfo entry; - BOOL bSuccess; - int numEntry = 0; - - FS_InitFile(&dir); - - bSuccess = FS_OpenDirectory(&dir, root, FS_FILEMODE_R); - if( bSuccess ) - { - while( FS_ReadDirectory(&dir, &entry) ) - { - // ewGg̓XLbv܂ - if( (STD_CompareString(entry.longname, ".") == 0) - || (STD_CompareString(entry.longname, "..") == 0) ) - { - continue; - } - - if( (entry.attributes & FS_ATTRIBUTE_IS_DIRECTORY) != 0 ) - { - // fBNg - OS_Printf(" d %s\n", entry.longname); - } - else - { - // t@C - - char path[FS_FILE_NAME_MAX]; - char* text; - char* found_cr; - char* found_lf; - - // ŏ̉s܂ł̓e\܂B - STD_TSNPrintf(path, sizeof(path), "%s/%s", root, entry.longname); - text = LoadFile(path); - SDK_POINTER_ASSERT(text); - - found_cr = STD_SearchString(text, "\r"); - if( found_cr != NULL ) - { - *found_cr = '\0'; - } - found_lf = STD_SearchString(text, "\n"); - if( found_lf != NULL ) - { - *found_lf = '\0'; - } - - OS_Printf(" f %-6s %s\n", entry.longname, text); - OS_Free(text); - } - - numEntry++; - } - - bSuccess = FS_CloseDirectory(&dir); - SDK_ASSERT( bSuccess ); - } - - if( numEntry == 0 ) - { - OS_TPrintf(" (no entry)\n"); - } -} - -/*---------------------------------------------------------------------------* - Name: AddBackup - - Description: Ώۂ̃fBNgɃeXgp̃fBNgƃt@C - 쐬܂B - - Arguments: root: Ώۂ̃fBNg̃pXB - - Returns: TRUE - *---------------------------------------------------------------------------*/ -static BOOL AddBackup(const char* root) -{ - char path[FS_FILE_NAME_MAX]; - char text[256]; - u32 counter; - BOOL bSuccess; - u8 GameCode[ 5 ]; - - // ROMwb_GameCode擾 - { - int i; - u8 *p = (u8 *)(HW_TWL_ROM_HEADER_BUF + 0x0233 ); - MI_CpuClear8( GameCode, sizeof(GameCode) ); - for( i = 0; i < 4; i++ ) { - GameCode[ i ] = *p--; - } - } - // t@Cɏޓe𐶐܂B - STD_TSNPrintf(text, sizeof(text), ": generated by %s", GameCode ); - - // t@C̐ɎgpJE^l擾/XV܂B - counter = GetCounter(root); - counter++; - SetCounter(root, counter); - - // fBNg쐬 - STD_TSNPrintf(path, sizeof(path), "%s/dir_%d", root, counter); - bSuccess = FS_CreateDirectory(path, (FS_PERMIT_R|FS_PERMIT_W)); - if (bSuccess == FALSE) - { - FSResult res = FS_GetArchiveResultCode(path); - OS_Printf("Failed create directory:%d\n", res); - return FALSE; - } - SDK_ASSERT( bSuccess ); - - // t@C쐬 - STD_TSNPrintf(path, sizeof(path), "%s/file_%d", root, counter); - (void)SaveFile(path, text, (u32)STD_GetStringLength(text)); - return TRUE; -} - -/*---------------------------------------------------------------------------* - Name: PrintAndAddBackup - - Description: Ώۂ̃fBNg̓e\AeXgp - fBNgƃt@C쐬܂B - - Arguments: root: Ώۂ̃fBNg̃pXB - - Returns: ȂB - *---------------------------------------------------------------------------*/ -static void PrintAndAddBackup(const char* root) -{ - PrintBackup(root); - (void)AddBackup(root); -} - - -/*---------------------------------------------------------------------------* - Name: PrintBootType - - Description: BootType print ܂B - - Arguments: ȂB - - Returns: ȂB - *---------------------------------------------------------------------------*/ -static void PrintBootType() -{ - const OSBootType btype = OS_GetBootType(); - - switch( btype ) - { - case OS_BOOTTYPE_ROM: OS_TPrintf("OS_GetBootType = OS_BOOTTYPE_ROM\n"); break; - case OS_BOOTTYPE_NAND: OS_TPrintf("OS_GetBootType = OS_BOOTTYPE_NAND\n"); break; - default: - { - OS_Warning("unknown BootType(=%d)", btype); - } - break; - } -} - -/*---------------------------------------------------------------------------* - Name: InitDEMOSystem - - Description: R\[̉ʏo͗p̕\ݒs܂B - - Arguments: ȂB - - Returns: ȂB - *---------------------------------------------------------------------------*/ -static void InitDEMOSystem() -{ - // ʕ\̏B - DEMOInitCommon(); - DEMOInitVRAM(); - DEMOInitDisplayBitmap(); - DEMOHookConsole(); - DEMOSetBitmapTextColor(GX_RGBA(31, 31, 0, 1)); - DEMOSetBitmapGroundColor(DEMO_RGB_CLEAR); - DEMOStartDisplay(); -} - -/*---------------------------------------------------------------------------* - Name: InitInteruptSystem - - Description: 荞݂܂B - - Arguments: ȂB - - Returns: ȂB - *---------------------------------------------------------------------------*/ -static void InitInteruptSystem() -{ - // •ʊ荞݃tOSĕs‚ - (void)OS_SetIrqMask(0); - - // }X^[荞݃tO‚ - (void)OS_EnableIrq(); - - // IRQ 荞݂‚܂ - (void)OS_EnableInterrupts(); -} - -/*---------------------------------------------------------------------------* - Name: InitAllocSystem - - Description: q[v쐬 OS_Alloc g悤ɂ܂B - - Arguments: ȂB - - Returns: ȂB - *---------------------------------------------------------------------------*/ -static void InitAllocSystem() -{ - void* newArenaLo; - OSHeapHandle hHeap; - - // CA[ĩAP[gVXe - newArenaLo = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetMainArenaLo(newArenaLo); - - // CA[iɃq[v쐬 - hHeap = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - OS_SetCurrentHeap(OS_ARENA_MAIN, hHeap); -} - -/*---------------------------------------------------------------------------* - Name: InitFileSystem - - Description: FS ܂B - ̊֐ĂяoO InitInteruptSystem() - Ă΂ĂKv܂B - - Arguments: ȂB - - Returns: ȂB - *---------------------------------------------------------------------------*/ -static void InitFileSystem() -{ - // ARM7Ƃ̒ʐMFIFO荞݋ - (void)OS_EnableIrqMask(OS_IE_SPFIFO_RECV); - - // t@CVXe - FS_Init( FS_DMA_NOT_USE ); -} diff --git a/build/tests/SimpleBenchmark/ARM9/ARM9-TS.lcf.template b/build/tests/SimpleBenchmark/ARM9/ARM9-TS.lcf.template deleted file mode 100644 index bdc95bb6..00000000 --- a/build/tests/SimpleBenchmark/ARM9/ARM9-TS.lcf.template +++ /dev/null @@ -1,1048 +0,0 @@ -#--------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ARM9-TS.lcf.template -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#--------------------------------------------------------------------------- -MEMORY -{ - (RWX) : ORIGIN = , LENGTH = 0x0 > - - - (RWX) : ORIGIN = , LENGTH = 0x0 >> - - binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> - binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> - - F (RW) : ORIGIN = 0, LENGTH = 0x0 > - F (RW) : ORIGIN = 0, LENGTH = 0x0 > - - (RWXO): ORIGIN = , LENGTH = 0x0 > - - - dummy.MAIN_EX.NITRO (RW) : ORIGIN = 0x023e0000, LENGTH = 0x0 - arena.MAIN.NITRO (RW) : ORIGIN = AFTER(,), LENGTH = 0x0 - arena.MAIN_EX.NITRO (RW) : ORIGIN = AFTER(dummy.MAIN_EX.NITRO,), LENGTH = 0x0 - arena.ITCM (RW) : ORIGIN = AFTER(ITCM,), LENGTH = 0x0 - arena.DTCM (RW) : ORIGIN = AFTER(DTCM,), LENGTH = 0x0 - - check.ITCM (RW) : ORIGIN = 0x0, LENGTH = 0x08000 > itcm.check - check.DTCM (RW) : ORIGIN = 0x0, LENGTH = 0x04000 > dtcm.check - check.MAIN.NITRO (RW) : ORIGIN = 0x02000000, LENGTH = 0x0f80000 > main.nitro.check - - binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > - - (RWX) : ORIGIN = , LENGTH = 0x0 >> - - binary.LTDAUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> - - L (RW) : ORIGIN = 0, LENGTH = 0x0 > - L (RW) : ORIGIN = 0, LENGTH = 0x0 > - - (RWXO): ORIGIN = , LENGTH = 0x0 > - - - dummy.MAIN_EX.TWL (RW) : ORIGIN = 0x0d000000, LENGTH = 0x0 - arena.MAIN.TWL (RW) : ORIGIN = AFTER(,,LTDMAIN,), LENGTH = 0x0 - arena.MAIN_EX.TWL (RW) : ORIGIN = AFTER(dummy.MAIN_EX.TWL,,,LTDMAIN,), LENGTH = 0x0 - - check.MAIN.TWL (RW) : ORIGIN = 0x02000000, LENGTH = 0x0f80000 > main.twl.check - - binary.MODULE_FILES (RW) : ORIGIN = 0, LENGTH = 0x0 > component.files -} - -FORCE_ACTIVE -{ - SVC_SoftReset -} - -KEEP_SECTION -{ - .sinit -} - -SECTIONS -{ - ############################ STATIC ################################# - .: - { - ALIGNALL(4); - . = ALIGN(32); # Fit to cache line - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # TEXT BLOCK: READ ONLY - # - SDK_STATIC_START =.; - SDK_STATIC_TEXT_START =.; - #:::::::::: text/rodata - libsyscall.a (.text) - OBJECT(_start,*) - crt0.FLX.TWL.o (.text) - crt0.FLX.TWL.o (.rodata) - # - # .version ZNVljĂ܂B - # ̃ZNVɊ܂܂̓bg`FbN̍ۂ - # KvƂȂ܂̂ŁAK̈ʒuɎc悤ɂĉB - # - * (.version) - OBJECT(TwlMain,*) - - - - - - - * (.exception) - . = ALIGN(4); - SDK_STATIC_ETABLE_START =.; - __exception_table_start__ =.; - EXCEPTION - __exception_table_end__ =.; - SDK_STATIC_ETABLE_END =.; - - - - - - - - - - - - - . = ALIGN(4); - SDK_STATIC_SINIT_START =.; - #:::::::::: ctor - - - - - - - - - - - - - WRITEW 0; - #:::::::::: ctor - SDK_STATIC_SINIT_END =.; - #:::::::::: text/rodata - SDK_STATIC_TEXT_END =.; - - # - # DATA BLOCK: READ WRITE - # - . = ALIGN(32); # Fit to cache line - SDK_STATIC_DATA_START =.; - #:::::::::: data - - - - - - - - - - - - - . = ALIGN(4); - - SDK_LTDOVERLAYTABLE_DIGEST =.; - . = . + 20; - SDK_LTDOVERLAYTABLE_DIGEST_END =.; - SDK_OVERLAYTABLE_DIGEST =.; - . = . + 20; - SDK_OVERLAYTABLE_DIGEST_END =.; - SDK_OVERLAY_DIGEST =.; - . = . + * 20; - . = . + * 20; - SDK_OVERLAY_DIGEST_END =.; - #:::::::::: data - . = ALIGN(32); - SDK_STATIC_DATA_END =.; - SDK_STATIC_END =.; - - SDK_STATIC_TEXT_SIZE = SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START; - SDK_STATIC_DATA_SIZE = SDK_STATIC_DATA_END - SDK_STATIC_DATA_START; - SDK_STATIC_SIZE = SDK_STATIC_END - SDK_STATIC_START; - __sinit__ = SDK_STATIC_SINIT_START; # for static initializer - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(32); # Fit to cache line - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_STATIC_BSS_START =.; - #:::::::::: bss - - - - - - - - - - - - - #:::::::::: bss - . = ALIGN(32); - SDK_STATIC_BSS_END = .; - - SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START; - - } >> - - - ############################ AUTOLOADS ############################## - SDK_AUTOLOAD.ITCM.START = 0x01ff8000; - SDK_AUTOLOAD.ITCM.END = SDK_AUTOLOAD.ITCM.START; - SDK_AUTOLOAD.ITCM.BSS_END = SDK_AUTOLOAD.ITCM.START; - SDK_AUTOLOAD.ITCM.SIZE = 0; - SDK_AUTOLOAD.ITCM.BSS_SIZE = 0; - SDK_AUTOLOAD.DTCM.START = 0x02fe0000; - SDK_AUTOLOAD.DTCM.END = SDK_AUTOLOAD.DTCM.START; - SDK_AUTOLOAD.DTCM.BSS_END = SDK_AUTOLOAD.DTCM.START; - SDK_AUTOLOAD.DTCM.SIZE = 0; - SDK_AUTOLOAD.DTCM.BSS_SIZE = 0; - SDK_AUTOLOAD_START = SDK_STATIC_END; - SDK_AUTOLOAD_SIZE = 0; - SDK_AUTOLOAD_NUMBER = ; - - - .: - { - ALIGNALL(4); - . = ALIGN(32); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # TEXT BLOCK: READ ONLY - # - SDK_AUTOLOAD__ID =; - SDK_AUTOLOAD..ID =; - SDK_AUTOLOAD..START =.; - SDK_AUTOLOAD..TEXT_START =.; - #:::::::::: text/rodata - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_AUTOLOAD..SINIT_START = .; - #:::::::::: ctor - - - - - - - - - - - - - WRITEW 0; - #:::::::::: ctor - SDK_AUTOLOAD..SINIT_END = .; - #:::::::::: text/rodata - SDK_AUTOLOAD..TEXT_END =.; - - # - # DATA BLOCK: READ WRITE BLOCK - # - . = ALIGN(32); - SDK_AUTOLOAD..DATA_START =.; - #:::::::::: data - - - - - - - - - - - - - - - - - - - - - - - - - #:::::::::: data - SDK_AUTOLOAD..DATA_END =.; - . = ALIGN(32); - SDK_AUTOLOAD..END =.; - - SDK_AUTOLOAD..TEXT_SIZE = SDK_AUTOLOAD..TEXT_END - SDK_AUTOLOAD..TEXT_START; - SDK_AUTOLOAD..DATA_SIZE = SDK_AUTOLOAD..DATA_END - SDK_AUTOLOAD..DATA_START; - SDK_AUTOLOAD..SIZE = SDK_AUTOLOAD..END - SDK_AUTOLOAD..START; - SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD..SIZE; - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(32); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL - - - # - # BSS BLOCK - # - SDK_AUTOLOAD..BSS_START = .; - #:::::::::: bss - - - - - - - - - - - - - - - - - - - - - - - - - #:::::::::: bss - . = ALIGN(32); - SDK_AUTOLOAD..BSS_END = .; - - SDK_AUTOLOAD..BSS_SIZE = SDK_AUTOLOAD..BSS_END - SDK_AUTOLOAD..BSS_START; - - } >> - - - - SDK_AUTOLOAD_ITCM_START = SDK_AUTOLOAD.ITCM.START; - SDK_AUTOLOAD_ITCM_END = SDK_AUTOLOAD.ITCM.END; - SDK_AUTOLOAD_ITCM_BSS_END = SDK_AUTOLOAD.ITCM.BSS_END; - SDK_AUTOLOAD_ITCM_SIZE = SDK_AUTOLOAD.ITCM.SIZE; - SDK_AUTOLOAD_ITCM_BSS_SIZE = SDK_AUTOLOAD.ITCM.BSS_SIZE; - SDK_AUTOLOAD_DTCM_START = SDK_AUTOLOAD.DTCM.START; - SDK_AUTOLOAD_DTCM_END = SDK_AUTOLOAD.DTCM.END; - SDK_AUTOLOAD_DTCM_BSS_END = SDK_AUTOLOAD.DTCM.BSS_END; - SDK_AUTOLOAD_DTCM_SIZE = SDK_AUTOLOAD.DTCM.SIZE; - SDK_AUTOLOAD_DTCM_BSS_SIZE = SDK_AUTOLOAD.DTCM.BSS_SIZE; - - ############################ AUTOLOAD_INFO ########################## - .binary.AUTOLOAD_INFO: - { - - WRITEW ADDR(.); - WRITEW SDK_AUTOLOAD..SIZE; - WRITEW SDK_AUTOLOAD..SINIT_START; - WRITEW SDK_AUTOLOAD..BSS_SIZE; - - - } > binary.AUTOLOAD_INFO - - SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE; - SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); - SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); - - ############################ STATIC_FOOTER ########################## - .binary.STATIC_FOOTER: - { - WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE - WRITEW _start_ModuleParams - ADDR(.); - WRITEW SDK_OVERLAY_DIGEST - ADDR(.); - WRITEW _start_LtdModuleParams - ADDR(.); - } > binary.STATIC_FOOTER - - ############################ OVERLAYS ############################### - SDK_OVERLAY_NUMBER = ; - - - .: - { - ALIGNALL(4); - . = ALIGN(32); # Fit to cache line - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # TEXT BLOCK: READ ONLY - # - SDK_OVERLAY__ID =; ### SEGMENT OVERLAY ID - SDK_OVERLAY..ID =; - SDK_OVERLAY..START =.; - SDK_OVERLAY..TEXT_START =.; - #:::::::::: text/rodata - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_OVERLAY..SINIT_START =.; - #:::::::::: ctor - - - - - - - - - - - - - WRITEW 0; - #:::::::::: ctor - SDK_OVERLAY..SINIT_END =.; - #:::::::::: text/rodata - SDK_OVERLAY..TEXT_END =.; - - # - # DATA BLOCK: READ WRITE - # - . = ALIGN(32); - SDK_OVERLAY..DATA_START =.; - #:::::::::: data - - - - - - - - - - - - - #:::::::::: data - SDK_OVERLAY..DATA_END =.; - . = ALIGN(32); - SDK_OVERLAY..END =.; - - SDK_OVERLAY..TEXT_SIZE = SDK_OVERLAY..TEXT_END - SDK_OVERLAY..TEXT_START; - SDK_OVERLAY..DATA_SIZE = SDK_OVERLAY..DATA_END - SDK_OVERLAY..DATA_START; - SDK_OVERLAY..SIZE = SDK_OVERLAY..END - SDK_OVERLAY..START; - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(32); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_OVERLAY..BSS_START = .; - #:::::::::: bss - - - - - - - - - - - - - #:::::::::: bss - . = ALIGN(32); - SDK_OVERLAY..BSS_END = .; - - SDK_OVERLAY..BSS_SIZE = SDK_OVERLAY..BSS_END - SDK_OVERLAY..BSS_START; - - } >> - - - - ############################ OVERLAYDEFS ############################ - .F: - { - ### module information - WRITEW ADDR(.); # load address - WRITEW _start; # entry address - WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # size of module - WRITEW _start_AutoloadDoneCallback; # callback autoload done - - ### overlay filename - - WRITES (""); # Overlay - - - } > F - - ############################ OVERLAYTABLE ########################### - .F: - { - - WRITEW ; # overlay ID - WRITEW ADDR(.); # load address - WRITEW SDK_OVERLAY..SIZE; # size of module - WRITEW SDK_OVERLAY..BSS_SIZE; # size of bss - WRITEW SDK_OVERLAY..SINIT_START; # start address of static init - WRITEW SDK_OVERLAY..SINIT_END; # end address of static init - WRITEW ; # ROM file ID - WRITEW 0; # compressed state - - - } > F - - ############################ ARENA ################################## - .dummy.MAIN_EX.NITRO: - { - . = ALIGN(32); - - } > dummy.MAIN_EX.NITRO - - .arena.MAIN.NITRO: - { - . = ALIGN(32); - SDK_SECTION_ARENA_START =.; - - } > arena.MAIN.NITRO - - .arena.MAIN_EX.NITRO: - { - . = ALIGN(32); - SDK_SECTION_ARENA_EX_START =.; - - } > arena.MAIN_EX.NITRO - - .arena.ITCM: - { - . = ALIGN(32); - SDK_SECTION_ARENA_ITCM_START =.; - - } > arena.ITCM - - .arena.DTCM: - { - . = ALIGN(32); - SDK_SECTION_ARENA_DTCM_START =.; - - } > arena.DTCM - - ############################ OTHERS ################################# - SDK_MAIN_ARENA_LO = SDK_SECTION_ARENA_START; - SDK_IRQ_STACKSIZE = ; # allocated in DTCM - SDK_SYS_STACKSIZE = ; # when 0 means all remains of DTCM - SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1; - - .check.ITCM: - { - . = . + SDK_AUTOLOAD_ITCM_SIZE + SDK_AUTOLOAD_ITCM_BSS_SIZE; - - . = . + SDK_OVERLAY..SIZE + SDK_OVERLAY..BSS_SIZE; - - - } > check.ITCM - - .check.DTCM: - { - . = . + SDK_AUTOLOAD_DTCM_SIZE + SDK_AUTOLOAD_DTCM_BSS_SIZE; - - . = . + SDK_OVERLAY..SIZE + SDK_OVERLAY..BSS_SIZE; - - . = . + 0x080 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN; - } > check.DTCM - - .check.MAIN.NITRO: - { - . = SDK_SECTION_ARENA_START; - - } > check.MAIN.NITRO - - ########################### LTDAUTOLOADS ############################ - SDK_LTDAUTOLOAD.LTDMAIN.START = SDK_STATIC_BSS_END; - SDK_LTDAUTOLOAD.LTDMAIN.END = SDK_LTDAUTOLOAD.LTDMAIN.START; - SDK_LTDAUTOLOAD.LTDMAIN.BSS_EDN = SDK_LTDAUTOLOAD.LTDMAIN.START; - SDK_LTDAUTOLOAD.LTDMAIN.SIZE = 0; - SDK_LTDAUTOLOAD.LTDMAIN.BSS_SIZE = 0; - SDK_LTDAUTOLOAD_TOP_START = 0x02400000; - SDK_LTDAUTOLOAD_TOP_SIZE = 4; # STATIC ̈悪 4 bytes ̃_~[oCit@C̐擪ɓ # - SDK_LTDAUTOLOAD_START = SDK_LTDAUTOLOAD_TOP_START + SDK_LTDAUTOLOAD_TOP_SIZE; - SDK_LTDAUTOLOAD_SIZE = 0; - SDK_LTDAUTOLOAD_NUMBER = ; - - .binary.LTDAUTOLOAD_TOP: - { - WRITEW 0; - - } > binary.LTDAUTOLOAD_TOP - - - .: - { - ALIGNALL(4); - . = ALIGN(32); # Fit to cache line - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - SDK_LTDAUTOLOAD__ID =; - SDK_LTDAUTOLOAD..ID =; - SDK_LTDAUTOLOAD..START =.; - # - # TEXT BLOCK: READ ONLY - # - SDK_LTDAUTOLOAD..TEXT_START =.; - #:::::::::: text/rodata - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_LTDAUTOLOAD..SINIT_START = .; - #:::::::::: ctor - - - - - - - - - - - - - WRITEW 0; - #:::::::::: ctor - SDK_LTDAUTOLOAD..SINIT_END = .; - #:::::::::: text/rodata - SDK_LTDAUTOLOAD..TEXT_END =.; - - # - # DATA BLOCK: READ WRITE - # - . = ALIGN(32); - SDK_LTDAUTOLOAD..DATA_START =.; - #:::::::::: data - - - - - - - - - - - - - - - - - - - #:::::::::: data - SDK_LTDAUTOLOAD..DATA_END =.; - . = ALIGN(32); - SDK_LTDAUTOLOAD..END =.; - - SDK_LTDAUTOLOAD..TEXT_SIZE = SDK_LTDAUTOLOAD..TEXT_END - SDK_LTDAUTOLOAD..TEXT_START; - SDK_LTDAUTOLOAD..DATA_SIZE = SDK_LTDAUTOLOAD..DATA_END - SDK_LTDAUTOLOAD..DATA_START; - SDK_LTDAUTOLOAD..SIZE = SDK_LTDAUTOLOAD..END - SDK_LTDAUTOLOAD..START; - SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD..SIZE; - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(32); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_LTDAUTOLOAD..BSS_START =.; - #:::::::::: bss - - - - - - - - - - - - - - - - - - - #:::::::::: bss - . = ALIGN(32); - SDK_LTDAUTOLOAD..BSS_END =.; - - SDK_LTDAUTOLOAD..BSS_SIZE = SDK_LTDAUTOLOAD..BSS_END - SDK_LTDAUTOLOAD..BSS_START; - - } >> - - - - SDK_LTDAUTOLOAD_LTDMAIN_START = SDK_LTDAUTOLOAD.LTDMAIN.START; - SDK_LTDAUTOLOAD_LTDMAIN_END = SDK_LTDAUTOLOAD.LTDMAIN.END; - SDK_LTDAUTOLOAD_LTDMAIN_BSS_END = SDK_LTDAUTOLOAD.LTDMAIN.BSS_END; - SDK_LTDAUTOLOAD_LTDMAIN_SIZE = SDK_LTDAUTOLOAD.LTDMAIN.SIZE; - SDK_LTDAUTOLOAD_LTDMAIN_BSS_SIZE = SDK_LTDAUTOLOAD.LTDMAIN.BSS_SIZE; - - ######################### LTDAUTOLOAD_INFO ########################## - .binary.LTDAUTOLOAD_INFO: - { - - WRITEW ADDR(.); - WRITEW SDK_LTDAUTOLOAD..SIZE; - WRITEW SDK_LTDAUTOLOAD..SINIT_START; - WRITEW SDK_LTDAUTOLOAD..BSS_SIZE; - - - } > binary.LTDAUTOLOAD_INFO - - SDK_LTDAUTOLOAD_LIST = SDK_LTDAUTOLOAD_START + SDK_LTDAUTOLOAD_SIZE; - SDK_LTDAUTOLOAD_LIST_END = SDK_LTDAUTOLOAD_LIST + SIZEOF(.binary.LTDAUTOLOAD_INFO); - SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SIZEOF(.binary.LTDAUTOLOAD_INFO); - - ########################### LTDOVERLAYS ############################# - SDK_LTDOVERLAY_NUMBER = ; - - - .: - { - ALIGNALL(4); - . = ALIGN(32); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - SDK_LTDOVERLAY__ID =; - SDK_LTDOVERLAY..ID =; - SDK_LTDOVERLAY..START =.; - # - # TEXT BLOCK: READ ONLY - # - SDK_LTDOVERLAY..TEXT_START =.; - #:::::::::: text/rodata - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_LTDOVERLAY..SINIT_START =.; - #:::::::::: ctor - - - - - - - - - - - - - WRITEW 0; - #:::::::::: ctor - SDK_LTDOVERLAY..SINIT_END =.; - #:::::::::: text/rodata - SDK_LTDOVERLAY..TEXT_END =.; - - # - # DATA BLOCK: READ WRITE - # - . = ALIGN(32); - SDK_LTDOVERLAY..DATA_START =.; - #:::::::::: data - - - - - - - - - - - - - #:::::::::: data - SDK_LTDOVERLAY..DATA_END =.; - . = ALIGN(32); - SDK_LTDOVERLAY..END =.; - - SDK_LTDOVERLAY..TEXT_SIZE = SDK_LTDOVERLAY..TEXT_END - SDK_LTDOVERLAY..TEXT_START; - SDK_LTDOVERLAY..DATA_SIZE = SDK_LTDOVERLAY..DATA_END - SDK_LTDOVERLAY..DATA_START; - SDK_LTDOVERLAY..SIZE = SDK_LTDOVERLAY..END - SDK_LTDOVERLAY..START; - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(32); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_LTDOVERLAY..BSS_START =.; - #:::::::::: bss - - - - - - - - - - - - - #:::::::::: bss - . = ALIGN(32); - SDK_LTDOVERLAY..BSS_END =.; - - SDK_LTDOVERLAY..BSS_SIZE = SDK_LTDOVERLAY..BSS_END - SDK_LTDOVERLAY..BSS_START; - - } >> - - - - ########################## LTDOVERLAYDEFS ########################### - .L: - { - ### TWL limited extended static module information - WRITEW SDK_LTDAUTOLOAD_TOP_START; # load address - WRITEW 0; # padding - WRITEW SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD_TOP_SIZE; # size of module - WRITEW 0; # padding - - ### TWL limited overlay filename - - WRITES (""); - - - } > L - - ######################### LTDOVERLAYTABLE ########################### - .L: - { - - WRITEW ; # overlay ID - WRITEW ADDR(.); # load address - WRITEW SDK_LTDOVERLAY..SIZE; # size of module - WRITEW SDK_LTDOVERLAY..BSS_SIZE; # size of bss - WRITEW SDK_LTDOVERLAY..SINIT_START; # start address of static init - WRITEW SDK_LTDOVERLAY..SINIT_END; # end address of static init - WRITEW ; # ROM file ID - WRITEW 0; # compressed state - - - } > L - - ############################ ARENA ################################## - .dummy.MAIN_EX.TWL: - { - . = ALIGN(32); - - } > dummy.MAIN_EX.TWL - - .arena.MAIN.TWL: - { - . = ALIGN(32); - SDK_LTDMAIN_ARENA_LO =.; - - } > arena.MAIN.TWL - - .arena.MAIN_EX.TWL: - { - . = ALIGN(32); - SDK_LTDMAIN_EX_ARENA_LO =.; - - } > arena.MAIN_EX.TWL - - .check.MAIN.TWL: - { - . = SDK_LTDMAIN_ARENA_LO; - - } > check.MAIN.TWL - - ############################ OTHERS ################################# - # Module filelist - .binary.MODULE_FILES: - { - WRITES (""); - WRITES (""); - WRITES (""); - WRITES (""); - WRITES (""); - WRITES (""); - - } > binary.MODULE_FILES - -} diff --git a/build/tests/SimpleBenchmark/ARM9/ARM9-TS.lsf b/build/tests/SimpleBenchmark/ARM9/ARM9-TS.lsf deleted file mode 100644 index b4de7a96..00000000 --- a/build/tests/SimpleBenchmark/ARM9/ARM9-TS.lsf +++ /dev/null @@ -1,53 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ARM9-BB.lsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL LCF SPEC FILE -# - -Static $(TARGET_NAME) -{ - Address 0x02680200 - Object $(OBJS_STATIC) - Library $(LLIBS) $(GLIBS) $(CW_LIBS) -} - -Autoload ITCM -{ - Address 0x01ff8000 - Object * (.itcm) - Object $(OBJS_AUTOLOAD) (.text) - Object $(OBJS_AUTOLOAD) (.rodata) -} - -Autoload DTCM -{ - Address $(ADDRESS_DTCM) - Object * (.dtcm) - Object $(OBJS_AUTOLOAD) (.data) - Object $(OBJS_AUTOLOAD) (.sdata) - Object $(OBJS_AUTOLOAD) (.bss) - Object $(OBJS_AUTOLOAD) (.sbss) -} - -Ltdautoload LTDMAIN -{ - # NITRO/TWL L̃I[o[C݂ꍇ́Aɂ̌ɔzuKv܂B - After $(TARGET_NAME) - Object * (.ltdmain) - Object $(OBJS_LTDAUTOLOAD) - Library $(LLIBS_EX) $(GLIBS_EX) -} diff --git a/build/tests/SimpleBenchmark/ARM9/Makefile b/build/tests/SimpleBenchmark/ARM9/Makefile deleted file mode 100644 index 4144a38b..00000000 --- a/build/tests/SimpleBenchmark/ARM9/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = -SUBMAKES = Makefile.0 Makefile.1 - -include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/commondefs - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/SimpleBenchmark/ARM9/Makefile.0 b/build/tests/SimpleBenchmark/ARM9/Makefile.0 deleted file mode 100644 index fcfff216..00000000 --- a/build/tests/SimpleBenchmark/ARM9/Makefile.0 +++ /dev/null @@ -1,77 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- -# R|[lgI ( jackal ) - -export DEFAULT_COMP_ARM7 = jackal - -COMPONENT_DIR = $(TWL_IPL_RED_ROOT)/build/components/$(DEFAULT_COMP_ARM7).TWL -WRAM_MAP_FILE = $(COMPONENT_DIR)/wram_regs/wram_regs.rbin - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 0 -TARGET_NAME = SimpleBenchmark$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TARGET_BIN = $(TARGET_NAME).tad -LCFILE_SPEC = ARM9-TS.lsf -LCFILE_TEMPLATE = ARM9-TS.lcf.template - -TITLEID_LO = SB$(TARGET_NUMBER)A - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c SimpleBenchmark.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LLIBRARIES = libhotsw$(TWL_LIBSUFFIX).a - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = $(TARGET_TAD) -ADDRESS_DTCM = 0x0e000000 - -MAKEROM_FLAGS += -DWRAM_MAP_FILE='$(WRAM_MAP_FILE)' -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/SimpleBenchmark/ARM9/Makefile.1 b/build/tests/SimpleBenchmark/ARM9/Makefile.1 deleted file mode 100644 index c9ab05b9..00000000 --- a/build/tests/SimpleBenchmark/ARM9/Makefile.1 +++ /dev/null @@ -1,64 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 1 -TARGET_NAME = SimpleBenchmark$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = SB$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c SimpleBenchmark.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -LLIBRARIES = libhotsw$(TWL_LIBSUFFIX).a - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/SimpleBenchmark/ARM9/main0.rsf b/build/tests/SimpleBenchmark/ARM9/main0.rsf deleted file mode 100644 index 7b576398..00000000 --- a/build/tests/SimpleBenchmark/ARM9/main0.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_0.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMappingDirect $(WRAM_MAP_FILE) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - #SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/SimpleBenchmark/ARM9/main1.rsf b/build/tests/SimpleBenchmark/ARM9/main1.rsf deleted file mode 100644 index 8045315d..00000000 --- a/build/tests/SimpleBenchmark/ARM9/main1.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_1.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - #SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - NANDAccess TRUE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/SimpleBenchmark/ARM9/src/SimpleBenchmark.c b/build/tests/SimpleBenchmark/ARM9/src/SimpleBenchmark.c deleted file mode 100644 index 95ad3985..00000000 --- a/build/tests/SimpleBenchmark/ARM9/src/SimpleBenchmark.c +++ /dev/null @@ -1,119 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: DS_Chat.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "misc.h" -#include "SimpleBenchmark.h" - -// define data------------------------------------------ -#define RETURN_BUTTON_TOP_X 2 -#define RETURN_BUTTON_TOP_Y 21 -#define RETURN_BUTTON_BOTTOM_X ( RETURN_BUTTON_TOP_X + 8 ) -#define RETURN_BUTTON_BOTTOM_Y ( RETURN_BUTTON_TOP_Y + 2 ) - -// extern data------------------------------------------ - -// function's prototype declaration--------------------- - -// global variable ------------------------------------- -RTCDrawProperty g_rtcDraw = { - TRUE, RTC_DATE_TOP_X, RTC_DATE_TOP_Y, RTC_TIME_TOP_X, RTC_TIME_TOP_Y -}; - -// eXgvȌ -void SimpleBenchmarkInit( void ) -{ - OS_InitTick(); - - - if( (u32)OS_GetTitleId() == 0x53423041 ) //SB0A - { - HOTSW_Init(); - } - - GX_DispOff(); - GXS_DispOff(); - - GetAndDrawRTCData( &g_rtcDraw, TRUE ); - - GXS_SetVisiblePlane( GX_PLANEMASK_BG0 ); - GX_DispOn(); - GXS_DispOn(); -} - - -// eXgvÕC[v -void SimpleBenchmarkMain(void) -{ - BOOL tp_cancel = FALSE; - OSTick ot; - static u64 tm = 0; - - ReadTP(); // ^b`pl͂̎擾 - - // [RETURN]{^`FbN - if(tpd.disp.touch) { - tp_cancel = WithinRangeTP( RETURN_BUTTON_TOP_X * 8, RETURN_BUTTON_TOP_Y * 8 - 4, - RETURN_BUTTON_BOTTOM_X * 8, RETURN_BUTTON_BOTTOM_Y * 8 - 4, &tpd.disp ); - } - - - ot = OS_GetTick(); - NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); - PrintfSJIS( 0 * 8, 0 * 8, TXT_COLOR_RED, "%d\n",tm); - PutStringUTF16( 1 * 8, 2 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 3 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 4 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 5 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 6 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 7 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 8 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 9 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 10 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 11 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 12 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 13 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 14 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 15 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 16 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 17 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 18 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 19 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 20 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 21 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 22 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - ot = OS_GetTick()-ot; - - tm = OS_TicksToMicroSeconds(ot); - - OS_TPrintf("%d\n", tm); - - if( ( pad.trg & PAD_BUTTON_A ) ) { - } - - if( ( pad.trg & PAD_BUTTON_X ) ) { - } - - if( ( pad.trg & PAD_BUTTON_B ) || tp_cancel ) { -// SYSM_RebootLauncher(); - } - - GetAndDrawRTCData( &g_rtcDraw, FALSE ); -} - - diff --git a/build/tests/SimpleBenchmark/ARM9/src/SimpleBenchmark.h b/build/tests/SimpleBenchmark/ARM9/src/SimpleBenchmark.h deleted file mode 100644 index c62094e6..00000000 --- a/build/tests/SimpleBenchmark/ARM9/src/SimpleBenchmark.h +++ /dev/null @@ -1,36 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: RomTypeTest.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __SIMPLE_BENCHMARK_H__ -#define __SIMPLE_BENCHMARK_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -// define data---------------------------------------------------------- - -void SimpleBenchmarkInit( void ); -void SimpleBenchmarkMain( void ); - -#ifdef __cplusplus -} -#endif - -#endif // __SIMPLE_BENCHMARK_H__ diff --git a/build/tests/SimpleBenchmark/ARM9/src/main.c b/build/tests/SimpleBenchmark/ARM9/src/main.c deleted file mode 100644 index 7bac66bc..00000000 --- a/build/tests/SimpleBenchmark/ARM9/src/main.c +++ /dev/null @@ -1,86 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: main.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "misc.h" -#include "SimpleBenchmark.h" - -// extern data----------------------------------------------------------------- - -// define data----------------------------------------------------------------- - -// function's prototype------------------------------------------------------- -static void INTR_VBlank( void ); - -// global variable------------------------------------------------------------- - -// static variable------------------------------------------------------------- - -// const data------------------------------------------------------------------ - - -// ============================================================================ -// function's description -// ============================================================================ -void TwlMain(void) -{ - - // ---------------------------------- - OS_Init(); - - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - GX_Init(); - GX_SetPower(GX_POWER_ALL); // eWbN p[ON - - // 荞݋---------------------------- - (void)OS_SetIrqFunction(OS_IE_V_BLANK, INTR_VBlank); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - - // foCX------------------------------- - TP_Init(); - (void)RTC_Init(); - - // VXȅ------------------ - InitAllocator(); - - InitBG(); - SimpleBenchmarkInit(); - // C[v---------------------------- - while(1){ - OS_WaitIrq(1, OS_IE_V_BLANK); // VuN荞ݑ҂ - - ReadKeyPad(); // L[͂̎擾 - ReadTP(); // TP͂̎擾 - - SimpleBenchmarkMain(); - } -} - - -// ============================================================================ -// 荞ݏ -// ============================================================================ - -// VuN荞 -static void INTR_VBlank(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); // VuN`FbÑZbg -} - diff --git a/build/tests/SimpleBenchmark/Makefile b/build/tests/SimpleBenchmark/Makefile deleted file mode 100644 index 66754bca..00000000 --- a/build/tests/SimpleBenchmark/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS = banner ARM9 - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/SimpleBenchmark/banner/Makefile b/build/tests/SimpleBenchmark/banner/Makefile deleted file mode 100644 index a11fb47a..00000000 --- a/build/tests/SimpleBenchmark/banner/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -SUBDIRS = -SUBMAKES = Makefile.0 Makefile.1 - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - - -# diff --git a/build/tests/SimpleBenchmark/banner/Makefile.0 b/build/tests/SimpleBenchmark/banner/Makefile.0 deleted file mode 100644 index 97c32d52..00000000 --- a/build/tests/SimpleBenchmark/banner/Makefile.0 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 0 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/SimpleBenchmark/banner/Makefile.1 b/build/tests/SimpleBenchmark/banner/Makefile.1 deleted file mode 100644 index 54f8cd07..00000000 --- a/build/tests/SimpleBenchmark/banner/Makefile.1 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 1 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/SimpleBenchmark/banner/banner_v3.bsf b/build/tests/SimpleBenchmark/banner/banner_v3.bsf deleted file mode 100644 index d595b6d35b72e52619f29b85a7cea0a85f471335..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 762 zcmc(dK}!QM5QX2hg8v~<5IkrR!9$Ohu3Abdt_mL0tb9)y>^dE zV93mSJNw>be!jc9Rjy1%7x5T!s}<)>71dmy+zM`)oR-{Ab)s&=PT%}ZO#d}{(gGzl ziryPVMy1wNJhd4LjkaiaMXc>L03@c^nuYz(jhut!^0RvH$F0knzW#q9$U~moFDJ}z>JQgd8?{HqiSEC9Y(wJ*Wly6 zRcU(T6b&w`xQjJ=XX9JWnaNCF#09x$H~Z>ww#=h~HP(I-nf#Th!L($%5DJTha5`L6s@6ybjn%yN? zRVW_*0osgCYX1V0`n@z_{lZ=Hx%bU`@A8@_&L(AYupeOU!w*rG$gwV8ui2t-`7iaqoEDpxIr^P)f#UzZs0(QsSQt*9@9H z*U3v5MlA`>$3ypd0Ws4kX6(5P%~hCrn6d8-ZIr0!CTmG}KJ`8Ox(K$a)mjo=1^(DR zlKT~IHO*QIp87UQG{g@FzWx6i%$v+YJPf8_r_m8j%SxZFq9Ev^d_#&;uyeTxf$IPUVA8!~?UxO+tjABKw#Pv@%p@SbJx+)K&RSUtYI zM^R?D(L7gj@riN8O5JOQK|)+$ERN>6Qcw6G>w%}RDy5=41OJE4wek$NdgyDSZ$-Qi AC;$Ke diff --git a/build/tests/SimpleBenchmark/banner/icon/msk_pictchat_icon.bin b/build/tests/SimpleBenchmark/banner/icon/msk_pictchat_icon.bin deleted file mode 100644 index 5b2734aa29fe5a7cc1474fd910a9f00b579e0a4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4480 zcmeHKJ#Q015Ou!H6)6~qMFFxP5(P>HS0O5hMMHJPrU*((r$~Vi#T7C5Z_VA>o4@S`d;40Nt*5jG@JWUM3#MJ4q~&_3TU_60<<4u z(vY8HU>0jS59BGzd6q4m1s*wsXtfRkNWu_4eh7W8EL(0>N)YKXU{^PsxCBni8~dtE^N z*MIc&54F!dKx>~K`psO>Hq@jT>VJXPnuMqR=w!(H&sUu*LVVkbMD3$@RE zpji979$f#nKJ)r_{p)jD($%l6f6d;P?^FMUcw7Iv_tW>Qf9^ACsM}ze+iTqa1#7^< ztk#7{2T|HBg@zQz5Vb_Hs1$jW{ImiE#gy3bEM|~ELTKJz-XMoV z>%a)k01LMQ5Izd}3(kOn^{>yPI-@C9gGa7=;FY3>!3|aat{2x47a=p+e*M4#k4&T; zn~&>?^-ukU_3xCjKl4kh4;uBiHw!dh9k_aww`YH!{huK>Nq@ZQV7T^?y>riRCxUZP zpxMB&xEfM_?LP~K8O;>9@-~3ZhSmRkzkduD^l$hjcej{~sTpJU(0NHom2wJ~ZAfu0CJ+wfuc?XW{m%2P@s>wT03@ vZsoCPTro5DtQ5^h6V=kWJCo5=wbavUBATz3s^#*nGVr<_O+}N{E6vnzcJN>n diff --git a/build/tests/SimpleBenchmark/banner/test-utf16_0_v3.TWL.bsf b/build/tests/SimpleBenchmark/banner/test-utf16_0_v3.TWL.bsf deleted file mode 100644 index f59e3078bf3dacf2b457265c1b21188f0bdd737c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 802 zcmbtSO$&lh5S*()|3TO^NLNZH~gYF;h>q6#b^d+-9oN>nyYkHMl!E@l$f}Jm>jSchs=WvFI zK3v^UoL+S|pZ;=Xi|ZRTWm^X`Rw=85DCvwbw`6{N`#LP8?85+7(#qi71hUY*@D30R&im+Wn3W@qp6 zel;*c3?D998ZP$458$9zejBoq;zC5gXM%%f z8FqX>728*Ag$t>jGXgRzl!NXMu5cm!Qu>nK9rk$Ogf+cNE$2G2YtBl6X=B4YD;>@e z(ub=Piqo6UHln{w+2Z<6O_|m~#GUk#Zc>?GVafKC+f)^wx^^Bs-bMtYGNq!eig1le hfTgvHaE(fAeX1V+wD7Ak{^N9oYrM? -#include -#include -#include -#include -#include -#ifndef SDK_FINALROM -#include -#endif -#include "boot_sync.h" - -/*---------------------------------------------------------------------------*/ -void _start(void); -void _start_AutoloadDoneCallback(void* argv[]); - -/*---------------------------------------------------------------------------* - OQ - *---------------------------------------------------------------------------*/ -/* JXNvgɂ`V{Q */ -extern void SDK_AUTOLOAD_LIST(void); -extern void SDK_AUTOLOAD_LIST_END(void); -extern void SDK_AUTOLOAD_START(void); -extern void SDK_STATIC_START(void); -extern void SDK_STATIC_BSS_START(void); -extern void SDK_STATIC_BSS_END(void); -extern void SDK_LTDAUTOLOAD_LIST(void); -extern void SDK_LTDAUTOLOAD_LIST_END(void); -extern void SDK_LTDAUTOLOAD_START(void); -extern void SDK_WRAM_ARENA_LO(void); - -/* O֐Q */ -extern void OS_IrqHandler(void); -#ifndef SDK_NOINIT -extern void _fp_init(void); -extern void __call_static_initializers(void); -#endif - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -#define SDK_NITROCODE_LE 0x2106c0de -#define SDK_NITROCODE_BE 0xdec00621 -#define SDK_TWLCODE_LE 0x6314c0de -#define SDK_TWLCODE_BE 0xdec01463 - -/* .rodata ZNVɔzu郍[hɕKvȏ */ -void* const _start_ModuleParams[] = -{ - (void*)0, - (void*)0, - (void*)0, - (void*)SDK_STATIC_BSS_START, - (void*)SDK_STATIC_BSS_END, - (void*)0, - (void*)0, - (void*)SDK_NITROCODE_BE, - (void*)SDK_NITROCODE_LE, -}; - -void* const _start_LtdModuleParams[] = -{ - (void*)SDK_LTDAUTOLOAD_LIST, - (void*)SDK_LTDAUTOLOAD_LIST_END, - (void*)SDK_LTDAUTOLOAD_START, - (void*)0, - (void*)SDK_TWLCODE_BE, - (void*)SDK_TWLCODE_LE, -}; - -/*---------------------------------------------------------------------------* - Name: ShakeHand - Description: ARM9 ShakeHand ֐ƓB - CłȂԂŎsKvB - Arguments: r0 - ARM9 pϐւ̃|C^B - r1 - ARM7 pϐւ̃|C^B - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_ShakeHand[10] = -{ - 0xe1d020b0, /* ldrh r2, [r0] ; ϐXLǂ */ - 0xe1d130b0, /* ldrh r3, [r1] ; ϐVLǂ */ - 0xe2833001, /* @1: add r3, r3, #1 ; ϐV ++ */ - 0xe1c130b0, /* strh r3, [r1] ; ϐVLɏ */ - 0xe1d0c0b0, /* ldrh r12, [r0] ; ϐX̌Lǂ */ - 0xe152000c, /* cmp r2, r12 ; ϐX̕ω𔻒肷 */ - 0x0afffffa, /* beq @1 ; ωĂȂ΃[v */ - 0xe2833001, /* add r3, r3, #1 ; ϐV ++ */ - 0xe1c130b0, /* strh r3, [r1] ; ϐVLɏ */ - 0xe12fff1e /* bx lr ; nhVFCN */ -}; - -/*---------------------------------------------------------------------------* - Name: Stop - Description: vO~B - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_Stop[2] = -{ - 0xef000006, /* @1: swi #6 ; SVC_Halt */ - 0xeafffffd /* b @1 ; [v */ -}; - -/*---------------------------------------------------------------------------* - Name: GotoMain - Description: ARM9 ɓ̏ԂɂȂƂ`ŁAMain ֐փWv - BɎwobt@ 0 NAsBX^bNœ삳 - 邱Ƃz肵ĂׁAX^bN؎gpȂB - Arguments: r0 - 0 NAobt@̐擪AhXB - 4 oCgACꂽAhXłKvB - r1 - 8 bit: ARM9 ɓ`tF[YԍB - 24 bit: 0 NAobt@̃TCYB - 4 ̔{łKvB - r2 - ptF[YǗϐւ̃|C^B - r3 - Main ֐̃|C^BMain ֐ Thumb R[hłꍇ - ɂ́Abx ߂ŃWv邽ߍʼnʃrbg 1 ɂȂ - KvB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_GotoMain[10] = -{ - 0xe59fc01c, /* @1: ldr r12, [pc, #28] ; 24 bit }XNp */ - 0xe111000c, /* tst r1, r12 ; NAobt@cTCY`FbN */ - 0xe3a0c000, /* mov r12, #0 ; NApϐp */ - 0x1480c004, /* strne r12, [r0], #4 ; 4 oCgNA */ - 0x12411004, /* subne r1, r1, #4 ; NAobt@cTCY -= 4 */ - 0x1afffff9, /* bne @1 ; cTCY 0 ɂȂ܂Ń[v */ - 0xe1a01c21, /* mov r1, r1, LSR #24 ; tF[YǗϐ̍XVlp */ - 0xe1c210b0, /* strh r1, [r2] ; tF[YǗϐXV */ - 0xe12fff13, /* bx r3 ; Main ֐փWv */ - 0x00fffffc /* 0x00fffffc */ -}; - - -/*---------------------------------------------------------------------------* - ֐vg^Cv - *---------------------------------------------------------------------------*/ -static void INITi_CheckSysConfig(void); -static void INITi_DetectMainMemorySize(void); -static void INITi_Stop(void); -static void INITi_DoAutoload(void); -#ifndef SDK_NOINIT -static void INITi_ShelterStaticInitializer(u32* ptr); -static void INITi_CallStaticInitializers(void); -#endif - -static void* INITi_Copy32(void* dst, void* src, u32 size); -static void* INITi_Fill32(void* dst, u32 value, u32 size); - -/*---------------------------------------------------------------------------*/ -#include - -/*---------------------------------------------------------------------------* - Name: _start - Description: NxN^B - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL asm void -_start(void) -{ -@000: - /* ݋֎~ */ - mov r12, #HW_REG_BASE - str r12, [r12, #REG_IME_OFFSET] - - /* SCFG ݒmF */ - bl INITi_CheckSysConfig - - /* v[hp[^AhXi[ĂȂꍇ́AftHglZbg */ - ldr r0, =HW_PRELOAD_PARAMETER_ADDR - ldr r1, [r0] - cmp r1, #0 - ldreq r1, =HW_PARAM_TWL_SETTINGS_DATA_DEFAULT - streq r1, [r0] - - /* `[nꂽޔ */ - ldr r3, =SDK_WRAM_ARENA_LO - sub r2, r3, #0x40 - ldr r1, =HW_LAUNCHER_DELIVER_PARAM_BUF -@001: - cmp r2, r3 - ldrlt r0, [r1], #4 - strlt r0, [r2], #4 - blt @001 - - - /* nhVFCNp}CNR[hp WRAM ɃRs[ */ - ldr r1, =microcode_ShakeHand - ldr r2, =HW_PRV_WRAM - add r3, r2, #40 // sizeof(microcode_ShakeHand) -@002: ldr r0, [r1], #4 - str r0, [r2], #4 - cmp r2, r3 - blt @002 - - /* p WRAM ̃R[h ARM9 ƃnhVFCN */ - ldr r0, =HW_BOOT_SHAKEHAND_9 - ldr r1, =HW_BOOT_SHAKEHAND_7 - ldr r2, =HW_PRV_WRAM - mov lr, pc - bx r2 - -@010: - /* X^bN|C^ݒ */ - mov r0, #HW_PSR_SVC_MODE // SuperVisor mode - msr cpsr_c, r0 - ldr sp, =HW_PRV_WRAM_SVC_STACK_END - mov r0, #HW_PSR_IRQ_MODE // IRQ mode - msr cpsr_c, r0 - ldr sp, =HW_PRV_WRAM_IRQ_STACK_END - ldr r1, =SDK_IRQ_STACKSIZE - sub r1, sp, r1 - sub sp, sp, #4 // 4 bytes for IRQ stack check code - mov r0, #HW_PSR_SYS_MODE // System mode - msr cpsr_csfx, r0 - sub sp, r1, #4 // 4 bytes for SYS stack check code - - /* X^bN̈NA */ - ldr r0, =SDK_SYS_STACKSIZE - sub r1, r1, r0 - ldr r2, =HW_PRV_WRAM_IRQ_STACK_END - mov r0, #0 -@011: cmp r1, r2 - strlt r0, [r1], #4 - blt @011 - - /* Autoload { */ - bl INITi_DoAutoload - - /* STATIC ZOg .bss ZNV 0 NA */ - mov r1, #0 // r1 = clear value for STATIC bss section - ldr r3, =_start_ModuleParams - ldr r0, [r3, #12] // r0 = start address of STATIC bss section - ldr r2, [r3, #16] - subs r2, r2, r0 // r2 = size of STATIC bss section - blgt INITi_Fill32 - - /* CTCY𒲍 */ - bl INITi_DetectMainMemorySize - -#ifndef SDK_FINALROM - /* fobOo̓EBhEݒ */ - ldr r1, =HW_PRINT_OUTPUT_ARM9 - mov r0, #OS_PRINT_OUTPUT_DEFAULT_ARM9 - orr r0, r0, #(OS_PRINT_OUTPUT_DEFAULT_ARM7 << 8) - strh r0, [r1] - mov r0, #OS_PRINT_OUTPUT_DEFAULT_ARM9ERR - orr r0, r0, #(OS_PRINT_OUTPUT_DEFAULT_ARM7ERR << 8) - strh r0, [r1, #2] -#endif - - /* IRQ ݃xN^ݒ */ - ldr r1, =HW_INTR_VECTOR_BUF - ldr r0, =OS_IrqHandler - str r0, [r1] - -#ifndef SDK_NOINIT - /* c++ p */ - bl _fp_init - bl TwlSpStartUp - bl __call_static_initializers - bl INITi_CallStaticInitializers -#endif - -@0f0: - /* Main ֐ւ̃Wvp}CNR[hX^bN̒ɃRs[ */ - ldr r1, =microcode_GotoMain - sub r2, sp, #40 - mov r3, sp -@0f1: cmp r2, r3 - ldrlt r0, [r1], #4 - strlt r0, [r2], #4 - blt @0f1 - - /* }CNR[hoR Main ֐փWv */ - ldr r0, =SDK_STATIC_START - bic r0, r0, #0x00000003 - ldr r1, =SDK_STATIC_BSS_END - sub r1, r1, r0 - add r1, r1, #3 - bic r1, r1, #0x00000003 - bic r1, r1, #0xff000000 - mov r2, #BOOT_SYNC_PHASE_4 - mov r2, r2, LSL #24 - orr r1, r1, r2 - ldr r2, =HW_BOOT_SYNC_PHASE - ldr r3, =TwlSpMain - ldr lr, =HW_RESET_VECTOR - sub r12, sp, #40 - bx r12 - /* never return */ -} - -/*---------------------------------------------------------------------------* - Name: _start_AutoloadDoneCallback - Description: I[g[hR[obNB - Arguments: argv - I[g[hp[^ێĂzB - argv[0] = SDK_AUTOLOAD_LIST - argv[1] = SDK_AUTOLOAD_LIST_END - argv[2] = SDK_AUTOLOAD_START - argv[3] = SDK_STATIC_BSS_START - argv[4] = SDK_STATIC_BSS_END - Returns: ȂB - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL asm void -_start_AutoloadDoneCallback(void* argv[]) -{ - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_CheckSysConfig - Description: SCFG ֘A I/O WX^̓emFB - A7-SCFG ubNANZXLȏꍇɂ́A[_[sݒ菈 - sŃANZX𖳌B - ARM7 p WRAM Ƀ[_[WJĂ I/O WX^m - FŃC̋L̈ɃRs[B - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_CheckSysConfig(void) -{ - /* A7-SCFG ̃ANZX”۔ */ - ldr r1, =REG_EXT_ADDR - ldr r0, [r1] - ldr r2, =HW_PRV_WRAM_SYSRV - tst r0, #REG_SCFG_EXT_CFG_MASK - beq @invalid - -@valid: - /* ARM7 Secure-ROM ؂藣 */ - ldr r1, =REG_A7ROM_ADDR - ldrb r0, [r1] - orr r0, r0, #REG_SCFG_A7ROM_SEC_MASK - strb r0, [r1] - - /* ARM9 Secure-ROM ؂藣 */ - ldr r1, =REG_A9ROM_ADDR - ldrb r0, [r1] - orr r0, r0, #REG_SCFG_A9ROM_SEC_MASK - strb r0, [r1] - - /* NITRO L */ - ldr r1, =REG_WL_ADDR - ldrh r0, [r1] - orr r0, r0, #REG_SCFG_WL_OFFB_MASK - strh r0, [r1] - - /* ROM ݒANITRO ݒA{fBOIvV WRAM ɓWJ */ - ldr r3, =REG_OP_ADDR // SCFG-OP - ldrb r1, [r3] - and r0, r1, #(REG_SCFG_OP_OP1_MASK | REG_SCFG_OP_OP0_MASK) - ldr r3, =REG_A9ROM_ADDR // SCFG-ROM:0~7 - ldrb r1, [r3] - and r3, r1, #(REG_SCFG_A9ROM_RSEL_MASK | REG_SCFG_A9ROM_SEC_MASK) - orr r0, r0, r3, LSL #(HWi_WSYS08_ROM_ARM9RSEL_SHIFT - REG_SCFG_A9ROM_RSEL_SHIFT) - ldr r3, =REG_A7ROM_ADDR // SCFG-ROM:8~15 - ldrb r1, [r3] - and r3, r1, #(REG_SCFG_A7ROM_RSEL_MASK | REG_SCFG_A7ROM_FUSE_MASK) - orr r0, r0, r3, LSL #(HWi_WSYS08_ROM_ARM7RSEL_SHIFT - REG_SCFG_A7ROM_RSEL_SHIFT) - ldr r3, =REG_WL_ADDR // SCFG-WL - ldrb r1, [r3] - and r3, r1, #REG_SCFG_WL_OFFB_MASK - orr r0, r0, r3, LSL #(HWi_WSYS08_WL_OFFB_SHIFT - REG_SCFG_WL_OFFB_SHIFT) - strb r0, [r2, #HWi_WSYS08_WRAMOFFSET] - - /* eVKubNփNbN */ - ldr r1, =REG_CLK_ADDR - ldrh r0, [r1] - ldr r3, =REG_SCFG_CLK_SNDMCLK_MASK | REG_SCFG_CLK_WRAMHCLK_MASK | REG_SCFG_CLK_AESHCLK_MASK | REG_SCFG_CLK_SD2HCLK_MASK | REG_SCFG_CLK_SD1HCLK_MASK - orr r0, r0, r3 - strh r0, [r1] - - /* JTAG WRAM ɓWJ */ - ldr r3, =REG_JTAG_ADDR // SCFG-JTAG - ldrh r1, [r3] - and r0, r1, #(REG_SCFG_JTAG_CPUJE_MASK | REG_SCFG_JTAG_ARM7SEL_MASK) - and r3, r1, #REG_SCFG_JTAG_DSPJE_MASK - orr r0, r0, r3, LSR #(REG_SCFG_JTAG_DSPJE_SHIFT - HWi_WSYS09_JTAG_DSPJE_SHIFT) - strb r0, [r2, #HWi_WSYS09_WRAMOFFSET] - - /* eg@\L */ - ldr r1, =REG_EXT_ADDR // SCFG_EXT - ldr r0, [r1] - ldr r3, =REG_SCFG_EXT_WRAM_MASK | REG_SCFG_EXT_GPIO_MASK | REG_SCFG_EXT_I2C_MASK | REG_SCFG_EXT_I2S_MASK | REG_SCFG_EXT_MIC_MASK | REG_SCFG_EXT_SD2_MASK | REG_SCFG_EXT_SD1_MASK | REG_SCFG_EXT_AES_MASK | REG_SCFG_EXT_DMAC_MASK - orr r0, r0, r3 - orr r0, r0, #(REG_SCFG_EXT_DSEL_MASK | REG_SCFG_EXT_INTC_MASK) - bic r0, r0, #REG_SCFG_EXT_MC_B_MASK - str r0, [r1] - - /* eg@\̐ݒe WRAM ɓWJ */ - str r0, [r2, #HWi_WSYS04_WRAMOFFSET] - - /* [J[h I/F ̃XbgI */ - ldr r1, =REG_MC1_ADDR // SCFG_MC1 - ldr r0, [r1] - bic r0, r0, #REG_MI_MC1_SWP_MASK - str r0, [r1] - - /* WRAM-A/B/C ARM7 Ɋ蓖Ă邱ƂmF */ - ldr r1, =REG_MBK1_ADDR - ldr r0, [r1] - ldr r3, =0x8d898581 - cmp r0, r3 - blne INITi_Stop - ldr r1, =REG_MBK2_ADDR - ldr r0, [r1] - ldr r3, =0x8d898581 - cmp r0, r3 - blne INITi_Stop - ldr r1, =REG_MBK3_ADDR - ldr r0, [r1] - ldr r3, =0x9d999591 - cmp r0, r3 - blne INITi_Stop - ldr r1, =REG_MBK4_ADDR - ldr r0, [r1] - ldr r3, =0x8d898581 - cmp r0, r3 - blne INITi_Stop - ldr r1, =REG_MBK5_ADDR - ldr r0, [r1] - ldr r3, =0x9d999591 - cmp r0, r3 - blne INITi_Stop - - /* WRAM-A/B/C ̃}bvݒ */ - ldr r1, =REG_MBK6_ADDR - ldr r0, =0x080037c0 - str r0, [r1] - ldr r1, =REG_MBK7_ADDR - ldr r0, =0x07c03780 - str r0, [r1] - ldr r1, =REG_MBK8_ADDR - ldr r0, =0x07803740 - str r0, [r1] - ldr r1, =REG_MBK9_ADDR - ldr r0, =0x00ffff0f - str r0, [r1] - - /* A7-SCFG ubNւ̃ANZX𖳌 */ - ldr r1, =REG_EXT_ADDR - ldr r0, [r1] -/* bic r0, r0, #REG_SCFG_EXT_CFG_MASK */ - str r0, [r1] - -@invalid: - /* ROM ݒANITRO ݒemF */ - ldrb r0, [r2, #HWi_WSYS08_WRAMOFFSET] - and r0, r0, #(HWi_WSYS08_ROM_ARM7RSEL_MASK | HWi_WSYS08_ROM_ARM9RSEL_MASK | HWi_WSYS08_ROM_ARM9SEC_MASK) - cmp r0, #HWi_WSYS08_ROM_ARM9SEC_MASK - blne INITi_Stop - - /* SCFG WX^ݒL̈ɃRs[ */ - ldr r2, =HW_PRV_WRAM_SYSRV - ldr r3, =HW_SYS_CONF_BUF - ldr r0, [r2, #HWi_WSYS04_WRAMOFFSET] - str r0, [r3, #HWi_WSYS04_OFFSET] - ldrh r0, [r2, #HWi_WSYS08_WRAMOFFSET] - strh r0, [r3, #HWi_WSYS08_OFFSET] - - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_DetectMainMemorySize - Description: CTCY𒲍B - ʂ (u16*)HW_MMEMCHECER_SUB Ɋi[B - i[l [OS_CONSOLE_SIZE_16MB|OS_CONSOLE_SIZE_32B] - NOTE: vbgtH[ NITRO ̏ꍇ͍lĂȂB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -#define OSi_IMAGE_DIFFERENCE2 0xb000000 -#define OSi_DETECT_NITRO_MASK (REG_SND_SMX_CNT_E_MASK | REG_SND_SMX_CNT_FSEL_MASK) -#define OSi_DETECT_NITRO_VAL (REG_SND_SMX_CNT_E_MASK) - -#define OSi_CHECKNUM1 0x55 -#define OSi_CHECKNUM2 0xaa -#define OSi_100usWAIT 3352 // 100us = 3351.4cycles(33.514MHz) - -static asm void -INITi_DetectMainMemorySize(void) -{ - ldr r2, =HW_MMEMCHECKER_SUB - add r3, r2, #OSi_IMAGE_DIFFERENCE2 - mov r0, #OS_CONSOLE_SIZE_16MB - - /* OSi_CHECKNUM1 (0x55) ݃eXg */ - mov r1, #OSi_CHECKNUM1 - strb r1, [r3] - - ldr r2, =OSi_100usWAIT -@1 subs r2, r2, #4 - bcs @1 - - ldrb r1, [r3] - cmp r1, #OSi_CHECKNUM1 - bne @check_smix - - /* OSi_CHECKNUM2 (0xaa) ݃eXg */ - mov r1, #OSi_CHECKNUM2 - strb r1, [r3] - - ldr r2, =OSi_100usWAIT -@2 subs r2, r2, #4 - bcs @2 - - ldrb r1, [r3] - cmp r1, #OSi_CHECKNUM2 - moveq r0, #OS_CONSOLE_SIZE_32MB - -@check_smix: - /* SMIX WX^𒲍 */ - ldr r3, =REG_SMX_CNT_ADDR - ldrh r1, [r3] - and r1, r1, #OSi_DETECT_NITRO_MASK - cmp r1, #OSi_DETECT_NITRO_VAL - orreq r0, r0, #OS_CHIPTYPE_SMX_MASK - - /* ʂi[ */ - ldr r2, =HW_MMEMCHECKER_SUB - strb r0, [r2] - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_Stop - Description: vO~BARM7 p WRAM Halt JԂ[v - ֐Rs[ARs[֐sB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_Stop(void) -{ - ldr r1, =microcode_Stop - ldr r2, =HW_PRV_WRAM - add r3, r2, #8 // sizeof(microcode_Stop) -@copy_loop: - ldr r0, [r1], #4 - str r0, [r2], #4 - cmp r2, r3 - blt @copy_loop - -@stop_loop: - ldr r0, =HW_PRV_WRAM - mov lr, pc - bx r0 - b @stop_loop - /* never return */ -} - -/*---------------------------------------------------------------------------* - Name: INITi_DoAutoload - Description: NɉāAeI[g[hubŇŒf[^̓WJ - yѕϐ 0 NAsB - NITRO ݊I[g[hZOg݂͑ATWL pZOg - ݂݂̂ƂOB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ - -static asm void -INITi_DoAutoload(void) -{ - stmfd sp!, {lr} - - /* I[g[h{ */ -@000: - ldr r0, =_start_LtdModuleParams - ldr r12, [r0] // r12 = SDK_LTDAUTOLOAD_LIST - ldr r3, [r0, #4] // r3 = SDK_LTDAUTOLOAD_LIST_END - ldr r1, [r0, #8] // r1 = SDK_LTDAUTOLOAD_START -@001: - cmp r12, r3 - bge @010 - /* ŒZNV */ - ldr r0, [r12], #4 // r0 = start address of destination range of fixed section - ldr r2, [r12], #4 // r2 = size of fixed section - bl INITi_Copy32 - stmfd sp!, {r0, r1} - /* static initializer e[u */ - ldr r0, [r12], #4 -#ifndef SDK_NOINIT - stmfd sp!, {r3, r12} - bl INITi_ShelterStaticInitializer - ldmfd sp!, {r3, r12} -#endif - /* bss ZNV */ - ldmfd sp!, {r0} // r0 = start address of destination range of bss section - mov r1, #0 // r1 = clear value for bss section - ldr r2, [r12], #4 // r2 = sizeo of bss section - bl INITi_Fill32 - ldmfd sp!, {r1} - b @001 - - /* I[g[hXgEI[g[hobt@NA */ -@010: - ldr r1, =_start_LtdModuleParams - ldr r12, [r1] // r12 = SDK_LTDAUTOLOAD_LIST - ldr r3, [r1, #4] // r3 = SDK_LTDAUTOLOAD_LIST_END - ldr r0, [r1, #8] // r0 = SDK_LTDAUTOLOAD_START -@011: - cmp r12, r3 - bge @0f0 - mov r1, #0 // r1 = clear value - str r1, [r12], #4 - ldr r2, [r12] // r2 = size of fixed section - str r1, [r12], #4 - str r1, [r12], #4 - str r1, [r12], #4 - bl INITi_Fill32 - b @011 - -@0f0: - /* I[g[hR[obNĂяo */ - ldr r0, =_start_ModuleParams - ldr r1, =_start_LtdModuleParams - ldmfd sp!, {lr} - b _start_AutoloadDoneCallback -} - -#ifndef SDK_NOINIT - -static asm void -/*---------------------------------------------------------------------------* - Name: INITi_ShelterStaticInitializer - Description: eI[g[hZOg static initializer ւ̃|C^ - e[u IRQ X^bN̍ŏ㕔ɑޔB - Arguments: ptr - ZOg̃|C^e[uւ̃|C^B - e[u NULL ŏI[ĂKvB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_ShelterStaticInitializer(u32* ptr) -{ - /* mF */ - cmp r0, #0 - bxeq lr - - /* ޔꏊ擪AhXvZ */ - ldr r1, =HW_PRV_WRAM_IRQ_STACK_END - ldr r2, =SDK_IRQ_STACKSIZE - sub r1, r1, r2 - add r1, r1, #4 -@001: - /* ޔꏊ擪󂫏ꏊ𒲍 */ - ldr r2, [r1] - cmp r2, #0 - addne r1, r1, #4 - bne @001 -@002: - /* 󂫏ꏊɃe[uRs[ */ - ldr r2, [r0], #4 - str r2, [r1], #4 - cmp r2, #0 - bne @002 - - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_CallStaticInitializers - Description: eI[g[hZOg static initializer ĂяoB - I[g[hɂ IRQ X^bN̍ŏ㕔ɑޔĂ - ֐|C^e[u‚ŒĂяoB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_CallStaticInitializers(void) -{ - stmdb sp!, {lr} - - /* e[uޔꏊ擪AhXvZ */ - ldr r1, =HW_PRV_WRAM_IRQ_STACK_END - ldr r2, =SDK_IRQ_STACKSIZE - sub r1, r1, r2 - add r1, r1, #4 -@001: - /* e[uɊǗĂ|C^‚ŒĂяo */ - ldr r0, [r1] - cmp r0, #0 - beq @002 - stmfd sp!, {r1} - mov lr, pc - bx r0 - ldmfd sp!, {r1} - /* UĂяo|C^̓[NA (IRQX^bNԎ؂肵Ă) */ - mov r0, #0 - str r0, [r1], #4 - b @001 -@002: - ldmia sp!, {lr} - bx lr -} -#endif - -/*---------------------------------------------------------------------------* - Name: INITi_Copy32 - Description: 32 bit PʂŃRs[sBX^bN 36 oCg邪A - WX^ r3 - r12 ͔j󂵂ȂB - Arguments: r0 - Rs[ւ̃|C^ ( 4 oCgAC )B - r1 - Rs[ւ̃|C^ ( 4 oCgAC )B - r2 - Rs[钷oCgPʂŎw ( 4 ̔{ )B - Returns: r0 - Rs[̃Rs[ւ̃|C^ ( r0 + r2 )B - r1 - Rs[̃Rs[ւ̃|C^ ( r1 + r2 )B - *---------------------------------------------------------------------------*/ -static asm void* -INITi_Copy32(void* dst, void* src, u32 size) -{ - stmfd sp!, {r3-r11} - - bics r3, r2, #0x0000001f - beq @next - add r3, r0, r3 -@loop: - ldmia r1!, {r4-r11} - stmia r0!, {r4-r11} - cmp r3, r0 - bgt @loop -@next: - tst r2, #0x00000010 - ldmneia r1!, {r4-r7} - stmneia r0!, {r4-r7} - tst r2, #0x00000008 - ldmneia r1!, {r4-r5} - stmneia r0!, {r4-r5} - tst r2, #0x00000004 - ldmneia r1!, {r4} - stmneia r0!, {r4} - - ldmfd sp!, {r3-r11} - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_Fill32 - Description: 32 bit PʂŃobt@ewf[^Ŗ߂BX^bN 36 - oCg邪AWX^ r3 - r12 ͔j󂵂ȂB - Arguments: r0 - obt@ւ̃|C^ ( 4 oCgAC )B - r1 - obt@𖄂߂e 32 bit lŎwB - r2 - obt@𖄂߂钷oCgPʂŎw ( 4 ̔{ )B - Returns: r0 - ̃obt@ւ̃|C^ ( r0 + r2 )B - *---------------------------------------------------------------------------*/ -static asm void* -INITi_Fill32(void* dst, u32 value, u32 size) -{ - stmfd sp!, {r3-r11} - - mov r4, r1 - mov r5, r1 - mov r6, r1 - mov r7, r1 - mov r8, r1 - mov r9, r1 - mov r10, r1 - mov r11, r1 - bics r3, r2, #0x0000001f - beq @next - add r3, r0, r3 -@loop: - stmia r0!, {r4-r11} - cmp r3, r0 - bgt @loop -@next: - tst r2, #0x00000010 - stmneia r0!, {r4-r7} - tst r2, #0x00000008 - stmneia r0!, {r4-r5} - tst r2, #0x00000004 - stmneia r0!, {r4} - - ldmfd sp!, {r3-r11} - bx lr -} - -#include diff --git a/build/tests/TestComponent/ARM7.TWL/src/kami_pxi.c b/build/tests/TestComponent/ARM7.TWL/src/kami_pxi.c deleted file mode 100644 index cb0e5ac4..00000000 --- a/build/tests/TestComponent/ARM7.TWL/src/kami_pxi.c +++ /dev/null @@ -1,413 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_pxi.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "kami_pxi.h" -#include "fifo.h" -#include "twl/cdc.h" -#include "formatter.h" -#include "mcu_firm.h" -#include -#include -#include -#include -#include - -/* sdmc.h FATFSCu̔Jwb_̂߁AKvȒ`[JŎB */ -//#include - -typedef enum { - SDMC_PORT_CARD = 0x400, - SDMC_PORT_NAND = 0x401 -}SDMC_PORT_NO; - -#define TRUE 1 /* Don't change */ -#define FALSE 0 /* Don't change */ - -typedef unsigned char byte; /* Don't change */ -typedef unsigned short word; /* Don't change */ -typedef unsigned long dword; /* Don't change */ - -#define BOOLEAN int - -extern BOOL FATFSi_nandRtfsIo( int driveno, dword block, void* buffer, word count, BOOLEAN reading); -extern BOOL sdmcFormatNandLog( BOOL verify_flag); -extern void sdmcGetCID( SDMC_PORT_NO port, u32* dest); -extern void SPI_Lock(u32 id); -extern void SPI_Unlock(u32 id); - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -#define KAMITEST_MESSAGE_ARRAY_MAX 4 // XbhpbZ[WL[̃TCY -#define KAMITEST_THREAD_STACK_SIZE 2048 // Xbh̃X^bNTCY - -#define KAMITEST_THREAD_PRIORITY 6 - -// ACgăRs[ -#define KAMI_UNPACK_U8(d, s) \ - (*(d) = (u8)((((u8*)s)[0] << 0))) -#define KAMI_UNPACK_U16(d, s) \ - (*(d) = (u16)((((u8*)s)[0] << 0) | (((u8*)s)[1] << 8))) -#define KAMI_UNPACK_U32(d, s) \ - (*(d) = (u32)((((u8*)s)[0] << 0) | (((u8*)s)[1] << 8) | (((u8*)s)[2] << 16) | (((u8*)s)[3] << 24))) - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ -typedef struct KamiWork -{ - BOOL result; - u32 total; - u32 current; - KamiCommand command; - u8 data[KAMITEST_PXI_DATA_SIZE_MAX]; // 㑱f[^i[p - - OSMessageQueue msgQ; // XbhpbZ[WL[ - OSMessage msgArray[KAMITEST_MESSAGE_ARRAY_MAX]; - // bZ[Wi[obt@ - OSThread thread; // KAMIpXbh - u64 stack[KAMITEST_THREAD_STACK_SIZE / sizeof(u64)]; - // KAMIpXbh̃X^bN -} -KamiWork; - -/*---------------------------------------------------------------------------* - ÓIϐ` - *---------------------------------------------------------------------------*/ -static BOOL kamiInitialized; -static KamiWork kamiWork; -static u32 kamiSpiLockId; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err); -static void KamiReturnResult(KamiCommand command, KAMIPxiResult result); -static void KamiReturnResultEx(KamiCommand command, KAMIPxiResult result, u8 size, u8* data); -static void KamiThread(void *arg); - -void KamiPxiInit(void) -{ - if (kamiInitialized) - { - return; - } - kamiInitialized = TRUE; - kamiSpiLockId = (u32)OS_GetLockID(); - if (kamiSpiLockId == OS_LOCK_ID_ERROR) - { - OS_Panic("%s: OS_GetLockID failed.\n", __FUNCTION__); - } - - PXI_Init(); - PXI_SetFifoRecvCallback(PXI_FIFO_TAG_KAMITEST, KamiPxiCallback); - - OS_InitMessageQueue(&kamiWork.msgQ, kamiWork.msgArray, KAMITEST_MESSAGE_ARRAY_MAX); - OS_CreateThread(&kamiWork.thread, KamiThread, 0, - (void *)(kamiWork.stack + (KAMITEST_THREAD_STACK_SIZE / sizeof(u64))), - KAMITEST_THREAD_STACK_SIZE, KAMITEST_THREAD_PRIORITY); - OS_WakeupThreadDirect(&kamiWork.thread); -} - -static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err) -{ -#pragma unused( tag ) - if (err) - { - return; - } - if (data & KAMITEST_PXI_START_BIT) // 擪f[^ - { - kamiWork.total = (u8)((data & KAMITEST_PXI_DATA_NUMS_MASK) >> KAMITEST_PXI_DATA_NUMS_SHIFT); - kamiWork.current = 0; - kamiWork.command = (KamiCommand)((data & KAMITEST_PXI_COMMAND_MASK) >> KAMITEST_PXI_COMMAND_SHIFT); - kamiWork.data[kamiWork.current++] = (u8)((data & KAMITEST_PXI_1ST_DATA_MASK) >> KAMITEST_PXI_1ST_DATA_SHIFT); - } - else // 㑱f[^ - { - kamiWork.data[kamiWork.current++] = (u8)((data & 0xFF0000) >> 16); - kamiWork.data[kamiWork.current++] = (u8)((data & 0x00FF00) >> 8); - kamiWork.data[kamiWork.current++] = (u8)((data & 0x0000FF) >> 0); - } - if (kamiWork.current >= kamiWork.total) - { - switch (kamiWork.command) - { - case KAMI_EXE_FORMAT: - case KAMI_NAND_IO: - case KAMI_MCU_WRITE_FIRM: - case KAMI_MCU_IO: - case KAMI_CODEC_IO: - case KAMI_ARM7_IO: - case KAMI_CDC_GO_DSMODE: - case KAMI_CLEAR_NAND_ERRORLOG: - case KAMI_GET_CAMERA_MODULE_TYPE: - case KAMI_GET_NAND_CID: - if (!OS_SendMessage(&kamiWork.msgQ, NULL, OS_MESSAGE_NOBLOCK)) - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_FATAL_ERROR); - } - break; - - default: - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_INVALID_COMMAND); - } - } -} - -static void KamiReturnResult(KamiCommand command, KAMIPxiResult result) -{ - u32 pxiData = (u32)(KAMITEST_PXI_START_BIT | KAMITEST_PXI_RESULT_BIT | - ((command << KAMITEST_PXI_COMMAND_SHIFT) & KAMITEST_PXI_COMMAND_MASK) | - ((1 << KAMITEST_PXI_DATA_NUMS_SHIFT) & KAMITEST_PXI_DATA_NUMS_MASK) | - ((result << KAMITEST_PXI_1ST_DATA_SHIFT) & KAMITEST_PXI_1ST_DATA_MASK)); - while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - } -} - -static void KamiReturnResultEx(KamiCommand command, KAMIPxiResult result, u8 size, u8* data) -{ - u32 pxiData = (u32)(KAMITEST_PXI_START_BIT | KAMITEST_PXI_RESULT_BIT | - ((command << KAMITEST_PXI_COMMAND_SHIFT) & KAMITEST_PXI_COMMAND_MASK) | - (((size+1) << KAMITEST_PXI_DATA_NUMS_SHIFT) & KAMITEST_PXI_DATA_NUMS_MASK) | - ((result << KAMITEST_PXI_1ST_DATA_SHIFT) & KAMITEST_PXI_1ST_DATA_MASK)); - int i; - while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - } - for (i = 0; i < size; i+= 3) - { - pxiData = (u32)((data[i] << 16) | (data[i+1] << 8) | data[i+2]); - while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - } - } -} - -static void KamiThread(void *arg) -{ -#pragma unused( arg ) - OSMessage msg; - BOOL result; - - while (TRUE) - { - (void)OS_ReceiveMessage(&kamiWork.msgQ, &msg, OS_MESSAGE_BLOCK); - switch (kamiWork.command) - { - case KAMI_EXE_FORMAT: - { - result = ExeFormat((FormatMode)kamiWork.data[0]); // Quick or Full - if (result) - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_TRUE); - } - else - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_FALSE); - } - } - break; - - case KAMI_NAND_IO: - { - BOOL is_read; - u32 block; - void* buffer; - u32 count; - - is_read = (BOOL)kamiWork.data[0]; - KAMI_UNPACK_U32(&block, &kamiWork.data[1]); - KAMI_UNPACK_U32((u32 *)(&buffer), &kamiWork.data[5]); - KAMI_UNPACK_U32(&count, &kamiWork.data[9]); - - result = FATFSi_nandRtfsIo( 0, block, buffer, (u16)count, is_read ); - if (result) - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_TRUE); - } - else - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_FALSE); - } - } - break; - - case KAMI_MCU_WRITE_FIRM: - { - void* buffer; - KAMI_UNPACK_U32((u32 *)(&buffer), &kamiWork.data[1]); - - if ( MCU_WriteFirm( buffer ) ) - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS); - } - else - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_FALSE); - } - } - break; - - case KAMI_MCU_IO: - { - BOOL is_read; - u32 reg_no; - u32 write; - u32 read; - - is_read = (BOOL)kamiWork.data[0]; - KAMI_UNPACK_U32(®_no, &kamiWork.data[1]); - KAMI_UNPACK_U32(&write, &kamiWork.data[5]); - - if (is_read) - { - read = MCU_ReadRegister( (u8)reg_no ); - KamiReturnResultEx(kamiWork.command, KAMI_PXI_RESULT_SUCCESS, sizeof(u8), (u8*)&read ); - } - else - { - MCU_WriteRegister( (u8)reg_no, (u8)write ); - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS); - } - } - break; - - case KAMI_CODEC_IO: - { - BOOL is_read; - u8 page; - u8 reg_no; - u32 write; - u32 read; - - is_read = (BOOL)kamiWork.data[0]; - KAMI_UNPACK_U8(&page, &kamiWork.data[1]); - KAMI_UNPACK_U8(®_no, &kamiWork.data[2]); - KAMI_UNPACK_U32(&write, &kamiWork.data[5]); - - if (is_read) - { - SPI_Lock(kamiSpiLockId); // CODECpSPIrbN - read = CDC_ReadSpiRegisterEx( page, reg_no ); - SPI_Unlock(kamiSpiLockId); // CODECpSPIrbN - KamiReturnResultEx(kamiWork.command, KAMI_PXI_RESULT_SUCCESS, sizeof(u8), (u8*)&read ); - } - else - { - SPI_Lock(kamiSpiLockId); // CODECpSPIrbN - CDC_WriteSpiRegisterEx( page, reg_no, (u8)write ); - SPI_Unlock(kamiSpiLockId); // CODECpSPIrbN - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS); - } - } - break; - - case KAMI_ARM7_IO: - { - BOOL is_read; - u32 addr; - u32 write; - u32 read; - - is_read = (BOOL)kamiWork.data[0]; - KAMI_UNPACK_U32(&addr, &kamiWork.data[1]); - KAMI_UNPACK_U32(&write, &kamiWork.data[5]); - - if (is_read) - { - read = *(u32 *)addr; - KamiReturnResultEx(kamiWork.command, KAMI_PXI_RESULT_SUCCESS, sizeof(u32), (u8*)&read ); - } - else - { - *(u32 *)addr = write; - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS); - } - } - break; - - case KAMI_CDC_GO_DSMODE: - { - CDC_Init(); // IIRȂǂ̃p[^̂ - CDC_GoDsMode(); - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS); - } - break; - - case KAMI_CLEAR_NAND_ERRORLOG: - { - if (sdmcFormatNandLog(TRUE)) - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS); - } - else - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_FALSE); - } - } - break; - - case KAMI_GET_CAMERA_MODULE_TYPE: - { - CameraModuleTypes types; - if (CAMERAi_IsSharpModule(CAMERA_SELECT_IN)) - { - types.in = CAMERA_MODULE_TYPE_SHARP; - } - else if (CAMERAi_IsMicronModule(CAMERA_SELECT_IN)) - { - types.in = CAMERA_MODULE_TYPE_MICRON; - } - else - { - types.in = CAMERA_MODULE_TYPE_UNKNOWN; - } - if (CAMERAi_IsSharpModule(CAMERA_SELECT_OUT)) - { - types.out = CAMERA_MODULE_TYPE_SHARP; - } - else if (CAMERAi_IsMicronModule(CAMERA_SELECT_OUT)) - { - types.out = CAMERA_MODULE_TYPE_MICRON; - } - else - { - types.out = CAMERA_MODULE_TYPE_UNKNOWN; - } - KamiReturnResultEx(kamiWork.command, KAMI_PXI_RESULT_SUCCESS, sizeof(CameraModuleTypes), (u8*)&types); - } - break; - - case KAMI_GET_NAND_CID: - { - u8 buffer[16]; - sdmcGetCID( SDMC_PORT_NAND, (u32*)buffer); - KamiReturnResultEx(kamiWork.command, KAMI_PXI_RESULT_SUCCESS, sizeof(buffer), (u8*)buffer ); - } - break; - - default: - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_INVALID_COMMAND); - } - } -} - -#include diff --git a/build/tests/TestComponent/ARM7.TWL/src/main.c b/build/tests/TestComponent/ARM7.TWL/src/main.c deleted file mode 100644 index b2a99285..00000000 --- a/build/tests/TestComponent/ARM7.TWL/src/main.c +++ /dev/null @@ -1,654 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - components - armadillo.TWL - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "nvram_sp.h" -#include "kami_pxi.h" -#include - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -/* eXbhDx */ -#define THREAD_PRIO_SPI 2 -#define THREAD_PRIO_MCU 4 // b -#define THREAD_PRIO_SND 6 -#define THREAD_PRIO_NWM_EVENT 7 -#define THREAD_PRIO_NWM_SDIO 8 -#define THREAD_PRIO_FATFS 8 -#define THREAD_PRIO_NWM_COMMAND 9 -#define THREAD_PRIO_NWM_WPA 10 -#define THREAD_PRIO_HOTSW 11 -#define THREAD_PRIO_AES 12 -#define THREAD_PRIO_SEA 12 -#define THREAD_PRIO_RTC 12 -#define THREAD_PRIO_SNDEX 14 -#define THREAD_PRIO_FS 15 -/* OS_THREAD_LAUNCHER_PRIORITY 16 */ - -/* ROM o^GÅgR[h */ -#define ROMHEADER_FOR_CHINA_BIT 0x80 -#define ROMHEADER_FOR_KOREA_BIT 0x40 - -/* gp DMA ԍ */ -#define DMA_NO_FATFS FATFS_DMA_4 // = 0 -#define DMA_NO_NWM 3 - -/* J[h`^OJE^ */ -#define CHATTERING_COUNTER 0x1988 // 100ms (0x1988 * 15.3us = 100000us) - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void PrintDebugInfo(void); -static OSHeapHandle InitializeAllocateSystem(void); -static void InitializeFatfs(void); -static void InitializeNwm(OSHeapHandle hh); -static void InitializeCardPower(void); -static void InitializeCdc(void); - -static void ReadUserInfo(void); -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -static BOOL IsValidConfigEx(void); -static u16 GetRomValidLanguage(void); -static s32 CheckCorrectNCDEx(NVRAMConfigEx* ncdsp); -#else -static s32 CheckCorrectNCD(NVRAMConfig* ncdsp); -#endif -static void VBlankIntr(void); - -/*---------------------------------------------------------------------------* - Name: TwlSpMain - Description: NxN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -void -TwlSpMain(void) -{ - OSHeapHandle heapHandle; - - /* OS */ - OS_Init(); - PrintDebugInfo(); - - /* NVRAM 烆[U[ǂݏo */ - ReadUserInfo(); - - /* q[v̈ݒ */ - heapHandle = InitializeAllocateSystem(); - - /* {^̓T[` */ - (void)PAD_InitXYButton(); - - /* ݋ */ - (void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - -#ifndef NAND_INITIALIZER_LIMITED_MODE - KamiPxiInit(); -#endif - - /* eCu */ - AES_Init(THREAD_PRIO_AES); // AES - SEA_Init(THREAD_PRIO_SEA); // SEA - FS_Init(FS_DMA_NOT_USE); // FS for CARD - FS_CreateReadServerThread(THREAD_PRIO_FS); // FS for CARD - InitializeFatfs(); // FAT-FS - InitializeNwm(heapHandle); // TWL - MCU_InitIrq(THREAD_PRIO_MCU); // }CR - - if (OSi_IsCodecTwlMode() == TRUE) - { - InitializeCdc(); // CODEC - CAMERA_Init(); // J - } - - SND_Init(THREAD_PRIO_SND); // TEh - SNDEX_Init(THREAD_PRIO_SNDEX); // TEhg - RTC_Init(THREAD_PRIO_RTC); // RTC - WVR_Begin(heapHandle); // NITRO - SPI_Init(THREAD_PRIO_SPI); - InitializeCardPower(); // J[hdONivOpj - - while (TRUE) - { - OS_Halt(); - - /* \tgEFAZbgv͊ĎȂ */ - /* AGB J[gbW̑}`FbN͍sȂ */ - /* DS J[h̑}`FbN͍sȂ */ - } -} - -/*---------------------------------------------------------------------------* - Name: PrintDebugInfo - Description: ARM7 R|[lg̏fobOo͂B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -PrintDebugInfo(void) -{ - OS_TPrintf("ARM7: This component is running on TWL.\n"); - OS_TPrintf("ARM7: This component is \"armadillo.TWL\".\n"); -} - -/*---------------------------------------------------------------------------* - Name: InitializeAllocateSystem - Description: ăVXeB - Arguments: None. - Returns: OSHeapHandle - WRAM A[iɊmۂꂽq[ṽnhԂB - *---------------------------------------------------------------------------*/ -static OSHeapHandle -InitializeAllocateSystem(void) -{ - OSHeapHandle hh; - void* subLo = (void*)OS_GetWramSubArenaLo(); - void* subHi = (void*)OS_GetWramSubArenaHi(); - void* privLo = (void*)OS_GetWramSubPrivArenaLo(); - void* privHi = (void*)OS_GetWramSubPrivArenaHi(); - - if (((u32)privLo == HW_PRV_WRAM) && ((u32)subHi == HW_PRV_WRAM) && ((u32)subLo < HW_PRV_WRAM)) - { - /* SUB A[i SUBPRIV A[iɋz */ - OS_SetWramSubArenaHi(subLo); - OS_SetWramSubPrivArenaLo(subLo); - privLo = subLo; - } - - /* A[i 0 NA */ - MI_CpuClear8(privLo, (u32)privHi - (u32)privLo); - - /* q[v쐬 */ - privLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, privLo, privHi, 1); - hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, privLo, privHi); - if (hh < 0) - { - OS_Panic("ARM7: Failed to create heap.\n"); - } - - /* Jgq[vɐݒ */ - (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - /* q[vTCY̊mF */ - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - if (heapSize <= 0) - { - OS_Panic("ARM7: Failed to create heap.\n"); - } - OS_TPrintf("ARM7: heap size [%d]\n", heapSize); - } - - return hh; -} - -/*---------------------------------------------------------------------------* - Name: InitializeFatfs - Description: FATFSCuB - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeFatfs(void) -{ - // FATFSCȕ - if(!FATFS_Init( FATFS_DMA_4, FATFS_DMA_5, THREAD_PRIO_FATFS)) - { - // do nothing - } -} - -/*---------------------------------------------------------------------------* - Name: InitializeNwm - Description: NWMCuB - Arguments: hh - p”\ȃq[ṽnhwB - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeNwm(OSHeapHandle hh) -{ - NwmspInit nwmInit; - - /* [TODO] mۂĂq[v̈悪VꎮKvƂĂ郁ʈȏォ̃`FbNKv */ - - nwmInit.cmdPrio = THREAD_PRIO_NWM_COMMAND; - nwmInit.evtPrio = THREAD_PRIO_NWM_EVENT; - nwmInit.sdioPrio = THREAD_PRIO_NWM_SDIO; - - nwmInit.dmaNo = DMA_NO_NWM; - nwmInit.drvHeap.id = OS_ARENA_WRAM_SUBPRIV; - nwmInit.drvHeap.handle = hh; - - nwmInit.wpaPrio = THREAD_PRIO_NWM_WPA; - nwmInit.wpaHeap.id = OS_ARENA_WRAM_SUBPRIV; - nwmInit.wpaHeap.handle = hh; - - NWMSP_Init(&nwmInit); -} - -/*---------------------------------------------------------------------------* - Name: InitializeCardPower - Description: J[hdONB - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeCardPower(void) -{ - // `b^OJE^̒lݒ - reg_MI_MC1 = (u32)((reg_MI_MC1 & ~REG_MI_MC1_CC_MASK) | - (CHATTERING_COUNTER << REG_MI_MC1_CC_SHIFT)); - - // `^OJE^҂‚ƂɂCDET0ɂȂ - OS_SpinWait( OS_MSEC_TO_CPUCYC(200) ); - - // J[hXbgPdON - HOTSWi_TurnCardPowerOn(1); -} - -/*---------------------------------------------------------------------------* - Name: InitializeCdc - Description: CDCCuB - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeCdc(void) -{ - u32 spiLockId; - - spiLockId = (u32)OS_GetLockID(); - if (spiLockId == OS_LOCK_ID_ERROR) - { - OS_Warning("OS_GetLockID failed.\n"); - } - - /* CODEC */ - SPI_Lock(spiLockId); - CDC_Init(); - SPI_Unlock(spiLockId); -} - -//#ifdef WM_PRECALC_ALLOWEDCHANNEL -//extern u16 WMSP_GetAllowedChannel(u16 bitField); -//#endif -/*---------------------------------------------------------------------------* - Name: ReadUserInfo - - Description: NVRAM烆[U[ǂݏoAL̈ɓWJB - ~[OĂobt@Ăꍇ́A - L̈̃[U[i[ꏊNAB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void ReadUserInfo(void) -{ - s32 offset; -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - NVRAMConfigEx temp[2]; -#else - NVRAMConfig temp[2]; -#endif - s32 check; - u8 *p = OS_GetSystemWork()->nvramUserInfo; - - // ItZbgǂݏo -#ifdef NVRAM_CONFIG_CONST_ADDRESS - offset = NVRAM_CONFIG_DATA_ADDRESS_DUMMY; -#else - NVRAM_ReadDataBytes(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_CONFIG_DATA_OFFSET_SIZE, - (u8 *)(&offset)); - offset <<= NVRAM_CONFIG_DATA_OFFSET_SHIFT; -#endif - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfigEx), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfigEx), - (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCDEx(temp); -#else - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfig), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfig), (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCD(temp); -#endif - - if (check >= 3) - { - // AvP[V̋N} - MI_CpuFill32(p, 0xffffffff, sizeof(NVRAMConfig)); - } - else if (check) - { - s32 i; - - // jbNl[␳ - if (temp[check - 1].ncd.owner.nickname.length < NVRAM_CONFIG_NICKNAME_LENGTH) - { - for (i = NVRAM_CONFIG_NICKNAME_LENGTH; - i > temp[check - 1].ncd.owner.nickname.length; i--) - { - temp[check - 1].ncd.owner.nickname.str[i - 1] = 0x0000; - } - } - // Rg␳ - if (temp[check - 1].ncd.owner.comment.length < NVRAM_CONFIG_COMMENT_LENGTH) - { - for (i = NVRAM_CONFIG_COMMENT_LENGTH; i > temp[check - 1].ncd.owner.comment.length; - i--) - { - temp[check - 1].ncd.owner.comment.str[i - 1] = 0x0000; - } - } - // L̈ɃXgA - MI_CpuCopy32(&temp[check - 1], p, sizeof(NVRAMConfig)); - } - else - { - // L̈NA - MI_CpuClear32(p, sizeof(NVRAMConfig)); - } - - // MACAhX[U[̌ɓWJ - { - u8 wMac[6]; - - // NVRAMMACAhXǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_MACADDRESS_ADDRESS, 6, wMac); - // WJAhXvZ - p = (u8 *)((u32)p + ((sizeof(NVRAMConfig) + 3) & ~0x00000003)); - // L̈ɓWJ - MI_CpuCopy8(wMac, p, 6); - } -/* -#ifdef WM_PRECALC_ALLOWEDCHANNEL - // gp”\`lgpƒ`lvZ - { - u16 enableChannel; - u16 allowedChannel; - - // gp”\`lǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_ENABLECHANNEL_ADDRESS, 2, (u8 *)(&enableChannel)); - // gpƒ`lvZ - allowedChannel = WMSP_GetAllowedChannel((u16)(enableChannel >> 1)); - // WJAhXvZ(MACAhX̌2oCg) - p = (u8 *)((u32)p + 6); - // L̈ɓWJ - *((u16 *)p) = allowedChannel; - } -#endif -*/ -} - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -/*---------------------------------------------------------------------------* - Name: IsValidConfigEx - - Description: [U[񂪊gRtBOɑΉĂ邩ǂ𒲍B - - Arguments: None. - - Returns: BOOL - g[U[񂪗LȏꍇTRUEԂB - łꍇFALSEԂB - *---------------------------------------------------------------------------*/ -static BOOL IsValidConfigEx(void) -{ - u8 ipl2_type; - - NVRAM_ReadDataBytes(NVRAM_CONFIG_IPL2_TYPE_ADDRESS, NVRAM_CONFIG_IPL2_TYPE_SIZE, &ipl2_type); - if (ipl2_type == NVRAM_CONFIG_IPL2_TYPE_NORMAL) - { - return FALSE; - } - if (ipl2_type & NVRAM_CONFIG_IPL2_TYPE_EX_MASK) - { - return TRUE; - } - return FALSE; -} - -/*---------------------------------------------------------------------------* - Name: GetRomValidLanguage - - Description: ROMo^GȀ񂩂AgR[h̑Ήrbg}bv - Ɋւ𒊏oB - - Arguments: None. - - Returns: u16 - DSJ[hA }`u[goCiΉĂ - R[h̃rbg}bvԂBDSJ[hg - R[hɑΉĂȂꍇ 0 ԂB - *---------------------------------------------------------------------------*/ -static u16 GetRomValidLanguage(void) -{ - u16 ret = 0x0000; - u8 langBit = OS_GetSystemWork()->rom_header[0x1d]; - - // ROMo^GÅgR[hmF - if (langBit == ROMHEADER_FOR_CHINA_BIT) - { - // for CHINA - ret |= (0x0001 << NVRAM_CONFIG_LANG_CHINESE); - } - else if (langBit == ROMHEADER_FOR_KOREA_BIT) - { - // for KOREA - ret |= (0x0001 << NVRAM_CONFIG_LANG_HANGUL); - } - return ret; -} - -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCDEx - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - 3: Av̋N}ׂB - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCDEx(NVRAMConfigEx * ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // IPLgR[hɑΉĂ邩 - if (IsValidConfigEx()) - { - // IPLgR[hɑΉĂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - calc_crc = - SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd_ex), sizeof(NVRAMConfigDataEx)); - if ((ncdsp[i].crc16_ex == calc_crc) - && ((0x0001 << ncdsp[i].ncd_ex.language) & - (ncdsp[i].ncd_ex.valid_language_bitmap))) - { - // gf[^p CRC Aݒ茾R[hΉR[hɊ܂܂ꍇɐƔf - if (rom_valid_language & ncdsp[i].ncd_ex.valid_language_bitmap) - { - // gR[hŒʏ팾R[h㏑ - ncdsp[i].ncd.option.language = ncdsp[i].ncd_ex.language; - } - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE) & ~ncdsp[i]. - ncd_ex.valid_language_bitmap) - { - // ROM o^GA""gR[hݒ肳Ă邪A - // IPL2̑ΉR[h""gR[h܂܂Ȃꍇ͋N} - return 3; - } - crc_flag |= (1 << i); - } - } - } - } - else - { - // IPLgR[hɑΉĂȂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE)) - { - // ROM o^GA""gR[hݒ肳Ăꍇ͋N} - return 3; - } - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - crc_flag |= (1 << i); - } - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} - -#else -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCD - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCD(NVRAMConfig *ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // e~[f[^CRC & saveCount`FbN - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRCAsaveCountl0x80̃f[^𐳓ƔfB - crc_flag |= (1 << i); - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} -#endif - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - Description: V uN荞݃xN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -extern BOOL PMi_Initialized; -extern void PM_SelfBlinkProc(void); - -static void -VBlankIntr(void) -{ - if (PMi_Initialized) - { - PM_SelfBlinkProc(); - } -} diff --git a/build/tests/TestComponent/ARM9.TWL/ARM9-TS.lsf b/build/tests/TestComponent/ARM9.TWL/ARM9-TS.lsf deleted file mode 100644 index 9e89469d..00000000 --- a/build/tests/TestComponent/ARM9.TWL/ARM9-TS.lsf +++ /dev/null @@ -1,57 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ARM9-TS.lsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL LCF SPEC FILE -# - -Static $(TARGET_NAME) -{ - Address $(ADDRESS_STATIC) - Object $(OBJS_STATIC) - Library $(LLIBS) $(GLIBS) $(CW_LIBS) - StackSize 4096 4096 -} - -Autoload ITCM -{ - Address $(ADDRESS_ITCM) - Object * (.itcm) - Object $(OBJS_AUTOLOAD) (.text) - Object $(OBJS_AUTOLOAD) (.rodata) - Object $(OBJS_AUTOLOAD) (.init) - Object $(OBJS_AUTOLOAD) (.ctor) - Object $(OBJS_AUTOLOAD) (.sinit) -} - -Autoload DTCM -{ - Address $(ADDRESS_DTCM) - Object * (.dtcm) - Object $(OBJS_AUTOLOAD) (.data) - Object $(OBJS_AUTOLOAD) (.sdata) - Object $(OBJS_AUTOLOAD) (.bss) - Object $(OBJS_AUTOLOAD) (.sbss) -} - -Ltdautoload LTDMAIN -{ - # NITRO/TWL L̃I[o[C݂ꍇ́Aɂ̌ɔzuKv܂B - After $(TARGET_NAME) - Object * (.ltdmain) - Object $(OBJS_LTDAUTOLOAD) - Library $(LLIBS_EX) $(GLIBS_EX) -} diff --git a/build/tests/TestComponent/ARM9.TWL/Makefile b/build/tests/TestComponent/ARM9.TWL/Makefile deleted file mode 100644 index 755c4c59..00000000 --- a/build/tests/TestComponent/ARM9.TWL/Makefile +++ /dev/null @@ -1,130 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - systemMenu_RED - NandInitializerRed -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -#---------------------------------------------------------------------------- - -#============================================================================ -#ig݂sꍇ́ATwlIPL/build/buildtools/commondefs"FIRM_USE_PRODUCT_KEYS=TRUE"LɂĂB -#============================================================================ -#============================================================================ -# CX̋DisabletOݒ”\ɂꍇ`܂Biv:Make Cleanj -MACRO_FLAGS += -DUSE_WIRELESS_FORCE_DISABLE_SETTING -#============================================================================ -#============================================================================ -# ef[^݉”\ɂꍇ`܂Biv:Make Cleanj -# ̓Iɂ TWLFontTable.dat wrap.bin cert.sys 3‚łB -MACRO_FLAGS += -DUSE_WRITE_VARIOUS_DATA -#============================================================================ -#============================================================================ -# dev.kp݉”\ɂꍇ`܂Biv:Make Cleanj -#MACRO_FLAGS += -DWRITE_DEVKP_ENABLE -#============================================================================ -#============================================================================ -# }NfobOpƂč쐬ꍇ`܂Biv:Make Cleanj -# Eɂ"nand:/shared2/launcher/wrap.bin"쐬܂B -# EɂĊJpCLS̏ؖ(cert.sys)݂܂B -# E̍Ōɖ{̏s܂B -#MACRO_FLAGS += -DMARIOCLUB_VERSION -#============================================================================ - -SYSM_DISABLE_DEBUG = FALSE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -#TARGET_CODEGEN = THUMB - -TITLEID_LO = 0NRA -#TARGET_TAD = - -TARGET_BIN = TestComponent.srl -LCFILE_SPEC = ARM9-TS.lsf -ROM_SPEC = main.rsf - -MAKEROM_ARM7_BASE = $(SYSMENU_COMPONENTSDIR)/armadillo_uji/$(TWL_BUILDTYPE_ARM7)/armadillo -MAKEROM_ARM7 = $(MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - -SRCS = main.c \ - kami_pxi.c \ - font_data.c \ - graphics.c \ - keypad.c \ - kami_font.c \ - - -LINCLUDES = ../common/include \ - $(ROOT)/build/libraries/lcfg/ARM9.TWL/include \ - ../../../systemMenu_tools/common/ARM9/include - -SRCDIR = src \ - ../../../systemMenu_tools/HWInfoWriter/ARM9/src \ - ../../../systemMenu_tools/common/ARM9/src - -#LCFILE = # using default - -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifneq ($(TWL_IPL_RED_PRIVATE_ROOT),) -ifdef FIRM_USE_PRODUCT_KEYS -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo.der' \ - -DHWID_PRIVKEY='private_HWID.der' -else -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo_dev.der' \ - -DHWID_PRIVKEY='private_HWID_dev.der' -endif -endif - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \ - -DPRIVKEY_PATH='$(TWL_KEYSDIR)/rsa' \ - -DCARD_REGION='$(CARD_REGION)' \ - -DDISABLE_DEBUG='$(SYSM_DISABLE_DEBUG)' - -MAKETAD_FLAGS += -s - -SYSMENU_LIBS = \ - libnamut$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - liblcfg$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = -#INSTALL_TARGETS = -INSTALL_DIR = $(SDK_NMENU_DATADIR) - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/TestComponent/ARM9.TWL/include/graphics.h b/build/tests/TestComponent/ARM9.TWL/include/graphics.h deleted file mode 100644 index ddd8c4f6..00000000 --- a/build/tests/TestComponent/ARM9.TWL/include/graphics.h +++ /dev/null @@ -1,46 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: graphics.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef GRAPHICS_H_ -#define GRAPHICS_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -void InitGraphics(void); -void DrawLine(s16 sx, s16 sy, s16 ex, s16 ey, GXRgb color); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* GRAPHICS_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TestComponent/ARM9.TWL/include/kami_font.h b/build/tests/TestComponent/ARM9.TWL/include/kami_font.h deleted file mode 100644 index d9855fd0..00000000 --- a/build/tests/TestComponent/ARM9.TWL/include/kami_font.h +++ /dev/null @@ -1,95 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_font.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef KAMI_FONT_H_ -#define KAMI_FONT_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -extern u8 prog_state; -enum -{ STATE_NONE, STATE_SELECT, STATE_KS_PARENTINIT, STATE_KS_PARENT, STATE_KS_CHILDINIT, - STATE_KS_CHILDSCAN, STATE_KS_CHILD -}; -extern OSHeapHandle heapHandle; // Heapnh; - -extern const u16 BgScDataMain[32 * 24]; -extern const u16 BgScDataSub[32 * 24]; -extern const u32 sampleCharData[8 * 0x100]; -extern const u16 PlttDataObj[16][16]; -extern const u16 PlttDataMain[16][16]; -extern const u16 PlttDataSub[16][16]; - -void kamiFontInit(void); -void kamiFontClear(void); -void kamiFontClearMain(void); -void kamiFontPut(u16 x, u16 y, u16 color, u16 no); -void kamiFontPrintf(s16 x, s16 y, u8 color, char *text, ...); -void kamiFontPrintfMain(s16 x, s16 y, u8 color, char *text, ...); -void kamiFontFill(s16 x, s16 y, u8 color, s16 value, s32 length); -void kamiFontFillChar(int lineNo, u8 color1, u8 color2); -void kamiFontLoadScreenData(void); -void kamiFontPrintfConsole(u8 color, const char *text, ...); -void kamiFontPrintfConsoleEx(u8 color, const char *text, ...); - -// ʃR\[ppbg -#define CONSOLE_ORANGE 0 -#define CONSOLE_RED 1 -#define CONSOLE_GREEN 2 - -// ʃtHgppbg -#define FONT_COLOR_BLACK 0 -#define FONT_COLOR_RED 1 -#define FONT_COLOR_GREEN 2 -#define FONT_COLOR_BLUE 3 -#define FONT_COLOR_YELLOW 4 -#define FONT_COLOR_CYAN 5 -#define FONT_COLOR_PURPLE 6 - -// ʔwippbg -#define BG_COLOR_TRANS 0 -#define BG_COLOR_WHITE 1 -#define BG_COLOR_BLACK 2 -#define BG_COLOR_GRAY 3 -#define BG_COLOR_PURPLE 4 -#define BG_COLOR_PINK 5 -#define BG_COLOR_BLUE 6 -#define BG_COLOR_GREEN 7 -#define BG_COLOR_VIOLET 8 -#define BG_COLOR_RED 9 -#define BG_COLOR_YELLOW 10 -#define BG_COLOR_BROWN 11 - -#define BG_COLOR_NONE 0xff - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* KAMI_FONT_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TestComponent/ARM9.TWL/include/kami_pxi.h b/build/tests/TestComponent/ARM9.TWL/include/kami_pxi.h deleted file mode 100644 index a9ca7a50..00000000 --- a/build/tests/TestComponent/ARM9.TWL/include/kami_pxi.h +++ /dev/null @@ -1,123 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_pxi.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef TWL_KAMI_TEST_KAMITEST_H_ -#define TWL_KAMI_TEST_KAMITEST_H_ - -#include "fifo.h" - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -// ʒ` -typedef enum KAMIResult -{ - KAMI_RESULT_SUCCESS = 0, - KAMI_RESULT_SUCCESS_TRUE = 0, - KAMI_RESULT_SUCCESS_FALSE, - KAMI_RESULT_INVALID_COMMAND, - KAMI_RESULT_INVALID_PARAMETER, - KAMI_RESULT_ILLEGAL_STATUS, - KAMI_RESULT_BUSY, - KAMI_RESULT_FATAL_ERROR, - KAMI_RESULT_SEND_ERROR, - KAMI_RESULT_MAX -} -KAMIResult; - - -typedef enum { - FORMAT_MODE_QUICK, // QuicktH[}bg - FORMAT_MODE_FULL // FulltH[}bg(ep[eBV0xFFŖ߂j -} FormatMode; - -// R[obN -typedef void (*KAMICallback)(KAMIResult result, void *arg); - - -void KamiPxiInit( void ); - -KAMIResult ExeFormatAsync(FormatMode format_mode, KAMICallback callback); -KAMIResult ExeFormat(FormatMode format_mode); -KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read); -KAMIResult kamiMcuWriteFirm(void* buffer ); -KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read); -KAMIResult kamiARM7Io(u32 addr, u32* buffer, u32 value, BOOL is_read); -KAMIResult kamiCDC_GoDsMode( void ); -KAMIResult kamiClearNandErrorLog( void ); -KAMIResult kamiGetCameraModuleTypesAsync( CameraModuleTypes *pTypes, KAMICallback callback, void* arg ); -KAMIResult kamiGetCameraModuleTypes( CameraModuleTypes *pTypes ); -KAMIResult kamiGetNandCID( void* buffer ); -KAMIResult kamiCodecIo(u8 page, u8 reg_no, u8* buffer, u8 value, BOOL is_read); - -// (dv) -// ARM7ǂݏ邽߃[hOInvalidateACgO̓tbVĂB -// -static KAMIResult kamiNandRead(u32 block, void* buffer, u32 count) -{ - return kamiNandIo(block, buffer, count, TRUE); -} -static KAMIResult kamiNandWrite(u32 block, void* buffer, u32 count) -{ - return kamiNandIo(block, buffer, count, FALSE); -} -static KAMIResult kamiMcuRead(u8 reg_no, void* buffer) -{ - return kamiMcuIo((u32)reg_no, buffer, 0, TRUE); -} -static KAMIResult kamiMcuWrite(u8 reg_no, u8 value) -{ - return kamiMcuIo((u32)reg_no, NULL, (u32)value, FALSE); -} -static KAMIResult kamiARM7Read(u32 addr, void* buffer) -{ - return kamiARM7Io(addr, buffer, 0, TRUE); -} -static KAMIResult kamiARM7Write(u32 addr, u8 value) -{ - return kamiARM7Io(addr, NULL, value, FALSE); -} - -static KAMIResult kamiCodecRead(u8 page, u8 reg_no, u8* buffer) -{ - return kamiCodecIo(page, reg_no, buffer, 0, TRUE); -} - -static KAMIResult kamiCodecWrite(u8 page, u8 reg_no, u8 value) -{ - return kamiCodecIo(page, reg_no, NULL, value, FALSE); -} - -/*===========================================================================*/ - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* TWL_KAMI_TEST_KAMITEST_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TestComponent/ARM9.TWL/include/keypad.h b/build/tests/TestComponent/ARM9.TWL/include/keypad.h deleted file mode 100644 index 2f5a1602..00000000 --- a/build/tests/TestComponent/ARM9.TWL/include/keypad.h +++ /dev/null @@ -1,48 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: keypad.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef KAMI_KEY_PAD_H_ -#define KAMI_KEY_PAD_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -void kamiPadRead(void); -BOOL kamiPadIsTrigger(u16 key); -BOOL kamiPadIsRepeatTrigger(u16 key); -BOOL kamiPadIsPress(u16 key); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* KAMI_KEY_PAD_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TestComponent/ARM9.TWL/main.rsf b/build/tests/TestComponent/ARM9.TWL/main.rsf deleted file mode 100644 index 7d39d6cb..00000000 --- a/build/tests/TestComponent/ARM9.TWL/main.rsf +++ /dev/null @@ -1,232 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - RomVersion 2 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 2G - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping MAP_TS_SCR - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # CommonClientKey: launcher deliver common client Key [TRUE/FALSE] - # - CommonClientKey TRUE - - # - # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] - # - HwAESSlotB TRUE - - # - # HwAESSlotC: launcher deliver HW AES slot C setting [TRUE/FALSE] - # - HwAESSlotC TRUE - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - NANDAccess TRUE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SCFG: scfg lock [TRUE/FALSE] - # - LockSCFG FALSE - - # - # DisableDebug FŏIROMł́AsɃfobOłȂ悤TRUEɂKv܂B - # - DisableDebug $(DISABLE_DEBUG) - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType System - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Data only title : [TRUE/FALSE] - # don't have to edit - DataOnly FALSE - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL -# HostRoot $(TWL_IPL_RED_ROOT)/build/systemMenu_tools/NandInitializerRed/data -# Root /data -# File cert.sys -# HostRoot $(PRIVKEY_PATH) -# Root /key -# File $(HWINFO_PRIVKEY) $(HWID_PRIVKEY) -} diff --git a/build/tests/TestComponent/ARM9.TWL/src/font_data.c b/build/tests/TestComponent/ARM9.TWL/src/font_data.c deleted file mode 100644 index aa1ba501..00000000 --- a/build/tests/TestComponent/ARM9.TWL/src/font_data.c +++ /dev/null @@ -1,734 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: font_data.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include - -/*---------------------- afXN[ ---------------------------*/ - -const u16 BgScDataMain[32 * 24] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -const u16 BgScDataSub[32 * 24] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -/*---------------------- pbgf[^ ---------------------------*/ -#define RGB555(r,g,b) (b<<10|g<<5|r) - -const u16 PlttDataObj[16][16] = { - {RGB555( 0, 0, 0), RGB555(31, 10, 0), RGB555(31, 0, 0), RGB555(5, 5, 20),}, // Black - {RGB555(31, 31, 31), RGB555(31, 0, 0), RGB555(31, 0, 0), RGB555(31, 0, 0),}, // Red - {RGB555(31, 31, 31), RGB555(0, 31, 0), RGB555(0, 31, 0), RGB555(0, 31, 0),}, // Green - {RGB555(31, 31, 31), RGB555(0, 0, 31), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue - {RGB555(31, 31, 31), RGB555(31, 31, 0), RGB555(31, 31, 0), RGB555(31, 31, 0),}, // Yellow - {RGB555(31, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31),}, // Cyan - {RGB555(31, 31, 31), RGB555(31, 0, 31), RGB555(31, 0, 31), RGB555(31, 0, 31),}, // Purple - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White -}; - -// ʃR\[pbg -const u16 PlttDataMain[16][16] = { - {RGB555( 0, 0, 0), RGB555(31, 10, 0), RGB555(0, 0, 0), RGB555(0, 0, 0),}, // Orange - {RGB555(31, 31, 31), RGB555(31, 0, 0), RGB555(31, 0, 0), RGB555(31, 0, 0),}, // Red - {RGB555(31, 31, 31), RGB555(0, 31, 0), RGB555(0, 31, 0), RGB555(0, 31, 0),}, // Green - {RGB555(31, 31, 31), RGB555(0, 0, 31), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue - {RGB555(31, 31, 31), RGB555(31, 31, 0), RGB555(31, 31, 0), RGB555(31, 31, 0),}, // Yellow - {RGB555(31, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31),}, // Cyan - {RGB555(31, 31, 31), RGB555(31, 0, 31), RGB555(31, 0, 31), RGB555(31, 0, 31),}, // Purple - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555( 0, 0, 0), RGB555(0, 0, 0), RGB555(0, 0, 0), RGB555(0, 0, 0),}, // Black -}; - -// ʃR\[pbg -const u16 PlttDataSub[16][16] = { - {RGB555(31, 31, 31), RGB555( 0, 0, 0), RGB555(25, 25, 25), RGB555(31, 31, 31),}, // Black - {RGB555(31, 31, 31), RGB555(21, 0, 0), RGB555(31, 0, 0), RGB555(31, 0, 0),}, // Red - {RGB555(31, 31, 31), RGB555( 0, 21, 0), RGB555(0, 31, 0), RGB555(0, 31, 0),}, // Green - {RGB555(31, 31, 31), RGB555( 0, 0, 21), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue - {RGB555(31, 31, 31), RGB555(21, 21, 0), RGB555(31, 31, 0), RGB555(31, 31, 0),}, // Yellow - {RGB555(31, 31, 31), RGB555(0, 21, 21), RGB555(0, 31, 31), RGB555(0, 31, 31),}, // Cyan - {RGB555(31, 31, 31), RGB555(21, 0, 21), RGB555(31, 0, 31), RGB555(31, 0, 31),}, // Purple - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(20, 20, 20), RGB555(20, 20, 20), RGB555(20, 20, 20),}, // Gray - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - - // wiJ[͂16ԃpbg - // D ނ炳 sN ݂ Ž - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555( 0, 0, 0), RGB555(20, 20, 20), RGB555(31, 15, 31), RGB555(31, 20, 20), RGB555(20, 29, 31), RGB555(20, 31, 20), RGB555(21, 21, 31), RGB555(31, 0, 0), RGB555(31, 31, 10), RGB555(25, 15, 15), RGB555(31, 31, 31), RGB555(31, 31, 31), } // White -}; - -/*---------------------- LN^f[^ -------------------------*/ - -const u32 sampleCharData[8 * 0x100] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0000h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11111111, 0x11111111, // 0001h use for import progress bar - 0x11111111, 0x11111111, 0x00000000, 0x00000000, - 0x00000000, 0x01011010, 0x01010010, 0x00010010, // 0002h - 0x00100010, 0x00100010, 0x00100001, 0x00100001, - 0x00000000, 0x01010001, 0x01010001, 0x01111111, // 0003h - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 0004h - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01010000, 0x01010100, 0x00001010, // 0005h - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011000, 0x01011000, 0x01111111, // 0006h - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01010010, 0x01101111, 0x01010010, // 0007h - 0x00010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x01010010, 0x01011111, 0x00000100, // 0008h - 0x00011111, 0x00001000, 0x00000001, 0x00011110, - 0x00000000, 0x01010000, 0x01011000, 0x00000110, // 0009h - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x01010000, 0x01111101, 0x00010001, // 000ah - 0x00010001, 0x00010001, 0x00010001, 0x00001010, - 0x00000000, 0x01010000, 0x01011110, 0x00100000, // 000bh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010100, 0x01011111, 0x00001000, // 000ch - 0x00010000, 0x00000001, 0x00000001, 0x00011110, - 0x00000000, 0x01010001, 0x01010001, 0x00000001, // 000dh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00011000, // 000eh - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x01010010, 0x01111111, 0x00010010, // 000fh - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00001110, 0x01010100, 0x01010010, // 0010h - 0x00111111, 0x00000100, 0x00000100, 0x00011000, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 0011h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x01010100, 0x01011111, 0x00000010, // 0012h - 0x00011110, 0x00100001, 0x00100000, 0x00011110, - 0x00000000, 0x01010000, 0x01011100, 0x00100011, // 0013h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00010000, // 0014h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x01010010, 0x01010010, 0x00001100, // 0015h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010001, 0x01111101, 0x00010001, // 0016h - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01010100, 0x01010011, 0x01110010, // 0017h - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01011110, 0x01011000, 0x00000100, // 0018h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01010000, 0x01011100, 0x00010010, // 0019h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011101, 0x01010001, 0x00111101, // 001ah - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x01110001, 0x01011101, 0x00110001, // 001bh - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01110100, 0x01010011, 0x00110010, // 001ch - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01101110, 0x01011000, 0x00100100, // 001dh - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01110000, 0x01011100, 0x00110010, // 001eh - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x01010001, 0x00111101, // 001fh - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0020h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 0021h - 0x00001000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x01101100, 0x01001000, 0x00100100, // 0022h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00100100, 0x01111111, 0x00100100, // 0023h - 0x00100100, 0x01111111, 0x00010010, 0x00010010, - 0x00000000, 0x00001000, 0x01111110, 0x00001001, // 0024h - 0x00111110, 0x01001000, 0x00111111, 0x00001000, - 0x00000000, 0x01000010, 0x00100101, 0x00010010, // 0025h - 0x00001000, 0x00100100, 0x01010010, 0x00100001, - 0x00000000, 0x00001110, 0x00010001, 0x00001001, // 0026h - 0x01000110, 0x00101001, 0x00110001, 0x01001110, - 0x00000000, 0x00011000, 0x00010000, 0x00001000, // 0027h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01110000, 0x00001000, 0x00000100, // 0028h - 0x00000100, 0x00000100, 0x00001000, 0x01110000, - 0x00000000, 0x00000111, 0x00001000, 0x00010000, // 0029h - 0x00010000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x00001000, 0x01001001, 0x00101010, // 002ah - 0x00011100, 0x00101010, 0x01001001, 0x00001000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 002bh - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002ch - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002dh - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002eh - 0x00000000, 0x00000000, 0x00000000, 0x00001100, - 0x00000000, 0x01000000, 0x00100000, 0x00010000, // 002fh - 0x00001000, 0x00000100, 0x00000010, 0x00000001, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0030h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00011100, 0x00010000, 0x00010000, // 0031h - 0x00010000, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0032h - 0x00111110, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0033h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00100000, 0x00110000, 0x00101000, // 0034h - 0x00100100, 0x00100010, 0x01111111, 0x00100000, - 0x00000000, 0x01111111, 0x00000001, 0x00111111, // 0035h - 0x01000000, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x00000001, 0x00111111, // 0036h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00100000, 0x00100000, // 0037h - 0x00010000, 0x00010000, 0x00001000, 0x00001000, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0038h - 0x00111110, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0039h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003ah - 0x00000000, 0x00000000, 0x00001100, 0x00000000, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003bh - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x01100000, 0x00011000, 0x00000110, // 003ch - 0x00000001, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00000000, 0x01111111, 0x00000000, // 003dh - 0x00000000, 0x00000000, 0x01111111, 0x00000000, - 0x00000000, 0x00000011, 0x00001100, 0x00110000, // 003eh - 0x01000000, 0x00110000, 0x00001100, 0x00000011, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 003fh - 0x00110000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x00011100, 0x00100010, 0x01001001, // 0040h - 0x01010101, 0x01010101, 0x01010101, 0x00111010, - 0x00000000, 0x00001000, 0x00010100, 0x00010100, // 0041h - 0x00100010, 0x00111110, 0x01000001, 0x01000001, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0042h - 0x00111111, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0043h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x00011111, 0x00100001, 0x01000001, // 0044h - 0x01000001, 0x01000001, 0x00100001, 0x00011111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0045h - 0x01111111, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0046h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0047h - 0x01111001, 0x01000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0048h - 0x01111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x00001000, 0x00001000, // 0049h - 0x00001000, 0x00001000, 0x00001000, 0x00111110, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 004ah - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01100001, 0x00011001, 0x00000101, // 004bh - 0x00000011, 0x00000101, 0x00011001, 0x01100001, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 004ch - 0x00000001, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01000001, 0x01100011, 0x01010101, // 004dh - 0x01001001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x01000001, 0x01000011, 0x01000101, // 004eh - 0x01001001, 0x01010001, 0x01100001, 0x01000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 004fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0050h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 0051h - 0x01000001, 0x01011001, 0x00100010, 0x01011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0052h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x01000001, 0x00000001, // 0053h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00001000, 0x00001000, // 0054h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0055h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01000001, 0x01000001, 0x00100010, // 0056h - 0x00100010, 0x00010100, 0x00010100, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0057h - 0x01001001, 0x01010101, 0x01100011, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0058h - 0x00001000, 0x00010100, 0x00100010, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0059h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01111111, 0x00100000, 0x00010000, // 005ah - 0x00001000, 0x00000100, 0x00000010, 0x01111111, - 0x00000000, 0x01111100, 0x00000100, 0x00000100, // 005bh - 0x00000100, 0x00000100, 0x00000100, 0x01111100, - 0x00000000, 0x00100010, 0x00010100, 0x00111110, // 005ch - 0x00001000, 0x00111110, 0x00001000, 0x00001000, - 0x00000000, 0x00011111, 0x00010000, 0x00010000, // 005dh - 0x00010000, 0x00010000, 0x00010000, 0x00011111, - 0x00000000, 0x00001000, 0x00010100, 0x00100010, // 005eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005fh - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x00010000, 0x00001000, 0x00011000, // 0060h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00011110, 0x00100001, // 0061h - 0x00111110, 0x00100001, 0x00100001, 0x01011110, - 0x00000000, 0x00000001, 0x00000001, 0x00111111, // 0062h - 0x01000001, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00000000, 0x00111100, 0x01000010, // 0063h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000000, 0x01000000, 0x01111110, // 0064h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0065h - 0x01111111, 0x00000001, 0x01000001, 0x00111110, - 0x00000000, 0x00110000, 0x00001000, 0x00001000, // 0066h - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x01111110, 0x01000001, // 0067h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0068h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00001000, 0x00000000, 0x00001000, // 0069h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00100000, 0x00000000, 0x00100000, // 006ah - 0x00100000, 0x00100001, 0x00100001, 0x00011110, - 0x00000000, 0x00000001, 0x00000001, 0x01100001, // 006bh - 0x00011001, 0x00000111, 0x00011001, 0x01100001, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 006ch - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00110111, 0x01001001, // 006dh - 0x01001001, 0x01001001, 0x01001001, 0x01001001, - 0x00000000, 0x00000000, 0x00111111, 0x01000001, // 006eh - 0x01000001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00000000, 0x00011100, 0x00100010, // 006fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00000000, 0x00111101, 0x01000011, // 0070h - 0x01000001, 0x01000011, 0x00111101, 0x00000001, - 0x00000000, 0x00000000, 0x01011110, 0x01100001, // 0071h - 0x01000001, 0x01100001, 0x01011110, 0x01000000, - 0x00000000, 0x00000000, 0x00110001, 0x00001101, // 0072h - 0x00000011, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0073h - 0x00001110, 0x00110000, 0x01000001, 0x00111110, - 0x00000000, 0x00000100, 0x00000100, 0x01111111, // 0074h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0075h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0076h - 0x00100010, 0x00100010, 0x00010100, 0x00001000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0077h - 0x01001001, 0x00101010, 0x00101010, 0x00010100, - 0x00000000, 0x00000000, 0x00100001, 0x00010010, // 0078h - 0x00001100, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0079h - 0x00100010, 0x00011100, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111111, 0x00010000, // 007ah - 0x00001000, 0x00000100, 0x00000010, 0x00111111, - 0x00000000, 0x00001000, 0x00011110, 0x01100100, // 007bh - 0x00011000, 0x00100100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x00011110, 0x00000100, // 007ch - 0x00011110, 0x00110101, 0x00101101, 0x00010010, - 0x00000000, 0x00000000, 0x00000000, 0x00010001, // 007dh - 0x00100001, 0x00100001, 0x00000001, 0x00000010, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007eh - 0x00011110, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007fh - 0x00111110, 0x00010000, 0x00001100, 0x00110010, - 0x00000000, 0x00000000, 0x00000100, 0x00101111, // 0080h - 0x01000100, 0x00011110, 0x00100101, 0x00010110, - 0x00000000, 0x00000000, 0x00001010, 0x00011110, // 0081h - 0x00101011, 0x00100010, 0x00010100, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00011101, // 0082h - 0x00101011, 0x00101001, 0x00011001, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00111000, // 0083h - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00000000, 0x00000000, 0x00011100, // 0084h - 0x00100011, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000110, 0x01001001, 0x00110000, // 0085h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000100, 0x00111111, 0x00000100, // 0086h - 0x00111110, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000000, 0x00100001, 0x01000001, // 0087h - 0x01000001, 0x01000001, 0x00000001, 0x00000010, - 0x00000000, 0x00111100, 0x00000000, 0x00111110, // 0088h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00011100, 0x00000000, 0x00111110, // 0089h - 0x00010000, 0x00001000, 0x00010100, 0x01100010, - 0x00000000, 0x00100100, 0x01011111, 0x00000100, // 008ah - 0x00111110, 0x01000101, 0x01000101, 0x00100010, - 0x00000000, 0x00100010, 0x01001111, 0x01010010, // 008bh - 0x01010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x00000100, 0x00111110, 0x00001000, // 008ch - 0x00111110, 0x00010000, 0x00000010, 0x00111100, - 0x00000000, 0x00100000, 0x00011000, 0x00000110, // 008dh - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x00100000, 0x01111101, 0x00100001, // 008eh - 0x00100001, 0x00100001, 0x00100001, 0x00010010, - 0x00000000, 0x00011110, 0x00100000, 0x00000000, // 008fh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00001000, 0x01111111, 0x00010000, // 0090h - 0x00100000, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0091h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00010000, 0x01111111, 0x00011000, // 0092h - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 0093h - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x00111100, 0x00010000, 0x00001100, // 0094h - 0x01111111, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000100, 0x00011111, 0x00000100, // 0095h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00001000, 0x01111111, 0x00000100, // 0096h - 0x00111100, 0x01000010, 0x01000000, 0x00111100, - 0x00000000, 0x00000000, 0x00011100, 0x00100011, // 0097h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01111111, 0x00010000, 0x00001000, // 0098h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000010, 0x00110010, 0x00001100, // 0099h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00100100, 0x01001111, 0x01000010, // 009ah - 0x00010001, 0x00111100, 0x00010010, 0x00001100, - 0x00000000, 0x00000010, 0x01111010, 0x01000010, // 009bh - 0x00000010, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00100010, 0x00111110, 0x01010010, // 009ch - 0x01001011, 0x01101101, 0x01010101, 0x00110010, - 0x00000000, 0x00110010, 0x01001011, 0x01000110, // 009dh - 0x01000110, 0x01110010, 0x01001011, 0x00110010, - 0x00000000, 0x00011100, 0x00101010, 0x01001001, // 009eh - 0x01001001, 0x01000101, 0x01000101, 0x00110010, - 0x00000000, 0x00100001, 0x01111101, 0x00100001, // 009fh - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00000100, 0x00100011, 0x01100010, // 00a0h - 0x00100001, 0x00100001, 0x00010010, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a1h - 0x00000000, 0x00000100, 0x00001010, 0x00000100, - 0x00000000, 0x01110000, 0x00010000, 0x00010000, // 00a2h - 0x00010000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a3h - 0x00001000, 0x00001000, 0x00001000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a4h - 0x00000000, 0x00000010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00011000, // 00a5h - 0x00011000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x01111111, // 00a6h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00111111, 0x00100000, // 00a7h - 0x00010100, 0x00001100, 0x00000100, 0x00000010, - 0x00000000, 0x00000000, 0x00100000, 0x00100000, // 00a8h - 0x00010000, 0x00001111, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000100, 0x00111111, // 00a9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00aah - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00000000, 0x00010000, 0x00111111, // 00abh - 0x00011000, 0x00010100, 0x00010010, 0x00011001, - 0x00000000, 0x00000000, 0x00000010, 0x00111111, // 00ach - 0x00100010, 0x00010010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00adh - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00aeh - 0x00111110, 0x00100000, 0x00100000, 0x00111110, - 0x00000000, 0x00000000, 0x00100101, 0x00101010, // 00afh - 0x00101010, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00b0h - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x00101000, // 00b1h - 0x00011000, 0x00001000, 0x00001000, 0x00000100, - 0x00000000, 0x01000000, 0x00100000, 0x00011000, // 00b2h - 0x00010111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00001000, 0x01111111, 0x01000001, // 00b3h - 0x01000001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000000, 0x00111110, 0x00001000, // 00b4h - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00100000, 0x01111111, 0x00110000, // 00b5h - 0x00101000, 0x00100100, 0x00100010, 0x00110001, - 0x00000000, 0x00000100, 0x01111111, 0x01000100, // 00b6h - 0x01000100, 0x01000100, 0x01000010, 0x00100001, - 0x00000000, 0x00000100, 0x00111111, 0x00001000, // 00b7h - 0x01111111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x01111100, 0x01000100, 0x01000100, // 00b8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000010, 0x01111110, 0x00100010, // 00b9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00bah - 0x01000000, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 00bbh - 0x00100010, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000011, 0x00000100, 0x01000011, // 00bch - 0x01000100, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x01111111, 0x01000000, 0x00100000, // 00bdh - 0x00010000, 0x00011000, 0x00100100, 0x01000011, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00beh - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x01000001, 0x01000010, 0x01000000, // 00bfh - 0x00100000, 0x00100000, 0x00011000, 0x00000110, - 0x00000000, 0x01111110, 0x01000010, 0x01001110, // 00c0h - 0x01110001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x01100000, 0x00011110, 0x00010000, // 00c1h - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01000101, 0x01001010, 0x01001010, // 00c2h - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00c3h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000010, 0x00000010, 0x00000110, // 00c4h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x00010000, 0x00010000, 0x01111111, // 00c5h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111110, 0x00000000, // 00c6h - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000100, // 00c7h - 0x00101000, 0x00010000, 0x00101000, 0x01000110, - 0x00000000, 0x00001000, 0x01111111, 0x00100000, // 00c8h - 0x00010000, 0x00011100, 0x01101011, 0x00001000, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 00c9h - 0x00100000, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x00010010, 0x00100010, 0x00100010, // 00cah - 0x01000010, 0x01000010, 0x01000001, 0x01000001, - 0x00000000, 0x00000001, 0x00000001, 0x01111111, // 00cbh - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cch - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000100, 0x00001010, // 00cdh - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x01111111, // 00ceh - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cfh - 0x00100010, 0x00010100, 0x00001000, 0x00010000, - 0x00000000, 0x00001110, 0x01110000, 0x00001110, // 00d0h - 0x01110000, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00001000, 0x00001000, 0x00000100, // 00d1h - 0x00000100, 0x00100010, 0x01000010, 0x01111111, - 0x00000000, 0x01000000, 0x01000000, 0x00100100, // 00d2h - 0x00101000, 0x00010000, 0x00101100, 0x01000011, - 0x00000000, 0x01111111, 0x00000100, 0x01111111, // 00d3h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00d4h - 0x00100010, 0x00010100, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00d5h - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00d6h - 0x01111110, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00d7h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00d8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00001010, 0x00001010, 0x00001010, // 00d9h - 0x01001010, 0x01001010, 0x00101010, 0x00011001, - 0x00000000, 0x00000010, 0x00000010, 0x01000010, // 00dah - 0x01000010, 0x00100010, 0x00010010, 0x00001110, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dbh - 0x01000001, 0x01000001, 0x01000001, 0x01111111, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dch - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000011, 0x01000100, 0x01000000, // 00ddh - 0x01000000, 0x00100000, 0x00010000, 0x00001111, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00deh 0 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00dfh 1 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00011110, 0x00001000, 0x00000100, // 00e0h 2 - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x00000000, 0x00001100, 0x00010010, // 00e1h 3 - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x00100001, 0x01111101, // 00e2h 4 - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00111100, 0x00010000, 0x00111100, // 00e3h 5 - 0x00010000, 0x00011100, 0x00110010, 0x00001100, - 0x00000000, 0x00001110, 0x00101000, 0x00101000, // 00e4h 6 - 0x00111110, 0x01100101, 0x00100101, 0x00010010, - 0x00000000, 0x00000100, 0x00101111, 0x01000100, // 00e5h 7 - 0x00000110, 0x01000101, 0x01000101, 0x00111110, - 0x00000000, 0x00100010, 0x00100010, 0x00111110, // 00e6h 8 - 0x01010010, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000100, 0x00011111, 0x00000010, // 00e7h 9 - 0x00011111, 0x01000010, 0x01000010, 0x00111100, - 0x00000000, 0x00010010, 0x00111110, 0x01010011, // 00e8h 10 - 0x01000010, 0x00100100, 0x00000100, 0x00000100, - 0x00000000, 0x00001000, 0x00111101, 0x01001011, // 00e9h 11 - 0x01001001, 0x01001001, 0x00111000, 0x00000100, - 0x00000000, 0x00001000, 0x00111000, 0x00001000, // 00eah 12 - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00011000, 0x00100000, 0x00000100, // 00ebh 13 - 0x00111010, 0x01000110, 0x01000000, 0x00111000, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00ech 14 - 0x01000110, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00edh 15 - 0x01000011, 0x01001100, 0x01010010, 0x00111100, - 0x00000000, 0x00100010, 0x00110011, 0x00101010, // 00eeh 16 - 0x00100110, 0x00100010, 0x00100011, 0x01000010, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00efh 17 - 0x01000011, 0x01000000, 0x01000010, 0x00111100, - 0x00000000, 0x00000010, 0x00111011, 0x01000110, // 00f0h 18 - 0x01000010, 0x01000011, 0x01000010, 0x00110010, - 0x00000000, 0x00000100, 0x00000100, 0x00000010, // 00f1h 19 - 0x01000110, 0x01000101, 0x01000101, 0x00111001, - 0x00000000, 0x01010100, 0x01111111, 0x00100100, // 00f2h 20 - 0x00100100, 0x00100100, 0x00100010, 0x00010001, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 00f3h 21 - 0x00111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01011110, 0x01100010, 0x00100010, // 00f4h 22 - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010010, 0x01111110, 0x00100010, // 00f5h 23 - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - - 0x33330000, - 0x33330000, - 0x33000000, - 0x33000000, // 00f6h - 0x33000000, - 0x33000000, - 0x33330000, - 0x33330000, - - - 0x00020000, // 00f7h - 0x00020000, - 0x00020000, - 0x22222222, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - - 0x00000000, // 00f8h - 0x00000000, - 0x00000000, - 0x00000000, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - - 0x11111111, // 00f9h - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - - 0x11111111, // 00fah - 0x11111111, - 0x11111111, - 0x11111111, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - - 0x00000000, // 00fbh - 0x00000000, - 0x00000000, - 0x22222222, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - - 0x00020000, // 00fch - 0x00020000, - 0x00020000, - 0x22222222, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - - 0x00020000, // 00fdh - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - - 0x00000000, // 00feh - 0x00000000, - 0x00000000, - 0x22222222, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - - 0x00020000, - 0x00220000, - 0x02122222, - 0x21111112, - 0x21111112, - 0x02122222, - 0x00220000, - 0x00020000, - - - -/* - 0x00022222, - 0x00002112, - 0x00021112, - 0x00211122, - 0x02111202, - 0x21112000, - 0x02120000, - 0x00200000, -*/ - -/* - 0x00000000, 0x01011110, 0x01010000, 0x00111111, // 00ffh - 0x00001000, 0x00001000, 0x00001000, 0x00000110 -*/ -}; - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TestComponent/ARM9.TWL/src/graphics.c b/build/tests/TestComponent/ARM9.TWL/src/graphics.c deleted file mode 100644 index 1de138e9..00000000 --- a/build/tests/TestComponent/ARM9.TWL/src/graphics.c +++ /dev/null @@ -1,160 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: praphics.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -//#include -#include -#include "kami_font.h" -#include "graphics.h" - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: InitGraphics - - Description: \̏ - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void -InitGraphics(void) -{ - GX_DispOff(); - GXS_DispOff(); - - //---- VRAM NA - GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); - MI_CpuClearFast((void *)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE); - - //---- OAMƃpbgNA - MI_CpuFillFast((void *)HW_OAM, 192, HW_OAM_SIZE); - MI_CpuClearFast((void *)HW_PLTT, HW_PLTT_SIZE); - MI_CpuFillFast((void *)HW_DB_OAM, 192, HW_DB_OAM_SIZE); - MI_CpuClearFast((void *)HW_DB_PLTT, HW_DB_PLTT_SIZE); - - //---- naioN̐ݒ - GX_SetBankForOBJ(GX_VRAM_OBJ_128_A); - GX_SetBankForSubOBJ(GX_VRAM_SUB_OBJ_128_D); - - //---- afoN̐ݒ - GX_SetBankForBG(GX_VRAM_BG_128_B); - GX_SetBankForSubBG(GX_VRAM_SUB_BG_128_C); - - //---- \[hݒ - GX_SetGraphicsMode (GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_3D); - GX_SetVisiblePlane (GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_OBJ); - GXS_SetVisiblePlane(GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_OBJ); - - //---- 3D - G3X_Init(); - G3X_InitMtxStack(); - G2_SetBG0Priority(0); - G3X_AlphaTest(FALSE, 0); - G3X_AntiAlias(TRUE); - G3X_EdgeMarking(FALSE); - G3X_SetFog(FALSE, (GXFogBlend)0, (GXFogSlope)0, 0); - G3X_SetClearColor(0, 0, 0x7fff, 63, FALSE); - G3_ViewPort(0, 0, 255, 191); - G3_MtxMode(GX_MTXMODE_POSITION_VECTOR); - - //---- 32KoCgOBJ2D}bv[hŎgp - GX_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_2D); - - // XN[ItZbgyуLN^[ItZbg̐ݒ - GX_SetBGScrOffset(GX_BGSCROFFSET_0x00000); - GX_SetBGCharOffset(GX_BGCHAROFFSET_0x10000); - - G2_SetBG1Control( - GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0x0000 , - GX_BG_CHARBASE_0x00000, - GX_BG_EXTPLTT_01 - ); - - G2S_SetBG0Control( - GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0x0000 , - GX_BG_CHARBASE_0x04000, - GX_BG_EXTPLTT_01 - ); - - G2S_SetBG1Control( - GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0x2000 , - GX_BG_CHARBASE_0x04000, - GX_BG_EXTPLTT_01 - ); - - G2_BG1Mosaic(FALSE); - G2S_BG1Mosaic(FALSE); - - //---- f[^[h - GX_LoadOBJ ( sampleCharData, 0, sizeof(sampleCharData)); - GX_LoadBG1Char( sampleCharData, 0, sizeof(sampleCharData)); - GX_LoadBGPltt ( PlttDataMain, 0, sizeof(PlttDataMain)); - GX_LoadBG1Scr ( BgScDataMain, 0, sizeof(BgScDataMain)); - GX_LoadOBJPltt( PlttDataObj, 0, sizeof(PlttDataObj)); - - GXS_LoadOBJ ( sampleCharData, 0, sizeof(sampleCharData)); - GXS_LoadBG0Char( sampleCharData, 0, sizeof(sampleCharData)); - GXS_LoadBGPltt ( PlttDataSub, 0, sizeof(PlttDataSub)); - GXS_LoadBG0Scr ( BgScDataSub, 0, sizeof(BgScDataSub)); - GXS_LoadOBJPltt( PlttDataObj, 0, sizeof(PlttDataObj)); - - GX_DispOn(); - GXS_DispOn(); -} - -/*---------------------------------------------------------------------------* - Name: DrawLine - - Description: Op|SŐ` - - Arguments: sx - `悷̊Jn_̂W - sy - `悷̊Jn_̂W - ex - `悷̏I_̂W - ey - `悷̏I_̂W - color - `悷̐F - - Returns: None. - *---------------------------------------------------------------------------*/ -void -DrawLine(s16 sx, s16 sy, s16 ex, s16 ey, GXRgb color) -{ - fx16 fsx = (fx16)(((sx - 128) * 0x1000) / 128); - fx16 fsy = (fx16)(((96 - sy) * 0x1000) / 96); - fx16 fex = (fx16)(((ex - 128) * 0x1000) / 128); - fx16 fey = (fx16)(((96 - ey) * 0x1000) / 96); - - G3_Begin(GX_BEGIN_TRIANGLES); - { - G3_Color( color ); - G3_Vtx(fsx, fsy, 0); - G3_Color( color ); - G3_Vtx(fex, fey, 0); - G3_Color( color ); - G3_Vtx(fsx, fsy, 1); - } - G3_End(); -} diff --git a/build/tests/TestComponent/ARM9.TWL/src/kami_font.c b/build/tests/TestComponent/ARM9.TWL/src/kami_font.c deleted file mode 100644 index fb3818b6..00000000 --- a/build/tests/TestComponent/ARM9.TWL/src/kami_font.c +++ /dev/null @@ -1,407 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_font.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "kami_font.h" - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define SCREEN_DATA_COLOR_PLTT_SHIFT 12 -#define NUM_OF_PRINT_TARGET 2 - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static u8 sXPos; -static u8 sYPos; - -static u32 sBackColorCharData[24*8]; - -static u16 sFontScreenDataMain[32 * 24] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,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 u16 sFontScreenDataSub[24*32] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,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 u16 sBackColorScreenData[32 * 24] = { - 0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de, - 0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df, - 0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0, - 0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1, - 0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2, - 0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3, - 0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4, - 0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5, - 0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6, - 0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7, - 0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8, - 0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9, - 0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea, - 0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb, - 0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec, - 0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed, - 0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee, - 0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef, - 0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0, - 0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1, - 0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2, - 0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3, - 0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4, - 0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5, -}; - -/*---------------------------------------------------------------------------* - ֐錾 - *---------------------------------------------------------------------------*/ - -static void kamiFontReturnConsole( void ); - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: - - Description: - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontInit(void) -{ - // wipLN^f[^ - MI_CpuCopy32( &sampleCharData[8 * 0xde], sBackColorCharData, sizeof(sBackColorCharData) ); - - // wipXN[f[^Zbg - DC_FlushRange ( sBackColorScreenData, sizeof(sBackColorScreenData) ); - GXS_LoadBG1Scr ( sBackColorScreenData, 0, sizeof(sBackColorScreenData) ); -} - -/*---------------------------------------------------------------------------* - Name: - - Description: - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontLoadScreenData(void) -{ - DC_FlushRange ( sFontScreenDataMain, sizeof(sFontScreenDataMain) ); - GX_LoadBG0Scr ( sFontScreenDataMain, 0, sizeof(sFontScreenDataMain) ); - - DC_FlushRange ( sFontScreenDataSub, sizeof(sFontScreenDataSub) ); - GXS_LoadBG0Scr ( sFontScreenDataSub, 0, sizeof(sFontScreenDataSub) ); - - // wiLN^f[^ - DC_FlushRange( sBackColorCharData, sizeof(sBackColorCharData) ); - GXS_LoadBG0Char( sBackColorCharData, 0xde*32, sizeof(sBackColorCharData) ); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontClear - - Description: zXN[NA - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontClear(void) -{ - MI_CpuClear8( sFontScreenDataSub, sizeof(sFontScreenDataSub) ); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontClearMain - - Description: zXN[NA - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontClearMain(void) -{ - MI_CpuClear8( sFontScreenDataMain, sizeof(sFontScreenDataMain) ); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintf - - Description: zXN[ɕzuB32܂ŁB - - Arguments: x - ̐擪zu x W( ~ 8 hbg )B - y - ̐擪zu y W( ~ 8 hbg )B - color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintf(s16 x, s16 y, u8 color, char *text, ...) -{ - va_list vlist; - char temp[32 + 2]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - *(u16 *)(&temp[32]) = 0x0000; - for (i = 0;temp[i] != 0x00; i++) - { - sFontScreenDataSub[((y * 32) + x + i) % (24 * 32)] = - (u16)((color << SCREEN_DATA_COLOR_PLTT_SHIFT) | temp[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintf - - Description: zXN[ɕzuB32܂ŁB - - Arguments: x - ̐擪zu x W( ~ 8 hbg )B - y - ̐擪zu y W( ~ 8 hbg )B - color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintfMain(s16 x, s16 y, u8 color, char *text, ...) -{ - va_list vlist; - char temp[32 + 2]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - *(u16 *)(&temp[32]) = 0x0000; - for (i = 0;temp[i] != 0x00; i++) - { - sFontScreenDataMain[((y * 32) + x + i) % (24 * 32)] = - (u16)((color << SCREEN_DATA_COLOR_PLTT_SHIFT) | temp[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontFillChar - - Description: zXN[ - - Arguments: x - ̐擪zu x W( ~ 8 hbg )B - y - ̐擪zu y W( ~ 8 hbg )B - color - ̐FpbgԍŎwB - value - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontFillChar(int lineNo, u8 color1, u8 color2) -{ - s32 i; - u32 line; - int charNo = 0xde + lineNo; - - if (color1 < 0x10) - { - line = (u32)(0x11111111 * color1); - - for (i = 0;i<4; i++) - { - sBackColorCharData[8 * lineNo + i] = line; - } - } - - if (color2 < 0x10) - { - line = (u32)(0x11111111 * color2); - - for (i = 4;i<8; i++) - { - sBackColorCharData[8 * lineNo + i] = line; - } - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintfConsole - - Description: zR\[ɕzuB256܂ŁB - - Arguments: color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintfConsole(u8 color, const char *text, ...) -{ - va_list vlist; - char temp[256 + 2]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 256, text, vlist); - va_end(vlist); - - // I[lj - *(u16 *)(&temp[256]) = 0x0000; - - for(i=0; temp[i] != 0x00; i++) - { - if (temp[i] == 0x0A) - { - // sR[h - kamiFontReturnConsole(); - } - else - { - // ꕶ - sFontScreenDataMain[((sYPos * 32) + sXPos) % (24 * 32)] = - (u16)((color << SCREEN_DATA_COLOR_PLTT_SHIFT) | temp[i]); - - // XWE[ɓBꍇ͉s - if (++sXPos >= 32) - { - kamiFontReturnConsole(); - } - } - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintfConsoleEx - - Description: zR\[ɕzuB256܂ŁB - OS_Printf‚łɎsB - - Arguments: color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintfConsoleEx(u8 color, const char *text, ...) -{ - va_list vlist; - char temp[256 + 2]; - - va_start(vlist, text); - (void)vsnprintf(temp, 256, text, vlist); - va_end(vlist); - - kamiFontPrintfConsole(color, temp); - OS_TPrintf(temp); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontReturnConsole - - Description: zR\[ɂss - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -kamiFontReturnConsole( void ) -{ - sXPos = 0; - if (sYPos < 23) - { - // ̍s - sYPos++; - } - else - { - // ɍŏIsɓBĂꍇVtgs - MI_CpuCopy32( &sFontScreenDataMain[32], sFontScreenDataMain, sizeof(u16)*32*23 ); - MI_CpuClear32( &sFontScreenDataMain[32*23], sizeof(u16)*32); - } -} - diff --git a/build/tests/TestComponent/ARM9.TWL/src/kami_pxi.c b/build/tests/TestComponent/ARM9.TWL/src/kami_pxi.c deleted file mode 100644 index eb6359ab..00000000 --- a/build/tests/TestComponent/ARM9.TWL/src/kami_pxi.c +++ /dev/null @@ -1,743 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_pxi.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "kami_pxi.h" -#include "fifo.h" - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -// l߂ăRs[ -#define KAMI_PACK_U8(d, s) \ - ((d)[0] = (u8)((*((u8*)s) >> 0) & 0xFF)) - - -#define KAMI_PACK_U16(d, s) \ - ((d)[0] = (u8)((*((u16*)s) >> 0) & 0xFF), \ - (d)[1] = (u8)((*((u16*)s) >> 8) & 0xFF)) - -#define KAMI_PACK_U32(d, s) \ - ((d)[0] = (u8)((*((u32*)s) >> 0) & 0xFF), \ - (d)[1] = (u8)((*((u32*)s) >> 8) & 0xFF), \ - (d)[2] = (u8)((*((u32*)s) >> 16) & 0xFF), \ - (d)[3] = (u8)((*((u32*)s) >> 24) & 0xFF)) - - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ -typedef struct KamiWork -{ - BOOL lock; - - KamiCommand command; - KAMIPxiResult result; - KAMICallback callback; - void* arg; - - u32 total; - u32 current; - u8* data; -} -KamiWork; - -/*---------------------------------------------------------------------------* - ÓIϐ` - *---------------------------------------------------------------------------*/ -static BOOL kamiInitialized; -static KamiWork kamiWork; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static BOOL KamiSendPxiCommand(KamiCommand command, u8 size, u8 data); -static void KamiSendPxiData(u8 *pData); -static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err); -static void KamiDone(KAMIResult result); -static void KamiWaitBusy(void); - - -void KamiPxiInit( void ) -{ - kamiWork.lock = FALSE; - - PXI_Init(); - while ( !PXI_IsCallbackReady(PXI_FIFO_TAG_KAMITEST, PXI_PROC_ARM7 )) - { - } - PXI_SetFifoRecvCallback(PXI_FIFO_TAG_KAMITEST, KamiPxiCallback); - if ( 0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, KAMITEST_PXI_START_BIT | (KAMI_TEST_COMMAND << KAMITEST_PXI_COMMAND_SHIFT), 0)) - { - return; - } -} - - - -/////////////////////////////////////////////////////////////////// - -//typedef void (*KAMICallback)(KAMIResult result, void *arg); -/* -void CDC_ReadCallback(KAMIResult result, void* arg); -void CDC_ReadCallback(KAMIResult result, void* arg) -{ - -} -*/ - -/*---------------------------------------------------------------------------* - Name: tH[}bgs֐ - - Description: - - Arguments: FormatMode - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult ExeFormatAsync(FormatMode format_mode, KAMICallback callback) -{ - OSIntrMode enabled; - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = callback; - kamiWork.arg = 0; - kamiWork.data = 0; - - if (KamiSendPxiCommand(KAMI_EXE_FORMAT, 1, format_mode) == FALSE) - { - return KAMI_RESULT_SEND_ERROR; - } - return KAMI_RESULT_SUCCESS; -} - -KAMIResult ExeFormat(FormatMode format_mode) -{ - OSIntrMode enabled; - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = 0; - - if (KamiSendPxiCommand(KAMI_EXE_FORMAT, 1, format_mode)) - { - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: NANDANZX֐ - - Description: - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read) -{ - OSIntrMode enabled; - u8 data[12]; - int i; - - MI_CpuClear8( data, sizeof(data)); - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = 0; - - // f[^쐬 - KAMI_PACK_U32(&data[0], &block); - KAMI_PACK_U32(&data[4], &buffer); - KAMI_PACK_U32(&data[8], &count); - - if (KamiSendPxiCommand(KAMI_NAND_IO, 13, (u8)is_read)) - { - for (i = 0; i < 12; i+=3) - { - KamiSendPxiData(&data[i]); - } - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiMcuWriteFirm - - Description: MCUt@[XV֐ - - Arguments: buffer : new mcu data buffer - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiMcuWriteFirm(void* buffer ) -{ - OSIntrMode enabled; - u8 data[4+2]; // 3̔{ - int i; - - MI_CpuClear8( data, sizeof(data)); - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - - // f[^쐬 - KAMI_PACK_U32(&data[0], &buffer); - - if (KamiSendPxiCommand(KAMI_MCU_WRITE_FIRM, 5, (u8)0)) - { - for (i = 0; i < 4; i+=3) - { - KamiSendPxiData(&data[i]); - } - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: MCUANZX֐ - - Description: - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read) -{ - OSIntrMode enabled; - u8 data[12]; - int i; - - MI_CpuClear8( data, sizeof(data)); - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - if (is_read) - { - kamiWork.data = (u8*)buffer; - } - else - { - kamiWork.data = 0; - } - - // f[^쐬 - KAMI_PACK_U32(&data[0], ®_no); - KAMI_PACK_U32(&data[4], &value); - - if (KamiSendPxiCommand(KAMI_MCU_IO, 13, (u8)is_read)) - { - for (i = 0; i < 12; i+=3) - { - KamiSendPxiData(&data[i]); - } - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: CODECANZX֐ - - Description: - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiCodecIo(u8 page, u8 reg_no, u8* buffer, u8 value, BOOL is_read) -{ - OSIntrMode enabled; - u8 data[12]; - int i; - - MI_CpuClear8( data, sizeof(data)); - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - if (is_read) - { - kamiWork.data = (u8*)buffer; - } - else - { - kamiWork.data = 0; - } - - // f[^쐬 - KAMI_PACK_U8(&data[0], &page); - KAMI_PACK_U8(&data[1], ®_no); - KAMI_PACK_U32(&data[4], &value); - - if (KamiSendPxiCommand(KAMI_CODEC_IO, 13, (u8)is_read)) - { - for (i = 0; i < 12; i+=3) - { - KamiSendPxiData(&data[i]); - } - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: ARM7ANZX֐ - - Description: - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiARM7Io(u32 addr, u32* buffer, u32 value, BOOL is_read) -{ - OSIntrMode enabled; - u8 data[12]; - int i; - - MI_CpuClear8( data, sizeof(data)); - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - if (is_read) - { - kamiWork.data = (u8*)buffer; - } - else - { - kamiWork.data = 0; - } - - // f[^쐬 - KAMI_PACK_U32(&data[0], &addr); - KAMI_PACK_U32(&data[4], &value); - - if (KamiSendPxiCommand(KAMI_ARM7_IO, 13, (u8)is_read)) - { - for (i = 0; i < 12; i+=3) - { - KamiSendPxiData(&data[i]); - } - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiCDC_GoDsMode - - Description: CODECDS[h֑Jڂ֐ - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiCDC_GoDsMode( void ) -{ - OSIntrMode enabled; - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = 0; - - if (KamiSendPxiCommand(KAMI_CDC_GO_DSMODE, 0, (u8)0)) - { - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiClearNandErrorLog - - Description: NVRAMNANDG[NA܂B - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiClearNandErrorLog( void ) -{ - OSIntrMode enabled; - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = 0; - - if (KamiSendPxiCommand(KAMI_CLEAR_NAND_ERRORLOG, 0, (u8)0)) - { - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiGetCameraModuleTypesAsync - - Description: JW[^Cv擾܂i񓯊Łj - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiGetCameraModuleTypesAsync( CameraModuleTypes *pTypes, KAMICallback callback, void* arg ) -{ - OSIntrMode enabled; - - if (pTypes == NULL) - { - return KAMI_RESULT_INVALID_PARAMETER; - } - - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - kamiWork.callback = callback; - kamiWork.arg = arg; - kamiWork.data = (u8*)pTypes; - (void)OS_RestoreInterrupts(enabled); - - if (KamiSendPxiCommand(KAMI_GET_CAMERA_MODULE_TYPE, 0, 0)) - { - return KAMI_RESULT_SUCCESS; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiGetCameraModuleTypes - - Description: JW[^Cv擾܂iŁj - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiGetCameraModuleTypes( CameraModuleTypes *pTypes ) -{ - OSIntrMode enabled; - - if (pTypes == NULL) - { - return KAMI_RESULT_INVALID_PARAMETER; - } - - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = (u8*)pTypes; - (void)OS_RestoreInterrupts(enabled); - - if (KamiSendPxiCommand(KAMI_GET_CAMERA_MODULE_TYPE, 0, 0)) - { - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiGetNandCID - - Description: NANDCID擾܂B - - Arguments: buffer : 16oCgobt@ - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiGetNandCID(void* buffer ) -{ - OSIntrMode enabled; - u8 data[4+2]; // 3̔{ - - MI_CpuClear8( data, sizeof(data)); - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = (u8*)buffer; - - if (KamiSendPxiCommand(KAMI_GET_NAND_CID, 0, 0)) - { - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - PXI֘A - *---------------------------------------------------------------------------*/ - -static BOOL KamiSendPxiCommand(KamiCommand command, u8 size, u8 data) -{ - u32 pxiData = (u32)(KAMITEST_PXI_START_BIT | - ((command << KAMITEST_PXI_COMMAND_SHIFT) & KAMITEST_PXI_COMMAND_MASK) | - ((size << KAMITEST_PXI_DATA_NUMS_SHIFT) & KAMITEST_PXI_DATA_NUMS_MASK) | - ((data << KAMITEST_PXI_1ST_DATA_SHIFT) & KAMITEST_PXI_1ST_DATA_MASK)); - if (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - return FALSE; - } - return TRUE; -} - -static void KamiSendPxiData(u8 *pData) -{ - u32 pxiData = (u32)((pData[0] << 16) | (pData[1] << 8) | pData[2]); - while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - } -} - -static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err) -{ -#pragma unused( tag ) - if (err) - { - KamiDone(KAMI_RESULT_FATAL_ERROR); - return; - } - if (data & KAMITEST_PXI_START_BIT) // 擪f[^ - { - if (data & KAMITEST_PXI_RESULT_BIT) - { - kamiWork.total = (u8)((data & KAMITEST_PXI_DATA_NUMS_MASK) >> KAMITEST_PXI_DATA_NUMS_SHIFT); - kamiWork.current = 0; - kamiWork.command = (KamiCommand)((data & KAMITEST_PXI_COMMAND_MASK) >> KAMITEST_PXI_COMMAND_SHIFT); - kamiWork.result = (KAMIPxiResult)((data & KAMITEST_PXI_1ST_DATA_MASK) >> KAMITEST_PXI_1ST_DATA_SHIFT); - } - else // m̃f[^ - { - KamiDone(KAMI_RESULT_FATAL_ERROR); - return; - } - } - else // 㑱f[^ - { - if (kamiWork.data == NULL) - { - KamiDone(KAMI_RESULT_FATAL_ERROR); - return; - } - if (kamiWork.current < kamiWork.total-1) - { - kamiWork.data[kamiWork.current++] = (u8)((data & 0xFF0000) >> 16); - } - if (kamiWork.current < kamiWork.total-1) - { - kamiWork.data[kamiWork.current++] = (u8)((data & 0x00FF00) >> 8); - } - if (kamiWork.current < kamiWork.total-1) - { - kamiWork.data[kamiWork.current++] = (u8)((data & 0x0000FF) >> 0); - } - } - if (kamiWork.current == kamiWork.total-1) - { - KAMIResult result; - switch (kamiWork.result) - { - case KAMI_PXI_RESULT_SUCCESS: // alias KAMI_PXI_RESULT_SUCCESS_TRUE - result = KAMI_RESULT_SUCCESS; // alias KAMI_RESULT_SUCCESS_TRUE - break; - case KAMI_PXI_RESULT_SUCCESS_FALSE: - result = KAMI_RESULT_SUCCESS_FALSE; - break; - case KAMI_PXI_RESULT_INVALID_COMMAND: - result = KAMI_RESULT_INVALID_COMMAND; - break; - case KAMI_PXI_RESULT_INVALID_PARAMETER: - result = KAMI_RESULT_INVALID_PARAMETER; - break; - case KAMI_PXI_RESULT_ILLEGAL_STATUS: - result = KAMI_RESULT_ILLEGAL_STATUS; - break; - case KAMI_PXI_RESULT_BUSY: - result = KAMI_RESULT_BUSY; - break; - default: - result = KAMI_RESULT_FATAL_ERROR; - } - KamiDone(result); - return; - } -} - -extern void PXIi_HandlerRecvFifoNotEmpty(void); -static void KamiWaitBusy(void) -{ - volatile BOOL *p = &kamiWork.lock; - - while (*p) - { - if (OS_GetCpsrIrq() == OS_INTRMODE_IRQ_DISABLE) - { - PXIi_HandlerRecvFifoNotEmpty(); - } - } -} - -static void KamiDone(KAMIResult result) -{ - KAMICallback callback = kamiWork.callback; - void* arg = kamiWork.arg; - kamiWork.callback = NULL; - kamiWork.arg = NULL; - if (kamiWork.lock) - { - kamiWork.lock = FALSE; - } - if (callback) - { - callback(result, arg); - } -} diff --git a/build/tests/TestComponent/ARM9.TWL/src/keypad.c b/build/tests/TestComponent/ARM9.TWL/src/keypad.c deleted file mode 100644 index 155c4bc2..00000000 --- a/build/tests/TestComponent/ARM9.TWL/src/keypad.c +++ /dev/null @@ -1,85 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: keypad.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "keypad.h" - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define KEY_REPEAT_TRIGGER_START 20 -#define KEY_REPEAT_TRIGGER_TERM 5 - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static u16 Cont; -static u16 Trg; -static u16 Release; -static u16 RepeatTrg; -static u8 key = 60; - -static int repeat_counter; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -void -kamiPadRead(void) -{ - u16 ReadData; - - ReadData = PAD_Read(); - Trg = (u16)(ReadData & (ReadData ^ Cont)); - Release = (u16)(Cont & (ReadData ^ Cont)); - Cont = ReadData; - - RepeatTrg = Trg; - if (++repeat_counter > (KEY_REPEAT_TRIGGER_START + KEY_REPEAT_TRIGGER_TERM)) - { - repeat_counter = KEY_REPEAT_TRIGGER_START; - } - if (repeat_counter == KEY_REPEAT_TRIGGER_START) - { - RepeatTrg = ReadData; - } - if (!ReadData) - { - repeat_counter = 0; - } -} - -BOOL -kamiPadIsTrigger(u16 key) -{ - return (Trg & key)? TRUE : FALSE; -} - -BOOL -kamiPadIsRepeatTrigger(u16 key) -{ - return (RepeatTrg & key)? TRUE : FALSE; -} - -BOOL -kamiPadIsPress(u16 key) -{ - return (Cont & key)? TRUE : FALSE; -} - diff --git a/build/tests/TestComponent/ARM9.TWL/src/main.c b/build/tests/TestComponent/ARM9.TWL/src/main.c deleted file mode 100644 index 64ca2f34..00000000 --- a/build/tests/TestComponent/ARM9.TWL/src/main.c +++ /dev/null @@ -1,230 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include "kami_font.h" -#include "graphics.h" -#include "keypad.h" -#include "kami_pxi.h" - -#define SCRAMBLE_MASK 0x00406000 - -extern void HWInfoWriterInit( void ); - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ -typedef void* (*Process)(void); - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static Process sProcess; -static FSEventHook sSDHook; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void VBlankIntr(void); -static void InitAllocation(void); - -static void* DummyProcess0(void) -{ - return DummyProcess0; -} - -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: main - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void -TwlMain() -{ - // irh`[fobKł̋NΉ - if ( OS_GetRunningConsoleType() & OS_CONSOLE_TWLDEBUGGER ) - { - ROM_Header *dh = (void *)HW_ROM_HEADER_BUF; - dh->s.game_cmd_param &= ~SCRAMBLE_MASK; - } - - OS_Init(); - OS_InitTick(); - OS_InitArena(); - PXI_Init(); - OS_InitLock(); - OS_InitArenaEx(); - OS_InitIrqTable(); - OS_SetIrqStackChecker(); - MI_Init(); - OS_InitVAlarm(); - OSi_InitVramExclusive(); - OS_InitThread(); - OS_InitReset(); - GX_Init(); - FX_Init(); - SND_Init(); - SNDEX_Init(); - TP_Init(); - RTC_Init(); - -#ifndef NAND_INITIALIZER_LIMITED_MODE - KamiPxiInit(); /* ƎPXI */ -#endif - - // VuN荞ݐݒ - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)OS_EnableIrqMask(OS_IE_FIFO_RECV); - (void)OS_EnableIrq(); - (void)GX_VBlankIntr(TRUE); - - // initialize file-system - FS_Init(FS_DMA_NOT_USE); - - // FAThCo܂B - // NANDɃANZX邽߂ɕKvłB - // ̊֐TwlSDK_branchUIGɂ͊܂܂Ă܂B - FS_InitFatDriver(); - - // SDJ[h̑}CxgĎR[obNݒ -// FS_RegisterEventHook("sdmc", &sSDHook, SDEvents, NULL); - - // FS_Iniť̕ǂ͗l - InitAllocation(); - - // \֘A - InitGraphics(); - kamiFontInit(); - - /* always preload FS table for faster directory access. */ - { - u32 need_size = FS_GetTableSize(); - void *p_table = OS_Alloc(need_size); - SDK_ASSERT(p_table != NULL); - (void)FS_LoadTable(p_table, need_size); - } - - // V[PXݒ - sProcess = DummyProcess0; - - kamiFontPrintfConsole( CONSOLE_ORANGE, "This is Test Component\n"); - -#ifdef TWL_CAPTURE_VERSION - // memory-launcheroRŗオTWLCaptureSystemWriterł - // RED_LAUNCHER_VER0ŃtH[}bgɎŝŋIɏ - MI_StoreLE8((void*)HW_TWL_RED_LAUNCHER_VER, 1); -#endif - -#ifdef AUTO_FORMAT_MODE -// HłNANDĂȂ̏ԂFATɃANZX -// 肪邽ߋIɃtH[}bgs 2008/06/18 -// ExeFormat(FORMAT_MODE_QUICK); -// -// SecureǂݍޑOɃtH[}bgĂ܂Secure񂪏Ă܂B -// ƃVANoĂ܂̂ł̏͂ȂB -// HƈقȂNandInitializersiKł̓tH[}bgς݂Ȃ͂B -// ɖtH[}bgłƂĂBadFormatƂȂB2009/03/05 -#endif - - // NAMCu - NAM_Init( OS_AllocFromMain, OS_FreeToMain); - NAMUT_Init( OS_AllocFromMain, OS_FreeToMain); - -/* -{ - u8 temp; - kamiCodecRead( 1, 31, &temp); - OS_Printf("temp = %x\n", temp); - kamiCodecWrite( 1, 31, (temp & 0x7f)); - kamiCodecRead( 1, 31, &temp); - OS_Printf("temp = %x\n", temp); - -} -*/ - - while (1) - { - kamiPadRead(); - - // R}htbV -// (void)SND_FlushCommand(SND_COMMAND_NOBLOCK); - - // VuN҂ - OS_WaitVBlankIntr(); - - // `qlVR}hM -// while (SND_RecvCommandReply(SND_COMMAND_NOBLOCK) != NULL) -// { -// } - - // tHgXN[f[^[h - kamiFontLoadScreenData(); - - sProcess = sProcess(); - } -} - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - - Description: VBlank荞ݏ - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -VBlankIntr(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); // checking VBlank interrupt -} - -/*---------------------------------------------------------------------------* - Name: InitAllocation - - Description: q[v̏. - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void InitAllocation(void) -{ - void *tmp; - OSHeapHandle hh; - - /* A[ȉ */ - tmp = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetArenaLo(OS_ARENA_MAIN, tmp); - hh = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - if (hh < 0) - OS_Panic("ARM9: Fail to create heap...\n"); - hh = OS_SetCurrentHeap(OS_ARENA_MAIN, hh); -} - diff --git a/build/tests/TestComponent/Makefile b/build/tests/TestComponent/Makefile deleted file mode 100644 index d593101e..00000000 --- a/build/tests/TestComponent/Makefile +++ /dev/null @@ -1,34 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tests - camera -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - - -#---------------------------------------------------------------------------- - -SUBDIRS = \ - banner \ - ARM7.TWL \ - ARM9.TWL \ - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/TestComponent/banner/Makefile b/build/tests/TestComponent/banner/Makefile deleted file mode 100644 index e373c033..00000000 --- a/build/tests/TestComponent/banner/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/gameIcon.bmp -BANNER_SPEC = banner_v3.bsf - -TARGETS = banner.bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) -BANNER_ICON_MIDDLE = $(addprefix $(BANNER_ICON_NAME), .nbfs .nbfc .nbfp) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_MIDDLE) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) $(BANNER_ICON_MIDDLE) - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/TestComponent/banner/banner_v3.bsf b/build/tests/TestComponent/banner/banner_v3.bsf deleted file mode 100644 index a86a720b5783204182ddd4feea8564f590489157..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 884 zcmc(ePiw+J5XIlsLcha;=PDxf;L&3IgGg!G-eXi;P%BAP?1yjrn_WLZajYAPEm7!nLA%GV@DBJs*qqFaNC|4(4{9ZJ($ll%8vSc$*4-z%Or6&kdIu=%2Tc~6 z=@q1Aef5kvu&V^kSuvY4XJyh5;+pyP|f#t;a@T_92{s-nrdszSg diff --git a/build/tests/TestComponent/banner/icon/gameIcon.bmp b/build/tests/TestComponent/banner/icon/gameIcon.bmp deleted file mode 100644 index 349097466463fa57dc9aa396b39cb1368b6a7f24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 592 zcmah`!41MN3^Wz$hgbSW0wP)B!z;=H{6Q#|cVG}EVIn4Bg>p{QQfQ@Gy2zJ{?Q?s+ z+$zd(#d!qw1uI%3BdVY`n+`R&!Qyq_()+oiwrw*Wr<$B={169+_~V0^6XzEAuWXD} z)dNXW7CFS|MM9FoMI!?}_sBIU-gLTg0meLzIBJ7}1G&KZC-j#PI$q|Rg{iyAjV2g| z>6ATtOl9~rpr;zw7!_bMmEcYyMww@%#v|O}6cJm=URechI~^&yanQb=ZGFz3(ck8m SW6to>_n+vl`K~zge~CV{cWuJ} diff --git a/build/tests/TestComponent/common/include/fifo.h b/build/tests/TestComponent/common/include/fifo.h deleted file mode 100644 index 7e00b943..00000000 --- a/build/tests/TestComponent/common/include/fifo.h +++ /dev/null @@ -1,105 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - camera-test - include - File: fifo.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef TWL_KAMI_TEST_FIFO_H_ -#define TWL_KAMI_TEST_FIFO_H_ - -#include - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -#define PXI_FIFO_TAG_KAMITEST PXI_FIFO_TAG_USER_1 - -#define KAMI_PXI_CONTINUOUS_PACKET_MAX 10 -#define KAMITEST_PXI_DATA_SIZE_MAX ((KAMI_PXI_CONTINUOUS_PACKET_MAX-1)*3+1) // őf[^ - -#define KAMITEST_PXI_START_BIT 0x02000000 // 擪pPbgӖ -#define KAMITEST_PXI_RESULT_BIT 0x00008000 // PXỈ - -#define KAMITEST_PXI_COMMAND_SHIFT 8 // R}hi[̈ʒu -#define KAMITEST_PXI_COMMAND_MASK 0x00007f00 // R}hi[̃}XN -#define KAMITEST_PXI_DATA_NUMS_MASK 0x00ff0000 // f[^̈ -#define KAMITEST_PXI_DATA_NUMS_SHIFT 16 // f[^ʒu -#define KAMITEST_PXI_1ST_DATA_MASK 0x000000ff // 擪pPbg̃f[^̈ -#define KAMITEST_PXI_1ST_DATA_SHIFT 0 // 擪pPbg̃f[^ʒu - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -typedef enum KAMIPxiResult -{ - KAMI_PXI_RESULT_SUCCESS = 0, // (void/void*^) // ꍇɂ㑱pPbg - KAMI_PXI_RESULT_SUCCESS_TRUE = 0, // (BOOL^) - KAMI_PXI_RESULT_SUCCESS_FALSE, // (BOOL^) - KAMI_PXI_RESULT_INVALID_COMMAND, // sPXIR}h - KAMI_PXI_RESULT_INVALID_PARAMETER, // sȃp[^ - KAMI_PXI_RESULT_ILLEGAL_STATUS, // KAMȈԂɂ菈ss - KAMI_PXI_RESULT_BUSY, // ̃NGXgs - KAMI_PXI_RESULT_FATAL_ERROR, // ̑炩̌ŏɎs - KAMI_PXI_RESULT_MAX -} -KAMIPxiResult; - - -typedef enum KamiCommand -{ - KAMI_TEST_COMMAND, - KAMI_EXE_FORMAT, - KAMI_NAND_IO, - KAMI_MCU_IO, - KAMI_MCU_WRITE_FIRM, - KAMI_ARM7_IO, - KAMI_CDC_GO_DSMODE, - KAMI_CLEAR_NAND_ERRORLOG, - KAMI_GET_CAMERA_MODULE_TYPE, - KAMI_GET_NAND_CID, - KAMI_CODEC_IO -} -KamiCommand; - - -typedef enum CameraModuleType -{ - CAMERA_MODULE_TYPE_UNKNOWN, - CAMERA_MODULE_TYPE_SHARP, - CAMERA_MODULE_TYPE_MICRON -} -CameraModuleType; - - -typedef struct CameraModuleTypes -{ - CameraModuleType in; - CameraModuleType out; -} -CameraModuleTypes; - -/*===========================================================================*/ - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* TWL_KAMI_TEST_FIFO_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TestMaker/Makefile b/build/tests/TestMaker/Makefile deleted file mode 100644 index a4b0b349..00000000 --- a/build/tests/TestMaker/Makefile +++ /dev/null @@ -1,241 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - GX - demos - UnitTours/3D_Shininess -# File: Makefile -# -# Copyright 2003 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -ifeq ($(GAMECODE),) -#------------------------------------------------------------------------------------ -# sub make N - -CONFIG = ./script/config.py -GENCLS = ./script/clsdir.py -GENFONT = ./script/fontcode.py -GENPARENTAL = ./script/parentalcontrol.py -FONTCODES = ./doc/20080617_DS_fontcodeList_NOE_FIANL.xls -CLSROMPARAM = ./config/romparam_forCLStest.yaml -PCROMPARAM = ./config/twl_parentalcontrol_spec.yaml -EULAROMPARAM = ./config/romparam_forEULAtest.yaml -SHOPROMPARAM = ./config/romparam_forShoptest.yaml -SAVEROMPARAM = ./config/romparam_forSavetest.yaml -FATFSPERMISSIONROMPARAM = ./config/romparam_forFATFSPermissiontest.yaml -BOOTROMPARAM = ./config/romparam_forBoottest.yaml -ROMPARAM = ./romparam.yaml -CODESLIST = ./codeslist - --include $(CODESLIST) - -build: $(GAMECODES) - -.PHONY: $(GAMECODES) clean config clstest fonttest parentaltest - -#---- CLS eXgݒ -clstest: - cp -f $(CLSROMPARAM) $(ROMPARAM) - $(CONFIG) $(ROMPARAM) $(CODESLIST) "CLS" - -#---- fontcode eXgݒ -fonttest: - $(GENFONT) $(FONTCODES) $(ROMPARAM) "Reverse" - $(CONFIG) $(ROMPARAM) $(CODESLIST) "FONT" - -#---- parentarlcontrol eXgݒ -parentaltest: - $(GENPARENTAL) $(PCROMPARAM) $(ROMPARAM) - $(CONFIG) $(ROMPARAM) $(CODESLIST) "PARENTAL" - -#---- eula eXgݒ -eulatest: - cp -f $(EULAROMPARAM) $(ROMPARAM) - $(CONFIG) $(ROMPARAM) $(CODESLIST) "EULA" - -#---- shop eXgݒ -shoptest: - cp -f $(SHOPROMPARAM) $(ROMPARAM) - $(CONFIG) $(ROMPARAM) $(CODESLIST) "SHOP" - -#---- savedate eXgݒ -savetest: - cp -f $(SAVEROMPARAM) $(ROMPARAM) - $(CONFIG) $(ROMPARAM) $(CODESLIST) "SAVE" - -#---- fatfspermissiontest eXgݒ -fatfspermissiontest: - cp -f $(FATFSPERMISSIONROMPARAM) $(ROMPARAM) - $(CONFIG) $(ROMPARAM) $(CODESLIST) "FATFSPERMISSION" - -#---- boottest eXgݒ -boottest: - cp -f $(BOOTROMPARAM) $(ROMPARAM) - $(CONFIG) $(ROMPARAM) $(CODESLIST) "BOOT" - -#---- config -config: - $(CONFIG) $(ROMPARAM) $(CODESLIST) "DEFAULT" - -$(GAMECODES): $(CODESLIST) - install -d $@ && $(MAKE) -k -C $@ -f ../Makefile GAMECODE=$@ TEST_TYPE=$(TEST_TYPE) - -forcls: - $(GENCLS) $(ROMPARAM) - -clean: - rm -Rf $(GAMECODES) - rm -f $(CODESLIST) - rm -Rf roms - rm -Rf forCLS - -else -#------------------------------------------------------------------------------------ -# sub make { - -SUBDIRS = - -#---- sysm_red_misc -MISC_DIR = ../../../systemMenu_RED/misc - -#---- default -BASEDIR = $(ROOT)/build/demos/os/consoleType-1 -SRCDIR = $(BASEDIR)/src -INCDIR = $(BASEDIR)/include -SRCS = main.c font.c screen.c -BANNERSRC := $(wildcard ../banner/dummy/Cell/*.nce) -INSTALL_DIR = ../roms -MY_COMMONDEFS = $(TWLSDK_ROOT)/build/buildtools/commondefs \ - $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib -MY_MODULERULES = $(TWLSDK_ROOT)/build/buildtools/modulerules - -TARGET_PLATFORM := TWL -TWL_ARCHGEN := LIMITED -TWL_NANDAPP := TRUE - -ifeq ($(TEST_TYPE),CLS) -BASEDIR = $(ROOT)/build/demos/os/consoleType-1 -SRCDIR = $(BASEDIR)/src -INCDIR = $(BASEDIR)/include -SRCS = main.c font.c screen.c -BANNERSRC := $(wildcard ../banner/dummy/Cell/*.nce) -endif - -ifeq ($(TEST_TYPE),FONT) -BASEDIR = $(ROOT)/build/demos/gx/UnitTours/3D_BoxTest -SRCDIR = $(BASEDIR)/src -INCDIR = $(BASEDIR)/include -SRCS = main.c data.c -BANNERSRC := $(wildcard ../banner/font/Cell/*.nce) -endif - -ifeq ($(TEST_TYPE),PARENTAL) -BASEDIR = $(ROOT)/build/tests/ogntest/ -SRCDIR = $(BASEDIR)/src -INCDIR = $(BASEDIR)/include -SRCS = main.c -BANNERSRC := $(wildcard ../banner/parental/Cell/*.nce) -endif - -ifeq ($(TEST_TYPE),EULA) -BASEDIR = $(ROOT)/build/demos/gx/UnitTours/3D_BoxTest -SRCDIR = $(BASEDIR)/src -INCDIR = $(BASEDIR)/include -SRCS = main.c data.c -BANNERSRC := $(wildcard ../banner/eula/Cell/*.nce) -endif - -ifeq ($(TEST_TYPE),SHOP) -BASEDIR = $(ROOT)/build/tests/nandApp/40M -SRCDIR = $(BASEDIR)/src -INCDIR = $(BASEDIR)/include -SRCS = main.c -BANNERSRC := $(wildcard ../banner/shop/Cell/*.nce) -MAKEROM_ROMROOT = $(ROOT)/build/tests/nandApp/40M/rom_data -MAKEROM_ROMFILES = *.* -endif - -ifeq ($(TEST_TYPE),SAVE) -BASEDIR = $(ROOT)/build/tests/save_data/DisplayVersion -SRCDIR = $(BASEDIR)/src -INCDIR = $(BASEDIR)/include -SRCS = dataver.c font.c main.c menu.c screen.c -BANNERSRC := $(wildcard $(BASEDIR)/banner/data/Cell/*.nce) -endif - -ifeq ($(TEST_TYPE),FATFSPERMISSION) -TARGET_FIRM = SYSTEMMENU -BASEDIR = ../../RomTypeTest -SRCDIR = $(BASEDIR)/ARM9/src -INCDIR = $(BASEDIR)/ARM9/src $(MISC_DIR)/include -SRCS = main.c RomTypeTest.c $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c -BANNERSRC := $(wildcard ../banner/shop/Cell/*.nce) -INSTALL_DIR = $(BASEDIR)/test_roms -INSTALL_TARGETS += $(BINDIR)/twl_$(GAMECODE).$(INT_ROM_EXT) -MAKEROM_ROMROOT = ../../../systemMenu_RED/ -MAKEROM_ROMFILES = ./data/NTR_IPL_font_m.NFTR -MY_COMMONDEFS = $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs -MY_MODULERULES = $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -endif - -ifeq ($(TEST_TYPE),BOOT) -TARGET_FIRM = SYSTEMMENU -BASEDIR = ../../HashCheckTemplate -SUBDIRS = $(BASEDIR)/crt $(BASEDIR)/ARM7 -SRCDIR = $(BASEDIR)/ARM9/src -INCDIR = $(BASEDIR)/ARM9/src $(MISC_DIR)/include -SRCS = main.c HashCheckTemplate.c $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c -BANNERSRC := $(wildcard ../banner/shop/Cell/*.nce) -INSTALL_DIR = $(BASEDIR)/test_roms -INSTALL_TARGETS += $(BINDIR)/twl_$(GAMECODE).$(INT_ROM_EXT) -MAKEROM_ROMROOT = ../../../systemMenu_RED/ -MAKEROM_ROMFILES = ./data/NTR_IPL_font_m.NFTR -MY_COMMONDEFS = $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs -MY_MODULERULES = $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -endif - -BANNER = ./banner.bnr -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe -BANNERCVTR = $(TWL_TOOLSDIR)/bin/bannercvtr.exe - -#---------------------------------------------------------------------------- - -TARGET_BIN = twl_$(GAMECODE).$(TARGET_SUFFIX) -ROM_SPEC = twl_$(GAMECODE).rsf - -#SRCDIR = # using default -#LCFILE = # using default - -INSTALL_TARGETS += $(BINDIR)/$(TARGET_BIN) - -include $(GAMECODE).param - -include $(MY_COMMONDEFS) - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -$(TARGETS): $(BANNER) - -$(BANNER): $(BANNER:.bnr=.bin) $(BANNER:.bnr=.bsf) - $(MAKEBANNER) -A $(BANNER:.bnr=.bin) $(BANNER:.bnr=.bsf) $@ - -$(BANNER:.bnr=.bin): $(BANNERSRC) - $(BANNERCVTR) -o $@ $< - -include $(MY_MODULERULES) - -# sub make { -#------------------------------------------------------------------------------------ -endif - -#===== End of Makefile ===== diff --git a/build/tests/TestMaker/banner/dummy/Cell/Cell0.nce b/build/tests/TestMaker/banner/dummy/Cell/Cell0.nce deleted file mode 100644 index becd71774319333118b74774e36603b3341ca2c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6260 zcmeHL&u6kh-Cp;A2>J#yfNBLcV=+6( zm`asO*>=>lZHDq6BVgHa7QGWs2577W8!h`bJTKfCx(?t?iYNp_+7{#n|H2CV<^JD} zvDAVxKPb8wwojcsW3m6O{g20@NXE0VqEh(kB_aj^rG={4ihtul)~T z|6{aKs{Ln-nX%YSLcCKVe@OdJhetG!vZI>`{Aj#q6Q%bP@)j;`r;F{V|6P{z4e6A28 zUyB?qexH^2A{+oA2;;eI2Ei0jKjDSKxaVwvhggPZ$^L}w(Y=sGkRI^;7qi(n2w&ls z=*%;r63-kuJmWuysChwnb~#=uEb(Fp;y{W^r6PqiLZMVBgo>e%Q*@l7hmjJMQYpus z%o2A(i`-eva%agwuo(o4DQS>n#o}S%gr=ng4RZo0l^~s5k)J>~gNb4op~GpVB32kv zsT&O;%I@>W#t#udYF7I3$(;@))32Z0E8h-R4Zi!h*EYmAVMCvZ#>#8QG(Iy@DV;VE^4ph-W24%ggT&Gj%+qS9zoMXkIdYT;#3Tds)ON)5r55iF*pL6y1g zY5k0*r34Lg1}K#vYgJdAK?H+|Vi>8zd8;MY7*nbHeJPv0mo3&`RqClv>y?!1-eVpk z1KDQHSM6?ue632f z81Gwd!IyvU>ihT#+*1TianpI|^EV}}{`Ieil}@E;o#|fuw_ktxQ`!1%f6vc@^xd6r tDV^5WA6P#*$IioN`QryaI7dhM;{)gD$-$!^^Ug-{z)Yvtj~*Tx#vcbIvkCwJ diff --git a/build/tests/TestMaker/banner/dummy/Character/banner_anm_idea03_ALL.ncg b/build/tests/TestMaker/banner/dummy/Character/banner_anm_idea03_ALL.ncg deleted file mode 100644 index 383dda18311a3b63a096cb762263b7b604b81517..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4336 zcmeHLO>f&q5LJO5d&ubf6Nng{jWF^bptL|+BsHqQj4lBJwv~(mt^)><_N*JDQ+bPg z<4xL|&WsK`M?UZ@?SJSmX#3Wt1lw4mJ|sv1=Mm$b-I?Kx1-==AN8RrC|NNc#=C22t z%!ACgneGqP^E~v2nGAMUVEB{SL7;9RL5!TO!|IGi$piWL(pQ_1tg8EXe zcc}WF}$RBv#wS%1jtE_G1ik2T&>zd+nU1BFc&_>ol zV4wyexeAwP1~K%lT(564J6y{eEoG?ux5^*k>kv&M0rJOTceeZ;pFFOu}(YBtSrQYSow~nTH+qIUuf&}~kvm13J0*u-QW4}8lk!|l&V4c2UFXn}CXn!TD(17Q2+9y2 z5>)4bY6*MH=CfHjD3|@f_k#p`Bb51kD*Q=R_~nZ5E1vMHzPO|!$Saq%ja*(ta=E)M zpe0Qp;p<9n)(sigAQ2>PY+}_C_E>M$>snl^MR63x3HC-Po6Sl_%Z7| z{J;Ky-bbC9cv-;Xz>T8#xc^60tXJ*S{T?iw%Xwq=%VOV3Nr=U-+domoW zv95)p`54d|ap?42K8A3Dizbbr35GRBdJ3i#1n0Ab8tYmpnlAvY5r_UX5DSPPxMEP|#!OLHqv$MgQSI*fVuYUh+;5=?0oc($VzwS>*$KNHT F{tJ!qCVc<^ diff --git a/build/tests/TestMaker/banner/dummy/ColorPalette/banner_anm_idea03.ncl b/build/tests/TestMaker/banner/dummy/ColorPalette/banner_anm_idea03.ncl deleted file mode 100644 index da86752218073033e1ee62e7bd387771c9c8c825..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 556 zcmeZscJ}%IkAYE#iGe|Yfr%l&(I-Rz%m(p6phdvYO(OY!{W{(4Zu8@FCBu~L^?ffgc5Z$!lLkNjjLV^QgBg7F!6@LH{6KI8#R#A{R^gvWafD|fJ!M#6^0|yTL zkopf0-Wz+8jpJ!zP!Awa`#ihPvpcghyRN#!_^>zs)oeVz=UmI(adAIMzB}h`0uA6| zelds2WG7Q)d<(D2__o3C8T@mDKQj1t2LBm+JbW`qpmi;1N{r21D}Ouh>l*In{rkCo z03GjlM=cm|jYyQ6hZ056TmUj6&<`Xl&n8^q&1u_ACQLpfX#8t^^(zJSnVo3@S@TlHgU7{NZuvF00m1!4RG zjNwYM^(-dP7?fb&lK-#%NCtAEIZ!R@XWFvV!@~PjSQ#>TjF-v8K>b)+d`0j{tobHa zL8SJwn7aPU8X$)__NXj=*XkeEg*ya&-TI;{WM56;FRZ^$F(+a9Uh(%={_Fa$*C0q} z%KGNTP^|-~@j8O?1)y6=Jgf;3^LG{ z!LRrOt1;vTDL<{j5Bq5l*OmYM$0Btt^joaMVjWrN%$hF%-AdwNO^6iz75gyq8zA#+ z^yIRaH3-tfbTMDPfY4-{wvHFu&{tU-MrvtIk87mVabF+;C4z>v+}sq#KVDy|dFZ$a6C|e9_mtJ@QGnm+Kre@wGlMq=J!GQS~Jtg yf6_~yK=WSr=Z|lfqW^Y0(z+!F!`E$$>2!|c50kUW$(QNb@$~C#(m6eO5B@jeQS(ax diff --git a/build/tests/TestMaker/banner/eula/Character/eula.ncg b/build/tests/TestMaker/banner/eula/Character/eula.ncg deleted file mode 100644 index b7de68cd802bc2173cb3893f0b05977217ddae8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4324 zcmeHLOHRW;3=I-X7LCN-U9j#Qsw@Bj6{@=Irb69CR6^w*9Fhy<0+jchaqxunGb}(z z*%S6KKB-{7rj*JG;9A^<=WFHudJ^aaFIk W+x2q&TCXP0Pc>&%J-%zw zvE66-SO32rq(YoQTfexjq3l4}i!$DFqw3P?sO(+!d&}=tQ&S#fHgC02br25oUz9=Q v%IaaZqq+~|(rn%LwlB(FRDo37tHzWEse!19%0|dTL`Np+?CTf81NAxp5;SL7 diff --git a/build/tests/TestMaker/banner/eula/Preview/Preview0.npv b/build/tests/TestMaker/banner/eula/Preview/Preview0.npv deleted file mode 100644 index 2c89eced..00000000 --- a/build/tests/TestMaker/banner/eula/Preview/Preview0.npv +++ /dev/null @@ -1,104 +0,0 @@ -#PROPLIST.VER 100/LINE 103 -PreviewDetail_State = 0 -PreviewDetail_Version = 4 -PreviewDetail_Comment = -PreviewDetail_Bg_State = 18 -PreviewDetail_Bg_NormalPaletteFile_State = 9 -PreviewDetail_Bg_NormalPaletteFile_FileName = -PreviewDetail_Bg_NormalPaletteFile_DataSize = 0 -PreviewDetail_Bg_Screens = 1 -PreviewDetail_Bg_0000Screen_State = 0 -PreviewDetail_Bg_0000Screen_ScreenFile_State = 11 -PreviewDetail_Bg_0000Screen_ScreenFile_FileName = -PreviewDetail_Bg_0000Screen_ScreenFile_DataSize = 0 -PreviewDetail_Bg_0000Screen_CharacterFile_State = 10 -PreviewDetail_Bg_0000Screen_CharacterFile_FileName = -PreviewDetail_Bg_0000Screen_CharacterFile_DataSize = 0 -PreviewDetail_Bg_0000Screen_ExtendPaletteFile_State = 9 -PreviewDetail_Bg_0000Screen_ExtendPaletteFile_FileName = -PreviewDetail_Bg_0000Screen_ExtendPaletteFile_DataSize = 0 -PreviewDetail_Bg_0000Screen_BgSurface = -1 -PreviewDetail_Bg_0000Screen_PositionX = 0 -PreviewDetail_Bg_0000Screen_PositionY = 0 -PreviewDetail_Bg_0000Screen_StartPositionX = 0 -PreviewDetail_Bg_0000Screen_StartPositionY = 0 -PreviewDetail_Bg_0000Screen_AffineParam_ScaleX = 1.00 -PreviewDetail_Bg_0000Screen_AffineParam_ScaleY = 1.00 -PreviewDetail_Bg_0000Screen_AffineParam_Rotate = 0 -PreviewDetail_Bg_0000Screen_Priority = 0 -PreviewDetail_Bg_0000Screen_ScreenSizeX = 0 -PreviewDetail_Bg_0000Screen_ScreenSizeY = 0 -PreviewDetail_Bg_0000Screen_CharacterSizeX = 0 -PreviewDetail_Bg_0000Screen_CharacterSizeY = 0 -PreviewDetail_Bg_0000Screen_Comment = -PreviewDetail_Bg_3DPriority = 0 -PreviewDetail_Cell_State = 17921 -PreviewDetail_Cell_MultiCellFile_State = 13 -PreviewDetail_Cell_MultiCellFile_FileName = -PreviewDetail_Cell_MultiCellFile_DataSize = 0 -PreviewDetail_Cell_CellFile_State = 4 -PreviewDetail_Cell_CellFile_FileName = ..\Cell\Cell0.nce -PreviewDetail_Cell_CellFile_DataSize = 5348 -PreviewDetail_Cell_CharacterFile_State = 2 -PreviewDetail_Cell_CharacterFile_FileName = ..\Character\eula.ncg -PreviewDetail_Cell_CharacterFile_DataSize = 4096 -PreviewDetail_Cell_ColorPaletteFile_State = 1 -PreviewDetail_Cell_ColorPaletteFile_FileName = ..\ColorPalette\eula.ncl -PreviewDetail_Cell_ColorPaletteFile_DataSize = 512 -PreviewDetail_Cell_Animations = 1 -PreviewDetail_Cell_0000Animation_State = 1 -PreviewDetail_Cell_0000Animation_LabelId = 0 -PreviewDetail_Cell_0000Animation_LabelName = CellAnime0 -PreviewDetail_Cell_0000Animation_PositionX = 128 -PreviewDetail_Cell_0000Animation_PositionY = 96 -PreviewDetail_Cell_0000Animation_Comment = -PreviewDetail_Rambank_State = 0 -PreviewDetail_Rambank_CharacterBaseOffset = 0 -PreviewDetail_Rambank_CharacterBaseBlock0 = 0 -PreviewDetail_Rambank_CharacterBaseBlock1 = 0 -PreviewDetail_Rambank_CharacterBaseBlock2 = 0 -PreviewDetail_Rambank_CharacterBaseBlock3 = 0 -PreviewDetail_Rambank_ScreenBaseOffset = 0 -PreviewDetail_Rambank_ScreenBaseBlock0 = 0 -PreviewDetail_Rambank_ScreenBaseBlock1 = 0 -PreviewDetail_Rambank_ScreenBaseBlock2 = 0 -PreviewDetail_Rambank_ScreenBaseBlock3 = 0 -PreviewDetail_Rambank_Vrams = 7 -PreviewDetail_Rambank_0000Vram_State = 58 -PreviewDetail_Rambank_0000Vram_CurrentSize = 4096 -PreviewDetail_Rambank_0000Vram_MaxSize = 131072 -PreviewDetail_Rambank_0001Vram_State = 56 -PreviewDetail_Rambank_0001Vram_CurrentSize = 0 -PreviewDetail_Rambank_0001Vram_MaxSize = 131072 -PreviewDetail_Rambank_0002Vram_State = 24 -PreviewDetail_Rambank_0002Vram_CurrentSize = 0 -PreviewDetail_Rambank_0002Vram_MaxSize = 131072 -PreviewDetail_Rambank_0003Vram_State = 24 -PreviewDetail_Rambank_0003Vram_CurrentSize = 0 -PreviewDetail_Rambank_0003Vram_MaxSize = 131072 -PreviewDetail_Rambank_0004Vram_State = 120 -PreviewDetail_Rambank_0004Vram_CurrentSize = 0 -PreviewDetail_Rambank_0004Vram_MaxSize = 65536 -PreviewDetail_Rambank_0005Vram_State = 248 -PreviewDetail_Rambank_0005Vram_CurrentSize = 0 -PreviewDetail_Rambank_0005Vram_MaxSize = 16384 -PreviewDetail_Rambank_0006Vram_State = 248 -PreviewDetail_Rambank_0006Vram_CurrentSize = 0 -PreviewDetail_Rambank_0006Vram_MaxSize = 16384 -PreviewDetail_Effect_State = 524288 -PreviewDetail_Effect_AlphaCoefficient0 = 0 -PreviewDetail_Effect_AlphaCoefficient1 = 0 -PreviewDetail_Effect_BrightCoefficient = 0 -PreviewDetail_Effect_BgMosaicSizeX = 0 -PreviewDetail_Effect_BgMosaicSizeY = 0 -PreviewDetail_Effect_ObjMosaicSizeX = 0 -PreviewDetail_Effect_ObjMosaicSizeY = 0 -PreviewDetail_Window_State = 32768 -PreviewDetail_Window_WindowRect0Left = 0 -PreviewDetail_Window_WindowRect0Right = 0 -PreviewDetail_Window_WindowRect0Top = 0 -PreviewDetail_Window_WindowRect0Bottom = 0 -PreviewDetail_Window_WindowRect1Left = 0 -PreviewDetail_Window_WindowRect1Right = 0 -PreviewDetail_Window_WindowRect1Top = 0 -PreviewDetail_Window_WindowRect1Bottom = 0 diff --git a/build/tests/TestMaker/banner/eula/Scene/Scene0.nsn b/build/tests/TestMaker/banner/eula/Scene/Scene0.nsn deleted file mode 100644 index d447d80e..00000000 --- a/build/tests/TestMaker/banner/eula/Scene/Scene0.nsn +++ /dev/null @@ -1,54 +0,0 @@ -INTELLIGENT SYSTEMS Co.,Ltd. NITRO-CHARACTER layout format version 1.00 -#PROPLIST.VER 100/LINE 49 -FILE.VERSION = 1 -PALETTE.DOCUMENT0 = ..\ColorPalette\eula.ncl -PALETTE.COUNT = 1 -PREVIEW.DOCUMENT0 = ..\Preview\Preview0.npv -PREVIEW.COUNT = 1 -CHARACTER.DOCUMENT0 = ..\Character\eula.ncg -CHARACTER.DOCUMENT0.FRAME0.WindowPlacement = 2:3:-1:-1:-4:-30:107:187:1251:751 -CHARACTER.DOCUMENT0.FRAME0.LayerID = 0 -CHARACTER.DOCUMENT0.FRAME0.View0.Grid = 1 -CHARACTER.DOCUMENT0.FRAME0.View0.Mag = 10 -CHARACTER.DOCUMENT0.FRAME0.View0.Scroll = 1329,0 -CHARACTER.DOCUMENT0.FRAMECOUNT = 1 -CHARACTER.COUNT = 1 -SCREEN.COUNT = 0 -OBJECT.DOCUMENT0 = ..\Cell\Cell0.nce -OBJECT.DOCUMENT0.FRAME0.WindowPlacement = 0:1:-1:-1:-1:-1:156:74:857:824 -OBJECT.DOCUMENT0.FRAME0.LayerID = 2 -OBJECT.DOCUMENT0.FRAME0.PaneWidth0 = 150 -OBJECT.DOCUMENT0.FRAME0.PaneWidth1 = 527 -OBJECT.DOCUMENT0.FRAME0.PaneWidth2 = 0 -OBJECT.DOCUMENT0.FRAME0.TreeWidth = 93 -OBJECT.DOCUMENT0.FRAME0.List.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME0.List.Cursor = 0,7 -OBJECT.DOCUMENT0.FRAME0.List.HeaderWidth = 64,256 -OBJECT.DOCUMENT0.FRAME0.View.Grid = 1 -OBJECT.DOCUMENT0.FRAME0.View.Mag = 4 -OBJECT.DOCUMENT0.FRAME0.View.Scroll = 832,320 -OBJECT.DOCUMENT0.FRAME0.Tree.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME0.Tree.Cursor = 0,0 -OBJECT.DOCUMENT0.FRAME0.Tree.HeaderWidth = 30,30,32,32,25,30,20,33,20,60,38,30,21,33,35,20 -OBJECT.DOCUMENT0.FRAMETYPE0 = 1 -OBJECT.DOCUMENT0.FRAME1.WindowPlacement = 0:1:-1:-1:-4:-30:45:26:1239:777 -OBJECT.DOCUMENT0.FRAME1.LayerID = 1 -OBJECT.DOCUMENT0.FRAME1.ColumnSize0 = 231 -OBJECT.DOCUMENT0.FRAME1.ColumnSize1 = 284 -OBJECT.DOCUMENT0.FRAME1.ColumnSize2 = 636 -OBJECT.DOCUMENT0.FRAME1.AnimeList.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeList.Cursor = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeList.HeaderWidth = 59,34,256 -OBJECT.DOCUMENT0.FRAME1.AnimeView.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeView.Cursor = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeView.HeaderWidth = 43,37,40,40,40,40,40,256 -OBJECT.DOCUMENT0.FRAME1.Anime.Grid = 0 -OBJECT.DOCUMENT0.FRAME1.Anime.Mag = 4 -OBJECT.DOCUMENT0.FRAME1.Anime.Scroll = 832,0 -OBJECT.DOCUMENT0.FRAMETYPE1 = 2 -OBJECT.DOCUMENT0.FRAMECOUNT = 2 -OBJECT.COUNT = 1 -MULTICELL.COUNT = 0 -NITRO-CHARACTER Scene format version 1.00 -#PROPLIST.VER 100/LINE 1 -Scene.Comment = diff --git a/build/tests/TestMaker/banner/eula/workset.ini b/build/tests/TestMaker/banner/eula/workset.ini deleted file mode 100644 index 75afb17d..00000000 --- a/build/tests/TestMaker/banner/eula/workset.ini +++ /dev/null @@ -1,4 +0,0 @@ -[LastScene] -File=Scene\Scene0.nsn -[Recent] -ExportFolder= diff --git a/build/tests/TestMaker/banner/font/Cell/Cell0.nce b/build/tests/TestMaker/banner/font/Cell/Cell0.nce deleted file mode 100644 index ca5a3fb2634e388dd7b360a46c1e21c792b2b997..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5348 zcmeHLT}~815N;5EVoYQbAAB%22QV9MfXlcladshOO?==%Le`%I(GU*65q$JWKKS5+ zNALjj1zf+cx(a%Cr(uSKpve||Q{C0|(^WM;n;w*#>*GI53%?&Yx9sk_vR73j_SG6svZ7+IZs8B2BYm5h8fBY&EaZ)N0fGx9HxmxI^+3fywRQ1-Z_+~oIkZaJV7 zqW4hwBk=NNcY7HM%n^lhpzNteFp3+g=~{$i=~H#_mj{>nlspoGqFfx)r}=qftbWhY|2`Y z^j?yg_y4R1s39JEbQb>;y`Sy}?-0m*iWb#3Rm4mC?*sf1x!4o&(%2lstU3K}{bz#u zKG3g&eI-~fAxkN~&mbxkaXEMOSRkb6R^Y(?!gC7I(F>O8-A_SR8#A*PgEUs%7)qv} zO$!}C54@QPdD^x+p7+XBO_nR$Zuxk zw=(kE8TnQF&*hb?L#}SlJ+7^1w;Wb>26Wb&9V{BUv{o#KAuDN6+XFd=40~f;$^j7J;6SBF8Ax_ p_jA#EGu*a1RU3m>E3oNwcFGUChr4@6qr;tdpAU{Y2Yc@!{|nQxu~z^9 diff --git a/build/tests/TestMaker/banner/font/Character/font.ncg b/build/tests/TestMaker/banner/font/Character/font.ncg deleted file mode 100644 index 428f74e1da17d8fde4f33bca772e215e52961c9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4324 zcmeHL!A`?43@s8z4vWOyJ8<4VOg#VsCN%B13qs>GZ4%mt@R9sLe}M9y6Srx*mURpe zQaxVcB#vM0I2GzFO|SEh~Q3HjM#wd7)uSY$)URWi0r-hn47u^|84QK;1{VP z*!1h*qlh0m!iH!3RbnT93_c;o5(6g3h+q?;1m-ZKe>jh!HlZOuRH-4X_Ug>XH~D!M zM+x^4NAn|1PP7)(OW#JYf#~Md9o8Zr9t_$EWpbw_7b=wwv8#^StI$r4O^kMR>eVGHOt& diff --git a/build/tests/TestMaker/banner/font/ColorPalette/font.ncl b/build/tests/TestMaker/banner/font/ColorPalette/font.ncl deleted file mode 100644 index 99910793f61513f912c7ab4c8e03e832414baf7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 556 zcmeZscJ}%IkAYE#iGe|Yfr%l&(I-Rz%m(p6V1bOGn?&;e`gOY7-R8&VN`@)f>-%zw zvE66-SO32rq(YoQTfexjq3l4}i!$DFqw3P?sO(+!d&}=tQ&S#fHgC02br25oUz9=Q v%IaaZqq+~|(rn%LwlB(FRDo37tHzWEse!19%0|dTL`Np+?CTf81NAxp5;SL7 diff --git a/build/tests/TestMaker/banner/font/Preview/Preview0.npv b/build/tests/TestMaker/banner/font/Preview/Preview0.npv deleted file mode 100644 index 2ee73f82..00000000 --- a/build/tests/TestMaker/banner/font/Preview/Preview0.npv +++ /dev/null @@ -1,104 +0,0 @@ -#PROPLIST.VER 100/LINE 103 -PreviewDetail_State = 0 -PreviewDetail_Version = 4 -PreviewDetail_Comment = -PreviewDetail_Bg_State = 18 -PreviewDetail_Bg_NormalPaletteFile_State = 9 -PreviewDetail_Bg_NormalPaletteFile_FileName = -PreviewDetail_Bg_NormalPaletteFile_DataSize = 0 -PreviewDetail_Bg_Screens = 1 -PreviewDetail_Bg_0000Screen_State = 0 -PreviewDetail_Bg_0000Screen_ScreenFile_State = 11 -PreviewDetail_Bg_0000Screen_ScreenFile_FileName = -PreviewDetail_Bg_0000Screen_ScreenFile_DataSize = 0 -PreviewDetail_Bg_0000Screen_CharacterFile_State = 10 -PreviewDetail_Bg_0000Screen_CharacterFile_FileName = -PreviewDetail_Bg_0000Screen_CharacterFile_DataSize = 0 -PreviewDetail_Bg_0000Screen_ExtendPaletteFile_State = 9 -PreviewDetail_Bg_0000Screen_ExtendPaletteFile_FileName = -PreviewDetail_Bg_0000Screen_ExtendPaletteFile_DataSize = 0 -PreviewDetail_Bg_0000Screen_BgSurface = -1 -PreviewDetail_Bg_0000Screen_PositionX = 0 -PreviewDetail_Bg_0000Screen_PositionY = 0 -PreviewDetail_Bg_0000Screen_StartPositionX = 0 -PreviewDetail_Bg_0000Screen_StartPositionY = 0 -PreviewDetail_Bg_0000Screen_AffineParam_ScaleX = 1.00 -PreviewDetail_Bg_0000Screen_AffineParam_ScaleY = 1.00 -PreviewDetail_Bg_0000Screen_AffineParam_Rotate = 0 -PreviewDetail_Bg_0000Screen_Priority = 0 -PreviewDetail_Bg_0000Screen_ScreenSizeX = 0 -PreviewDetail_Bg_0000Screen_ScreenSizeY = 0 -PreviewDetail_Bg_0000Screen_CharacterSizeX = 0 -PreviewDetail_Bg_0000Screen_CharacterSizeY = 0 -PreviewDetail_Bg_0000Screen_Comment = -PreviewDetail_Bg_3DPriority = 0 -PreviewDetail_Cell_State = 17921 -PreviewDetail_Cell_MultiCellFile_State = 13 -PreviewDetail_Cell_MultiCellFile_FileName = -PreviewDetail_Cell_MultiCellFile_DataSize = 0 -PreviewDetail_Cell_CellFile_State = 4 -PreviewDetail_Cell_CellFile_FileName = ..\Cell\Cell0.nce -PreviewDetail_Cell_CellFile_DataSize = 5360 -PreviewDetail_Cell_CharacterFile_State = 2 -PreviewDetail_Cell_CharacterFile_FileName = ..\Character\font.ncg -PreviewDetail_Cell_CharacterFile_DataSize = 4096 -PreviewDetail_Cell_ColorPaletteFile_State = 1 -PreviewDetail_Cell_ColorPaletteFile_FileName = ..\ColorPalette\font.ncl -PreviewDetail_Cell_ColorPaletteFile_DataSize = 512 -PreviewDetail_Cell_Animations = 1 -PreviewDetail_Cell_0000Animation_State = 1 -PreviewDetail_Cell_0000Animation_LabelId = 0 -PreviewDetail_Cell_0000Animation_LabelName = CellAnime0 -PreviewDetail_Cell_0000Animation_PositionX = 128 -PreviewDetail_Cell_0000Animation_PositionY = 96 -PreviewDetail_Cell_0000Animation_Comment = -PreviewDetail_Rambank_State = 0 -PreviewDetail_Rambank_CharacterBaseOffset = 0 -PreviewDetail_Rambank_CharacterBaseBlock0 = 0 -PreviewDetail_Rambank_CharacterBaseBlock1 = 0 -PreviewDetail_Rambank_CharacterBaseBlock2 = 0 -PreviewDetail_Rambank_CharacterBaseBlock3 = 0 -PreviewDetail_Rambank_ScreenBaseOffset = 0 -PreviewDetail_Rambank_ScreenBaseBlock0 = 0 -PreviewDetail_Rambank_ScreenBaseBlock1 = 0 -PreviewDetail_Rambank_ScreenBaseBlock2 = 0 -PreviewDetail_Rambank_ScreenBaseBlock3 = 0 -PreviewDetail_Rambank_Vrams = 7 -PreviewDetail_Rambank_0000Vram_State = 58 -PreviewDetail_Rambank_0000Vram_CurrentSize = 4096 -PreviewDetail_Rambank_0000Vram_MaxSize = 131072 -PreviewDetail_Rambank_0001Vram_State = 56 -PreviewDetail_Rambank_0001Vram_CurrentSize = 0 -PreviewDetail_Rambank_0001Vram_MaxSize = 131072 -PreviewDetail_Rambank_0002Vram_State = 24 -PreviewDetail_Rambank_0002Vram_CurrentSize = 0 -PreviewDetail_Rambank_0002Vram_MaxSize = 131072 -PreviewDetail_Rambank_0003Vram_State = 24 -PreviewDetail_Rambank_0003Vram_CurrentSize = 0 -PreviewDetail_Rambank_0003Vram_MaxSize = 131072 -PreviewDetail_Rambank_0004Vram_State = 120 -PreviewDetail_Rambank_0004Vram_CurrentSize = 0 -PreviewDetail_Rambank_0004Vram_MaxSize = 65536 -PreviewDetail_Rambank_0005Vram_State = 248 -PreviewDetail_Rambank_0005Vram_CurrentSize = 0 -PreviewDetail_Rambank_0005Vram_MaxSize = 16384 -PreviewDetail_Rambank_0006Vram_State = 248 -PreviewDetail_Rambank_0006Vram_CurrentSize = 0 -PreviewDetail_Rambank_0006Vram_MaxSize = 16384 -PreviewDetail_Effect_State = 524288 -PreviewDetail_Effect_AlphaCoefficient0 = 0 -PreviewDetail_Effect_AlphaCoefficient1 = 0 -PreviewDetail_Effect_BrightCoefficient = 0 -PreviewDetail_Effect_BgMosaicSizeX = 0 -PreviewDetail_Effect_BgMosaicSizeY = 0 -PreviewDetail_Effect_ObjMosaicSizeX = 0 -PreviewDetail_Effect_ObjMosaicSizeY = 0 -PreviewDetail_Window_State = 32768 -PreviewDetail_Window_WindowRect0Left = 0 -PreviewDetail_Window_WindowRect0Right = 0 -PreviewDetail_Window_WindowRect0Top = 0 -PreviewDetail_Window_WindowRect0Bottom = 0 -PreviewDetail_Window_WindowRect1Left = 0 -PreviewDetail_Window_WindowRect1Right = 0 -PreviewDetail_Window_WindowRect1Top = 0 -PreviewDetail_Window_WindowRect1Bottom = 0 diff --git a/build/tests/TestMaker/banner/font/Scene/Scene0.nsn b/build/tests/TestMaker/banner/font/Scene/Scene0.nsn deleted file mode 100644 index 59c312c0..00000000 --- a/build/tests/TestMaker/banner/font/Scene/Scene0.nsn +++ /dev/null @@ -1,54 +0,0 @@ -INTELLIGENT SYSTEMS Co.,Ltd. NITRO-CHARACTER layout format version 1.00 -#PROPLIST.VER 100/LINE 49 -FILE.VERSION = 1 -PALETTE.DOCUMENT0 = ..\ColorPalette\font.ncl -PALETTE.COUNT = 1 -PREVIEW.DOCUMENT0 = ..\Preview\Preview0.npv -PREVIEW.COUNT = 1 -CHARACTER.DOCUMENT0 = ..\Character\font.ncg -CHARACTER.DOCUMENT0.FRAME0.WindowPlacement = 0:1:-1:-1:-4:-30:107:187:1251:751 -CHARACTER.DOCUMENT0.FRAME0.LayerID = 0 -CHARACTER.DOCUMENT0.FRAME0.View0.Grid = 1 -CHARACTER.DOCUMENT0.FRAME0.View0.Mag = 2 -CHARACTER.DOCUMENT0.FRAME0.View0.Scroll = 0,0 -CHARACTER.DOCUMENT0.FRAMECOUNT = 1 -CHARACTER.COUNT = 1 -SCREEN.COUNT = 0 -OBJECT.DOCUMENT0 = ..\Cell\Cell0.nce -OBJECT.DOCUMENT0.FRAME0.WindowPlacement = 0:1:-1:-1:-1:-1:156:74:857:824 -OBJECT.DOCUMENT0.FRAME0.LayerID = 2 -OBJECT.DOCUMENT0.FRAME0.PaneWidth0 = 150 -OBJECT.DOCUMENT0.FRAME0.PaneWidth1 = 527 -OBJECT.DOCUMENT0.FRAME0.PaneWidth2 = 0 -OBJECT.DOCUMENT0.FRAME0.TreeWidth = 93 -OBJECT.DOCUMENT0.FRAME0.List.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME0.List.Cursor = 0,7 -OBJECT.DOCUMENT0.FRAME0.List.HeaderWidth = 64,256 -OBJECT.DOCUMENT0.FRAME0.View.Grid = 1 -OBJECT.DOCUMENT0.FRAME0.View.Mag = 4 -OBJECT.DOCUMENT0.FRAME0.View.Scroll = 832,320 -OBJECT.DOCUMENT0.FRAME0.Tree.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME0.Tree.Cursor = 0,0 -OBJECT.DOCUMENT0.FRAME0.Tree.HeaderWidth = 30,30,32,32,25,30,20,33,20,60,38,30,21,33,35,20 -OBJECT.DOCUMENT0.FRAMETYPE0 = 1 -OBJECT.DOCUMENT0.FRAME1.WindowPlacement = 0:1:-1:-1:-4:-30:45:26:1239:777 -OBJECT.DOCUMENT0.FRAME1.LayerID = 1 -OBJECT.DOCUMENT0.FRAME1.ColumnSize0 = 231 -OBJECT.DOCUMENT0.FRAME1.ColumnSize1 = 284 -OBJECT.DOCUMENT0.FRAME1.ColumnSize2 = 636 -OBJECT.DOCUMENT0.FRAME1.AnimeList.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeList.Cursor = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeList.HeaderWidth = 59,34,256 -OBJECT.DOCUMENT0.FRAME1.AnimeView.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeView.Cursor = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeView.HeaderWidth = 43,37,40,40,40,40,40,256 -OBJECT.DOCUMENT0.FRAME1.Anime.Grid = 0 -OBJECT.DOCUMENT0.FRAME1.Anime.Mag = 4 -OBJECT.DOCUMENT0.FRAME1.Anime.Scroll = 832,0 -OBJECT.DOCUMENT0.FRAMETYPE1 = 2 -OBJECT.DOCUMENT0.FRAMECOUNT = 2 -OBJECT.COUNT = 1 -MULTICELL.COUNT = 0 -NITRO-CHARACTER Scene format version 1.00 -#PROPLIST.VER 100/LINE 1 -Scene.Comment = diff --git a/build/tests/TestMaker/banner/font/workset.ini b/build/tests/TestMaker/banner/font/workset.ini deleted file mode 100644 index 75afb17d..00000000 --- a/build/tests/TestMaker/banner/font/workset.ini +++ /dev/null @@ -1,4 +0,0 @@ -[LastScene] -File=Scene\Scene0.nsn -[Recent] -ExportFolder= diff --git a/build/tests/TestMaker/banner/parental/Cell/Cell0.nce b/build/tests/TestMaker/banner/parental/Cell/Cell0.nce deleted file mode 100644 index 32c9539e9911a540315a4f05d7f77a4ee6256bcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5104 zcmeHL&2Cab6do%6#F)rL7cNYu4`4{&Kw(5}dZC11;-ZNXLevClLwEom&xMOFT=*E= z7x4BwXYRmUI79idx+o`|zwi9cIh@;MTK2S_{VA8GPn4>t$I3R6fK|l}Ti@&fJi=nNG6|5)i>gByhFXF+NnC4N^C3C|u{hiO0?$h?S271wI!< zX5xe!(#4-hz&U&;SQG)zKvAbLR{?4|}o>l6Z*IiDoU@q+c&2p*^w zE=GzIPOh_0_i;lEgW@DhoL^ajea84u<=pdqeg5a`+&5wDj2x!$=lqhsrv;IjxHAVm z{D}m-;9nG41DxenmL(sHArNFx1gJ8LCO>2=D^UZk#t=>5_XRghDdrSHsYywE1?}s< zA~_2zB-Qm+h;x>aY09`OOvt558BA+^UkZxC;hO$N{qZ}ak^kP|d*A=a0rEh#;g1S^ zEVd<~{xCc1Z?XQH`7#iv04Z7;1wwrh0aJ=OW#0?^?G=}l3zmYzzW;+{NL$V_s)4RT z(wF)lY?Jr*&h@{E{+6y3V*C1s*;v}U>KiIOeOQ<4A84#me*tNr@5|dx`%rpY zpyvU8BiLZAwT_#=19`GRZxc#A23Q+5DQ>El$G2T=QcqswwtijyP^(7cL$~AanH;xHNUvHwvtN4SUVkzepI!9E VgVCfn{MbJqO~&WL>Zt!2GFM?jo!0;W diff --git a/build/tests/TestMaker/banner/parental/Character/parental_control.ncg b/build/tests/TestMaker/banner/parental/Character/parental_control.ncg deleted file mode 100644 index ae83167b8a58fcdaae4b0240935895dc3e74104a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4336 zcmeHLL2AP=5LBVZ9wO*nc|qtGf)8zJ8%oGAP)x|p#3A@0eQNcAs*Y4ztv6L( Xe5}e%wJVFsW>wG*v$xseZokzZ>tRXO diff --git a/build/tests/TestMaker/banner/parental/ColorPalette/parental_control.ncl b/build/tests/TestMaker/banner/parental/ColorPalette/parental_control.ncl deleted file mode 100644 index 99910793f61513f912c7ab4c8e03e832414baf7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 556 zcmeZscJ}%IkAYE#iGe|Yfr%l&(I-Rz%m(p6V1bOGn?&;e`gOY7-R8&VN`@)f>-%zw zvE66-SO32rq(YoQTfexjq3l4}i!$DFqw3P?sO(+!d&}=tQ&S#fHgC02br25oUz9=Q v%IaaZqq+~|(rn%LwlB(FRDo37tHzWEse!19%0|dTL`Np+?CTf81NAxp5;SL7 diff --git a/build/tests/TestMaker/banner/parental/Preview/Preview0.npv b/build/tests/TestMaker/banner/parental/Preview/Preview0.npv deleted file mode 100644 index b57efd88..00000000 --- a/build/tests/TestMaker/banner/parental/Preview/Preview0.npv +++ /dev/null @@ -1,104 +0,0 @@ -#PROPLIST.VER 100/LINE 103 -PreviewDetail_State = 0 -PreviewDetail_Version = 4 -PreviewDetail_Comment = -PreviewDetail_Bg_State = 18 -PreviewDetail_Bg_NormalPaletteFile_State = 9 -PreviewDetail_Bg_NormalPaletteFile_FileName = -PreviewDetail_Bg_NormalPaletteFile_DataSize = 0 -PreviewDetail_Bg_Screens = 1 -PreviewDetail_Bg_0000Screen_State = 0 -PreviewDetail_Bg_0000Screen_ScreenFile_State = 11 -PreviewDetail_Bg_0000Screen_ScreenFile_FileName = -PreviewDetail_Bg_0000Screen_ScreenFile_DataSize = 0 -PreviewDetail_Bg_0000Screen_CharacterFile_State = 10 -PreviewDetail_Bg_0000Screen_CharacterFile_FileName = -PreviewDetail_Bg_0000Screen_CharacterFile_DataSize = 0 -PreviewDetail_Bg_0000Screen_ExtendPaletteFile_State = 9 -PreviewDetail_Bg_0000Screen_ExtendPaletteFile_FileName = -PreviewDetail_Bg_0000Screen_ExtendPaletteFile_DataSize = 0 -PreviewDetail_Bg_0000Screen_BgSurface = -1 -PreviewDetail_Bg_0000Screen_PositionX = 0 -PreviewDetail_Bg_0000Screen_PositionY = 0 -PreviewDetail_Bg_0000Screen_StartPositionX = 0 -PreviewDetail_Bg_0000Screen_StartPositionY = 0 -PreviewDetail_Bg_0000Screen_AffineParam_ScaleX = 1.00 -PreviewDetail_Bg_0000Screen_AffineParam_ScaleY = 1.00 -PreviewDetail_Bg_0000Screen_AffineParam_Rotate = 0 -PreviewDetail_Bg_0000Screen_Priority = 0 -PreviewDetail_Bg_0000Screen_ScreenSizeX = 0 -PreviewDetail_Bg_0000Screen_ScreenSizeY = 0 -PreviewDetail_Bg_0000Screen_CharacterSizeX = 0 -PreviewDetail_Bg_0000Screen_CharacterSizeY = 0 -PreviewDetail_Bg_0000Screen_Comment = -PreviewDetail_Bg_3DPriority = 0 -PreviewDetail_Cell_State = 17921 -PreviewDetail_Cell_MultiCellFile_State = 13 -PreviewDetail_Cell_MultiCellFile_FileName = -PreviewDetail_Cell_MultiCellFile_DataSize = 0 -PreviewDetail_Cell_CellFile_State = 4 -PreviewDetail_Cell_CellFile_FileName = ..\Cell\Cell0.nce -PreviewDetail_Cell_CellFile_DataSize = 5108 -PreviewDetail_Cell_CharacterFile_State = 2 -PreviewDetail_Cell_CharacterFile_FileName = ..\Character\banner_anm_idea03_ALL.ncg -PreviewDetail_Cell_CharacterFile_DataSize = 4096 -PreviewDetail_Cell_ColorPaletteFile_State = 1 -PreviewDetail_Cell_ColorPaletteFile_FileName = ..\ColorPalette\banner_anm_idea03_1 ̃Rs[.ncl -PreviewDetail_Cell_ColorPaletteFile_DataSize = 512 -PreviewDetail_Cell_Animations = 1 -PreviewDetail_Cell_0000Animation_State = 1 -PreviewDetail_Cell_0000Animation_LabelId = 0 -PreviewDetail_Cell_0000Animation_LabelName = CellAnime0 -PreviewDetail_Cell_0000Animation_PositionX = 128 -PreviewDetail_Cell_0000Animation_PositionY = 96 -PreviewDetail_Cell_0000Animation_Comment = -PreviewDetail_Rambank_State = 0 -PreviewDetail_Rambank_CharacterBaseOffset = 0 -PreviewDetail_Rambank_CharacterBaseBlock0 = 0 -PreviewDetail_Rambank_CharacterBaseBlock1 = 0 -PreviewDetail_Rambank_CharacterBaseBlock2 = 0 -PreviewDetail_Rambank_CharacterBaseBlock3 = 0 -PreviewDetail_Rambank_ScreenBaseOffset = 0 -PreviewDetail_Rambank_ScreenBaseBlock0 = 0 -PreviewDetail_Rambank_ScreenBaseBlock1 = 0 -PreviewDetail_Rambank_ScreenBaseBlock2 = 0 -PreviewDetail_Rambank_ScreenBaseBlock3 = 0 -PreviewDetail_Rambank_Vrams = 7 -PreviewDetail_Rambank_0000Vram_State = 58 -PreviewDetail_Rambank_0000Vram_CurrentSize = 4096 -PreviewDetail_Rambank_0000Vram_MaxSize = 131072 -PreviewDetail_Rambank_0001Vram_State = 56 -PreviewDetail_Rambank_0001Vram_CurrentSize = 0 -PreviewDetail_Rambank_0001Vram_MaxSize = 131072 -PreviewDetail_Rambank_0002Vram_State = 24 -PreviewDetail_Rambank_0002Vram_CurrentSize = 0 -PreviewDetail_Rambank_0002Vram_MaxSize = 131072 -PreviewDetail_Rambank_0003Vram_State = 24 -PreviewDetail_Rambank_0003Vram_CurrentSize = 0 -PreviewDetail_Rambank_0003Vram_MaxSize = 131072 -PreviewDetail_Rambank_0004Vram_State = 120 -PreviewDetail_Rambank_0004Vram_CurrentSize = 0 -PreviewDetail_Rambank_0004Vram_MaxSize = 65536 -PreviewDetail_Rambank_0005Vram_State = 248 -PreviewDetail_Rambank_0005Vram_CurrentSize = 0 -PreviewDetail_Rambank_0005Vram_MaxSize = 16384 -PreviewDetail_Rambank_0006Vram_State = 248 -PreviewDetail_Rambank_0006Vram_CurrentSize = 0 -PreviewDetail_Rambank_0006Vram_MaxSize = 16384 -PreviewDetail_Effect_State = 524288 -PreviewDetail_Effect_AlphaCoefficient0 = 0 -PreviewDetail_Effect_AlphaCoefficient1 = 0 -PreviewDetail_Effect_BrightCoefficient = 0 -PreviewDetail_Effect_BgMosaicSizeX = 0 -PreviewDetail_Effect_BgMosaicSizeY = 0 -PreviewDetail_Effect_ObjMosaicSizeX = 0 -PreviewDetail_Effect_ObjMosaicSizeY = 0 -PreviewDetail_Window_State = 32768 -PreviewDetail_Window_WindowRect0Left = 0 -PreviewDetail_Window_WindowRect0Right = 0 -PreviewDetail_Window_WindowRect0Top = 0 -PreviewDetail_Window_WindowRect0Bottom = 0 -PreviewDetail_Window_WindowRect1Left = 0 -PreviewDetail_Window_WindowRect1Right = 0 -PreviewDetail_Window_WindowRect1Top = 0 -PreviewDetail_Window_WindowRect1Bottom = 0 diff --git a/build/tests/TestMaker/banner/parental/Scene/Scene0.nsn b/build/tests/TestMaker/banner/parental/Scene/Scene0.nsn deleted file mode 100644 index 2872adb9..00000000 --- a/build/tests/TestMaker/banner/parental/Scene/Scene0.nsn +++ /dev/null @@ -1,54 +0,0 @@ -INTELLIGENT SYSTEMS Co.,Ltd. NITRO-CHARACTER layout format version 1.00 -#PROPLIST.VER 100/LINE 49 -FILE.VERSION = 1 -PALETTE.DOCUMENT0 = ..\ColorPalette\parental_control.ncl -PALETTE.COUNT = 1 -PREVIEW.DOCUMENT0 = ..\Preview\Preview0.npv -PREVIEW.COUNT = 1 -CHARACTER.DOCUMENT0 = ..\Character\parental_control.ncg -CHARACTER.DOCUMENT0.FRAME0.WindowPlacement = 0:1:-1:-1:-4:-30:404:56:1548:620 -CHARACTER.DOCUMENT0.FRAME0.LayerID = 1 -CHARACTER.DOCUMENT0.FRAME0.View0.Grid = 1 -CHARACTER.DOCUMENT0.FRAME0.View0.Mag = 4 -CHARACTER.DOCUMENT0.FRAME0.View0.Scroll = 0,0 -CHARACTER.DOCUMENT0.FRAMECOUNT = 1 -CHARACTER.COUNT = 1 -SCREEN.COUNT = 0 -OBJECT.DOCUMENT0 = ..\Cell\Cell0.nce -OBJECT.DOCUMENT0.FRAME0.WindowPlacement = 0:1:-1:-1:-1:-1:275:56:852:806 -OBJECT.DOCUMENT0.FRAME0.LayerID = 2 -OBJECT.DOCUMENT0.FRAME0.PaneWidth0 = 150 -OBJECT.DOCUMENT0.FRAME0.PaneWidth1 = 403 -OBJECT.DOCUMENT0.FRAME0.PaneWidth2 = 0 -OBJECT.DOCUMENT0.FRAME0.TreeWidth = 93 -OBJECT.DOCUMENT0.FRAME0.List.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME0.List.Cursor = 0,7 -OBJECT.DOCUMENT0.FRAME0.List.HeaderWidth = 64,256 -OBJECT.DOCUMENT0.FRAME0.View.Grid = 1 -OBJECT.DOCUMENT0.FRAME0.View.Mag = 4 -OBJECT.DOCUMENT0.FRAME0.View.Scroll = 832,320 -OBJECT.DOCUMENT0.FRAME0.Tree.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME0.Tree.Cursor = 0,0 -OBJECT.DOCUMENT0.FRAME0.Tree.HeaderWidth = 30,30,32,32,25,30,20,33,20,60,38,30,21,33,35,20 -OBJECT.DOCUMENT0.FRAMETYPE0 = 1 -OBJECT.DOCUMENT0.FRAME1.WindowPlacement = 0:1:-1:-1:-4:-30:12:111:1206:862 -OBJECT.DOCUMENT0.FRAME1.LayerID = 0 -OBJECT.DOCUMENT0.FRAME1.ColumnSize0 = 231 -OBJECT.DOCUMENT0.FRAME1.ColumnSize1 = 284 -OBJECT.DOCUMENT0.FRAME1.ColumnSize2 = 636 -OBJECT.DOCUMENT0.FRAME1.AnimeList.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeList.Cursor = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeList.HeaderWidth = 59,34,256 -OBJECT.DOCUMENT0.FRAME1.AnimeView.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeView.Cursor = 1,6 -OBJECT.DOCUMENT0.FRAME1.AnimeView.HeaderWidth = 43,37,40,40,40,40,40,256 -OBJECT.DOCUMENT0.FRAME1.Anime.Grid = 0 -OBJECT.DOCUMENT0.FRAME1.Anime.Mag = 4 -OBJECT.DOCUMENT0.FRAME1.Anime.Scroll = 832,0 -OBJECT.DOCUMENT0.FRAMETYPE1 = 2 -OBJECT.DOCUMENT0.FRAMECOUNT = 2 -OBJECT.COUNT = 1 -MULTICELL.COUNT = 0 -NITRO-CHARACTER Scene format version 1.00 -#PROPLIST.VER 100/LINE 1 -Scene.Comment = diff --git a/build/tests/TestMaker/banner/parental/workset.ini b/build/tests/TestMaker/banner/parental/workset.ini deleted file mode 100644 index 75afb17d..00000000 --- a/build/tests/TestMaker/banner/parental/workset.ini +++ /dev/null @@ -1,4 +0,0 @@ -[LastScene] -File=Scene\Scene0.nsn -[Recent] -ExportFolder= diff --git a/build/tests/TestMaker/banner/shop/Cell/Cell0.nce b/build/tests/TestMaker/banner/shop/Cell/Cell0.nce deleted file mode 100644 index becd71774319333118b74774e36603b3341ca2c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6260 zcmeHL&u6kh-Cp;A2>J#yfNBLcV=+6( zm`asO*>=>lZHDq6BVgHa7QGWs2577W8!h`bJTKfCx(?t?iYNp_+7{#n|H2CV<^JD} zvDAVxKPb8wwojcsW3m6O{g20@NXE0VqEh(kB_aj^rG={4ihtul)~T z|6{aKs{Ln-nX%YSLcCKVe@OdJhetG!vZI>`{Aj#q6Q%bP@)j;`r;F{V|6P{z4e6A28 zUyB?qexH^2A{+oA2;;eI2Ei0jKjDSKxaVwvhggPZ$^L}w(Y=sGkRI^;7qi(n2w&ls z=*%;r63-kuJmWuysChwnb~#=uEb(Fp;y{W^r6PqiLZMVBgo>e%Q*@l7hmjJMQYpus z%o2A(i`-eva%agwuo(o4DQS>n#o}S%gr=ng4RZo0l^~s5k)J>~gNb4op~GpVB32kv zsT&O;%I@>W#t#udYF7I3$(;@))32Z0E8h-R4Zi!h*EYmAVMCvZ#>#8QG(Iy@DV;VE^4ph-W24%ggT&Gj%+qS9zoMXkIdYT;#3Tds)ON)5r55iF*pL6y1g zY5k0*r34Lg1}K#vYgJdAK?H+|Vi>8zd8;MY7*nbHeJPv0mo3&`RqClv>y?!1-eVpk z1KDQHSM6?ue632f z81Gwd!IyvU>ihT#+*1TianpI|^EV}}{`Ieil}@E;o#|fuw_ktxQ`!1%f6vc@^xd6r tDV^5WA6P#*$IioN`QryaI7dhM;{)gD$-$!^^Ug-{z)Yvtj~*Tx#vcbIvkCwJ diff --git a/build/tests/TestMaker/banner/shop/Character/banner_anm_idea03_ALL.ncg b/build/tests/TestMaker/banner/shop/Character/banner_anm_idea03_ALL.ncg deleted file mode 100644 index 383dda18311a3b63a096cb762263b7b604b81517..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4336 zcmeHLO>f&q5LJO5d&ubf6Nng{jWF^bptL|+BsHqQj4lBJwv~(mt^)><_N*JDQ+bPg z<4xL|&WsK`M?UZ@?SJSmX#3Wt1lw4mJ|sv1=Mm$b-I?Kx1-==AN8RrC|NNc#=C22t z%!ACgneGqP^E~v2nGAMUVEB{SL7;9RL5!TO!|IGi$piWL(pQ_1tg8EXe zcc}WF}$RBv#wS%1jtE_G1ik2T&>zd+nU1BFc&_>ol zV4wyexeAwP1~K%lT(564J6y{eEoG?ux5^*k>kv&M0rJOTceeZ;pFFOu}(YBtSrQYSow~nTH+qIUuf&}~kvm13J0*u-QW4}8lk!|l&V4c2UFXn}CXn!TD(17Q2+9y2 z5>)4bY6*MH=CfHjD3|@f_k#p`Bb51kD*Q=R_~nZ5E1vMHzPO|!$Saq%ja*(ta=E)M zpe0Qp;p<9n)(sigAQ2>PY+}_C_E>M$>snl^MR63x3HC-Po6Sl_%Z7| z{J;Ky-bbC9cv-;Xz>T8#xc^60tXJ*S{T?iw%Xwq=%VOV3Nr=U-+domoW zv95)p`54d|ap?42K8A3Dizbbr35GRBdJ3i#1n0Ab8tYmpnlAvY5r_UX5DSPPxMEP|#!OLHqv$MgQSI*fVuYUh+;5=?0oc($VzwS>*$KNHT F{tJ!qCVc<^ diff --git a/build/tests/TestMaker/banner/shop/ColorPalette/banner_anm_idea03.ncl b/build/tests/TestMaker/banner/shop/ColorPalette/banner_anm_idea03.ncl deleted file mode 100644 index da86752218073033e1ee62e7bd387771c9c8c825..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 556 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 diff --git a/build/tests/TestMaker/config/romparam_forCLStest.yaml b/build/tests/TestMaker/config/romparam_forCLStest.yaml deleted file mode 100644 index 72206362d078810a9f5e7844ba935fb3335db04f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8136 zcmd^@&ubG=5XVOlg#HB{1HBZ%FlkzU^j3{gv`r-0TC_-sNwhI-QriTypwOee2t9fe z{3kpKg5uSKe}G5v;vXRDclKrbvdOO5-E5N=%OlxjcV^zad7qg#$)DfTbl%W0Mbng^ zHM&YmRK%xG{Ek2KO#41Q7bs85xPIa9{EdI{dp=Wsz4n#g@LT@DqN%iHZHXQW37TnZ z3w8duzW?$uYfFdxf;V`dAM)9QpRZPNy~%moW&*ZkoVJpC+Je?>@a_RWuXBYn&}#B2 zK1VW=^prMf7n+Csq4?;Da7Y|kJoJi-WiFGj6FmA7>Y%dnD!?G6zu#v^p`7Zaa zQ;D{yihXZV1y{MZfY%MW2i?Vvrrf=Qr#sl08YCOGoRVbh7~3P&CA~=77#2OlyRxdJ zi*y%WSac0cDzC)$61-@`YMC}VmX)*xpI0EOC6{5X0v}38a!N7>Uvre{lFUG+g;ySS zH{pk~vMeMeOS-KVVYLhoc8+}Yo8Q9RE!eAKHWfKXaurtBJ>sS{bTlNw7AXxC5xv4H zp48w?9doogs}%V%;=Y9;(O1$};6VdJ_C;2wR;VpyVMjdG&l2>YODBnM4d`l(-aVFi z(|GR3cnZ(Q&$xKuFddfhR0zgXHsv~6<}%)&H}Mkgj@lr?7wI;Jj+-ChQYoau2;n7= zTcbVPsdO|4(JqvSCtkF|Qa@`1_2NZT>SxDJy;l_;ZEg4RK$GlW-QBU%8pBn0)7W>; z47vJM|FjW#AYMexgLH^IkRB)g4#$ha;qxGP{r8$*Gwq)R?#O8k?<@#<0)+2z;;;Ha z$e%NUeDNX*`L{y$_Cfoe6}zi0be;5meZ3cT!&C2NHQv5w&Q&i?8ujx=P%mCYrQY4Q z_V#^}`SOb=+%MX3Qy;w6_e*Mm{VV-^DCUFynw`Xc=YkRZix*M(clWNN=D(l6(bjyg z^I=d1$XV%*n${Su*O|l&xM)NMh!;^az}>h0I|JhHdyXRm`fd94JW=^~$7~S)K~I25 z>Gdxe!Mu18g?afO-`%yw!~A6Zj~|8n{>Ys)@-G`fzIYLpe0T3U4)VRo8@}r~-kLAu KyCe5Mk^dL{+uBe7 diff --git a/build/tests/TestMaker/config/romparam_forEULAtest.yaml b/build/tests/TestMaker/config/romparam_forEULAtest.yaml deleted file mode 100644 index 1f9532f937a625523b0be8e863724ba248544e0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5004 zcmeH~!ERDP6o!w9iAkTpg$qJAT_`zFSHul1P;DrfaH41{GGq?FMiLLTCeM0`3=A2A1tvdUUru_#z@e@ zz%Y9Jp>cS0pAG93AMiFG@?E|>{P}VN^D0*YY63JF7roTJA(%*?_lEqe$8F9dYKJfI z=kkljmF|t9A7m-<5)jRlfm-eU&r61^&lIaPusA1GOdW7N8Q~Xp^rLLid z0xB`e67mc{Y|-|Js+1m7HE4};4Wu^mH^(}qEThgca|8KrV;Fr0pLCJG2WEe?FVRca zq}$T#CNg$uA1m!qXRMoA-t_nL<&znB2AR-Y!^eCRn)DCdKPk> zl4I9s&|^yD`6||vIKK|vLp`#GEJ=KlHbcY$x~NHdjzg6AD6xo~nxyAAM2U|QSFkrt z(sLZ5#7Bv@aN?Sz=Qu=(j}ogBo{YptiOUn7jKoKYHzy=Yydj$3bm6<7!)=pqarpL2 zXOBCH?Y^gRJ8gcR2I>6$T&mD}j_c=JGe7^w`;A-A{9L@~Bp=G)dw05iZX>$;xsB-V z=Qg6dpWBG;er_YW`?-zi?&mh*+4y-T@N=7^XQsl@r3zO^Z_ONi=IFRTYW(kC=!>WB n=r*FequYq?j&38mJGzbN?&vn6yQABP?v8FFo{gi+f24l_c->^~ diff --git a/build/tests/TestMaker/config/romparam_forFATFSPermissiontest.yaml b/build/tests/TestMaker/config/romparam_forFATFSPermissiontest.yaml deleted file mode 100644 index 980299c94e8337e09f8837ff500967626e3c1583..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29196 zcmeI5O>Y}j6oxMn5>kHw3l>qj>4KW;d?#X)&z6!e#SRsUswhod8cNctNf1 zyPnhKio5Ct+=iQX>u%9aMPAErtl8iJF(_!ZUO7?*q*!Lw%nd;xLMS^gS9<3g&&Vdk7Fs>(w=<} zuReAMZWodJ&A1Tx2_lmvMo+s(SnBRm{F`J=qSsNwJSvHii>TlT8Mod2ldMT(9Z~Cu zjgd>pv;+RuXtRVkKs3q*(0`_dNSxL-ZL-uV{^7ypgB>RhE z>!{)o85?dH*{%JO*qALw#5S;Yt-ISGZ-T#yCC1m>9NvSZ{%O>)jhqKqcn!vuN-TGp zc2h{R+>y3|KKAhB>`0&AYv`-@aGqHoyp7gx;L#(T@zyJbKC1#(y@m7pz}>?-aoBal z*3e5?e|Ugc%ThUsiT%JjUTfey-bMegg{(L6Xsc3kmk&LEsB%^5@ z$!Ho!GFovQIh+eeS{0o-a=3J4P8^xGo?T1w>&SF$uNrbVQ$sSE#*mDrF(jjD49RF3 zLo%Aikc_4=B%>9_kR!P;q*c+WAx8v;thx8`Np~INAWJQu;^uu!GHo3*RQx10n-R&g z6%^f(Bbhpq(KL=^G>sz}P2)&L(>RjRG>&96jUySYIF206g(IzsP8~TaaHQg%onVVN z7FgtabyhKseitL;yBJZgVT}A^jFgA{t>M`xr=#)Sz1#A4$STI%cM+Y8*Pmz0T9ep% zJsR)zu{$i%{%(zn$DaLN5w{9ss`h$b?hqQy)X9vdaWbQ6oXlt%Co`JH$&99PGNWmn z%xJ}N@)&xX%fCa&s_4|oW2KW}z1BNW;BhJ z8BJqlM$=fC(KJ?OG>w%RtvFU5&xMt(icYOOURt@Qt=#U`@>==j-=-PQ)XI#eu`;7+ ztjuT{D>ItL%8aJ5GNWm%%xJ~2@<%!bDeQV`*qxZ+v@qi(KKFWG>w-TP2*)oD~^{ZbKzyHqEjzVmR`POFQ-RrZ8SEEPq5SD(fwiM$xMyR zXc{9kn#RbCrZF<3X^hNh8Y45B#>k9T93xjTyG$O&m6JL;weoan<-W9Xe_kouxsvT{ z7mTNIGv7arojFhAXU@|Yn)5V{<~)t1Ij=~b&dUr@7nvh!ru1|Vd%E4W#gxsmf!o@V=}@-*YAJk5A2Pcxp%(~PI`G~*S?)A^XCs_HH>Pt|Pc=|1&zyW{)g zlWsd(vb~~aJe8>#Pi1PxQ<<9aRHkM;m8ls|WopJNlBx4CS60#nY#DH^zXLR86P5hg*UF;|wUC5iKG{y)y8;^L;k>UwCPN_WO zEWR$sG5zld+Gz1#^8XC4D2Oc;Qe%B0{o0yrf)DUQOEBkCGi&@9G0s>s8{22TH?mG~ zUo&fLLfn{W8#^FdMips`)Yym_BlMQAJ)$a(A-Nx^q*-4`Y+vcHnPW0fsbkja)y%8W z2{lw?&6!nKvC(`*?pxL{z=XrjU}8*Nq}~a1On?iT9g*{2K~)dTQ`IY$2&t*;hU`U3 z6$KXbWNqvTy(LXhvTD6@n^`;|<75Q};o;7T?C`53gB$0b1yOXQP=Z|D7YD>_vL__B zs1qHg3r0Kz-|LIHv!`w?bfrCZ#I`Ti^~JSQ!~fhDzvaF-{9#`#oITz4#qzyn&iMNK N;>M|=iTR87#TPei6ng*w diff --git a/build/tests/TestMaker/config/twl_parentalcontrol_spec.yaml b/build/tests/TestMaker/config/twl_parentalcontrol_spec.yaml deleted file mode 100644 index 70502ddcee150015f3b84eb0d9024ec8469a6eb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1894 zcmd5+y)Oh&5T8OK@mFl3Q8=07d_;H0xi}w(I}+KP3*sxso}9Zzr$nu}MqDHcrAnm} ztwN&{m7r1*{NBDD&z|ofxoqCf?!I|5zxmB?=jpMY0#$m|Q9W5?(>a& zgm3u)&&Pa-=Z0b$UL%yC0oYT%;tT8^aqV=;KI0wUg{O+7qp4c0FCsde;Wc*LQx?4S zRg-F3y|VA;F2|CIEXR46H#x9TvI`Sa+cdbhE;*`~%{uC$sLPbpq--aajTNU!TE=py z(W_YPs+}R68l-OO#XaWk_8>|Wm+}l!hiBV8+v?e7*Yc}qCa>yQ8a;_p60ssaA3+qR zC7Pi;EzmS@399cP5+p4i6828FxwgfZO)v?fQ6TE8@DM~%DgsXqJk7k|`58wVL69^z z7U}oTIa2(`zK)c z`IW78ulWkSC`%9}fTG{UAqq2y!qCwQ6`-X_T7}s6hmv*nE}91t2X7W-xx6)w`S#J|RdX-L`?Do`j>j=4V{iUpQ>#CVaG`3IDI(u~ XZw>cqQU!gi$UkiAl!>D9{x6D^!GRq=md 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%0A$=OvY$f>k^( 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%0As=VhFnf(1M;gDFAI2He6r_d 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 z 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 z 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

  • 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

    jXZKPw%h35 z6fX5rrz3CI~w@8;0rFvqlNsj^>gkE0PiaL%JbAn_gf#_its|gBifO?NC@fi+o(M6SV9H>wtw%wva0> zifC4~Lq(#JzJbS?q5v&B@IKxWIz_8CECg3tC^X9z$k722P%@Pp(M$oUAJ;{VNc$}i zGZEBtfmNsjvFmf`QBw;ti9)5Pp94nYqM-@xazdpU#k^e^yDp8}Kw7?c_>ns>= z#F8@`t(Q7Fg{R2;J~`}wm6o6Z+xbZZnt_Tk6-Aj=-sr2mQ zjne}{bdDp=QPE*az^n@(k%;uJoJ3@lz9p?`#LnzBk1J;*s(RI-u)WQWZxzKpYa_#Q z9Xde65m126H-ZvGsd=PPQ{=dwT>$k^J4HA0Y%U7*royfh4~<|TGf6N>RlAu+i6FYS_V%_85Sw~0$*1ATuovO~%f);1FSd*>w;vhEL z=|yWw+or5(vQMJwfa>69M1kA~a4Nu#_0rD-{9S1&3aI=<6A`ah!E#b_m17jSIB=*y z2I|e?D}X;2%@`B8TtDjAbA~utS`zRb(oRtuuGF-fk4Vdo2Qt#!Ac}CTsxLGG_^g_= zlQRLX5jmX;M$AQkb=n?RF)ude4)Mvfxhfus>a*cZ1qLaK4NnL8fmHq=6&wp(o zkC(a62YXxpZGPnh&K<@bf7Zu>oihD=0r-MT@@OG{U(eI*!yh?*J(%aXo)~%>=Yc#o z-+8?A{3R%w9?smG&dFV>8`c?(Fq=tB#K=HueM^Hh;)+=NdJmy85nchLe!$?WJtAo2 zZ9{VBHDb<>v^-c%)(#CAJ7fglL|-ndDn|`>F6xv8Cuaz==HpEZp010U)VX;$?lhw= zkf5id@^Jv`)M2~h)pnp9{JS4$%^6XtrD#H$fu(EIH6wiil;+Dt(be({EWLBvNE$fO z8;O}~h=~8ApF}2^nbv`3(;S(*07R?dd5}AWRsjlPBQ3BEjq^bnmCla<`HevOM`WeN zzjIX9MP(-rR58*r&>Tvz&v?m+QB_~pp{+M^48)r>55#H-r}x0!)dNohZtlPVy~H{S&dbL=c!S?07ey@+Rp-RD**T+OYk- zk)Hd2JL_3fx+Cc#0q9pV6lnmzUFiz%4mdqezs15lu0^9`?}(c zm7e_J9oitPA+-Qb0Iu}|O~)Jp&8lvk`ITLq#KJH8tHx46GWi4W@*a1$2Ij z%8(*qsgCTUXgiOb3uK$-TqT$Bhf$APYH~eX+red8&<>Hwdx?q zkqamvN0lD!3J{yGsJT*TWE|I5jxvtg3P9J7)aZYfjWS+>cjUDwO7auh1sD_I3Q#9% zI!`~U*gC4%PN_a$J2&_}%}=E-+8j!q zoS$lVI9KizWrxA7Qy>Z-i3p#f$AO88%$D?RPIfkjl%?HZQf8@+(~p4k)Q_Zl6`bK5 z7ri1Qy{_-+sHCNb?d76>p!4v>D*CTY=kYT4`GDK|Z~fj0oI8v={;ZD$JL>%DH2z%h z1()Q}LjS=2l0Ucq2khjI(=EmWcqH{i*8?2vNFLn26ZJs89^yRWiR8Qjz(ht?%8!?l zlhZn?53zP8EiX(CEpVxNLwsE`l-5ze7t0o|e(DV=zDlG1Rj0tm>Bk9I9r7)p-3o-L z>1eo#SnYtpJL@?unBV75fEwc?YKm-8HK7REYX>d9G%7MKFj5n)n&b@}P(*xq6_BL@ zsb4vn8%b>;B_9(#MdfG(t~%JfT*Es>8!_ozdRV>mZhWN&wo|Iqj<$|Cp%M6PLGvUm z2TG{}RZLM|-_nE{A%`V95wM*B_}TGdZR_A65xg`qzmMAN)+ncnbyOQ+qm_XmcIrrC zBdyb%7)2p=l)N-)4QkO-2Od9;jKJn3(u*Zl>X0*G*j(sbii5ls;*7 zFr*4t%#q2^mua5VUM$K);EF^!YDFpvAN8tf_60kgX!WL0hSeSs`Qk*bXR%I7eWIkS`DI=;PF<@^~Pb)dc+wi?y^bd3%ne~5rAdi>1&j-E>|2}`~ z1kN4C--EM07VMz&m(Tcf!53VTM+?8~&+UJ1hbJ(P@pFp}EYS14K(}Ima{Q=fiv|&G zd8ixk*iIx*`bOq>PF%-H3s74-i1($$yyghiHMH|0BP0isnnH5z41=NEt}ml(S;^5` z*2z(lrKMfhH;p}C>!50?IcbiBwY0&GNDCy_GBY13%GBx&&Op&@+n|l6&fO_iuwiL- zDTKXQ~kS)u*YfdeUOkQPQ^mLuBL4gr2%r6Xo<${8Ls_F4jSsPBTK z28Wg$x$IOqb|_!zgtpE~hjjg0V8CmKFktdk^NqC5Lz`cethWpNs1rYucG9_wP}3Z{ zs40V5&as|B#NGh-4*{qM5TMaE=k^qFXj`y&j7sd}?5I$hRcW*>;OzNyQA0O}Giph? zJUifg)(a48>p+2LX`$4)rOUGGqUKEg8TcKkq_?NtW>mIS>01HWe=kC(a62mNR9 z_xpEF;M`&SJvi%Q!Hzk9`HVjoe8DAow9qHc7d?OUc=h|ibf+6m57*v`0zUWSy#c>D zka9nNR$w*`H^QALCSH-=ljmKpsG{U8Bp)o0nxjAwoz~O8otXkqG%H)W7E}kodX zthS)wf=1dwCaR3&WM2oTj=ZdZ&*KfbMhJl34}{oj(K&n6kyvOX%$GY=x&=5@h{&@a z&iPJ+ZSRl}U)9F2c#Uk1wbsEvz9j9G?G$E;vg4<;1GJlvBJf#%;8)Jz@iO=MK>w=# zK7Q>4&K<_zgR?#s?4;@E3&0m#l1B@E_o^#mBbrnr?s{p0&5@(3T}H1Qwz_t&Im*se zm|n~a%`r=}pKk!I2pX6bZ&%R~6EXd0P}`j5u|pIwMUS*HFw}_T>OcyO96Pg96N>8c@NfhoyKWN7o92xX46Y!lHqZr6yVQ<2tz0%^{B+o1|eYLc6SIv{Y_ z8O1G%Ip;t+G*@jz+EF`o)YuR$&4%wc(ji7ba}RBXF*)@%yMZaHz@vrckWrf5I7i2g zpmk`z!s`v~N~_LsfIB-Neb)A~fD5%iQl;rQz?^%cn=_l^z*SsyPET_Htqeqa8&zi$ zt~X^J*AoVCs&9cJ(`2z3-m*mlco;_dm{NWaxCwE^K=5Y+v z&F4q`{q{6mN1SAU!V26u(Q=L+^h3*AfO$s^iQe)19>SP;Jy3+-(*wtV%m& za~u?n*6_4|0~Jjm08S#>@Nwl-TF&|&Lc)lLc8cnpvZ{msl@@6Z?0~@12%X4eq*H!t z)y{w|deM|Hu}D+0FLTJI)RF^g@}mfi@udh>w$sq;jRcqxaF&76 z9|9MRpr!9R5~~BMqg|R%q#ZIq;N;L+`(Zy!XmA7zbYP(KwPU16Qg#L_fY`Y{nBj{Y zQ9uhg5#Y2yjbgizRm1(#0JADU)%l4udJC*g1dhH7NKqZ=inXY4)U*#x^*86(AzdOX z&A}^3nQeQE&IY4xTjy`C52`1}ZZck(nGd%h6cE~LM6MC6QOO%zoq7PbH+Z6@AAvb^ zk|S=xk=ucbMvdZH&G`erY9No7xz7i^5C4Au&Iz15jK2qGeJt29)6W-xFSsO+7V^io zPqSb3xA*^#H$8)S4)=c30~#=Dy8rU5_q~{h_(X=69Li2q0_+;e){zN7>+4GH>=af0 zs>zZZg!TGLpc<_M3j=lFO0`2#MX)*Ryo)Ws83O4PG}sQh9kMxb?|#i)0QPy&Thr?fe9aE+p1Ku*-=w^jvCB&1#v5?Yi!M5!T*NL)j@?F@3n zZrV0Q6LBHuAf+!$qg%DvXelDGv0xz94t`Q*S>TFfTRSRq8O8To>0{?E8fS4$q(%{1 z2RhxzgBG=8lej>M*gbv=% zT7@j&-i~zZcLL`Qo^NQUrdDA}zSCD?mUN60wCyD?goD ztPUiY7KqG`1S)p~5>XkVinz~=D#~#Ur!@C@O>|wW=X5&1ERmwR2(cqSmq4X+enoES z9WMsZK5gGL_Lu9@?tZAFrRgM+8O-@!AMNMEH22*WjMAJZ_d>(t+Cf!ccTub9d_Jm% zg|#EI%8^u?dxEPDx!iLxY6Bifa@^13`jEs*o!Qla0s)i%j7YHFRA~j^7A!4h(y6sN z-a%WGJqrQv{($E2I|lN2nfrX8+wA~qti?R3!Thpt5vr@-0sxpoN04mM9ev#px5T$KJ< zE5M6Z1mL~7KB($PH0d_yB~oeTC#LGmmX$i%AET|;>zmFP#<$iw9#C+{EWqf_wLmWt9FV;%Cvo`1Y zXS`cSy?|8orpf-~zZv}NK&I8VuD1@#TBd1RJItvLuszFHj?Enbv{UUDpuQ7bASJXj zD)9LiymnylZJI&7Nz2lvUEYqGc8y?#m7>;5+a?-VIxSodCL23;09ZA-+=xkWZQ)at zs%=|hwR0S(ABG@1CIyg;d|Yc^a0$#-mY{hzp9SK*1OKq2HYe6PY^&y)Zh>@`youDJ z_o$K)T9Cc{ps9lvHBr)|Dpa6S3qS>j#_8kwv;_s27CFN|MFpxRB|a)Go&c26P}Oqe z4`c$lBt`$V={#QMJ|FB|`M3F%6F7Gmcl=o&3wFx%^9A4wF3F>X{(vrwxvzW5Usobp6l3J+g3L>h-;^> zH*C&w9p~5qr?V`rW*#{g5U>5rxpU?h6WGDCzan(2qPO%A{3W&I+Z!~d+8hxBs1j+H zd@ntm(yVsuNTJfQQ0dbgj^PmzziJW7jWnlMj`wn%ZD@leC^Z`6>o{1W&U(Ehsp1wQ z7H=pcx6)`Vn1I#pezL!Zc+sRMZ^J|Rp26k1bzrbRMGJ^Xqn$p$sWU~iN_zl2WFS9i zl26XR1@4IVHYzV8zD2QGaEgYOhy`9jggpcKqV-obdS*3pk5>WZkPGty1IhUxB1*6H z2xzI!ANXzmGvvq1+~zzCq=Q$1NzuDcBJ3{*2&M%o@2iw~ zmPTQ|QwMP8Tx#M$iyP0t*^?vzk||X+_Hr;4XEnkpA=3bzq&oilh1_{xbLWsia)>ETsvDr&`!TiqOmDsTb$yxJxN&Hh^y2NYIB*`cLMycM<1 z`<&+Q^*J;P^!lh~?L^xS?8ZjtnqckGX^o!9zxyFqQMY|bJ90^{(UAVtHi`GB3?A1< z|N1iC8Hi(P&I5`7T94*dn)BWv?jSR8{=yJO`rd zkvi1Sx1}Q>ZK=I1r%7I4CRLi-6W0sOP1mTOgD zKdm!Kr|2Kh1b)jv9xrpB5B7fj+x*H2oI8v^4rhHV*eTP`7l1FgB###I$M(1Ux&4pr z%q=z=^QnicUkKiSJn5hRg+Sg9oG$_2u%jn6KeeqEfk?}Cin{)sBu6m;BC}S&>ZR#@ z?xhZVy}T$g3PLYHr+g%GODm}@#2qwk(QgiQPTP$@TL;!1s}>Nv1e)WN$rKG)zEvk; zHF~6na9q=hP`q6G1_P?m7x4VVA?Xqk%*8aDC z#*A!ZXMAbpk~k3Hz|KIiZbnmwW;K)g6+&XOCTvLusIT|9i%o#x+{Q{S?xzG z7fm1zobMS>l=a3=LiYB^c>uE89Q%J6h4gkhI`4Ewx@ze&)8VuN+7|Fz3!}-|emr|e z?zu^7J`%CUMLQ9CeM5T)$icXf0A6rpz^)PYEFu|UFTG&}OkA~5$Q|NqZ(5X_bELgX zoj>p!{tt2=FLR#{_U8TD{K^TOJB+^}XMHT#DgX0NXa7K&`P*q0puZDU**>_95U|g?Klc?wR{MN1b4)`gqh*|qSO3J<;905*o)SG<3eB~zR{2>sd z;!LLNDE)X-k^~TjDwdLqZQ zSo4uOPFiok00d7zYV{rM%-TLDt@;_&xlN0jkbZ3)^5lPD0G1{H&S{@ zkXWGGB1Vy$g#ZpNV4tNa{{mHWMn+|D>`bq>ola-0s8WiucMh{))sB&9!?+^Z;La zjQ+^6T;^s+3s!)6uoAg)=pVN#dQV42@t_=WLUVQ^%11*2Y%U;;_M;a5d3_>4`Ur$3 zwY~J009%&5k&v8t+Z$G_^`_`sqm!OlS0OYBv;}vkqFjaMm=l5dbzcRuZ1fqq1hB8= zqBIk=obPllT0_eD1OJ`>&ELn%+~)&syTA2&CvfgC{?(uLv0z7?KdQ!`3%=lzJX+{; zrSAtH|NQa8`MhNDq*Zfz9P{Aq^OR@uzF@#wuuo@B_sxM@_Xc7$hoGhTeO_070;0~* zF2GU+l;k?dsI{(s2iJhn= zhxGaRM?cf`n|?@{BpKBfc=uzFE7E?3lp&%jtLc>UGx$T3wKnIB_M?n-P3%oSl$n)@ z&PEy?@8)R3hayUdS~6NRv#P+Vv6=7d%7Jd$EuFbJqtZ%$(~tV(Bi<$}z`Hv#`wrfX zlLJj(u`{HpwQ4}oD)$nBp_Ryy9vy7|f9gkkK2%f+Be)K#MiE%1QHJm2-2FTp*iT0# zh2|ifwyjlgNz>)teA;wW5nk7tN4z=Ki7K-FOwGL{)IYP{I<0wJBavC7{rH!4)KoUK zQD7RZ2C?TSoV)N*xl zv4(Orr$V_T*}IODda=-*Jb6=OP{A67acHQ4XK5@R~`Qyj_JeK{`ocoFnb@S<=JqL>9hC6LTe7#5K(Jp2L0G3X^)l`Fz2wb$z zcO!EU2eV;C8sSL0Xn|fa^72D6inYUj)!3hYAesg#G}S1e46Ha1t7>Tvfd>t~);d5U zGzHs_(=LJY#-+N7jMSr_DO(4sa&kmWQOq400-b@BU)#2^;l0>#`9#RxI_!`1Z1wdb zkn_Ft9$bt*az=V^BU`6M&)kp@t=i5Ze-;2;)&doBM1gB=h*V86(UdTus;z)(!n$J_#{hD3;=tnpkh^xM$g*pNBEX?SQKO%C*GEzla~-l~sm?_7Eg-21aLkWs+UEKwJ&`%T zj3Ntj>!4^br+f*RX6ZS*TA(H;E;`91y$I-hrIk`UoU&R+f>J}P5p4>ncZ$BF9oJB; zW---yQQM+VX%!i=1ZZp>V1QNEe?SxXEdzPH%zZxC`}J@0D<^R7F#aB#^|4^5>_44> zp9{X=k~~_-AKTyZ=k`CgGdGx?ynWIRoM-ReZwn~I&8P?&d>gQzuah$x0q41`D$Pm8 zm4gd%CIacyq2?A{VBJ$^vL{Uf^ILxGz}9T1RWI7MfW38%nT^bL665UxaHy&}@cAlD z9t=|T(4yx2N>c>pMO!;=Hfj`grz3EHP7$$y-Mp&loI+M}zG#j_TFR{>Uj=go%zP10 zKc(4nr$Y{dl-~wBo zgG44!nmBa;I7X9IwJU;|=ID4nphc_$fipi6nC+|rtVO__M%?Mn;1(DP->NgoS_Lwp zItZ`=r1uJ%A8*R&HC2@wjk`(UT7R5mQnoxiYAABj1HeK z=dfW_dewX$+VH*B&YeRj4mhr~6e^JXZQ;;JVO9DMXac`wAdi>1&j-B^|9=0@37k8O zzXxZ1EZ8yUFRbzBf-krvj~4RB_P6}G{m<>p6Ib_GpQm~Z>wb&2pTT|y*cWHNI`p=b zgmd(&kXMfpKy3w}<;{WPSrL$UfT}v;^a)1#@o(X{RtK#^#eH3ILh2BK6$iu$oU(N; z0dMmXEa}aWoO5K9=o)ROicHEW$_cb8zk&!a?a?V(z4_QyT5=15Vn+h5Lx3d*&m5h% zABEPnkzGG%GP6b%YNw~p9A8E?^%ylLH-$Jb9HngA%wg?FqXQuz2PCi;jm>)pIxWpp zZ;qS>=o)SdY|y`_^B9#KK-nCd$#~<(-oonK$k?kOkbb;x(GkBKP$-?wY5Q^c$*a-J zj;_ubmBe+iNJb-o{bdKJ2o#6~ho<8R60uZiIAb+uwsrluKGKT77+cp;Zc%>A#MWuV z$Eo9~Wd;;imK=oF>DYqQQge;&bS7C#5pUXK5@S0`J-2WdDQB8 z%FD(qHvXe5d*Jh<9f_4jgrz#6Eg1X{H8Gt- z$n;XDzN>dl-=JLM7}Np|i!+A$M@atE0(;gU_?0twyv%(*@Xh-7`CBJ&?lAryob|C_2i-raI`~}h1()Q}f*(HL z^Zeo2%+uXZT6XiO4Iq?G#UZLYQ4i+;CBP)23>19BYFJj|5Euc&s+ni$k!4vx+XF5E zr-&9|KMt`>p%uWAX`GT~qdKo0BBjOJ(iBpT(kC1Npxf34g+^2gAX!i%##iK#voz&P z?J00O$ZR~F35}T;KJkr~m<&jp*tHSbZavZpxc}H2IOca^CebCDju&ii~1r z5H}W>Q-Z1^KF~RMm~YqNc$R>hj)MWGIkqI3Han2jCa?l3G@+`&N*&}Xkd%5uxJJn+ z7+Ll%%621cs;26MR5XEg0Bs|;Q6y?qTIol^R}MT0D47q}2~1JU905|?+^`;z8@M|J zL^{%tw$6Y?Vl#GVY`uvzSaz_&kEGdFK>X&AzXD1DO8^Sr5+E7gN>{A`j~5C=7rh;* zyV159y!nzEtXYv}*NDomnpo>iya?c7^ervZm3G8-2(VOiN~lnB)ST6bOik0^lO-C* zd`W;EYXJuaB+Y7s{fSh7Q!Qwc1t}-Wv18M%qnedQD-K{)T4O6fRYBJwAvpv#;`2GG z1M;@cb~+hWU$vzra2ZXV1{4|k5pZj*gN1sVotN$WfzG2h#eaD^kC(a62i(Me>-SFJ z++qAZIO}7OHnFBp0un48Y`n;yCabJ}Nc?@H7B)V^qh zd&BN?Tj`DT@t$WE5B@s`ECITsEZ~t-pP}I_G&WmQ#~esN=mLl4jO&$+1Lugec5r5z zOO`f=(vWLfEiLJN&EvQ^+1r~1YLu+>qwSfF#t}Q5vRd@YVOUd0EpU9)*d{`*U<4F- zowX=%r6#fWK%p&4pBdH9IvW|re2t4r%TK}39DyNTj2enIAyx$FEJd{?WHsQdTVMex zJ4C=n$j?CT!Bb=crfEO0((8a+1see=XDSd2(D8i8C|3Ax&aE~H$w696G!+@51e89p zH^BLJa2G`hjr0SpM(0$kbxs7z(rzIB9HbxTw{6SW+oZDssDG{kbu$B`t_UD4T+(U) zrj4?TfcQwL4x2_ue*g~NyVgh|Z9xG9fC0}4+Aiwz3!FL=T436_Ly&eqs*|?o%tYHE z6q>Be{+dDNrYp5`bNafb{$2$!<9d?mk23PSH-e%g&R^F@nq*W&W5bHT1BiCj z$q>bF&cA_b96R`5Z?RybBSBd?fO1PO;P?h-I+Nih+=8J;H4!aK|A9OIa78{NE)cxkC?!J`h;hc!> z#lA4*!QC80UTJym-!C$gM~*7;u>u8sSJ;TC$vJj@(!i;s76vIt?<5lpfRtA$DI_8m z3NJa$x9g#tI#0j=q6SCbFGYPkF-4}{+DXoi>Ii7;d|ciR?FdZ92&cK(vs6brK3w!k zgO{tI4o2hDsnIAj@^r1L1g?wajMMfSwdt)h-5ddJ(*kV{D=pAw03;>3sGF+; zDk)PBVXV^^J*ykHNHa77ar07uK*|q1fVAZ5_ z`mtWso<&h}M7sjak)}G*ov;B3qg@As79i0Jd>4gJ(h&&I>DCb|4oJ}=Ct4Li>d?#+ zjq0rAoQM)gA~L@``_ODck@!3VftUyy?=H#IQ=wIZ7odREpdqn!sMQ=yZ_c6N6tAL@ zTmi&XRcf3PTtG|!7O?=(yP}*v1wxZS$E4}kM5S{gY--6{JkVh?Ts(kuWB z@d^lSb4P&FJ7*&=0wSsoR%X3U2WyfuOfeuvEq&lGHEYsNK1;g9dUFd@;j1|c2AEiYguNll zPjd*I<|fb<4owvF$PwT}K)Rdbny>u~{Z{)YO{Dfi3W=#>4Y^K44y1L_=q3Z19dlgQ zqHYU!ggTFYJRR4s!0no3R_zQ+G%U zR+FQ7GzYCq4dT+?Mx6a@Ar5fL&pN1@j;UnnmK}kOmxLSxgI~X8^bpUD(Wd+QMYZ%f{j;rK8n82gx5twtW=KO(QHIT>4+~)&s z(ZBV3CvfgC{vMq5v0z8Ne>yq&T<`^#t!dh`{Ie@D3@e<+nf)zWrv;)n7Ge1&G zM1VuuIWIpz)2tR6q-p#m;_P^<^3piixk0rW%B?f|yKPG-r_#x}Xz~K~K!&&=tPaFb zv^(+?xFfT7-IKE|gy*6cXa}+5-rhREX~r9to70?jI<}C=@K_Y(x8MuFwPG(3DoW20 z)8x%kkxtXTSmdCVep2;C8kU%f%&xY!YoIGVn;c1usH-5 zOiJq9u7|PHk?bX{PzBIhX#qz@4Bi$62WU{4oA-$XtN3~3KJM|l1?Ttra7|`~W{J&N2huGK*;!S?UM}POp05BY z54@zW<{&EaBS!*>u%9nzV-jKnlCw1NMEe<0mLqJ_0*3V?2X}KQX}w08qzL&~Dp;cx zJJXpH(=?Dlm`Ha5*8_VZ+zIKswb3N>iIZytO&S1k6euyPP&!M;1;$jlg5Q z&}5Tnax5s?Y&D<-+YgZ+paQCrwv`>}`Ni6cWeF9f3M&q*;0Q&M!%l1MY-Dm}^%B^D zkQR{qo#^0=jKZvyF0k%=I^sHqMz}e%H4RzRwx2l<(5^W$mPk_GTpy+Ik>)HBJC+cj zAa!qGZ}h^1EC7l(Z|Ac)IuOt_8lkZx?NHk$CDLlT(zY2pxjt{|kj&RR2b4YI{Q=@l zrx4woQabCz(htZHENdml7EGIhvofmT^K}H?86ASZUuhOQ&1rI?P5He;u!2HbkhAu4 zgDJzZo%ua5IXI>k(qS#l3ikFxKq2Sc0&+GnMJR*31gw<^1z8pN1De2Z8OY;h?(;!! zy}#eTa{}iM~i&)bF{+`1FJ z^)vW!C&~dLxncEskmokBAx9cgUUAqFN{$5$uE;Qq6ahiBnp0eqk|*Mn?MEUOKy7|3 z0IdM!1MbK$^sOAW5G!y;rvAiEo#CCFL|n0v)V%Ec50R^AJEbD~+L4=8TW`=*Sl-Ct z%idUc=o1@_br$hX|z^t1O{8}7O-;csA6-(ny}T>X$K(fGP<*`aze%rIB9&r97^7Bd3mb5G_sp zhwF_ZkM{#!De`z9A|dB+J~(OzaCig)B0&8V9f}m}Kxhu6 zHVTr9wEv+vLdtLfqAU=am?F=j5=(Qbx%=>gX(&Vt(xe0^UzI|GZ`0oj8E<~RFo zPPhUO+VlD#AzB0sB9@5j{4f15b@_=m%EXQ;&WG*DW{RfK))DbtKMw~kbZ7{ssC>sL z4UK+^s%j#0%2Ez2eoPD6NTn$W(K*`BhjJtpHTKArW@NSSTn7U~R0KZDG>Qahvud#> zTJ~v9=H{pZn11bN)aW3zsls=1R4KQmNfn5>8eM5^hT1wPtew$aX||1co3>3#PKv(H zz|$CU97w5Z^V@p%rjl#tinzD@tH&jYQj_H=Ab|(%VF&)nnJudVr@1*C-kHHovxMtF zn)OcL&`4IHdIRKQ$xQm03^gP*r(0Si4z>=Gr6IOz(r_KNp^?kp(;35qqZU@?#_=pm z&!#!#FK~8>N_J@)Tk3GQIce=&Iij(HnW)9ti7ZW&M!Mk+n1V>GV9r!XW9i| ztxM6^_AQnda+?$O^hkjKm1=Y!sQf4_g{1kN4C--EM07VMbm=L^6W zT#`o%{cG#@gQCxU82LFppSs`Xajf@>+UkEPDD?79_pHb1AQ`~mB{=e zBQ&xvfeV=Q<~`9;M-8o0^r)c)H+E#8K!NjS2NX@lCeMK0CUo~BK#gH8Z9r&aM6s&D z3(cf6-pyg7pB9xwiz*0Emsh7^+0LVAceW?xgyxcS5NRpffy->f zR*%}4cmXPcq}41Qn(D{s6ki8Z#_){;yLt77)}-xKxYUy3qHu^wS~Uk6kUcBFyf+{U zL@ad)$hIS{nmU(s($7sXIeQf-nt@~l5)g%t6cy`r21sj_rv7SFH^~bSpS0#kLtsv& zXCST2jalO%k=wNmSPjnAk3-~ybQR^Kb!fEG+W&!HGmyv2+~w0Z5ToeI9LHnIiivQ6sfdYL!ko4+mQ5q1O@_{UvSy6 zaOWm(wPRLta5?f-0~vVI7g%rb3-~Q40UghWjB;Kz@8;9A=k-yRBF`Dz4iL~v9SaJ$ zOpQA5rXL2)O3o!PM$w3a+cl?eBT}L})L`g)?SK{GoS%Xn$OsVF>thtP14262XVoN7 zX@D%r0n&}|Thuz($U{JObp|9HPW#GDZCKfx68OTkqLXzrjTafICpYakB ztrMyA$#JKVo?{tm&cmo|zl*qsNT23L>O_3J10mE-+3~Xi#0nlpA2ht~9kLOLRZXX; z*Y&E+q4usb{3}92q_riqb|zMDN5J{>sX9B=_UM?I1bg)89&?EdhnL4!ZNx2>Ulc$Bh7*qkfL`95*r(gV%m$&pLJ{rlKfR zVD?^#OhR1K3j4GzmIYj9Vvvr*=wwa*eCj-CD7+~ z6p~{UHJ<5tC7=*7B6{efA|TSl0vueh?+4@)bL63>NMG|PGf`;T@FAe{i3S{+0~bvP zr5!Mg3&_op24+-{ZUC+WWfjbMBEw&S?E7kn)Z2a(NF8#tkXFJ<57L1mDzZa#O0U8Z zklL`^&*S=Vik#KhPg?qsKqI%B_m0HPo1%$`rW#kBTY7jb7nPg7f?l0!X3rT6RXKCI z0#08w39K5y1!&!uF%hP_YA~)@JMfr}+lB}8YT>*qqnJ@i;M~`zj+M_C!lR$6jaQ_W6i za(aEdo6q;ODWeF6`Ek()NDE7YRR<@>10Ae7oYRrPHC}HsgZVYY(8yqaq$&I&pbYZd z51c^&2~7TLq(yCq8l`0)qgAl9>_pmSdgWxZo&KB~)U|`YfqRQL1m-(57fMmfRX}wc zLCh^+f5Gjo`_^&i5l}D!8sj>+BO^V_-gJFZRHuBbodT@PKHfNGiDs?i8q?dtAJ7DT z%RnA4bDs}<7yfRg6yLJ?_nj^L28CpO#Cn;)D zaM59{gGh%awG_4TP-{mD2gJ_&a+V^}tpHbK_7!kd(^NLnq+{ts>e_?qsNB#thw|pg zg1u4Z9|E#d0cb5M+iP@C?BHvbBiiwiI^L@g_0?9dQh^_Pj`;352XKytrr#bJh z$Q-l<$Bu&v&<*?3+=)0~J7QIuF7JK@=1!#GEURUIio)yMXd^VGzl+GgRLb0xa&oGM z;Z-vy(gYN>z;&@WR#bLO%iw+fyb3B>Y1>iB^g}-1jT}3S;HqN@&mf`ZOeg~0jX$}z z!29W3MTgF^8cM`6H%nAau|Lp@rE&Zg@OYW~e4tzM@8j1_;M`&SJvi%Q!A_cfz5sl| zC3&=vKeoT+&+UJ1NAD4NRL}i(9{dlWcLP53*wy<$pUzn5gWuVCh@-5KZspl&y#k;6 zRZ6cAP*X<=1*Z-+(e4X|N|i<^YU4mW7rlUv`A{9v0&t^f9Jsv*Ok}xW|`knX52feFQdg8>qI*N@cNwrcKM zn(Dmf*!A>a2V;e$I^-8Pdk#vIh1$91=0+o+3E0jExz*+jagD0Xt2Y=(+>z}EZ;4nq zbpZHj9m=LTX&s=d?uVRN1(UvDc2(1H>?C9Bke<0wk*_+yfC0TMU~|(Zy)Zw5m5$dP$PNxf zT>+dbN1+SIgJ^0d{kWSckUFroQ>D1=7uOtYQB1h#Y}yY(T6fXApG$x&(`Lt7X<)&L zsLU3nQu`4nIUMUN(%9UhCRX}HRR0IBR8*FeGpB^MIhzaZia_D}s&ikGAJ?a&IyrWE3DDCS$b?S| zWNn=RE;`k<67fiER9c-53A03_Mggh|v}uI?H=-JxNP5tTgq0bPG||)nbi5Yd7JvoX zD@Vz|8l{qpN-NUPX4~mpfK$GXQG!zAv=NHagCl?|qWsvw%Ph4WmVq-?n%IKTny;&c zjfmFBk)GX|sNCSE0`e2^j~t52o{R!m0&{!-BzW)C#Im>HY)-cCZX{?BQwP*eRscBzKf??BwjhC-qU55+ONn#XEbxA)kv81rCiGq^OQ$>skRSQB-1$C;{)5ShO8Dn3y?iO8$r-H7j1MHM>~y&2q@6$NbIP=Y#sKJRzf2N^O>UH zx7P=wRTF7G$dN3e7duj#6gyBmr5V)QoU&?^GHyY~qpdn)iw+7Divyh}LNZHgk2*hq z#YLA8aM8}i35e}MjXh_ehHyN-uapq&yIH&-ntoEogjEz7CBnOx}cDY48oH%gI z;31vBt2b2d!IM>QYNxlQNZTn%dsj)^{mA9m_S|S7YW&_h>`$EpA}|pwU8BlXm{Zg% zEpwjEi*#u!GQb0&;)!V6P7``9Itq7=&8fLLR>(O|HDcR>JCC$@r#TE(O(D_HrEqet zxvA+&|AGF0PS33W>jQbb%zZx49r^e1YbS8-F#b}U^|4?l{qi^QGb3McNggfq53C(RA~1%F|x`C~{~&B0Q{{LueoG>?0lRrB#~ynn!(el+y9) zEus+{vVfdj-oR_LYSx|4E3!Z>q>hPO2eAdmn=|^t1iEPjN+u~qoh9G~?&*X^eSNRd zOTho|iI_Ijsy%YVON5!esY4NH5|A1S&WVSW-hSZorAT~Q04Wv`3W{fe@SHOgVg_c# z!I&I;sSSi?wFw!h%Bgd5Naowp0(*UkTmUFqYNigHACVNDW0rGV#{%l6IqGaqUW^W5 zz9KNc2A!M(2xv(ldwUxIen`iGd5=hDK#|l*dgnHfSdFq@H6jrpYrbMf`_L3AZ8Cm( zs{o-~#!1%|M$P*c<(%a@-am?3jruGJ$V^&5Z6oZ3q?Qh1=cXl+eqM6sphl%=HE4-w zH&tzv&3v_Oxv_w2?s$h40r}jvl`$Xdx^+lkwFUPVnu^*1<>59mhE9&uPb785FOzzI zeJrOO8)ysh7BRZfG)La^bh>1fjnO3J|Fl7{rmi_6F7Gme-F<3Sg?bp zpDzGka7i95D*Q;HS2M9^i9tKHdUM>m7@lX?ddS2~PAS z!T|N`cLY#rA|QE-T#6An4sHPg zX`3>LytuZPTwrrHXEx2T%lW*E7L0CkD5$K~*@!ronoRr3F`bQMAER@Q9BSqax*g=w zlif%J{vY>`-_;?x3YY|mK-JMyY@A| zd;gWTdI0y+xsF%OYvhOxppz|Jg)iM4AAoB}-%vznHxRFz!??-NNg1S=nnF;65NO?b zlrg|$jwvz8gWnA}0R}Yy^5}V5iyTZ^vocJjU`Pz+0`MYz3k9730_w*WG6x{#B%M4W zYYV+rOmVa}@BzrDGzc)w5R_FGibPtw4K-cHO`=ULww2Tb)EPF59yyGnP-MX%K&xt~ z9!!!HL?-~EP;QP(s71sN0kG>qykq23pRFJkCD{!@klhrP7}8MzTp*8@1K3~!prx$= zG%_*SY6`Yi4ZH}PhY9gv1>lYXrsmfDg<*E|41yb;`0x+MI#=@i#S`mq1yki(V1n_#Whz-?1x3w)G1`CBS_(`=*7Ahpm zsz>^h)bY#%CcYd4VwX*~!lYJG?+<-qK}t|`Qcwt}Q0LhI{up$t--ID3(B}Y_-e6X7 zjbVPMxDa6R(rdLBCJe;jce}CBSSWG}^aZnxf4w`$W$yg}j@@^>ZU^Rs;jezi z+k$R2>iGch0b6pEkcUh^^#1xc?4MQOJAke@eA3njpTT_o)(P~@0n4`3?-EgOp3(T} zz`{_YPjA>j#2;7~4~828MAulBzJ4(*7Ai0R)x>NIE-My_XuhmX$a#)>z%~tGP`kkt zaJs<{7W}UF>KjmEXbNZo>cWRCicbvM5ep&?>J7@M7?cdh&I1YnE3<{XCcqp$bO|*Z zP%f~NttK>?nqE%rTm)uV1ouylQ(&g zv)yEIQs$qetAxr2&n}^yy4P^~DL^=05jruo3^}%-vbdEG(#S%|g;fv3vsrX<4;T_Q zc@6b00k$OvDx?jwD3BQU8oIDRw}ZNvXzSwc-N{^@30PK9^^l=H$c7N`g_=-+rL~(9!D5-IrwkZvfmsA%CV&TJ)8Y`uKs~Lp5P5&@+!8aY zMO|1)NoEC_TWBTXD+-WUF*a<_3KWGHk|Bry>jOBK0+NLqzcC!c2)n8AX|KH0D#Rce zg_^*{5xE{0Cu#t&w@@q?Jl!9ts~_c&wg${(3%J}WaN)fz0$jGGerZ^Nnh-z}f%2zs z6yt^`Y~&<)taxD^$`QYqM`I2v1ZainZzvPIkg6(dWvj{ zOCq}Mvf<8QYS9ruGll@2QjbDfC~FmU@!=IVB3UZtumIal+yZKE%4WPOMR2`k;mq1V z%b!cq@5B7_e<2kW9xg zz;cv++>lnq)vsDEH1(7|14w8#>Y;_z0K!eBb=jb5YD{Zv>fN2TP{X)^k}+EEjuOVA zymngv)!@C8N@&TdAFCEnrHZak#Mo)OMNScu-P9<}+FbQDDKhe>g@QqOFsrvMAfHOh z6bsVqj+Vi#!pt$4a)?^DT5IdHaMyth(umnC_!#TJQg$C z0{y0@7e1)K`y)UJ$pcVh+ydNzwopNOFo0x}R0v z1g)$m;tXhr1yNxmu@zt)Z&B9_IC*Fj8=UHgKx%pyD!?%?Py`9YGv zp4PtN=yu>ctbz`3cP#PD&ViNC3gn}jygtfE!aG4*I%ZpVTRCnUaT8gYOn|7qn2DmP z+oG(i1O&mYSZNEJ#L=Slz4gUD)Vcg9r7X}$Jy$od;YEu&&~hjt3K*X}q>DwHVr@*d zEzP!e0bJ9AnqiP&-v%YEd|P$gEP5RacN9xwoekyG<^s(@mlI0F{i7NDDkSdQwcXa+S~^3*!J+ip`F z#Nh`qNYMmXg_|uk#h@FP3o8%T-2;2sO_s!v&mGm=1eFGiWP<^DnWy9s-Q=OVBwcwJ zj5x(G-fk+cd#yywL)G<>7@7iFPH~MkOfjrlzyy-h^^6d6L z-r#cMAi)=W|NFglE@u2`kfZng{hA$^oyYgVjJE~d=F2zVds;qVOO6uq#L)vR=&c_{ zd~*ANtV2fN=eh0_SjThQw;Ie0uuj|Mz?O^X*qujE;q^y~7yZIktHjL)KN3{0ndrh+ z5wI*bY>VBf^9o#mZzvTHimMxP!qyggKA|qZ7K*UAL5(YAxGm(i#aSi>ITgdoQXFLB zr9AA^T$tDdB}Ee_re-UK6wwB+7K(XS3J?X97dIMWseloRoLvG84WQb9%k`lWC}v6^ zH!Q3Y9}x-$CuK}}U^>P~OtUeBd0;>b1T-CjS|2%dlmbSyf?akwVb~4RXv4e)RXe9U z3JJF0cY~U+23HDOt*9P4g_>Y(3H;>7h~7D%5MUN$E~s#LsXG8?kQjrs2_(2%6g1OiP@g2jf)Z}Ol6?g8ooH{H034^m@-aYNuJTgs&1zCuJG5$Ztx3SC@b=<$(YUCe`!{UZ)|)W$yg}4)J%qZU^Rs;rn35 z+k$SjzY~Su7kt2$93|w5^C{0CJY;#s_&nvKxu5|p{S3xsffjiM5S6FT=p$QO5N&E+ zI|`AS0?KyH0}mL+4Zh67^~y}4a_Y-ME!zzfl5{u3{Ey6yh2S8 zSL&*`+?*5v#jO&|Ex_nnVN$dS=H99;Rv4aFj*sQ|YE&1Qh^eHac}4Nu5f| zZwbwoFs4gDoi2gJnVRiDBC#>2wbi_1umKe0JOG_%s3olBlnVx_HBBDHTQyAeUewbn zILg9Veb9|s48)xFf(zo9RMXT0b@fUfiWM8^A{1KS*m+_Bb6c1rZVw9RP)J4#(qDev(F4Zg>5>!I@ zBZz>}u9R+2BuhZjv4rMAt%+q6U?X;1GCjOBqO!7%Equ zTE_s8Fe^a7SRMdPO1drZXCks~%X2m*sZYm9gaFuF9GT$@3x3yd4^&%#OI>b@x@5HK zEfni*d2C`7FrYq6JwnR?1hWfhLbilL10JZC8!S^C`CC)r5r`AN)5nPFIyHH8&#%@1wPX%&XcENI1oeL z)zL@lGKHG1223l9B6=5)R(+!YAm(9l_2Hz{MgmAF*S1iqsm;x#@^TLllo$k)&eT|c zvfD=<`biraQa0w1GN0aBX1An(nOv#euEj9`gl2=%29%ZWhrMQjZ{$A{ejaAqs$@ zElj1DYv0@|v@QFinY*Km_35O{>3WbQ3P7-c5;=yT<c7`_i?ye;TP`C#EvQd85`Y_Rz% zMdsEfgRdSEy6z!mjcTS1pzHufrG&D~tp*xGQ0w(d3VZ5eK>he>f|?)TU{efuCx$vLlw3|~ zuTxIg6x2!KYf#YxP(Xw-XX-)zdbtE>&fycY%C31iwKkcO2Sz8YN%DY~ndGMUZU`An z0B%!LOTkzm$J(gO+7JyrO^pQrty?I`x;XeJh8f{Ic^nfjS(H=7Aq5BXurezs9%N~u z039O=X{$N>0^sHnu7^+D}1ym1cTQvX%^Jw}7uhWp@GWY(#XY%{&MLRGj4BrPc-WGJ9 z{naV_zTgA4WcgKEB01SYX{E>w*-UUzrZ?{9Wv@w0lDJd9? zfwCsBn_?h37CUtw8j^GY_~ECi3#5drn}t%0x1^lNAOg+Xt+>Lb7%PCzdbX{ z1Xe9bzy_qA#HWc6?(T3_ajS3r_w&pRY0yWtY5{f7)bPLv^}&Yq5UfK{s~jpJvbzT> zW)W0A>WLdU22>D*K6Rr=e9%qA2BqL&qaw3OYE#1$0+2P^7qA1b(vaga_x^w<^84|! z9heh_FNYa#3%b*&=L5h8Y{^lAzieOS>-P8M;8Iazo~HqP=)=UvF0UKQjaX-tcMZAm zd5)WiPjAWVdkCZ&lpB%U^rSbz0gxRx1hRn^6qZ8{fm+;_?S}ZmA`n9esG!THB2v?< zpz^2-CIF}(vMFWG0rMw@#Wf(aVrW>@q*ETKEXq(fsAasmY+=VhO2P+F*qs*~0XP$h7Br<^tyzhP z8yx{4tbwBI(*#tr>M2LX$T60KV3kl_g_;dP1`yc*E-;Z=KyK(ChvaCkR)H5oF|t_O zvdE`=MSzU;V}N;*n$B$U>lhemQMd^RstCtOLI4w+U@Xpmvp>{@mN15`SxK47Y;a0< z%%`NTbqLI+G9O~3n!MEn#nhx0ZU77zS2y=vmJL`B7No6U10)TwX1O5+g29((fc0)v# zdgMp~FyMUwsmsN65v)t^=SSD zFVm3YGWY(#C-nR4MLRGj4BrPc-WGJ9{S7PpzTgA4XS!|&-a1= zTt>M9c)SN-QeOSo#nagYST+It@jBSr4LM0b+U16+sUHYPt)xs+AD2H2Bqw9)X>GM$ zw)#wQq$2EG;W*96^PJKqf*9xdkB_KEi@Mt%$yHcouHFAn!l?`7eRsPfizB1Xev~gM=Vk2>D zLmtOSX6IQJPF*Q;)PfaYRzIXBl>z!O7R)fHjk5ujzg(pnTIww}`At2sxB$C}cvN>% zrU%D`jV=%y3$hB-Z|at%P?92MEDWd*x~U_hpkt7n+U#u4f-c&UaQm$~-`I@aIMSM9)@Fnk}(cw5ko&NnO< z-WPnpmK-Jc%XS{2@BaMpGdTAu-932T_-rn-fDa}BZZ7kvwxJ*5AT+3HSp_gJ!@h^K zWghRERZ#MfJqp0KgytRs=C&}26=0FJu+g&tYzu5{u|RRXS3Oe#sY3v#W~*8KSoMIK ziB1+8oD|`U0P!scRft;4%R-7(g58uSau{#GB=x}C~wtJDxeA+!>q0PkTcYXC2~E?lX^}-SLR_%!HWV&VV)1Vt$E7i8<*p1;|U<1+XDpwHfS@{%2x6NW=R<848A z8TEVs_<$`rO2`w(57+~#8wK09gIfe|qCCDj&YTzn2EEgugyoU2EK$o~tCPXwr z*JI|+1H+9Q7-Fe8QM++La_A&&m}1Bc6Cf+7c|`@VZh_TAWV~2Nz=TZzT5y8^79vw~ zBRVPA0>;7^d`wLFkxfO18i|UWZkPbk4ReUS#K@=JiY`Lwk2n#)P(Pw((S0bCiI(!f zXrUyzSjZGNRB%uO4gtuifW-9?z)YrI1a@oH%S|R*n8o!-g7b(g7HFyWr38A#QpE6c zs{k+7n;M<=Doc7@ zUKQn}MTH?b&{8%7l8x#XO0SB$2xUOr>NlC~24Yhm7L?Ko5DPDNltOc=xSm#t+1kKR zR>^thh6pBNagHZJ<^mPpY=?!*lgGBZq+*DLjs)Z_23feiibG<#VOHY{UZn@eW$yh! zAM5YrB|9)D3||2=-WGJ1QO^f}57?5U1U+v)=aExKZ0;1e902-x>f^_g$Om$L2vq$D z1mF~qmYi4tHmfZPVoW{R=}9+}i4C^~IOn^kqEO(Y_S-Y8RceIwQZQRgiM$xj{TLqV;eqiAYA`CEX3v=Gp zisJ=8N6xYdv9vCh`UC?=)M`bY^)U}b&8=-8FE8`4k`3Cao7Vk3hU zXxTt&YDq~gPI3?)xB5++Erg7zRrvKuTn(YH`VcjoY8WUimMMYy?dF_KEj}q&l|Jmk zF8e|Cq3x)rGM2BXA+1JhgDpwv*Ou~1-`E2aJSqs=Q4jL*<)m<0XLRI9TKYEH;NPmt z9RyMhqI#uopsK+<V{y!_0Z(LEuo&aoM&z*EZnEmT>`xJmJF!% zQa;q)M$(3w&Dd<1D^LCIJU9a7YB`>Zn(GmIxP_bbn2gj8@oqDZsgZnCBOwM$(DVyl zry<8>?)?GI-gmri2j+y~`(Vb~f^N0HAcfx-e883*CFF_oDbJrgk8_Q{dDHV0zw4o{ z2S1+9duCL#Si}6kr?CqPPq>O$7#C`&04O3cwa|N7(;Bu6!6AnPD-T6P8_04f;8<_4 ziOLrFlyc^Q9E>k`$sQb+x%UTs5Wka`?7*Bbd>_nsThLubJs$u*U`vh?^ziwd=T99m zJal>3@?T#QsO7T7lB1}{E@S$pst2?WES~4GAfAI3W$74jPtsyY3>$2V<8{G+6bvaa zN>V~vNL9%Upe+wd%mYvXenEs zHq4f`iP5ZVpcbzIy0l|BZ#EheLqBOlR6$$RY+AS+YF3kmfEe=RRtPTh#I+mJZ z&<%6E979WliXmZYCENg2(ksgyPlfJ(?UV8b^&3l(rpQw4r;M;epBH5(1eBR3ydxZp)iclZpW`F5sZ<;v}5ZVvq%_Eyr`m z)G~Ug;wY?DD!aeu__nsThN_GJs$u*U`vh?^ziwt=MNvXId4_ky5iu$ zOADUJcm>qdprY~09SKkF#Hd+`K}28XkY+9=Fm1O`b6tP}+O1+oC{|&HHl`c}6c;%w zhHe$p#bMqGK&A@@c@1i=OzHv4p4$^MQ32Bof&8qEUZEZfmRZA4S2hAHV;FGWpoP{l z*tY6g5L->sYq~5q;O-8nrw2>~0;x2cw3O{4hg1lP1+G$nRhT1(f&^+A{0373{SntO zSZTM!urjd20xrJdw(?+V0!{!EgCGH{Vq7ewEd`cyPOnh=lyXE zE%I?p{nE=ZaBKoaQ7FAeH7zWG2|-B$uz^7UR1476d5}~wh~Bu7%TO~T62lE1d@-hS z+;>MR6H_4=O-)2LaGgoJZ#5}PdM(EY?MfNk1em~NZOkg5^=t|AtJhLiaiV5;CzYRs zx*`He^KnrD)3+|pVl0Plsiz3qjVYJvm6UnvLrKj*p>pcO$2PE4mYIX(M2@Lc?vBfj zHq*H{A|*ux-nNYD2-r#OW(g)RBEi?9M>YEJHyd(X=H4Il+51jjvIBF%aL8x8E$A+z zo(}*Yuq8(cd9M7`FV+8H(mG;#@XkXbw}3pjZK-8HOZcQOYaZ2j)cY2&V?fLw9pwrJ z0|Dn{6QGj`a^w|L77PQ~ItDTTz&mb80>Th5Ron_BMrw|2G#eP=#%ZBW3hri`dej_Q zunH_Uuo*xWe$0j}&Jzm>s+Q#jfDr`Y>*zjtdt0us_H&+A4?u!60;u%Cm)r2$dtP)a3D3#6d5v>aFtKvxOnwDUki`X+Ho>O2IH47LGSa0!@x!Rz$kxXisj;A#DS zyle;NgyH*O#@mAKG{0_x-WPnpmK-JUaq~J~w|_#8p1V9^cpBrS^H$_IfB?*c%R>N9 zX1l>rz$cb~Y$1T5+(>{a?<;a+7878-6)3-Bpau($QBVko03a09EtEmBkb175lV{6O zc)2DI83mSVuEN)DF!_eU^i9B|?N&Y$gXvgky0TRw64JuWaSv#K$uabEcZwG;$DsA; z8v@D%3lqkzmWel;>w*6wsA;WSscRXYv8)(si2_mulsjLPqwr_-fSXC7v_=3@24EgH z0)l4KGzyTXe#8c)H3%4BYC9zlGfm%+(+Xe-8>jVQ>M}*O zEK9*8t>6Zn)raIDN$057-eA%5o!upyx#jGI$E$%6|WKidgp4= zdCEtFdA>k52lU}J8gg9b-XG|Eem`He19QS~{Aau^=tlcHQTTnq2W-hvLY_D;@^$;$ za_W5Hp^HZ|p3XjgSCDfF3j+F4tyw`@Y!INEuLQ`!I8rld;f_I^fD-8zaLO^F8@S*} zHfkv-pfsZZDimWqJ0?lXr>t`0G&hu@#mfW~M}Qd=2vALZ&<(X<2ry{~;1{=w9XGAd z4H7tckVeHJ_yVlJ{hg$#2TaK25-O)v!vGWl=Ikbt@2(!{78?YafD_0YOMtSZAt0`| z-Gn*@5P;I~L7<{d&4@B3ri@{eU&kO(>XC^tkb@xrpRj>?)x){jG?(h_#_S+pa%Q(- z5CJ+9fOx*602(9**^$a@kQo9j7lOrJ24a>1S`hS9jtC$Hamju5b9Nv{evsKq`2pVc|P)->*1T{e)7lqxx zHEbjgTLUJnkFe2@q(gvNYx6v1Z#k~c1c<1&lh(9;2#^pj0~!cqs4!Se>?Q^!hWOTv z+;&@eik0IM8}R=fn%Blf^C6I+~`z*3dj`z4=$uQ1_5A|6jE(*aVuyx8@f^kDaH(BW1h+-P{9}%z+fn{ zMdSoD70U)8fEc$Ic|xsO8Jn%$$X2!5QZs9_Va0?^TI#c7+JfL#Ef6`1VjlU_CkRR# zB32%lNewMEIuE>>0EXq(Wv@Kw1_$$a-UKZatOsanE`vcr%WZ>kE5FeuE~_pdlCvHJ z0}3o{qzyGe+(3qTt7anA<3!RX3cD>(Q-&xhr}aSvieHUKn6!yNWg|OOTrBKaVnQYb z3@E$ukYSqG^;GP1)G23!Ne=>1*Jl71Os%la1Ih+S#Fz?T4YW8>ildq?yO3j;zLP3Q z)R>RkvOpJVl~AQjJ%`%@=9=y>FI6*15nfa)ygpSNQzj`C)QIH^*nwAR$Z?r_f6xc< zJ9)_t%n8Hy!Hl;B-Q^#DC%%o_2W-hvg1>BEoxm+!R~r*2V35kUx9M zqMvl9Vx~Jo;8wc_*o9$}ZAvI3<)E6dVZ!%va~^QP<`OV%p_mRhER1r@bcZhZkVOW| zS$XINNtUw+Y6{WWg{=TlE*k*=?S>#FmD5cumlveb|QrCGpbBLxTRDR(NrRo!ls z5^6MXS&T^FoGt;5wen+XIn^iSC{csS1Gi2ZpyH0Ca#BMe7=)tUAYN*3sBEopq7-%dpb^`(EA_vS3;Cd|q(WFpP&0T`hObpmbjV$ntP$;k)C3JTl z++a*hCzVgw%B3oJe$};wm6ada;6Dlw@3JA1^i)mcR@Ev)j(S`ILsHKoKs?`MBSQ-% zS<4Z*+$_ODrQ32)YwCepQPPbKu+Y?I3!SFD6d~%0Mp{w3I*24yW3@aEwCs6D>2Gr(OX)b~@PsM_6$D{;Vm=t;7)c|2hN^$}ExKg^r z%>-5egf~?eEv*YQH7#_b3!>r%<|sg;vRPaYfv7uA!FI#EfqG(U1p&YXX{-Q^a;vaB zY%=uzOh@5EBdJMeHV~16c{nc^1rvj&!_k(_wg_svEl5;LN^0AMnm#awxO|0-5vTQcQ@(nqd(AWS$0`?;?cMb)d;$~C30e`_u_Tae8 zy+6V_2j+y~`(Vb~f^IbG`2g?%TXK|uM-Rv6Jb!e`c;4zkO(cLi3);eGbw8cy zM~fftaoYqwzj9N26LcP34muCx*VPbyR`7(HGVzf-yyPT?mk$B>6a*+L)H;t)sGExn zOd+6d#UMIvm6$upp43<@>XH1)7W0;vJ;1K^a=23RI3s0m&j13Ja1IdP*O zE$&UXw=Bt{uBD?4>ApSWf$K#ZnZgEeYKw)2ApoqG*;H)mDTY{NkQng~3=5^)-+8 zhy5&W=TS!*3;}w3tAG&)L9K*ngCo-3j#&d=LIktepibH-0csk(*r1T9%$qMTjtUh^tI$v zxg&qGA;)Fz{Xrk=@8l&rFeeO$e8$^?e2KmBS6UyG580CARDHny93}A4iXG!a0uN-E zfBM8Y-6qC+Zvw9W0-F@wB|Y=d&u*2;LY;F;sJp`49C*hV>WTt5V{o|$Tah9>sxb?Y z7+DU21Ngpm=1E6aJz^fA`-=0R;Gv$m9*;K8A{1asIDyi#2lQDnG_h53au04mR3lN1 z6=REH&K~H9A!+Jy-|jB;BF-)p0weQyeg~}d#%)_XHv!QK(cL0C0o)Dleh`ZLq!timG!}MceIseG*p&k(Y`+8J> z30OWZiPzFU8RQwLYn}Z4dirK@`r(d>MyC~b_1f*Lg{A$)Pg;_l<*J( zG4<*az#%}k0EvzpBE~WV4r#Y8L0@jEhvDUWEe=#5X$4RVAl0#mE^g3LLorObKwDh* zax*nN9_lGfwrf4HAPB=ri)sK3v^eL@F39ID=4<(n{`G!b=H4Il+51jjvIBF%@EtPa zZNaB~aecs+93_0({_ui>qWq|?CvYwKfvjQ$bfwS(nU8wAApp;9#SqnkWAL4k$2-42 z{u!v)8hworxrH7UXjW3lWLVq~lnVyw0^|obx&SV)>S+Se120_1om z6e0C?*_ht~(_Je?$z8U9_6JNPXACSr0Qk*B0&<*sU~?XM(#-;FA#n>O+wCrtw8~|+ z1uz|p)WnV40n|<4a$ExBV7LSoWT1kSRMb(eCeUryW2d2JpXI;yR^`x}xn1{-b|| zK5zVSnR|c0v-kaY*$&JJ!#C25w*}Atvfk730b6pE@SeNyTs5BTd<^S;PzVdY1r#VF zpY?iF`x&f=ejtnE)~zoK@(J}Oz;%K@A!wkOf|A4a)>f#sL0kipMH?vUXAy|aPH`)U zK?UH#kL4^2r_KWx`Z;FY7#xD1f#Q%h(AB#E*e?q7H5@k!@cu}^A}D8TgBTZgG#(AC zA1eU)qDDW=Mz0o1w!}PwVM94x4@#T%g1M>5;IcV)J#>m2!-oKZu5MW5OKhC_^is=8 z%8GW`BV$naa>M?Z4b!Hs#kN2ee{PEVk%d972Y&hcVV?e5K$>(^ z78Pd!EJ5i_0F4~G2jhn7m{e}vQE}TM*&#qn-1wR`z$Dr{w@^x`4-!~t6HqMkFg~j5 zH%P3F^Bm<>Pl>1QRZm%!2Nl$hRMRV#Mc}C{cDivR7kpiU!l>E`oTm&}poQso2~B`R zkZw2SCABQh!v>VA@*pPlaBfTe(jdVG;;ofC%SyUqGQY-rEwAv8)#Ebv{s4ak-|@N~ zm=lKYkQr|ay4CtpHT;|4&wh`7z?K{({Mqij1{)u>eg@+ao(Hm@@3dfbESl#TESm^4 z*L{cgfg&-%)hz_LZ6qo3)If~xPL^Y0-(BERh9)4Cf=6xeljSeg0}+vfzI8(&nih$1 zci_<$PBsBeW<%KjsGedj?wdT75T;8#*#y;7u|q(~EtC}v0gX3#5FP~wo0+YEPG2YfP;1WfCZ{r) zfL>Dq%(7q>0NMtgH$k7oG8AtrwOgn~@xQMJY3~|>)s*n?6`;LxcP!gISTT&Q50~&? z*CWx{EQ^!s0#_15$j^BcdTXpd^53Vx5V!3rg z7Hm&$#BgeWd4tok++e65XhSSseS-w|fNl9zw~@mv_iRTA($I2-fQAr2OD))q*Tg%a zbc!2mTVU67RC*S--B!|vdY;8R>`!Tk0z^CkySO6{^M`=p3!pwVUjVa zmt7!VK#3m91}vy!7F$hs(g(KA!}U;KiaXp|0b&+_geN^13!UQjus>U9wXN9@-FXfG zL%Shh01_n+od!@tZ`O{X<1biN(oukf=tqB{KtO}%mgUCjlbA*Di*Af~#)eW+DOE3^ zUeSW>sqV<_6F@ZtL&a(S1uxT(<1+XDfPXySkC*MhoG^SJ%y?ViFSL*Oe*1teIZF7n z{duehR|OwFP3I(z1uk=^0IHD(@^a&}EsL4~WlhW`*lzsZiQ6v%awUc`4gULj)Q@## z+jq+{-dS8uTD7|KpVxzO_{KIuJ`~;l^M!u07J&N_^Wa8!xAl+~ zf;9BnQPzT*T+dP5D#2_&uV<1nKR!TRR2cuL9!B8f9}ryXK|y!LVc8axkGN}hyxtZ# zEs%P!xCu7k`ieOS;HcuBDL^>i-XHucXX@EtEC@l&4Yk(W0;dK3PCe9cwcKj{+xeX&IfGCQNnLG!QFTug8zJf`XOa)>x9UZ zttYwzhua34*Qcln?+EIyUE{{Wb$nb14$E^;UH(h;U_++_psr^F&DS4o$1prG4}ekE z{V~~Ms};McaDwBA9pFMRy8u&bs|kj8VFS%4>BKygK#JBjY z9Yf2vp0%ehxIcThv0=USUw{t$hYdL{bMFuOf$^QZWC!Mi;VWRq+k);g>UlAsua*tTAu?YE5y+C;ji477$kj5ns zY$1>>mWiqC_0vhqEo{hAV_g>REOHt*v?6Squ zG35fy^FKTxA>9~VA0{ZT0QlntOXi_2YzutqeOC`vmRSVwYd1vMLN9zs0oMZ<696B_ zV4d%43`6WDp9O0ATlH|~RS()3HcZ&x$bsp1>e23#&1uB;2%gt7a-^*HhlbY1HX_gS z^M-hi6h{#PTu-G7K-W5Nh^Y7P)H5ArdT%3XyVtZh&+~f7)G;+-Sc;?d3ixMHA5%gU z?4+Wy0sy`cler0Wcy8Flusd3ULco?<8=4(AY93JQ188%M`~rT_?K#2UvizdZUv&Fh zs-Ne18==oj`2TJ>E_3e>@MZEHuiJq+VfgZ%@wT8_je0%+e883*CGh(lAGs{N{TDtC zS=X}w7WsCi%Z<_iinz1Tt;}~ZKcv3XhNhEH+Af#ITWz(-mt#aBIpFG;4HS{x z-j>Jr8-d0!fvdZ~pXY zxZ#L(%mx**P9jh$t;tk+06Cc&QkERGN7{BCcrCXdf-w#19U>X8dbNBbdfN?uw9zjzd^_+PgV-|Hy`=84XZnLK_BnI;9YB4 z&Ho`_q5m*OiGCyLuMy}E>ov9gt6u+F*z3}2ly z-WGJDQO^f}57?5UgunGY`q%Ot_bO%06%;5}spwfZl(_Mf>cQe^?p1&lsF($?NE0no z(0LHCz&!z7AnA?(XGPW zDc74yALNu%tLA(Wj0H}2LP0hJ&{jx&1E_Z^0B+D0OimCttac2h4KM+69`03B*ZTjy zo;rs=lCw*I)^13bpaSk1aumm6p42mCd*ib|GB~OJ%|cM?5YziJ1YB)xbSu=VSFcIX z)YF6K`@@`JtKWQqI`fsM*lnRAS;~(?ayZQf%cS$hd413g0B-|TE&`hd#O)}7(VGnm zO}#;_M-GdAU4fIAjg|}^u1>Vo4OJn#T|QkSSnMrG0ihj>yd+ixM70v zlX~donEC~{%eI9~VS~$j*~O&&F}eZ}-&50)JoTF|s}>~i-@?!8+3l@pDU}?wx|Xim zEbW=4%uiyz7PjsMyK`LT-XHMjem`Ee19QUgw=m;vL3bMUd;s`>Ejdcy_bxtO@Vob4 zY10{->k6OUDh{SpiphD6IIb%P@Uxyw2qN1-;Ol{!NQ+}|3E^;imjW=sBsTlmZCe-~ zH^$uEt8}Z0g=_&Js0C5OV&Lg*Jt!H_*QtN5Mg`@?dHLy5M8w z83Ou^#W9HG7)!y(p|JrF0DkkWnEh8$hWV2@Kn3unm;>l2I;qK(N5J(UPq~JGA_kPJ z0G$HL34@mU4ZeW+XSq`zeT&-<_6KxJ&IT)w$)P|Q>vL3Z0`QHc;+}vhp#mBlc~t4n zGi>GPJO~Cw=h-EcWyt|M-I&rb-Zws{^?#wZso{Tuo##l}ZVaf8OCGrMC80V7t$JCM zvn>_1O6WWlK)y?!AJntU<{TfA^Nh{w+pU6}REIPQs0aWPzQ?Ur2LMRa$M%#ALvYeKVP*2bHea_Fyn1OHyZVP z0Qi6{IZDX4?dLpyaLDF)is|tT&V%K2E2r}GGgu}AUNB_g1)=<|7DR`DUdT!}aAD;N zL@bMABGf^OsbIJ|Y0UzV5`lMaOEss7K}dv>sR;@lY-Nxfcwnq+QP^k-P)gUsG{raC zieW&sk9#Dfmh~P@p5G($aVo7u75@ zfNlqf>cb7ea8;|6GvKhO2D^z|JpjWHh(VSIwsP91Dga)1hq}-PvCu6R2E>AR49i&! z(VugUKk7c*@&|bQ)srpMNQxk7vk3rG*pgIG3ThQ*#nc32K$+wQpIClSkGvf7KLr%z z5|qf`)9T^&cuV%7z`S?vI21Sq>l`fL9r+vk!&G@7JibMFsu@V?`9J1{2< zf2T9v7Idpo&j)}H*pj1!eAj)_^QZ42b>8^kb#a0L=X0)OYMFj%$N_lGiUppzi}8}z zKuAwo5ZjG8V53E7#Xyi^AYp^C)N)%e={rR&{~#s`6kUPVCc2AIx^*4}b&Mcl;6X$J z3TSEv-Q+nf!^Xmv(5>w;X1P&A>e)Sjy2!!2fypKYMwcL)fCSjBqCpb3-RpHijywlo zbgif%mLLGXu`D*mB%Mg(MW_d0hWCou|C)-WT=;?;+-t0QP-;`3Y=uJotT+j10z$?x(IQ~lDmyxVOFC11N0l4>na3D7z9kWO;w7z?u`Pi-8GO1eQw8;j%H?W_lcAs7o{nwkVl z8?m&}%i6eHA7&$&0ZjkYf`F$nAiT+=oUy>^r*7Uw#VBQZtz#WFai>+&UafbY)%XVs zs%babn(dioxiRAtf`9I&h(c3@5z&ghJ{ z1>I`Y^8w%kw&W-w-<-FP(0}}G`2uXZQRIHGFIgpS9`D;t^Rn`c+KoT~^$82OFw!ba z{d6WneaOvSxQkf|4mk&qo+Kq(lERcc*BDzA|Gb_lf!wZVQSGin4-&%q&+1{wzuzB*TaH>&pVDSiKQ9{E^+~`tXId6zCoBlHIsQoui8mNY)_rAO%&lWxFjo2LU4{PZMwgPqNv|No|AW#;t-T#=vfqhf-T;N=VsCYMu9$ z-V-=vmDm46f{r1JnSu-uNA6Cl;f1E?Oz;Nq}ZhvfieQV$L{sryMiV69;VkiSbP zD2onDX;}NCzlD>)es&WISkw%vkEyhb17b0^Es7_wA$?;W5uBFCdPuQKNIi<;pVCB%XTo^E5QnPV8AUe~e)*iOsQ-UBEio3#lZ+(h^*LamJ=L8zD? z*Hc!ien=`kPb{712damlW))CPwVcCp0+vcQ$|<8_j6(3>7CBE#P?Bad3>)DWq}P9^ zJI7`2{eh3(_t%SdU``nR&}Y0Y=su&K4*(yqB}WPV7X7 zF=N1T!#VAkgRMc1@^LBA%|Rw7wO`*4nAUQTMQ)@8qDAXtfweCsbWJ_<1W=lG6JJUo z3Sd9(!9%MmEP2?)0p%FbC9p6s(1Mh>o(8m=3@w!Z#CN5;Y!H=G=P6h(C#CJ@fFW_C zo@XFJk#pq{N(nG{gSVTMrBb1lr>QBr>rvfL>M7T;40zNQOZMI|OEsqV^{|+uo(L^g zzJ@J%z}06IPI$+yH(1N{DGS^}&42;&48e9=78N&r8#gjHTOqv2c3PCRg)RbWK7bh*R3R1T9TB8xG`lKa-6rP^*q-m1(S#5SE0`7T@c*{kwd=-{ZT!?lIKYJ1^>(cN^iQ$ zJv}aS?+<+VzrS9z19QUgy))x&LH8N;d;s`>Ejda!zU)2(@HwvY=86bB*G=dt(3Pf6 zDq?;DKq5E&d&8iDmqnTE_5*OlJOk^BLzm+FSv~Qig69CrU~Qq#L6RZ_!>w8Xv3!H= z1cmVG7+95*vobEB&%qIM2dJhfyB?&y0OfSj9|Kss*9}k#|1s0lF#S>qM{!5Y9bi4_ z&QqWg>Jti{1N4Hg2pxbb5%?PQKqcQ1`W#FNoRwpjfS?;-ZdslJKD5%13n;^)K9b%7 zr%}vv;HsM%o(*XH=k@IKR&|hoytUsAaGHnuwggDQrpQhIl79;1#IV`J$!gNzT+w$;FU%DyfY3Xkv&blyd)r=Aw zoXT_ySWqknV12Rt06a-bt|UDGxnfb(tqu3L2G5h0)0BP0FjG_?;DK!s{8AIim81vw zQ9b7_Y}H#1=t9j1f$TQ_y>I|H@s&z90b8nnV_*vMb{l~3ddqSEg-i@cLU8n&M`>s z*mBA&)fWX{3tRG^b?3Ouy+80l{{DK=4$KL|iJ$Sdp!2a@ zZP|bnv5>C8rv9ZotRbqeAPQ&+VE$(SSzFElz|ocipoX>_G5;JC@hI2;8C$^u+^Ou` z0TeK7g?|y0-%UM8+5`tcrnUeqg7Z)yOwjUe+HOECfm#*=g)BMb`I!5zWK);oT8GriUTx>au4Jn%K0ibC$qzxed=<>f$ zcM0j6LSm_C$EdRE$WpyyS{n#D50cinQGn%+5#W|^6<9I9$fh)RG0!bXQp4J6)~c2C zhAn4|F$8CK#O7A*?sT5B9^~H&zTkx#a$M%#ALI}C`};LJFeeP(E;HU1bemDn2Y?UQ zlA{EE)#8Isv!FKye75F+T=fvU9-Th`tny!_v=G(86_}vAL(gUd$sNFYTTa0Hf@Ad0 zVgSoocYpZFQnjE8#$aAWI4Psz#!7E2>cEo2s8(ozvL-uiL)v(-w;(|QKFuwDw z7>RCes3LCMYXim0&0HO$V!MPUfPfmQr`#&?C-qQuyD9#NF|dXtogO^YBN#VE5s=y1 z%oU+$(z7@s5IA1#y#-Ny65K1G{PZnsO|XlTXXN!_XC*P^7ugR9_W6N zh6u4cjIIaw73iuv)C_V*cT(jvH4H7MCNL@nAQt8Cq}ZyyCvL#-5S&2BawZS*^^N!d z;H6*3fMT>2Y5=9`jCa6jGfLh8AZdmTVRkV;SK<%~wa@4pLst_uW zw)$N42*_drgImjDL%x;t5uk=v9c`pWQB1-;qU=VP;!un&%2=OiFUw#a&gw&DQ-C*%78ggV)PvtOvZrPcflbOI zFqIZorDl+&b_0e6MATNZWnsz?R6q@>mLa|NZe8nPMDdNb0SaPL&_)h^W6UlD@U%hR zu$9S4hYd1W1F3<)E>IJ^M8J8p+0Sec5NgUvQfe?8c}-p3^lNRCl(SQH*viz}JWoBM zi<~M*F-XEhs)xmeZCRkc-8f600%fRIdO)iHvy5d3=u?#A)&z7K%fSW}lczz2ENVI} zH<(&m$JAuUpc=c?jEFI8qFd#NxVgVK)Z}`S6lw0|d@bz2-|fzEnR|cW z=SSL#4T1cV;k52a0*I;~CMCDs=%1JaU=a%@cn08w(Kpq503y7uav%$atu3G|u&#P! zQOsBlw;utdG8>tn0NC2?830$@G=zb`%wvLh^Wo>96$gnSoJ&u zPvz*8Lnw;bLRH?hYE#2@Zz(y`_yB0+i+O$s;74jsZUGk0vg1ZeK)jl*lx0tUNPs@9 z;*J;rrLRxcLoK%eQd-Va0K+fTgWcg!QcR0nLS?Y(Wnp%FFy=vo8)=2C$sSp#Za$Pu%2FpI{?^ zZ9v$(31I`niaFRIfdmypzXt6F3nai&zXhLxxFKT=xnUMDOIha)Q)WbZB4I0Qs zLjbriCeIhVP(zN(-1`F^*6-)5c3@5zz7J-+E$Bw`3o__^!3S)~Q3Ahe@$n(gA3o^o zn7JMvxD`IIek+6}U5giZ79mcG%g z!N{Rb7_C5lcL0jEwuz~Nyd^5F0d!Z?6qoiY|Is&>Aj_`jD9&tBIY3eBj=AqjP#E3H z3umv(X4D96)nZEtENDOoRA;e^8mG$CNHReAkK%euXd`val$C5sX*aDWkLa8fz)9nk z;vgmjvP}uGc-_>+MA@UD{4RjJ$SO;@)JO>@Aidpc?h{fIg9Mc6CTh7@ z+EVjl7n-_UdmBZuV$f*3G^`COO69xKZ@8WC0&VJ%ew6V`K>dP_sRP$s@1a0^m1S zwgq_o3H1U4*21vTq>?8q3N>v8)7^&k<2 zf(v3V;1GHMM|2EpHG$?gY{-K|sz-ngNo|TjqV9pSDn=mx2?ps_uTzgh?s`pWR=|>z z$I7}MtSe6hOg#wPB^*HYSlSWO7K%u(I}cbnXgL6uv5**i$GUGeO-x&;JKYhm0&_PT zIKJQ|dvILl-XHW|=6CXv9heh_?}Hg{3%bjw=L5h8Y{^jq9z7hN^8E1`)AO_*(|A-5 z08*v<84MQ;TLiCwUM5gPC8HZ6@NSSiUY7+icu$^=DgPR=z^6Q|fQSHWZ87M3$XLn= zz!uI5iw(;SY63^8hQ+|^Qee<|#*O}oQOeC$^GOP`6(B+Y)Ogck(0SlC7KHfrgsCl@ zE}+7@Z=e8Rj<^|g9;{m%CI?6iR~x{q-5jFgkRLytwA_3`$}a?n#rSzW%A3A1jzD#; zJi~^Jg%ooFoiSTZ06C7S$s$#W_QLBt-#Yb9^fpH*R}t!}|O&DL!(@5!KtR40v6NBNskkIY47g96AQU^-j$52dk` z^#-Vdp>72gzNnWQR{16yeF_6;Za^P=Owz;hq#kixsF@QsTl5byQ5S7nAZ-CDRg9Rs zQbJfT;oH;&3&+xcKC#?^u2lO-HZiyAp?1o)9QBC32_ViuVFVS?C5YEGf1 z0-3A;>-ocQT3BkzUBFXC|J_L#1(qA4S!%QW-rtYuCQq~-t%3lI*4984*Rz2&=bs3M zlcyHU_E67sM+Um_54%1TBNPH1on=`VPHa!?{)&q3w#&vvj(grnQ zSeLymm@9^}-vd(j=kkE>uAcLciNgO}QqY<0PuH`kDLQ$+Kpp7D|NVv>m$~-``lkAR zzG?^NgyE}Z#@m8!H0t>P@Bv$Ll#nmj*MH>b@chc7VBKmMG%?#!l^5i(bQ5yboomr? zV9Q^0h|#^;J?6@tymDYg?IlPFSg!ZA9tKQI&1%I27tqwtER3!Xe;GM8h#wJDt%xR$4?X_5#0n*_EvpRpKfLPll4?(H7*TNl4YrBgu-@$=lj!rTX}xF zo(F>G`*Us=5x>A{*fN@*<^P_Le?e?r5mE+>hdStpgNGJz{7Ai;(x~oM_cQK@@k88|RHuec0 zh>6!dfc4%2MY4qMA1FX@jVJZguKY?pRDMk=>N|q31^*$L#^3DQahZF6kn{fi{hA$^ z6NW=R<848=8TEVs_<$`rO2~KW%`-Trzxj2Woc~&mkC+~z=Xnda>XD6kj%x(G`ssYK znc#YJfIr_nc@Kc=ll5o z%hUz2qf)S`AMQw3Z5BOA$#*FsZX|#U7nsxnni{R%eQUsfW3(G67I^5}A~@WN`!*>h zZPkn5LC!TPgYj`g&1$*?I5l{vr=(q}*`^i4_;E|CxLhA&X>gpx1Hc7?W!pjkHYUE- z6FoPrf@$@daJwCOj`m(H{)f?V63^leg6H68_3*A=!naU^vmO>Mp=eKye*=y@2f<-^ z4t`n>_O!%Z>tO+9l*MSf9ddpV>^$dYZHwgSNIhu#g?d=g7Aoqa9szBM^PF;&$1#Vt zqf%4zkHJmce;Aotwc*zGOZ7aQo#%3Po>LBE(3u){7E5b6IIxc4^b206A;)Fz{Xvf2 z_xEddU``mmxMsX9@E6+6S6XiXzoLU)9elu+93?#8pU<=KjQJ$`y!B(3w~wcXuifgY zE`pp_S)Q`#5>VFwP#-|oo!mA~0wcy`8?HbMcUP&3nR@OB*44xH#EX_g8!Q*LMUWEA za6=HfYYE8;OT2Cf?i8#ov4XVsC)$wn7wQQc^W17X6kNe=Ol!L+I0#k`%5nE?SyJ|| z)`P;U@~6E%@?60$)^qgj03vWb$KTHZEc5Q~G=6Fb_-@(AP#?Q*S0FiV;sFrPg-y^q zN9!~(3b2eZ76Y!fP@$WDpDN`8+p*i%5=?d`Jz`q*pRVUe2PsMUpP?KLIkf$x9&N#0 z9+dsZ>$%wy=0Gl=gD3S^=+Dku@nG1^M>##FWJy>1^mNSgorc{Fn5KGk!v?R!Xqpn()BA6v9dpW2LHBto4f}R(mg8?Wi^3A4lzly( zOE6eDI_a}|%BxK6h9Ch58gRP7aE&=jfC~oL%AX+}!v!ZD3ub&fMnQHX*(QhrM>QMp zO-wDLB3V#cz2e5k1u)T1fWn*LU@Kq+oWTY*`e5abnx4^CK852(QvjH0;pPlm6)*td zi=bmTSp?cIQJ4P^9DwVV!z5{+L|7D3QF)-9SCD1bfQ7M}x1<XV}o)93)O}*^o7@f)tG8A$`DM86XKO1_dDo#N$>o_TeXN z45*K|Ed?N}cU#~ZfcXG;$|3=6A-s<{2)+OvNE0>hCjNEHahZF6&|e4N$xC)%P8hx^ zX1p!vE~B0U_%HkB5B+fav*5Rre!!L-B|LA)2U_YZRaKW~upiX@pOfqAaB=%_L;CTa z1AEQ$BLd%KlC;@;bMdW)++6~k>dhDi6uJUA-IPr^h)Yr~81QzyEn7j!fLkghU@$&N zP_$HZWs}gIv{n*R;ddn{#um6>!PH2(LD=Zi;2Lw}83LxdQezqKOFi^I6_n#o>iIQo zX|LG?t-yMg&~(RwVj&EG&d~;wEQ`(Iu`uEv*0b0c-g_E^q{-v6vtrJ&)%KCYxNAM= zDE@^0P(4M5L>IPHK+7rANHGUcQ1-_KrG#hopqkV}pF)fgh&FKlz^#+6dN$ix0)>W+ z4G7pVDkpL*z^!^Hj;^WniBSE^OhP56qE@9T0TLod(_1&DT-`y~C@@et#kVZU1A@Ce z4>5ptd$53@#-hFlRqS#j31a>Y+YxiKr)#r1kNe(bkDL(f?%bEaLVsTA*G(PxUo`Q! z%)LM8v-h36WC!Mi;k#lrX-M=MZ|I6sy~9*bX^N1Ka#LSKxrd z@&I)CVUkKkZRSpUpVdQU75Jo{wut-A4a{~s>v2fOunWm^->N%;+j_w5r0!dna8%0j zmV(0S4)b@+=|TUNy+?EI4?0_3ajpRB%uq03Pjj0a!Q)u0YXt zqkptL7af!ye?rQWmsfssfF(!@Uk>g{X?HvGiNfz=u0TNB@= z1?M_qTCxca+_HF=AOIA_R)BP7E&`A*z&J)Ym3_iZHXm|O11$_mHYl)PKS~8~0;daY z?iC8)hA5XqP}*onp#w-vh;uiwfEHf_HANG+R|<8n>>F(<#{hmv00VxbY?VXDuvl~L ze5+2sHRbG!gx#l@H?hh69Y(H%m94UU6gPN4~?7%=i+nf1`-AoIAJGp8F1$V!oZ zQ;*S=9Bhh6ihpsf>VYlU+%J-b9?B5{Y6jh?Cjq#`VzAsG&Vgt{L@GcqF1mTvjG-R4 zxZ!3!*W5gfkJ0?->PfwAp&(3E0vxM^5(@cg;Q}z+JP`m2K;f$?3_0-N#Td{Q8&w)2 zb$AiDAsRw|e9(;q#^G#0_A?1Ws2jpUCnv!7W5>JDpf)Nq7r1M`2^*sAH-w_163Rr` z#J12sW6awboIpU>!a`FO$E;~#q6DDJdUi1oW7m@Ho`xXB%mc1S%9U9c^;q8!m_o4* z;A&PD%`=lq%pU9r7=e$494bp~Ul1Mm#fHdX?);$k-gohl9q1i~heKbd1=VHL^D97} zAx|s#10#_Vq&xowPzN(Fc5X|a0&<6}j|2=tj4jO5J_F42fist7#<(eCNRdEJC;}z{ z4NVORB#6ULTM(4glYnblJj6cT4a~{r%Uc9aWuKXc6cZ#hn%ZuR3pa$6#TBK6CIA_U z06*772_7B54_}!yf=cL2%JtGRv2RS1Tofd8$JqT=>F(|t%1K>;kW*);uJ!5z$l!abvIYQ6?Iqk|;aqWQL zr{w?+c~HZ}NZcm~%wanpuQU}{Sg<*PeXe@o#;~AM?M6fkvkr^6vA;>sF_yl8FPpk| zA}vuIY4PD~DAXtttm|QpjG=!5k1n==qn;cV0_=(syo(J|!J!1qI%9m@1cS|^f=yz~ zDXHO)E45AF^}!PD$XgSJBH*@4ISk(eFWY%DDMMlkS?KM0kiYWG;z*a4$mBhU300+t zDu9CA&4*Bcd};XtY42|XIn13O@J{-Ed~64Lhv9k9*J(j@8uffKhzCtR)_2dHKQIz0 z;m)$p{!%(hXtO_77{LFvWq{n_z9z93_Fmc2hJ43 zLR-g-5;hk5S}mv|^3YH{P`7n=u2rgR%o;+);zKD5Y*~*eP*AFEA(m~PgWI$9NYVig za>lR@jUO>rX9~aS&QvV~Fr*vTcYsO2b;nfFC}&zWr`yS9y*B8o4-MJOCtevIBfzUk zwm`W<2yb_1XgkOmLO*Rj6g?YXJrIi*R6T$#yEDqZD9-L1cRN1$27%;x@%=+Vp}>dQ zsx5C?_9e{GLtED4WYvTI8$JG#FN;tM+dTjeAY7^1mib=b_rrn-(Jl5~#bBQoU{td0 zEmlRcg@lX|f-g8u0rr&h4@<6XiL>?S&hGy4pwUrj@10=eA>UK;Ap-}@ zd(7&n(T_amsYj-OhGuu}nhygy#$j!Lz&pU`+w=4JfO;Uo%l2}*2j_gg?f(wmT6k}; z2XU8l5Aa9(9h>6Lz4LWL2Xepp`Zev9!`%4+_Tl&X+z#{(!^5Gk(}HR>>iGlU4~#@g zh-c+H9-Y5WE&J_hIV(1QiN^san@Gn5cfE`b1Rj$|YDZ5U7QnwGVB)qI1i%4}7cCBc zc3cqx=emy|6fguN7uxKwWmj6TC=lz4DK|gFM-1F?{j9wawUFa%m6WjDcG|p#bR#(d zR+|`9V?W^rrx+GjKdpyZMtf({q7LSEW7bgJ3g|WnrUh&JMT|{>WwY__W2P*dGjcai z`?L9Y+iD7=51~%C0xrTWwgybMLEv6t0kB`XxuHv->4Gi7eZR2-_CbOKQ7N0#3Z@+A zNNp@=0U}dstB$&4`%KHAMvVPB+XXONf#fmIdt#;=GPlqIC_tzS zxFKV_-6QF8az=}5xb1-uxZ7c-PIe#L$kUY`2w=#1+%$!bjnqB3blb}z0dsU7kKf09 zE!Lqqg?|dUqsBasrM2Y(LatCp`1 z{<#wGk~HvLl7`za77rtv5fLo`8=00Df|LzvTMs#6nSj~xv6Ms4rR9aHQ^G}_)ag^0 z_55HYvjh*zJkz4X`WMCFzd%%;T(754ZnlsT1ZW9T+$7-ocAhu7sp>1*P{VRqS7Knw zn1AGUcRiR;YWv{%ux%++iW`9Xm-Wz+QxM?9-GhHLpXcha3cLtRj(_QbFUKe)&~IT0 ziiO3ct=WY7=K#kNi^`-!8<$~;b-B$vZc75O3^sn>d8V72Rs>&5v~Ah=7j{PubLR(j z*8VO&vID)taM$;BT7UzWUHN=_B_J0*_<#%)&jX@&B>e*;krMJT`tIlG3-b8kX(d!G zHhatFZ%wRf^I}uPXSxV(c}b|ME^ zat50jfR?*=T9jZ4bv>o}J~p9NwjF_mn5l#!Xq8lj&KRcY7$LY1u+&O=UktN;W5%#P zv~O~lJ3ok5#P^>M?LhA^JRJHuE#PZ=oI}v}yz4oGpMe-#Jg*-h;ETT$@Jx{k?gD>c zBvJxjL~ncc^40j%%k_a5C3eM}=~KWrT$R9r;=TPyp5r;h%F9#0q@Hg0zDjr&SUe~) zDLWN_->2nHplm|D1)#QHFZ)?w@t_!NPXS@O7d)~LwlOf+_U-O;Jv5}{K5%advx#VD z&F2MxBU;rn^I(XTbPpb>$2&FpW~o9BI{h<%2z|N~!CkKplsS?yW;mli4wAab+>bpt8_h)XbqG9)cDB=Bb6j1hu| zz*f#fYz#`(|8*dTx$^@&tiRXicA$3{Zos}y3-CI&D<7S&1mwa8pH+e4*-P|}q<>%} zQi8uB?DNk&@G<(T2dmnAdNiDF_gcJL(W*xXBxW9dAk;3Wz5rE%Eym4c0n_qR;A!&z zi3;c$HV@yFup5abd|f^4=Tjv}57>^XXHHJs4uFTt9^+GTtRS!ln=PMXBU!TTrp-D> zo|o363ZA6a`RwXp%C6_xCR%(?!B)UE?dP`gk*)Js8p$&(FRe$4dm3D;XEbr2=iaCC zyftSGn31UFgEkH@CO10DklSuEsg^J;RFHXI44%!Ss$HCSXErfJM?++$asw)uH^w1` zgpo&*D&X+aZGtP*(@oj-NlBMws~hN63cR3-nQlq|RBi)!ua?wGaGP2VbLR)Pr@z++ zcc6C|c5h#&1$Haq%KP+L!1#X49I5Mh;D&t57}{HYrtJ@mL`vZE5Fh!plWkXnygCA_M(St$YZ>cI_XTkUO8%du8Ml|!tjbYSwb)GwbvI+GT zys;jZ_QMh+=An9gBlM;)#)m;{swCht~x~-GSVeb5ZyZ!s| zu^s3ghHcr`X+d=w^$4&#)NtRY4GwOEemfs5LIB%}P4ff;9}dE{2h<7fKQa>8Rn{H9 zP+YE;kItDr19(I!Q0iujG`AFx&7yABqj`ujW(+tA zatlF@ZV#~`sMzcoc^Bvy>dY9QU9ye7fp;B)@9o!P z%xlV-1p7RiwAgT07@60DeK$c{z>Az!0@e-~WMNrPTd*2JX~+`X#2Dn9Zks$o)_FR{ zRt2y~fPV{cnU*v}34nG*2@F{Rbf?|0F1H59dfLL(h?#7&2ljmlrH_3?t1LPIN0lI% z>E=|MJcAlRmB*K>dax^po2SZF5hZ|EHe|%u*KOg-aKr$v!9`3_4~qpi^#O<*byiaL zE>+XC0zy65EMp~gpD5c$vI59aF#x<)Nxzn8P7dqeH$)C|=Lfbczt;zMpm!La2YsCu z*fW_|-oXa!Cg#H~3}JDvX~|c?wBWIx1RignVA}&r*D)$5f-V&Zo5cKqkw^*ofQ=pm z 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 -close(F); - - -open(OUT, ">$dst1") or die "cant open $dst1\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/TitleName\t+/ ) - { - $line =~ s/\t\#?TitleName.*\".*\"/\tTitleName\t\t\"WLAN CHECKER\"/; - } - - if( $line =~ m/^\tBannerFile/ ) - { - print OUT "\tBannerFile\t\t\$(BANNER_FILE)", $rn; - print OUT $rn, "\t#", $rn; - print OUT "\t# Permit LandingNormalJump: for TWL \"ApplicationJump\" function [TRUE/FALSE]", $rn; - print OUT "\t#", $rn; - print OUT "\tPermitLandingNormalJump\tTRUE", $rn; - next; - } - - print OUT $line; -} -close(OUT); - - -my $src2 = "$ROOT/include/twl/specfiles/ROM-TS_nand.rsf"; -my $dst2 = "wireless_checker_nand.rsf"; - -open(F, $src2) or die "cant open $src2\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst2") or die "cant open $dst2\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/^\tBannerFile/ ) - { - print OUT "\tBannerFile\t\t\$(BANNER_FILE)", $rn; - next; - } - - if( $line =~ m/InitialCode\t+/ ) - { - $line =~ s/\t\#?InitialCode.*[a-zA-Z0-9]{4}/\tInitialCode\t\t\t\t000A/; - } - - if( $line =~ m/TitleName\t+/ ) - { - $line =~ s/\t\#?TitleName.*\".*\"/\tTitleName\t\t\"WLAN CHECKER\"/; - } - - if( $line =~ m/PermitLandingNormalJump/ ) - { - $line =~ s/\t\#?.*(TRUE|FALSE)/\tPermitLandingNormalJump\tTRUE/; - } - - print OUT $line; -} \ No newline at end of file diff --git a/build/tests/WirelessChecker/src/frame.cpp b/build/tests/WirelessChecker/src/frame.cpp deleted file mode 100644 index c8582dc0..00000000 --- a/build/tests/WirelessChecker/src/frame.cpp +++ /dev/null @@ -1,148 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checker - File: main.cpp - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "util/util.h" -#include "util/canvas.h" -#include "frame.h" - -namespace -{ - -} - -CFrame::CFrame() : m_itemIndex(ITEM_TEST_WM) -{ - OS_InitMessageQueue(&m_EntrMsgq, m_EntrMsg, sizeof(m_EntrMsg)/sizeof(m_EntrMsg[0])); - -} - -CFrame::CFrame(u8 item) -{ - m_itemIndex = item; - OS_InitMessageQueue(&m_EntrMsgq, m_EntrMsg, sizeof(m_EntrMsg)/sizeof(m_EntrMsg[0])); -} - -CFrame::~CFrame() -{ - -} - -void -CFrame::InitDisp() -{ - util::CCanvas* pcm = util::GetMain1Canvas(); - util::CCanvas* pcs = util::GetSub1Canvas(); - - pcm->Clear(util::COLOR_BLACK); - pcs->Clear(util::COLOR_BLACK); - pcm->Printf(16*5, 0, util::COLOR_WHITE, L"@\mFc["); - pcm->Printf(96, 16*1, util::COLOR_WHITE, L"BUILD TIME: %s %s", L""__DATE__, L""__TIME__); - - DrawBorder(pcm, 4, 16*2 + 4, 256 - 8, 192 - (16*2 + 4), util::COLOR_WHITE); - pcm->Printf(16*1, 16*3, util::COLOR_WHITE, L"ON/OFFݒ[ %s ]", TRUE == OS_IsAvailableWireless() ? L"ON ":L"OFF"); - pcm->Printf(16*8, 16*3, util::COLOR_WHITE, L"OFF{[ %s ]", TRUE == OS_IsForceDisableWireless() ? L"Yes":L"No "); - - pcm->Printf(16*2, 16*5, util::COLOR_WHITE, L"DS̏eXg"); - pcm->Printf(16*2, 16*6, util::COLOR_WHITE, L"TWL̏eXg"); - pcm->Printf(16*2, 16*7, util::COLOR_WHITE, L"FATALG[G~[V"); - pcm->Printf(16*2, 16*8, util::COLOR_WHITE, L"FATALG[JoeXg"); - - DrawBorder(pcs, 4, 16*9 + 4, 256 - 8, 192 - (16*9 + 4), util::COLOR_WHITE); -} - -void -CFrame::CursorDisp(int xpos, int ystart, util::PaletteColor color) -{ - util::CCanvas* pcm = util::GetMain1Canvas(); - pcm->Clear(xpos, ystart, 16, 16*ITEM_NUM, util::COLOR_BLACK); - pcm->Print(xpos, ystart + 16*GetItemIndex(), color, L""); -} - -void -CFrame::HelpDisp(util::PaletteColor color) -{ - util::CCanvas* pcs = util::GetSub1Canvas(); - pcs->Clear(8, 16*9 + 8, 256 - 16, 16*2, util::COLOR_BLACK); - - wchar_t *pHelpString1, *pHelpString2; - - switch (GetItemIndex()) - { - case ITEM_TEST_WM: - pHelpString1 = L"DS̏eXgs܂B"; - pHelpString2 = L"LED̓_łmFĂB"; - break; - case ITEM_TEST_NWM: - pHelpString1 = L"TWL̏eXgs܂B"; - pHelpString2 = L"LED̓_łmFĂB"; - break; - case ITEM_TEST_FATAL: - pHelpString1 = L"FATALG[𔭐ATWLgȂ܂"; - pHelpString2 = L"HWZbgʼn񕜂܂B"; - break; - case ITEM_TEST_RECOVERY: - pHelpString1 = L"FATALG[̃Jo[eXg܂B"; - pHelpString2 = L"ċNTWLmFĂB"; - break; - } - pcs->Print(8, 16*9 + 8, color, pHelpString1); - pcs->Print(8, 16*10 + 8, color, pHelpString2); -} - -BOOL -CFrame::AutoEnter() -{ - return OS_SendMessage(&m_EntrMsgq, (OSMessage)TRUE, OS_MESSAGE_NOBLOCK); -} - -void -CFrame::ProcessButton() -{ - if (util::IsPadTrigger(PAD_KEY_UP)) - { - decRound(); - } else - if (util::IsPadTrigger(PAD_KEY_DOWN)) - { - incRound(); - } - - if (util::IsPadTrigger(PAD_BUTTON_A)) - { - if (FALSE == OS_SendMessage(&m_EntrMsgq, (OSMessage)TRUE, OS_MESSAGE_NOBLOCK)) - { - // already entered - } - } -} - -BOOL -CFrame::IsEnter() -{ - OSMessage msg; - return OS_ReceiveMessage(&m_EntrMsgq, &msg, OS_MESSAGE_NOBLOCK); - -} - -void -CFrame::DrawBorder(util::CCanvas* pCanvas, int px, int py, int pw, int ph, util::PaletteColor color) -{ - pCanvas->Clear(px, py, pw, 1, color); - pCanvas->Clear(px, py + ph - 1, pw, 1, color); - pCanvas->Clear(px, py + 1, 1, ph - 2, color); - pCanvas->Clear(px + pw - 1, py + 1, 1, ph - 2, color); -} diff --git a/build/tests/WirelessChecker/src/frame.h b/build/tests/WirelessChecker/src/frame.h deleted file mode 100644 index 2fec1121..00000000 --- a/build/tests/WirelessChecker/src/frame.h +++ /dev/null @@ -1,72 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checher - File: frame.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef WIRELESS_CHECHER_FRAME_H_ -#define WIRELESS_CHECHER_FRAME_H_ - -#include -#include "util/util.h" -#include - -class CFrame -{ -public: - enum { - ITEM_TEST_WM, - ITEM_TEST_NWM, - ITEM_TEST_FATAL, - ITEM_TEST_RECOVERY, - ITEM_NUM - }; -private: - u8 m_itemIndex; - OSMessageQueue m_EntrMsgq; - OSMessage m_EntrMsg[1]; - BOOL m_isEnter; - - static const u8 m_itemNum = ITEM_NUM; - void incRound() - { - if (m_itemNum) - { - m_itemIndex = (u8)((m_itemIndex + 1)%m_itemNum); - } - } - void decRound() - { - if (m_itemNum) - { - m_itemIndex = (u8)((m_itemNum + m_itemIndex - 1)%m_itemNum); - } - } -public: - CFrame(); - CFrame(u8 item); - virtual ~CFrame(); - void InitDisp(); - void CursorDisp(int xpos, int ystart, util::PaletteColor color); - void HelpDisp(util::PaletteColor color); - virtual void ProcessButton(); - u8 GetItemIndex() - { - return m_itemIndex; - } - BOOL IsEnter(); - BOOL AutoEnter(); - void DrawBorder(util::CCanvas* pCanvas, int px, int py, int pw, int ph, util::PaletteColor color); -}; - -#endif // WIRELESS_CHECHER_TEST_NWM_H_ diff --git a/build/tests/WirelessChecker/src/main.cpp b/build/tests/WirelessChecker/src/main.cpp deleted file mode 100644 index 0069788b..00000000 --- a/build/tests/WirelessChecker/src/main.cpp +++ /dev/null @@ -1,135 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checker - File: main.cpp - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include "util/util.h" -#include "util/canvas.h" -#include "frame.h" -#include "test_wm.h" -#include "test_nwm.h" -#include "test_fatal.h" -#include "test_recovery.h" -#include - -namespace -{ - -} -// end of anonymous namespace - - -void -TwlStartUp(void) -{ - -} - -void -TwlMain(void) -{ - BOOL isFatalChecking = FALSE; - util::Init(); - - OSDeliverArgInfo argInfo; - if (TRUE == OS_IsValidDeliverArg()) - { - OS_InitDeliverArgInfo(&argInfo, 0); - OS_DecodeDeliverArg(); - if( (OS_GetDeliverArgc() > 0) && ( STD_CompareNString( (const char *)OS_GetDeliverArgv(1), "fatal", 3 ) == 0 ) ) - { - isFatalChecking = TRUE; - } - } - - // display on - util::WaitVBlankIntr(); - util::dispOn(); - - CFrame menu(isFatalChecking == TRUE ? CFrame::ITEM_TEST_RECOVERY:CFrame::ITEM_TEST_WM); - if (isFatalChecking == TRUE) - { - menu.AutoEnter(); - } - CTestWm wm; - CTestNwm nwm; - CTestFatal fatal; - CTestRecovery rcv; - menu.InitDisp(); - - for (;;) - { - util::UpdateGamePad(); - menu.ProcessButton(); - menu.CursorDisp(16*1, 16*5, util::COLOR_LIMEGREEN); - menu.HelpDisp(util::COLOR_WHITE); - - if (menu.IsEnter()) - { - BOOL result; - u8 itemidx = menu.GetItemIndex(); - util::CCanvas* pcm = util::GetMain1Canvas(); - - switch (itemidx) - { - case CFrame::ITEM_TEST_WM: - pcm->Clear(16*12, 16*5, 16*3, 16, util::COLOR_BLACK); - pcm->Print(16*12, 16*5, util::COLOR_YELLOW, L"TESTING"); - util::WaitVBlankIntr(); - util::UpdateDisplay(); - result = wm.WirelessTest(); - pcm->Clear(16*12, 16*5, 16*3, 16, util::COLOR_BLACK); - pcm->Print(16*12, 16*5, result == TRUE ? util::COLOR_TURQUOISE:util::COLOR_RED, result == TRUE ? L"SUCCESS":L"FAILURE"); - break; - case CFrame::ITEM_TEST_NWM: - pcm->Clear(16*12, 16*6, 16*3, 16, util::COLOR_BLACK); - pcm->Print(16*12, 16*6, util::COLOR_YELLOW, L"TESTING"); - util::WaitVBlankIntr(); - util::UpdateDisplay(); - result = nwm.WirelessTest(); - pcm->Clear(16*12, 16*6, 16*3, 16, util::COLOR_BLACK); - pcm->Print(16*12, 16*6, result == TRUE ? util::COLOR_TURQUOISE:util::COLOR_RED, result == TRUE ? L"SUCCESS":L"FAILURE"); - break; - case CFrame::ITEM_TEST_FATAL: - pcm->Clear(16*12, 16*7, 16*3, 16, util::COLOR_BLACK); - pcm->Print(16*12, 16*7, util::COLOR_YELLOW, L"TESTING"); - result = fatal.WrackTest(); - pcm->Clear(16*12, 16*7, 16*3, 16, util::COLOR_BLACK); - pcm->Print(16*12, 16*7, result == TRUE ? util::COLOR_TURQUOISE:util::COLOR_RED, result == TRUE ? L"SUCCESS":L"FAILURE"); - break; - case CFrame::ITEM_TEST_RECOVERY: - pcm->Clear(16*12, 16*8, 16*3, 16, util::COLOR_BLACK); - pcm->Print(16*12, 16*8, util::COLOR_YELLOW, L"TESTING"); - if (isFatalChecking == FALSE) - { - result = rcv.RecoveryTest(); - } else { - result = rcv.RecoveryTest2(); - isFatalChecking = FALSE; - } - pcm->Clear(16*12, 16*8, 16*3, 16, util::COLOR_BLACK); - pcm->Print(16*12, 16*8, result == TRUE ? util::COLOR_TURQUOISE:util::COLOR_RED, result == TRUE ? L"SUCCESS":L"FAILURE"); - break; - } - } - - util::WaitVBlankIntr(); - util::UpdateDisplay(); - } - -} diff --git a/build/tests/WirelessChecker/src/test.cpp b/build/tests/WirelessChecker/src/test.cpp deleted file mode 100644 index 4dd480af..00000000 --- a/build/tests/WirelessChecker/src/test.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checker - File: main.cpp - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "util/canvas.h" -#include "util/util.h" -#include "util/wprintf.h" -#include -#include -#include -#include -//#include -#include -#include "test.h" - -CTest::CTest() : m_state(TEST_STATE_NONE) -{ - m_pc = util::GetSub1Canvas(); -} - -CTest::~CTest() -{ - -} - -BOOL -CTest::Init(void) -{ - return TRUE; -} - -BOOL -CTest::Enable(void) -{ - return TRUE; -} - -BOOL -CTest::ScanTest(void) -{ - return TRUE; -} - -BOOL -CTest::Disable(void) -{ - return TRUE; -} - -BOOL -CTest::End(void) -{ - return TRUE; -} - -u8 -CTest::GetState(void) -{ - return m_state; -} - -void CTest::LogClear(util::CCanvas* pc) -{ - pc->Clear(0, 0, 256, 16*9, util::COLOR_BLACK); - m_line = 0; - util::WaitVBlankIntr(); - util::UpdateDisplay(); -} - -void -CTest::LogPrintf(util::CCanvas* pc, const NNSG2dChar* text, ...) -{ - std::auto_ptr pLocalBuffer(new wchar_t[LOCAL_BUFFER_LEN]); - va_list args; - - va_start(args, text); - util::VSNWPrintf(pLocalBuffer.get(), LOCAL_BUFFER_LEN, text, args); - va_end(args); - pc->Print(16*1, 16*m_line++, util::COLOR_WHITE, pLocalBuffer.get()); - util::WaitVBlankIntr(); - util::UpdateDisplay(); -} diff --git a/build/tests/WirelessChecker/src/test.h b/build/tests/WirelessChecker/src/test.h deleted file mode 100644 index 21c4d985..00000000 --- a/build/tests/WirelessChecker/src/test.h +++ /dev/null @@ -1,54 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checher - File: test.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef WIRELESS_CHECHER_TEST_H_ -#define WIRELESS_CHECHER_TEST_H_ - -#include -#include "util/util.h" -#include "util/canvas.h" -#include -#include -#include - -class CTest - -{ -private: - u8 m_line; - static const int LOCAL_BUFFER_LEN = 1024; -public: - enum { - TEST_STATE_NONE, - TEST_STATE_INITIALIZED, - TEST_STATE_ENABLED, - TEST_STATE_NUM - }; - u8 m_state; - util::CCanvas *m_pc; - CTest(); - virtual ~CTest(); - virtual BOOL Init(void); - virtual BOOL Enable(void); - virtual BOOL ScanTest(void); - virtual BOOL Disable(void); - virtual BOOL End(void); - u8 GetState(void); - void LogClear(util::CCanvas* pc); - void LogPrintf(util::CCanvas* pc, const NNSG2dChar* text, ...); -}; - -#endif // WIRELESS_CHECHER_TEST_H_ diff --git a/build/tests/WirelessChecker/src/test_fatal.cpp b/build/tests/WirelessChecker/src/test_fatal.cpp deleted file mode 100644 index a3684aca..00000000 --- a/build/tests/WirelessChecker/src/test_fatal.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checker - File: test_fatal.cpp - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "util/util.h" -#include "util/canvas.h" -#include "test_fatal.h" -#include "nwm_arm9_private.h" -#pragma exceptions on - -extern "C" { -extern NWMRetCode NWMi_WrackFirmware(NWMCallbackFunc callback); -} - -namespace -{ - OSMessageQueue m_AsyncMsgq; - OSMessage m_AsyncMsg[1]; - - void m_WrackFirmCallback(void *arg) - { - NWMCallback *cb = (NWMCallback*)arg; - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->retcode == NWM_RETCODE_FATAL_ERROR ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - - } - - void m_InitMessage(void) - { - OS_InitMessageQueue(&m_AsyncMsgq, m_AsyncMsg, sizeof(m_AsyncMsg)/sizeof(m_AsyncMsg[0])); - } - - BOOL m_WaitCallback(void) - { - OSMessage msg; - (void)OS_ReceiveMessage(&m_AsyncMsgq, &msg, OS_MESSAGE_BLOCK); - return (BOOL)msg; - } -} - - - - - -CTestFatal::CTestFatal() -{ - m_InitMessage(); -} - -CTestFatal::~CTestFatal() -{ - -} - -BOOL -CTestFatal::Wrack(void) -{ - try - { - if (m_state < TEST_STATE_INITIALIZED) - { - throw L"Xe[gsł.\n"; - } - - if (NWM_RETCODE_OPERATING != NWMi_WrackFirmware(m_WrackFirmCallback)) - { - throw L"WrackFirmware s.\n"; - } - if (m_WaitCallback() == FALSE) - { - throw L"WrackFirmware 񓯊s.\n"; - } - LogPrintf(m_pc, L"WrackFirmware .\n"); - - } - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - return TRUE; -} - -BOOL -CTestFatal::WrackTest(void) -{ - try - { - if (FALSE == Init()) - { - throw L"Init() s.\n"; - } - - if (FALSE == Wrack()) - { - End(); - throw L"Wrack() s.\n"; - } - - if (FALSE == End()) - { - throw L"End() s.\n"; - } - } - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - LogPrintf(m_pc, L"eXg܂.\n"); - - return TRUE; -} diff --git a/build/tests/WirelessChecker/src/test_fatal.h b/build/tests/WirelessChecker/src/test_fatal.h deleted file mode 100644 index 128d582d..00000000 --- a/build/tests/WirelessChecker/src/test_fatal.h +++ /dev/null @@ -1,37 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checher - File: test_fatal.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef WIRELESS_CHECHER_TEST_FATAL_H_ -#define WIRELESS_CHECHER_TEST_FATAL_H_ - -#include -#include "test.h" -#include "test_nwm.h" -#include "util/canvas.h" - -class CTestFatal - : public CTestNwm -{ -private: -public: - CTestFatal(); - virtual ~CTestFatal(); - BOOL Wrack(void); - BOOL WrackTest(void); -}; - - -#endif // WIRELESS_CHECHER_TEST_FATAL_H_ diff --git a/build/tests/WirelessChecker/src/test_nwm.cpp b/build/tests/WirelessChecker/src/test_nwm.cpp deleted file mode 100644 index 127afab7..00000000 --- a/build/tests/WirelessChecker/src/test_nwm.cpp +++ /dev/null @@ -1,355 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checker - File: test_nwm.cpp - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "util/util.h" -#include "util/canvas.h" -#include "test_nwm.h" -#pragma exceptions on - -namespace test_nwm -{ - OSMessageQueue m_AsyncMsgq; - OSMessage m_AsyncMsg[1]; - void m_InitMessage(void); - - void m_LoadDeviceCallback(void *arg) - { - NWMCallback *cb = (NWMCallback*)arg; - - // TODO: get FW ver and RegDomain? - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->retcode == NWM_RETCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - } - - void m_OpenCallback(void *arg) - { - NWMCallback *cb = (NWMCallback*)arg; - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->retcode == NWM_RETCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - - } - - void m_UnloadDeviceCallback(void *arg) - { - NWMCallback *cb = (NWMCallback*)arg; - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->retcode == NWM_RETCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - } - - void m_CloseCallback(void *arg) - { - NWMCallback *cb = (NWMCallback*)arg; - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->retcode == NWM_RETCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - - } - - void m_ScanCallback(void *arg) - { - NWMStartScanCallback *cb = (NWMStartScanCallback*)arg; - - OS_TPrintf("Number of BSS: %d\n", cb->bssDescCount); - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->retcode == NWM_RETCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - - } - - void m_InitMessage(void) - { - OS_InitMessageQueue(&m_AsyncMsgq, m_AsyncMsg, sizeof(m_AsyncMsg)/sizeof(m_AsyncMsg[0])); - } - - BOOL m_WaitCallback(void) - { - OSMessage msg; - (void)OS_ReceiveMessage(&m_AsyncMsgq, &msg, OS_MESSAGE_BLOCK); - return (BOOL)msg; - } -} - - - - - -CTestNwm::CTestNwm() : m_pNwmBuffer(0), m_pScanBuffer(0) -{ - test_nwm::m_InitMessage(); -} - -CTestNwm::~CTestNwm() -{ - -} - - -BOOL -CTestNwm::Init(void) -{ - LogClear(m_pc); - - try - { - if (m_state != TEST_STATE_NONE) - { - throw L"Xe[gsł.\n"; - } - if (m_pNwmBuffer) - { - delete [] m_pNwmBuffer; - m_pNwmBuffer = 0; - throw L"NWMobt@sł.\n"; - } - - m_pNwmBuffer = new u8 [NWM_SYSTEM_BUF_SIZE + 0x20]; - - - if (NWM_RETCODE_SUCCESS != NWM_Init((void*)MATH_ROUNDUP((u32)m_pNwmBuffer, 32), NWM_SYSTEM_BUF_SIZE, m_DmaNo)) - { - throw L"NWM_Init s.\n"; - } - - LogPrintf(m_pc, L"NWM_Init .\n"); - } - - catch (const wchar_t* string) - { - delete [] m_pNwmBuffer; - m_pNwmBuffer = 0; - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - m_state = TEST_STATE_INITIALIZED; - - return TRUE; -} - -BOOL -CTestNwm::Enable(void) -{ - try { - if (m_state != TEST_STATE_INITIALIZED) - { - throw L"Xe[gsł.\n"; - } - - if (NWM_RETCODE_OPERATING != NWM_LoadDevice(test_nwm::m_LoadDeviceCallback)) - { - throw L"NWM_LoadDevice s.\n"; - } - - if (test_nwm::m_WaitCallback() == FALSE) - { - throw L"NWM_LoadDevice 񓯊s.\n"; - } - LogPrintf(m_pc, L"NWM_LoadDevice .\n"); - - if (NWM_RETCODE_OPERATING != NWM_Open(test_nwm::m_OpenCallback)) - { - throw L"NWM_Open s.\n"; - } - if (test_nwm::m_WaitCallback() == FALSE) - { - throw L"NWM_Open 񓯊s.\n"; - } - LogPrintf(m_pc, L"NWM_Open .\n"); - } - - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - m_state = TEST_STATE_ENABLED; - return TRUE; -} - -BOOL -CTestNwm::ScanTest(void) -{ - try - { - - if (m_state != TEST_STATE_ENABLED) - { - throw L"Xe[gsł.\n"; - } - - if (m_pScanBuffer) - { - throw L"Scanobt@sł.\n"; - } - - m_pScanBuffer = new u8 [NWM_SIZE_SCANBUF_MAX + 0x20]; - - NWMScanParam param; - - MI_CpuClear8(m_pScanBuffer, NWM_SIZE_SCANBUF_MAX + 0x20); - DC_StoreRange(m_pScanBuffer, NWM_SIZE_SCANBUF_MAX + 0x20); - param.scanBuf = (NWMBssDesc*)MATH_ROUNDUP((u32)m_pScanBuffer, 32); - param.scanBufSize = NWM_SIZE_SCANBUF_MAX; - param.channelList = (u16)(NWM_GetAllowedChannel() >> 1); - param.channelDwellTime = NWM_GetDispersionScanPeriod(NWM_SCANTYPE_ACTIVE); - param.scanType = NWM_SCANTYPE_ACTIVE; - param.ssidLength = 0; - MI_CpuFill8(param.ssid, 0xFF, sizeof(param.ssid)); - - if (NWM_RETCODE_OPERATING != NWM_StartScan(test_nwm::m_ScanCallback, ¶m)) - { - throw L"NWM_StartScan s.\n"; - } - - if (test_nwm::m_WaitCallback() == FALSE) - { - throw L"NWM_StartScan 񓯊s.\n"; - } - - LogPrintf(m_pc, L"NWM_StartScan .\n"); - - } - - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - delete [] m_pScanBuffer; - m_pScanBuffer = 0; - - return TRUE; -} - -BOOL -CTestNwm::Disable(void) -{ - try { - if (m_state != TEST_STATE_ENABLED) - { - throw L"Xe[gsł.\n"; - } - - if (NWM_RETCODE_OPERATING != NWM_Close(test_nwm::m_CloseCallback)) - { - throw L"NWM_Close s.\n"; - } - if (test_nwm::m_WaitCallback() == FALSE) - { - throw L"NWM_Close 񓯊s.\n"; - } - LogPrintf(m_pc, L"NWM_Close .\n"); - - if (NWM_RETCODE_OPERATING != NWM_UnloadDevice(test_nwm::m_UnloadDeviceCallback)) - { - throw L"NWM_UnloadDevice s.\n"; - } - if (test_nwm::m_WaitCallback() == FALSE) - { - throw L"NWM_UnloadDevice 񓯊s.\n"; - } - LogPrintf(m_pc, L"NWM_UnloadDevice .\n"); - } - - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - m_state = TEST_STATE_INITIALIZED; - return TRUE; - -} - -BOOL -CTestNwm::End(void) -{ - try - { - if (m_state != TEST_STATE_INITIALIZED) - { - throw L"Xe[gsł.\n"; - } - if (NWM_RETCODE_SUCCESS != NWM_End()) - { - throw L"NWM_End s.\n"; - } - - LogPrintf(m_pc, L"NWM_End .\n"); - } - - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - m_state = TEST_STATE_NONE; - delete [] m_pNwmBuffer; - m_pNwmBuffer = 0; - - return TRUE; -} - -BOOL -CTestNwm::WirelessTest(void) -{ - try - { - if (FALSE == Init()) - { - throw L"Init() s.\n"; - } - if (FALSE == Enable()) - { - End(); - throw L"Enable() s.\n"; - } - if (FALSE == ScanTest()) - { - Disable(); - End(); - throw L"ScanTest() s.\n"; - } - if (FALSE == Disable()) - { - throw L"Disable() s.\n"; - } - if (FALSE == End()) - { - throw L"End() s.\n"; - } - } - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - LogPrintf(m_pc, L"eXg܂.\n"); - - return TRUE; -} diff --git a/build/tests/WirelessChecker/src/test_nwm.h b/build/tests/WirelessChecker/src/test_nwm.h deleted file mode 100644 index cbc725f6..00000000 --- a/build/tests/WirelessChecker/src/test_nwm.h +++ /dev/null @@ -1,52 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checher - File: test_nwm.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef WIRELESS_CHECHER_TEST_NWM_H_ -#define WIRELESS_CHECHER_TEST_NWM_H_ - -#include -#include "test.h" - -namespace test_nwm -{ - void m_LoadDeviceCallback(void *arg); - void m_OpenCallback(void *arg); - void m_UnloadDeviceCallback(void *arg); - void m_CloseCallback(void *arg); - void m_ScanCallback(void *arg); - BOOL m_WaitCallback(void); -} - -class CTestNwm - : public CTest -{ -private: - static const u8 m_DmaNo = 3; - u8 *m_pNwmBuffer; - u8 *m_pScanBuffer; -public: - CTestNwm(); - virtual ~CTestNwm(); - BOOL Init(void); - BOOL Enable(void); - BOOL ScanTest(void); - BOOL Disable(void); - BOOL End(void); - BOOL WirelessTest(void); -}; - - -#endif // WIRELESS_CHECHER_TEST_NWM_H_ diff --git a/build/tests/WirelessChecker/src/test_recovery.cpp b/build/tests/WirelessChecker/src/test_recovery.cpp deleted file mode 100644 index ab8ae1f0..00000000 --- a/build/tests/WirelessChecker/src/test_recovery.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checker - File: test_recovery.cpp - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "util/util.h" -#include "util/canvas.h" -#include "test_recovery.h" -#include "nwm_arm9_private.h" -#pragma exceptions on - - -CTestRecovery::CTestRecovery() -{ -} - -CTestRecovery::~CTestRecovery() -{ - -} - - -BOOL -CTestRecovery::RecoveryTest(void) -{ - try - { - if (FALSE == Init()) - { - throw L"Init() s.\n"; - } - - if (FALSE == Enable()) - { - End(); - throw L"Enable() s.\n"; - } - - if (FALSE == Wrack()) - { - Disable(); - End(); - throw L"Wrack() s.\n"; - } - - LogPrintf(m_pc, L"FATALG[҂Ă܂.\n"); - - if (TRUE == test_nwm::m_WaitCallback()) - { - Disable(); - End(); - throw L"FATALG[N܂ł.\n"; - } - - LogPrintf(m_pc, L"FATALG[܂.\n"); - } - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - m_state = TEST_STATE_INITIALIZED; - End(); - LogPrintf(m_pc, L"3bHWZbgs܂.\n"); - OS_Sleep(3000); - - OSDeliverArgInfo argInfo; - OS_InitDeliverArgInfo(&argInfo, 0); - OSi_SetDeliverArgState( OS_DELIVER_ARG_BUF_ACCESSIBLE | OS_DELIVER_ARG_BUF_WRITABLE ); - OS_SetStringToDeliverArg( "fatal" ); - OS_EncodeDeliverArg(); - OS_DoApplicationJump( - *(const OSTitleId*)(HW_TWL_ROM_HEADER_BUF + 0x230), - OS_APP_JUMP_NORMAL); - - return TRUE; -} - -BOOL -CTestRecovery::RecoveryTest2(void) -{ - return WirelessTest(); -} - diff --git a/build/tests/WirelessChecker/src/test_recovery.h b/build/tests/WirelessChecker/src/test_recovery.h deleted file mode 100644 index c346bc17..00000000 --- a/build/tests/WirelessChecker/src/test_recovery.h +++ /dev/null @@ -1,37 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checher - File: test_recovery.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef WIRELESS_CHECHER_TEST_RECOVERY_H_ -#define WIRELESS_CHECHER_TEST_RECOVERY_H_ - -#include -#include "test.h" -#include "test_fatal.h" -#include "util/canvas.h" - -class CTestRecovery - : public CTestFatal -{ -private: -public: - CTestRecovery(); - ~CTestRecovery(); - BOOL RecoveryTest(void); - BOOL RecoveryTest2(void); -}; - - -#endif // WIRELESS_CHECHER_TEST_RECOVERY_H_ diff --git a/build/tests/WirelessChecker/src/test_wm.cpp b/build/tests/WirelessChecker/src/test_wm.cpp deleted file mode 100644 index f2b2a151..00000000 --- a/build/tests/WirelessChecker/src/test_wm.cpp +++ /dev/null @@ -1,376 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checker - File: test_nwm.cpp - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "util/util.h" -#include "util/canvas.h" -#include "test_wm.h" -#pragma exceptions on - -namespace -{ - OSMessageQueue m_AsyncMsgq; - OSMessage m_AsyncMsg[1]; - - void m_EnableCallback(void *arg) - { - WMCallback *cb = (WMCallback*)arg; - - // TODO: get FW ver and RegDomain? - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->errcode == WM_ERRCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - } - - void m_PowerOnCallback(void *arg) - { - WMCallback *cb = (WMCallback*)arg; - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->errcode == WM_ERRCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - - } - - void m_DisableCallback(void *arg) - { - WMCallback *cb = (WMCallback*)arg; - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->errcode == WM_ERRCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - } - - void m_PowerOffCallback(void *arg) - { - WMCallback *cb = (WMCallback*)arg; - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->errcode == WM_ERRCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - - } - - void m_ScanCallback(void *arg) - { - WMStartScanExCallback *cb = (WMStartScanExCallback*)arg; - - OS_TPrintf("Number of BSS: %d\n", cb->bssDescCount); - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->errcode == WM_ERRCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - - } - - void m_EndScanCallback(void *arg) - { - WMCallback *cb = (WMCallback*)arg; - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->errcode == WM_ERRCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - - } - - void m_InitMessage(void) - { - OS_InitMessageQueue(&m_AsyncMsgq, m_AsyncMsg, sizeof(m_AsyncMsg)/sizeof(m_AsyncMsg[0])); - } - - BOOL m_WaitCallback(void) - { - OSMessage msg; - (void)OS_ReceiveMessage(&m_AsyncMsgq, &msg, OS_MESSAGE_BLOCK); - return (BOOL)msg; - } -} - - - - - -CTestWm::CTestWm() : m_pWmBuffer(0), m_pScanBuffer(0) -{ - m_InitMessage(); - m_pc = util::GetSub1Canvas(); -} - -CTestWm::~CTestWm() -{ - -} - - -BOOL -CTestWm::Init(void) -{ - LogClear(m_pc); - - try - { - if (m_state != TEST_STATE_NONE) - { - throw L"Xe[gsł.\n"; - } - if (m_pWmBuffer) - { - delete [] m_pWmBuffer; - m_pWmBuffer = 0; - throw L"WMpobt@sł.\n"; - } - - m_pWmBuffer = new u8 [WM_SYSTEM_BUF_SIZE + 0x20]; - - - if (WM_ERRCODE_SUCCESS != WM_Init((void*)MATH_ROUNDUP((u32)m_pWmBuffer, 32), m_DmaNo)) - { - throw L"WM_Init s.\n"; - } - - LogPrintf(m_pc, L"WM_Init .\n"); - - } - - catch (const wchar_t* string) - { - delete [] m_pWmBuffer; - m_pWmBuffer = 0; - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - m_state = TEST_STATE_INITIALIZED; - - return TRUE; -} - -BOOL -CTestWm::Enable(void) -{ - try { - - if (m_state != TEST_STATE_INITIALIZED) - { - throw L"Xe[gsł.\n"; - } - - if (WM_ERRCODE_OPERATING != WM_Enable(m_EnableCallback)) - { - throw L"WM_Enable s.\n"; - } - if (m_WaitCallback() == FALSE) - { - throw L"WM_Enable 񓯊s.\n"; - } - LogPrintf(m_pc, L"WM_Enable .\n"); - if (WM_ERRCODE_OPERATING != WM_PowerOn(m_PowerOnCallback)) - { - throw L"WM_PowerOn s.\n"; - } - if (m_WaitCallback() == FALSE) - { - throw L"WM_PowerOn 񓯊s.\n"; - } - LogPrintf(m_pc, L"WM_PowerOn .\n"); - } - - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - m_state = TEST_STATE_ENABLED; - return TRUE; -} - -BOOL -CTestWm::ScanTest(void) -{ - try - { - - if (m_state != TEST_STATE_ENABLED) - { - throw L"Xe[gsł.\n"; - } - - if (m_pScanBuffer) - { - throw L"Scanobt@sł.\n"; - } - - m_pScanBuffer = new u8 [WM_SIZE_SCAN_EX_BUF + 0x20]; - - WMScanExParam param; - - MI_CpuClear8(m_pScanBuffer, WM_SIZE_SCAN_EX_BUF + 0x20); - DC_StoreRange(m_pScanBuffer, WM_SIZE_SCAN_EX_BUF + 0x20); - param.scanBuf = (WMBssDesc*)MATH_ROUNDUP((u32)m_pScanBuffer, 32); - param.scanBufSize = WM_SIZE_SCAN_EX_BUF; - param.channelList = (u16)WM_GetAllowedChannel(); - param.maxChannelTime = WM_GetDispersionScanPeriod(); - param.scanType = WM_SCANTYPE_ACTIVE; - param.ssidLength = 0; - MI_CpuFill8(param.ssid, 0xFF, sizeof(param.ssid)); - param.ssidMatchLength = 0; - - if (WM_ERRCODE_OPERATING != WM_StartScanEx(m_ScanCallback, ¶m)) - { - throw L"WM_StartScanEx s.\n"; - } - - if (m_WaitCallback() == FALSE) - { - throw L"WM_StartScanEx 񓯊s.\n"; - } - LogPrintf(m_pc, L"WM_StartScanEx .\n"); - - if (WM_ERRCODE_OPERATING != WM_EndScan(m_EndScanCallback)) - { - throw L"WM_EndScan s.\n"; - } - - if (m_WaitCallback() == FALSE) - { - throw L"WM_EndScan 񓯊s.\n"; - } - LogPrintf(m_pc, L"WM_EndScan .\n"); - - } - - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - delete [] m_pScanBuffer; - m_pScanBuffer = 0; - - return TRUE; -} - -BOOL -CTestWm::Disable(void) -{ - try { - if (m_state != TEST_STATE_ENABLED) - { - throw L"Xe[gsł.\n"; - } - - if (WM_ERRCODE_OPERATING != WM_PowerOff(m_PowerOffCallback)) - { - throw L"WM_PowerOff s.\n"; - } - if (m_WaitCallback() == FALSE) - { - throw L"WM_PowerOff 񓯊s.\n"; - } - LogPrintf(m_pc, L"WM_PowerOff .\n"); - - if (WM_ERRCODE_OPERATING != WM_Disable(m_DisableCallback)) - { - throw L"WM_Disable s.\n"; - } - if (m_WaitCallback() == FALSE) - { - throw L"WM_Disable 񓯊s.\n"; - } - LogPrintf(m_pc, L"WM_Disable .\n"); - } - - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - m_state = TEST_STATE_INITIALIZED; - return TRUE; - -} - -BOOL -CTestWm::End(void) -{ - try - { - if (m_state != TEST_STATE_INITIALIZED) - { - throw L"Xe[gsł\n"; - } - if (WM_ERRCODE_SUCCESS != WM_Finish()) - { - throw L"WM_Finish s.\n"; - } - LogPrintf(m_pc, L"WM_Finish .\n"); - } - - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - m_state = TEST_STATE_NONE; - delete [] m_pWmBuffer; - m_pWmBuffer = 0; - - return TRUE; -} - -BOOL -CTestWm::WirelessTest(void) -{ - try - { - if (FALSE == Init()) - { - throw L"Init() s.\n"; - } - if (FALSE == Enable()) - { - End(); - throw L"Enable() s.\n"; - } - if (FALSE == ScanTest()) - { - Disable(); - End(); - throw L"ScanTest() s.\n"; - } - if (FALSE == Disable()) - { - throw L"Disable() s.\n"; - } - if (FALSE == End()) - { - throw L"End() s.\n"; - } - } - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - LogPrintf(m_pc, L"eXg܂.\n"); - - return TRUE; -} diff --git a/build/tests/WirelessChecker/src/test_wm.h b/build/tests/WirelessChecker/src/test_wm.h deleted file mode 100644 index 958a4919..00000000 --- a/build/tests/WirelessChecker/src/test_wm.h +++ /dev/null @@ -1,43 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checher - File: test_wm.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef WIRELESS_CHECHER_TEST_WM_H_ -#define WIRELESS_CHECHER_TEST_WM_H_ - -#include -#include "test.h" -#include "util/canvas.h" - -class CTestWm - : public CTest -{ -private: - static const u8 m_DmaNo = 3; - u8 *m_pWmBuffer; - u8 *m_pScanBuffer; -public: - CTestWm(); - virtual ~CTestWm(); - BOOL Init(void); - BOOL Enable(void); - BOOL ScanTest(void); - BOOL Disable(void); - BOOL End(void); - BOOL WirelessTest(void); -}; - - -#endif // WIRELESS_CHECHER_TEST_WM_H_ diff --git a/build/tests/WirelessChecker/src/util/canvas.cpp b/build/tests/WirelessChecker/src/util/canvas.cpp deleted file mode 100644 index 9e9156ef..00000000 --- a/build/tests/WirelessChecker/src/util/canvas.cpp +++ /dev/null @@ -1,175 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Nmenu - File: Canvas.cpp - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "util/canvas.h" -#include "util/util.h" -#include "util/wprintf.h" -#include -#include -#include -#include -//#include -#include - -namespace util -{ - -CCanvas::CCanvas() -: m_pFont(NULL) -{ -} - -CCanvas::~CCanvas() -{ -} - -void -CCanvas::Init(NNS_GFD_DST_TYPE type, u32 offset, void* pScrBase, const NNSG2dFont* pFont) -{ - m_transType = type; - m_transOffset = offset; - m_pFont = pFont; - - NNS_G2dCharCanvasInitForBG( - &m_cc, - m_offscreen, - CANVAS_WIDTH, - CANVAS_HEIGHT, - NNS_G2D_CHARA_COLORMODE_16 ); - - NNS_G2dTextCanvasInit( - &m_txn, - &m_cc, - m_pFont, - TEXT_HSPACE, - TEXT_VSPACE ); - - NNS_G2dMapScrToCharText( - pScrBase, - CANVAS_WIDTH, - CANVAS_HEIGHT, - CANVAS_LEFT, - CANVAS_TOP, - NNS_G2D_TEXT_BG_WIDTH_256, - CANVAS_CHARACTER_OFFSET, - DEFAULT_COLOR_PALETTE ); -} - -void -CCanvas::Clear(PaletteColor c) -{ - NNS_G2dCharCanvasClear(&m_cc, c); - RegisterTransferTask(); -} - -void -CCanvas::Clear(int x, int y, int w, int h, PaletteColor c) -{ - const int px = MATH_CLAMP(x, 0, HW_LCD_WIDTH); - const int py = MATH_CLAMP(y, 0, HW_LCD_HEIGHT); - const int pw = MATH_CLAMP(x + w, px, HW_LCD_WIDTH) - px; - const int ph = MATH_CLAMP(y + h, py, HW_LCD_HEIGHT) - py; - - if( pw > 0 && ph > 0 ) - { - NNS_G2dCharCanvasClearArea(&m_cc, c, px, py, pw, ph); - RegisterTransferTask(); - } -} - -void -CCanvas::Print(int x, int y, PaletteColor c, const NNSG2dChar* text) -{ - NNS_G2dTextCanvasDrawText( - &m_txn, - x, - y, - c, - DRAWTEXT_FLAG_DEFAULT, - text ); - - RegisterTransferTask(); -} - -void -CCanvas::Printf(int x, int y, PaletteColor c, const NNSG2dChar* text, ...) -{ - std::auto_ptr pLocalBuffer(new wchar_t[LOCAL_BUFFER_LEN]); - va_list args; - - va_start(args, text); - VSNWPrintf(pLocalBuffer.get(), LOCAL_BUFFER_LEN, text, args); - va_end(args); - - Print(x, y, c, pLocalBuffer.get()); -} - - -void -CCanvas::RegisterTransferTask() -{ - if( ! m_bTransferRegsitered ) - { - NNS_GfdRegisterNewVramTransferTask( - m_transType, - m_transOffset, - m_offscreen, - sizeof(m_offscreen) ); - - m_bTransferRegsitered = true; - } -} - -void -CCanvas::ResetTransferTask() -{ - m_bTransferRegsitered = false; -} - - -std::wstring -CCanvas::WrapText(std::wstring text, int width) -{ - int textWidth = 0; - - for( u32 i = 0; i < text.length(); ++i ) - { - const int charWidth = NNS_G2dFontGetCharWidth(m_pFont, text[i]); - - if( text[i] == L'\n' ) - { - textWidth = 0; - } - else if( (textWidth > 0) && ((textWidth + charWidth) > width) ) - { - text.insert(i - 1, 1, L'\n'); - textWidth = 0; - } - else - { - textWidth += charWidth + TEXT_HSPACE; - } - } - - return text; -} - - - -} -// end of namespace tlib diff --git a/build/tests/WirelessChecker/src/util/canvas.h b/build/tests/WirelessChecker/src/util/canvas.h deleted file mode 100644 index 0e6c7781..00000000 --- a/build/tests/WirelessChecker/src/util/canvas.h +++ /dev/null @@ -1,78 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Nmenu - File: Canvas.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef TLIB_CONTROL_CANVAS_H_ -#define TLIB_CONTROL_CANVAS_H_ - -#define NNS_G2D_UNICODE -#include -#include -#include -#include -#include "util.h" - -namespace util -{ - -class CCanvas -{ -private: - static const int CANVAS_WIDTH = 32; - static const int CANVAS_HEIGHT = 24; - static const int CANVAS_LEFT = 0; - static const int CANVAS_TOP = 0; - static const int TEXT_HSPACE = 1; - static const int TEXT_VSPACE = 1; - static const int CANVAS_CHARACTER_OFFSET = 1; - - static const int LOCAL_BUFFER_LEN = 1024; - - static const u32 DRAWTEXT_FLAG_DEFAULT = ( NNS_G2D_VERTICALORIGIN_TOP - | NNS_G2D_HORIZONTALORIGIN_LEFT - | NNS_G2D_HORIZONTALALIGN_LEFT ); - -private: - NNSG2dCharCanvas m_cc; - NNSG2dTextCanvas m_txn; - GXCharFmt16 m_offscreen[32 * 24]; - const NNSG2dFont* m_pFont; - NNS_GFD_DST_TYPE m_transType; - u32 m_transOffset; - bool m_bTransferRegsitered; - -public: - CCanvas(); - ~CCanvas(); - -public: - void Init(NNS_GFD_DST_TYPE type, u32 offset, void* pScrBase, const NNSG2dFont* pFont); - void Clear (PaletteColor c); - void Clear (int x, int y, int w, int h, PaletteColor c); - void Print (int x, int y, PaletteColor c, const NNSG2dChar* text); - void Printf(int x, int y, PaletteColor c, const NNSG2dChar* text, ...); - std::wstring WrapText(std::wstring text, int width); - - void ResetTransferTask(); - -protected: - void RegisterTransferTask(); -}; - -} -// end of namespace tlib - - -#endif // TLIB_CONTROL_CANVAS_H_ diff --git a/build/tests/WirelessChecker/src/util/memory.cpp b/build/tests/WirelessChecker/src/util/memory.cpp deleted file mode 100644 index 5e0d1d57..00000000 --- a/build/tests/WirelessChecker/src/util/memory.cpp +++ /dev/null @@ -1,122 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Nmenu - File: Memory.cpp - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "util/memory.h" - - -namespace util -{ - - -namespace -{ - NNSFndHeapHandle shHeap; - NNSFndAllocator sAllocator; - OSMutex sLock; -} - - -void -InitMemory() -{ - u32 arenaLow = MATH_ROUNDUP ((u32)OS_GetMainArenaLo(), 16); - u32 arenaHigh = MATH_ROUNDDOWN((u32)OS_GetMainArenaHi(), 16); - u32 heapSize = arenaHigh - arenaLow; - void* heapMemory = OS_AllocFromMainArenaLo(heapSize, 16); - - shHeap = NNS_FndCreateExpHeap(heapMemory, heapSize); - SDK_ASSERT( shHeap != NNS_FND_HEAP_INVALID_HANDLE ); - - NNS_FndInitAllocatorForExpHeap(&sAllocator, shHeap, 4); - - OS_InitMutex(&sLock); -} - -NNSFndHeapHandle -GetHeapHandle() -{ - return shHeap; -} - -NNSFndAllocator* -GetAllocator() -{ - return &sAllocator; -} - -void* -Alloc(size_t size, int align) -{ - OS_LockMutex(&sLock); - SDK_ASSERT(NNS_FndCheckExpHeap(shHeap, NNS_FND_HEAP_ERROR_PRINT)); - void* p = NNS_FndAllocFromExpHeapEx(shHeap, size, align); - OS_UnlockMutex(&sLock); - - return p; -} - -void -Free(void* ptr) -{ - OS_LockMutex(&sLock); - SDK_ASSERT(NNS_FndCheckExpHeap(shHeap, NNS_FND_HEAP_ERROR_PRINT)); - SDK_ASSERT(NNS_FndCheckForMBlockExpHeap(ptr, shHeap, NNS_FND_HEAP_ERROR_PRINT)); - NNS_FndFreeToExpHeap(shHeap, ptr); - OS_UnlockMutex(&sLock); -} - - -} -// end of namespace util - - - - -//------------ global namespace ------------------------------------ - -void* -operator new(size_t size) -{ - // operator new[] 32 byte ACgۏ؂łȂ̂ - // operator new ł 32 byte ACg͍sȂB - return util::Alloc(size, 4); -} - -void* -operator new[](size_t size) -{ - // operator new[] ł 32 byteACgۏ؂łȂB - return util::Alloc(size, 4); -} - -void -operator delete(void* ptr) -{ - if( ptr != NULL ) - { - util::Free(ptr); - } -} - -void -operator delete[](void* ptr) -{ - if( ptr != NULL ) - { - util::Free(ptr); - } -} diff --git a/build/tests/WirelessChecker/src/util/memory.h b/build/tests/WirelessChecker/src/util/memory.h deleted file mode 100644 index c0e1ed39..00000000 --- a/build/tests/WirelessChecker/src/util/memory.h +++ /dev/null @@ -1,38 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Nmenu - File: Memory.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef TLIB_SYSTEM_MEMORY_H_ -#define TLIB_SYSTEM_MEMORY_H_ - -#include -#include - -namespace util -{ - -void InitMemory(); - -NNSFndAllocator* GetAllocator(); -NNSFndHeapHandle GetHeapHandle(); -void* Alloc(size_t size, int align=32); -void Free(void* ptr); - -} -// end of namespace tlib - - - -#endif // TLIB_SYSTEM_MEMORY_H_ diff --git a/build/tests/WirelessChecker/src/util/util.cpp b/build/tests/WirelessChecker/src/util/util.cpp deleted file mode 100644 index 5828b7e8..00000000 --- a/build/tests/WirelessChecker/src/util/util.cpp +++ /dev/null @@ -1,276 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checker - File: util.cpp - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "util/util.h" -#include "util/canvas.h" -#include "util/memory.h" -#include -#include - -extern u8 font_NFTR_begin[]; -extern u8 font_NFTR_end[]; - -namespace util -{ - GamePad System_GamePadState; - int System_BaseWidth; - int System_LineHeight; - - namespace - { - const int REPEAT_START_FRAME = 15; - const int REPEAT_INTERVAL = 30; - const u32 TASK_ARRAY_NUM = 4; - const int CANVAS_CHARACTER_OFFSET = 1; - - GXRgb COLOR_PALETTE[18] = - { - GX_RGB(26, 26, 26), - GX_RGB(31, 31, 31), - GX_RGB( 0, 0, 0), - - GX_RGB(31, 0, 3), - GX_RGB(30, 28, 0), - GX_RGB(21, 31, 0), - GX_RGB( 6, 23, 30), - GX_RGB( 0, 11, 30), - GX_RGB(25, 23, 1), - GX_RGB(22, 22, 22), - GX_RGB(16, 16, 16), - - GX_RGB(29, 31, 31) - }; - NNSG2dFont sFont; - CCanvas sCanvasMain1; - CCanvas sCanvasMain3; - CCanvas sCanvasSub1; - CCanvas sCanvasSub3; - - NNSGfdVramTransferTask sTaskArray[TASK_ARRAY_NUM]; - - void ClearVram( void ) - { - //--------------------------------------------------------------------------- - // All VRAM banks to LCDC - //--------------------------------------------------------------------------- - GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); - - //--------------------------------------------------------------------------- - // Clear all LCDC space - //--------------------------------------------------------------------------- - MI_CpuClearFast((void *)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE); - - //--------------------------------------------------------------------------- - // Disable the banks on LCDC - //--------------------------------------------------------------------------- - (void)GX_DisableBankForLCDC(); - - MI_CpuFillFast((void *)HW_OAM, 192, HW_OAM_SIZE); // clear OAM - MI_CpuClearFast((void *)HW_PLTT, HW_PLTT_SIZE); // clear the standard palette - - MI_CpuFillFast((void*)HW_DB_OAM, 192, HW_DB_OAM_SIZE); // clear OAM - MI_CpuClearFast((void *)HW_DB_PLTT, HW_DB_PLTT_SIZE); // clear the standard palette - } - - void InitFont(void* pNFTR) - { - NNS_G2dFontInitUTF16(&sFont, pNFTR); - - System_BaseWidth = NNS_G2dFontGetCellWidth(&sFont) / 2; - System_LineHeight = NNS_G2dFontGetLineFeed(&sFont); - } - - void VBlankIntr(void) - { - OS_SetIrqCheckFlag( OS_IE_V_BLANK ); - } - - - } // namespace - - void WaitVBlankIntr(void) - { - SVC_WaitVBlankIntr(); - } - - void dispOn(void) - { - GX_DispOn(); - GXS_DispOn(); - } - - CCanvas* GetMain1Canvas() { return &sCanvasMain1; } - CCanvas* GetMain3Canvas() { return &sCanvasMain3; } - CCanvas* GetSub1Canvas() { return &sCanvasSub1; } - CCanvas* GetSub3Canvas() { return &sCanvasSub3; } - - void UpdateGamePad(void) - { - u16 status = PAD_Read(); - - System_GamePadState.repeatTrigger = false; - - if( status != 0 ) - { - if( System_GamePadState.button == 0 ) - { - System_GamePadState.beginPress = 0; - } - else - { - System_GamePadState.beginPress++; - const int lapse = System_GamePadState.beginPress - REPEAT_START_FRAME; - - if( lapse >= 0 ) - { - if( (lapse % REPEAT_INTERVAL) == 0 ) - { - System_GamePadState.repeatTrigger = true; - } - } - } - } - - System_GamePadState.trigger = (u16)(status & (status ^ System_GamePadState.button)); - System_GamePadState.release = (u16)(System_GamePadState.button & (status ^ System_GamePadState.button)); - System_GamePadState.button = status; - } - - void UpdateDisplay(void) - { - sCanvasMain1.ResetTransferTask(); - sCanvasMain3.ResetTransferTask(); - sCanvasSub1 .ResetTransferTask(); - sCanvasSub3 .ResetTransferTask(); - NNS_GfdDoVramTransfer(); - } - - void Init() - { - OS_Init(); - FX_Init(); - GX_Init(); - - OS_InitTick(); - OS_InitAlarm(); - - GX_DispOff(); - GXS_DispOff(); - - RTC_Init(); - - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - ClearVram(); - - InitMemory(); - - // assign vram banks - GX_SetBankForBG(GX_VRAM_BG_128_A); - GX_SetBankForOBJ(GX_VRAM_OBJ_16_F); - GX_SetBankForSubBG(GX_VRAM_SUB_BG_128_C); - GX_SetBankForSubOBJ(GX_VRAM_SUB_OBJ_16_I); - GX_SetBankForLCDC(GX_VRAM_LCDC_B); - - // init screen - // BG 1 ݒ - G2_SetBG1Control( - GX_BG_SCRSIZE_TEXT_256x256, // XN[TCY 256x256 - GX_BG_COLORMODE_16, // J[[h 16F - GX_BG_SCRBASE_0x0000, // XN[x[X - GX_BG_CHARBASE_0x04000, // LN^x[X - GX_BG_EXTPLTT_01 ); // gpbgXbg - - G2S_SetBG1Control( - GX_BG_SCRSIZE_TEXT_256x256, // XN[TCY 256x256 - GX_BG_COLORMODE_16, // J[[h 16F - GX_BG_SCRBASE_0x0000, // XN[x[X - GX_BG_CHARBASE_0x04000, // LN^x[X - GX_BG_EXTPLTT_01 ); // gpbgXbg - - // BG 2 ݒ - G2_SetBG2ControlText( - GX_BG_SCRSIZE_TEXT_256x256, // XN[TCY 256x256 - GX_BG_COLORMODE_16, // J[[h 16F - GX_BG_SCRBASE_0x0800, // XN[x[X - GX_BG_CHARBASE_0x0c000 ); // LN^x[X - - G2S_SetBG2ControlText( - GX_BG_SCRSIZE_TEXT_256x256, // XN[TCY 256x256 - GX_BG_COLORMODE_16, // J[[h 16F - GX_BG_SCRBASE_0x0800, // XN[x[X - GX_BG_CHARBASE_0x0c000 ); // LN^x[X - - // BG 3 ݒ - G2_SetBG3ControlText( - GX_BG_SCRSIZE_TEXT_256x256, // XN[TCY 256x256 - GX_BG_COLORMODE_16, // J[[h 16F - GX_BG_SCRBASE_0x1000, // XN[x[X - GX_BG_CHARBASE_0x14000 ); // LN^x[X - - G2S_SetBG3ControlText( - GX_BG_SCRSIZE_TEXT_256x256, // XN[TCY 256x256 - GX_BG_COLORMODE_16, // J[[h 16F - GX_BG_SCRBASE_0x1000, // XN[x[X - GX_BG_CHARBASE_0x14000 ); // LN^x[X - - // BG1/3 Ž - GX_SetVisiblePlane ( GX_PLANEMASK_BG1 | GX_PLANEMASK_BG3 ); - GXS_SetVisiblePlane( GX_PLANEMASK_BG1 | GX_PLANEMASK_BG3 ); - - // BG1/2/3 ̗D揇ʐݒ - G2_SetBG1Priority(3); - G2_SetBG2Priority(2); - G2_SetBG3Priority(1); - G2S_SetBG1Priority(3); - G2S_SetBG2Priority(2); - G2S_SetBG3Priority(1); - - GX_LoadBGPltt(COLOR_PALETTE, 0, sizeof(COLOR_PALETTE)); - GXS_LoadBGPltt(COLOR_PALETTE, 0, sizeof(COLOR_PALETTE)); - - GX_SetGraphicsMode(GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D); - GXS_SetGraphicsMode(GX_BGMODE_0); - GX_SetBGScrOffset(GX_BGSCROFFSET_0x00000); - GX_SetBGCharOffset(GX_BGCHAROFFSET_0x00000); - - InitFont(font_NFTR_begin); - - { - const u32 chrOffset = CANVAS_CHARACTER_OFFSET * sizeof(GXCharFmt16); - sCanvasMain1.Init(NNS_GFD_DST_2D_BG1_CHAR_MAIN, chrOffset, G2_GetBG1ScrPtr(), &sFont); - sCanvasMain3.Init(NNS_GFD_DST_2D_BG3_CHAR_MAIN, chrOffset, G2_GetBG3ScrPtr(), &sFont); - sCanvasSub1 .Init(NNS_GFD_DST_2D_BG1_CHAR_SUB, chrOffset, G2S_GetBG1ScrPtr(), &sFont); - sCanvasSub3 .Init(NNS_GFD_DST_2D_BG3_CHAR_SUB, chrOffset, G2S_GetBG3ScrPtr(), &sFont); - - NNS_GfdInitVramTransferManager(sTaskArray, TASK_ARRAY_NUM); - } - - PAD_Read(); - } - - u16 GetPadTrigger() - { - return static_cast(System_GamePadState.button); - } - -} // namespace util - diff --git a/build/tests/WirelessChecker/src/util/util.h b/build/tests/WirelessChecker/src/util/util.h deleted file mode 100644 index a84e4afb..00000000 --- a/build/tests/WirelessChecker/src/util/util.h +++ /dev/null @@ -1,103 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checher - File: util.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef WIRELESS_CHECHER_UTIL_H_ -#define WIRELESS_CHECHER_UTIL_H_ - -#include - -namespace util -{ - -const int DEFAULT_COLOR_PALETTE = 0; - -enum PaletteColor -{ - COLOR_NULL=0, - COLOR_WHITE, - COLOR_BLACK, - - COLOR_RED, - COLOR_YELLOW, - COLOR_LIMEGREEN, - COLOR_TURQUOISE, - COLOR_BLUE, - COLOR_BROWN, - COLOR_LIGHTGRAY, - COLOR_DARKGRAY, - - COLOR_GUIDE_BG -}; - -struct GamePad -{ - u16 trigger; - u16 release; - u16 button; - bool repeatTrigger; - u8 padding0; - int beginPress; -}; - -void Init(void); -void WaitVBlankIntr(void); -void dispOn(void); -void UpdateGamePad(void); -void UpdateDisplay(void); - -class CCanvas; -CCanvas* GetMain1Canvas(); -CCanvas* GetMain3Canvas(); -CCanvas* GetSub1Canvas(); -CCanvas* GetSub3Canvas(); - -inline u16 -IsPadDown(u16 key) -{ - extern GamePad System_GamePadState; - return static_cast(System_GamePadState.trigger & key); -} -inline u16 -IsPadUp(u16 key) -{ - extern GamePad System_GamePadState; - return static_cast(System_GamePadState.release & key); -} -inline u16 -IsPadPress(u16 key) -{ - extern GamePad System_GamePadState; - return static_cast(System_GamePadState.button & key); -} -inline u16 -IsPadTrigger(u16 key) -{ - extern GamePad System_GamePadState; - if( System_GamePadState.repeatTrigger ) - { - return IsPadPress(key); - } - else - { - return IsPadDown(key); - } -} - -u16 GetPadTrigger(); - -} // namespace util - -#endif // WIRELESS_CHECHER_UTIL_H_ diff --git a/build/tests/WirelessChecker/src/util/wprintf.cpp b/build/tests/WirelessChecker/src/util/wprintf.cpp deleted file mode 100644 index 35879971..00000000 --- a/build/tests/WirelessChecker/src/util/wprintf.cpp +++ /dev/null @@ -1,387 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Nmenu - File: WPrintf.cpp - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "util/wprintf.h" - -namespace util -{ -namespace -{ - /* inner function for sized-buffer output */ - - typedef struct dst_string_tag - { - size_t len; - wchar_t *cur; - wchar_t *base; - } dst_string; - - void - string_put_char(dst_string *p, wchar_t c) - { - if(p->len > 0) *p->cur = c, --p->len; - ++p->cur; - } - - void - string_fill_char(dst_string *p, wchar_t c, int n) - { - if(n > 0) { - size_t i, k = p->len; - if(k > (size_t)n) k = (size_t)n; - for( i = 0 ; i < k ; ++i ) - p->cur[i] = c; - p->len -= k; - p->cur += n; - } - } - - void - string_put_string(dst_string *p, const wchar_t *s, int n) - { - if(n > 0) { - size_t i, k = p->len; - if(k > (size_t)n) k = (size_t)n; - for( i = 0 ; i < k ; ++i ) - p->cur[i] = s[i]; - p->len -= k; - p->cur += n; - } - } -} - -// based on OS_VSNPrintf - -/*---------------------------------------------------------------------------* - Name: OS_VSNPrintf - - Description: small-size vsnprintf which is similar to 'vsnprintf' - without following supports. - * CodeWarrior Extensions (#s) - * MSL AltiVec Extensions (v, vh, vl, hv, lv, @) - * indexed argments (%m$, *m$) - * floating-point - * wchar_t - - Note: '+' and '#' do not work, MSL's sprintf(). - to keep same result, they are no implement. - { // exsample - wchar_t buf[5]; - sprintf(buf, "%-i\n", 45); // "45" (OK) - sprintf(buf, "%0i\n", 45); // "45" (OK) - sprintf(buf, "% i\n", 45); // " 45" (OK) - sprintf(buf, "%+i\n", 45); // "%+i" ("+45" expected) - sprintf(buf, "%#x\n", 45); // "%#x" ("0x2d" expected) - // but, this works correctly! - sprintf(buf, "% +i\n", 45); // "+45" (OK) - } - - Arguments: dst : destination buffer. - len : destination buffer size. - fmt : format string. - vlist : parameters. - - Returns: length of the generated string. (except '\0') - if(result < len), - put NUL in dst[result]. - else if(len > 0), - put NUL in dst[len - 1]. - else, - do nothing. - *---------------------------------------------------------------------------*/ -int -VSNWPrintf(wchar_t *dst, size_t len, const wchar_t *fmt, va_list vlist) -{ - wchar_t buf[24]; - int n_buf; - wchar_t prefix[2]; - int n_prefix; - - const wchar_t *s = fmt; - - dst_string str; - str.len = len, str.cur = str.base = dst; - - while(*s) { - if(*s != L'%') { - /* normal character */ - string_put_char(&str, *s++); - } else { - /* output with format */ - enum { - flag_blank = 000001, /* L' ' */ - flag_plus = 000002, /* L'+' */ - flag_sharp = 000004, /* L'#' */ - flag_minus = 000010, /* L'-' */ - flag_zero = 000020, /* L'0' */ - flag_l1 = 000040, /* "l" */ - flag_h1 = 000100, /* "h" */ - flag_l2 = 000200, /* "ll" */ - flag_h2 = 000400, /* "hh" */ - flag_unsigned = 010000, /* L'o', L'u', ... */ - flag_end } ; - int flag = 0, width = 0, precision = -1, radix = 10; - wchar_t hex_char = L'a' - 10; - const wchar_t *p_start = s; - /* flags */ - for( ; ; ) { - switch(*++s) { - case L'+':if(s[-1] != L' ') break; - flag |= flag_plus; continue; - case L' ':flag |= flag_blank;continue; - case L'-':flag |= flag_minus;continue; - case L'0':flag |= flag_zero; continue; - } - break; - } - /* width */ - if(*s == L'*') { - ++s, width = va_arg(vlist, int); - if(width < 0) - width = -width, flag |= flag_minus; - } else { - while((*s >= L'0') && (*s <= L'9')) - width = (width * 10) + *s++ - L'0'; - } - /* precision */ - if(*s == L'.') { - ++s, precision = 0; - if(*s == L'*') { - ++s, precision = va_arg(vlist, int); - if(precision < 0) precision = -1; - } else { - while((*s >= L'0') && (*s <= L'9')) - precision = (precision * 10) + *s++ - L'0'; - } - } - /* option */ - switch(*s) { - case L'h': - if(*++s != L'h') flag |= flag_h1; - else ++s, flag |= flag_h2; - break; - case L'l': - if(*++s != L'l') flag |= flag_l1; - else ++s, flag |= flag_l2; - break; - } - - /* type */ - switch(*s) { - case L'd': /* signed decimal */ - case L'i': /* signed decimal */ - goto put_integer; - case L'o': /* unsigned octal */ - radix = 8; - flag |= flag_unsigned; - goto put_integer; - case L'u': /* unsigned decimal */ - flag |= flag_unsigned; - goto put_integer; - case L'X': /* unsigned hexadecimal */ - hex_char = L'A' - 10; - goto put_hexadecimal; - case L'x': /* unsigned hexadecimal */ - goto put_hexadecimal; - case L'p': /* pointer */ - /* equal to code warrior */ - flag |= flag_sharp; - precision = 8; - goto put_hexadecimal; - - case L'c': /* character */ - if(precision >= 0) - goto put_invalid; - { - int c = va_arg(vlist, int); - width -= 1; - if(flag & flag_minus) { - string_put_char(&str, (wchar_t)c); - string_fill_char(&str, L' ', width); - } else { - wchar_t pad = (wchar_t)( - (flag & flag_zero) ? L'0' : L' '); - string_fill_char(&str, pad, width); - string_put_char(&str, (wchar_t)c); - } - ++s; - } - break; - - case L's': /* string */ - { - int n_buf = 0; - const wchar_t *p_buf = va_arg(vlist, const wchar_t*); - if(precision < 0) { - while(p_buf[n_buf]) - ++n_buf; - } else { - while((n_buf < precision) && p_buf[n_buf]) - ++n_buf; - } - width -= n_buf; - if(flag & flag_minus) { - string_put_string(&str, p_buf, n_buf); - string_fill_char(&str, L' ', width); - } else { - wchar_t pad = (wchar_t)( - (flag & flag_zero) ? L'0' : L' '); - string_fill_char(&str, pad, width); - string_put_string(&str, p_buf, n_buf); - } - ++s; - } - break; - - case L'n': /* store the number of output */ - { - int pos = str.cur - str.base; - if(flag & flag_h2) - ; - else if(flag & flag_h1) - *va_arg(vlist, signed short*) = (signed short)pos; - else if(flag & flag_l2) - *va_arg(vlist, u64*) = (u64)pos; - else - *va_arg(vlist, signed int*) = (signed int)pos; - } - ++s; - break; - - case L'%': /* output L'%' */ - if(p_start + 1 != s) - goto put_invalid; - string_put_char(&str, *s++); - break; - - default: /* invalid type */ - goto put_invalid; - -put_invalid: - string_put_string(&str, p_start, s - p_start); - break; - -put_hexadecimal: - radix = 16; - flag |= flag_unsigned; -put_integer: - { - u64 val = 0; - n_prefix = 0; - - if(flag & flag_minus) - flag &= ~flag_zero; - if(precision < 0) precision = 1; - else flag &= ~flag_zero; - - if(flag & flag_unsigned) { - if(flag & flag_h2) - val = va_arg(vlist, wchar_t); - else if(flag & flag_h1) - val = va_arg(vlist, unsigned short); - else if(flag & flag_l2) - val = va_arg(vlist, u64); - else - val = va_arg(vlist, unsigned long); - flag &= ~(flag_plus | flag_blank); - if(flag & flag_sharp) { - if(radix == 16) { - if(val != 0) { - prefix[0] = (wchar_t)(hex_char + (10 + L'x' - L'a')); - prefix[1] = L'0'; - n_prefix = 2; - } - } else if(radix == 8) { - prefix[0] = L'0'; - n_prefix = 1; - } - } - } else { - if(flag & flag_h2) - val = va_arg(vlist, wchar_t); - else if(flag & flag_h1) - val = va_arg(vlist, short); - else if(flag & flag_l2) - val = va_arg(vlist, u64); - else - val = va_arg(vlist, long); - if((val >> 32) & 0x80000000) { - val = ~val + 1; - prefix[0] = L'-'; - n_prefix = 1; - } else { - if(val || precision) { - if(flag & flag_plus) { - prefix[0] = L'+'; - n_prefix = 1; - } else - if(flag & flag_blank) { - prefix[0] = L' '; - n_prefix = 1; - } - } - } - } - n_buf = 0; - while(val != 0) { - int d = (int)(val % radix); - val /= radix; - buf[n_buf++] = (wchar_t)((d < 10) ? - (d + L'0') : (d + hex_char)); - } - if((n_prefix > 0) && (prefix[0] == L'0')) { - n_prefix = 0; - buf[n_buf++] = L'0'; - } - } - goto put_to_stream; - -put_to_stream: - { - int n_pad = precision - n_buf; - if(flag & flag_zero) { - if(n_pad < width - n_buf - n_prefix) - n_pad = width - n_buf - n_prefix; - } - if(n_pad > 0) width -= n_pad; - width -= n_prefix + n_buf; - if(!(flag & flag_minus)) - string_fill_char(&str, L' ', width); - while(n_prefix > 0) - string_put_char(&str, prefix[--n_prefix]); - string_fill_char(&str, L'0', n_pad); - while(n_buf > 0) - string_put_char(&str, buf[--n_buf]); - if(flag & flag_minus) - string_fill_char(&str, L' ', width); - ++s; - } - break; - } - } - } - - if(str.len > 0) - *str.cur = '\0'; - else if(len > 0) - str.base[len - 1] = '\0'; - return str.cur - str.base; -} - - -} -// end of namespace tlib diff --git a/build/tests/WirelessChecker/src/util/wprintf.h b/build/tests/WirelessChecker/src/util/wprintf.h deleted file mode 100644 index d63dff9f..00000000 --- a/build/tests/WirelessChecker/src/util/wprintf.h +++ /dev/null @@ -1,100 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Nmenu - File: WPrintf.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef TLIB_SYSTEM_WPRINTF_H_ -#define TLIB_SYSTEM_WPRINTF_H_ - - - -namespace util -{ - -int VSNWPrintf(wchar_t *dst, size_t len, const wchar_t *fmt, va_list vlist); - - -/*---------------------------------------------------------------------------* - Name: OS_SNPrintf - - Description: equal to 'OS_VSNPrintf' except argument style. - - Arguments: dst : destination buffer. - len : destination buffer size. - fmt : format string. - - Returns: length of the generated string. (except '\0') - if(result < len), - put NUL in dst[result]. - else if(len > 0), - put NUL in dst[len - 1]. - else, - do nothing. - *---------------------------------------------------------------------------*/ -inline int -SNWPrintf(wchar_t *dst, size_t len, const wchar_t *fmt, ...) -{ - int ret; - va_list va; - va_start(va, fmt); - ret = VSNWPrintf(dst, len, fmt, va); - va_end(va); - return ret; -} - -/*---------------------------------------------------------------------------* - Name: OS_VSPrintf - - Description: equal to 'OS_VSNPrintf' except buffer size argument. - - Arguments: dst : destination buffer. - fmt : format string. - vlist : parameters. - - Returns: length of the generated string. - *---------------------------------------------------------------------------*/ -inline int -VSWPrintf(wchar_t *dst, const wchar_t *fmt, va_list vlist) -{ - return VSNWPrintf(dst, 0x7FFFFFFF, fmt, vlist); -} - -/*---------------------------------------------------------------------------* - Name: OS_SPrintf - - Description: equal to 'OS_VSPrintf' except argument style. - - Arguments: dst : destination buffer. - fmt : format string. - - Returns: length of the generated string. - *---------------------------------------------------------------------------*/ -inline int -SWPrintf(wchar_t *dst, const wchar_t *fmt, ...) -{ - int ret; - va_list va; - va_start(va, fmt); - ret = VSWPrintf(dst, fmt, va); - va_end(va); - return ret; -} - - -} -// end of namespace tlib - - - -#endif // TLIB_SYSTEM_WPRINTF_H_ diff --git a/build/tests/build4WLDev/Makefile b/build/tests/build4WLDev/Makefile deleted file mode 100644 index 561282d0..00000000 --- a/build/tests/build4WLDev/Makefile +++ /dev/null @@ -1,146 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: SystemUpdater -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU - -# force to build for debugger -export SYSM_BUILD_FOR_DEBUGGER = TRUE - -# SDK configuration for export -override TWL_ARCHGEN := LIMITED -overrice TWL_CODEGEN := THUMB -export TWL_ARCHGEN -export OBJDIR = ./obj.WLAN/$(TWL_BUILDTYPE) -export DEPENDDIR = ./depend.WLAN/$(TWL_BUILDTYPE) -export LIBDIR = ./lib.WLAN/$(TWL_BUILDTYPE) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -export LDIRT_CLEAN = ./obj.WLAN ./depend.WLAN ./lib.WLAN - -#---------------------------------------------------------------------------- - -LAUNCHER_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/Launcher -MACHINESETTINGS_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/MachineSettings -WLANFIRM_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/wlanfirm -DS_HASH_TABLE = $(SYSMENU_ROOT)/build/systemMenu_RED/DSHashTable -SHARED_FONT_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/sharedFont -NANDFIRM_DIR = $(SYSMENU_ROOT)/build/nandfirm/menu-launcher - -SYSTEMUPDATER_DIR = $(SYSMENU_ROOT)/build/systemMenu_tools/SystemUpdaterRegionSelect - -# ۂɏ݂t@C̒uĂdatatH_w -export UPDATER_HOST_ROOT_DIR = $(call empath,$(SYSMENU_ROOT)/build/tests/build4WLDev/data_sysmenu) - -SUBMAKES = $(SYSMENU_ROOT)/build/libraries_sysmenu/Makefile \ - \ - $(LAUNCHER_DIR)/banner/Makefile \ - $(LAUNCHER_DIR)/ARM9/Makefile_autogen_HNAJ \ - $(LAUNCHER_DIR)/ARM9/Makefile_autogen_HNAE \ - $(SYSTEMUPDATER_DIR)/banner/Makefile \ - $(SYSTEMUPDATER_DIR)/ARM7.TWL/Makefile \ - $(SYSTEMUPDATER_DIR)/ARM9.TWL/Makefile_autogen - -# COMPILE SWITCH for build SystemMenu - -export SYSM_UPDATER_RELEASE = TRUE - -export SYSM_DO_NOT_SHOW_LAUNCHER = FALSE -export SYSM_DISABLE_WDS_SCAN = FALSE - -############################################# -# For Wireless development -# - -# disable signature check -export SYSM_IGNORE_WLFIRM_SIGNCHECK = TRUE - -export SYSM_DISABLE_WLFIRM_LOAD = FALSE -export SYSM_DISABLE_INITIAL_SETTINGS = TRUE -export SYSM_OUTSIDE_UI = TRUE - -export SYSM_DEV_WHITELIST_CHECK_SKIP = TRUE - -export SYSM_BUILD_FOR_PRODUCTION_TEST = FALSE - -# MAKEROM SWITCH for build SystemMenu -export SYSM_DISABLE_DEBUG = TRUE -export SYSM_USE_WLANFIRM_LOCAL_PUBKEY = FALSE - -# Option for SystemUpdater -export IGNORE_VERSION_CHECK = TRUE - -############################################# -# inhibit reentrant - -FIRST_CALL ?= TRUE -SKIP_SUBDIR ?= TRUE - -DATE_AND_TIME ?= $(shell date +"%y%m%d %H%M") - -DATE ?= $(word 1,$(DATE_AND_TIME)) -TIME ?= $(word 2,$(DATE_AND_TIME)) -TIME_NOZERO = $(shell echo $(TIME) | sed -e 's/^0*\(.\)/\1/') - -ifneq ($(FIRST_CALL),TRUE) -INSTALL_TARGETS = $(SYSTEMUPDATER_DIR)/ARM9.TWL/bin/$(TWL_BUILDTYPE)/SystemUpdater.srl -INSTALL_DIR = . -endif - -GDIRT_INSTALLED += ./$(notdir $(subst .srl,_WL_$(DATE)_*.srl,$(INSTALL_TARGETS))) - -#---------------------------------------------------------------------------- - -do-build: do-core -clean: cl-core -clobber: cl-core - -do-build: MY_TARGET=default -clean: MY_TARGET=clean -clobber: MY_TARGET=clobber - -do-core: -ifeq ($(FIRST_CALL),TRUE) - @echo Enter remake SKIP_SUBDIR=$(SKIP_SUBDIR) - +$(REMAKE) -C ./scripts SKIP_SUBDIR=FALSE $(MY_TARGET) - +$(REMAKE) FIRST_CALL=FALSE SKIP_SUBDIR=FALSE $(MY_TARGET) -endif - -cl-core: -ifeq ($(FIRST_CALL),TRUE) - +$(REMAKE) FIRST_CALL=FALSE SKIP_SUBDIR=FALSE $(MY_TARGET) - +$(REMAKE) -C ./scripts SKIP_SUBDIR=FALSE $(MY_TARGET) -endif - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -# Override generic DO_INSTALL -define DO_INSTALL - $(INSTALL) -d $(INSTALL_DIR) $(AND) \ - $(foreach FILE, $(INSTALL_TARGETS), \ - if [ ! -e $(INSTALL_DIR)/$(FILE) -o \ - $(FILE) -nt $(INSTALL_DIR)/$(FILE) ]; \ - then \ - $(ECHO) " install: $(FILE) -> $(subst .srl,_WL_$(DATE)_$(TIME).srl,$(FILE))" $(AND) \ - $(INSTALL) $(FILE) $(INSTALL_DIR)/$(notdir $(subst .srl,_WL_$(DATE)_$(TIME).srl,$(FILE))); \ - fi $(AND) ) $(TRUE) -endef - -test: - @echo SKIP_SUBDIR=$(SKIP_SUBDIR) -#===== End of Makefile ===== diff --git a/build/tests/build4WLDev/Makefile_environment b/build/tests/build4WLDev/Makefile_environment deleted file mode 100644 index d11a6952..00000000 --- a/build/tests/build4WLDev/Makefile_environment +++ /dev/null @@ -1,41 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: SystemUpdater -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU - -# force to build for debugger -export SYSM_BUILD_FOR_DEBUGGER = TRUE - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -# skip demos -export NITRO_WITHOUT_DEMOS = TRUE -export TWL_WITHOUT_DEMOS = TRUE - -override TWLSYSTEM_ROOT= -export TWLSYSTEM_ROOT - -SUBDIRS = $(ROOT) \ - $(NITROSYSTEM_ROOT) \ - - -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/build4WLDev/Makefile_old b/build/tests/build4WLDev/Makefile_old deleted file mode 100644 index dc98d6a4..00000000 --- a/build/tests/build4WLDev/Makefile_old +++ /dev/null @@ -1,144 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: SystemUpdater -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU - -# force to build for debugger -export SYSM_BUILD_FOR_DEBUGGER = TRUE - -# SDK configuration for export -override TWL_ARCHGEN := LIMITED -export TWL_ARCHGEN -export OBJDIR = ./obj.WLAN/$(TWL_BUILDTYPE) -export DEPENDDIR = ./depend.WLAN/$(TWL_BUILDTYPE) -export LIBDIR = ./lib.WLAN/$(TWL_BUILDTYPE) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -export LDIRT_CLEAN = ./obj.WLAN ./depend.WLAN ./lib.WLAN - -#---------------------------------------------------------------------------- - -LAUNCHER_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/Launcher -MACHINESETTINGS_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/MachineSettings -WLANFIRM_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/wlanfirm -DS_HASH_TABLE = $(SYSMENU_ROOT)/build/systemMenu_RED/DSHashTable -SHARED_FONT_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/sharedFont -NANDFIRM_DIR = $(SYSMENU_ROOT)/build/nandfirm/menu-launcher - -SYSTEMUPDATER_DIR = $(SYSMENU_ROOT)/build/systemMenu_tools/SystemUpdater - -# ۂɏ݂t@C̒uĂdatatH_w -export UPDATER_HOST_ROOT_DIR = $(call empath,$(SYSTEMUPDATER_DIR)/data) - -ifdef BUILD_TWLSDK -SUBMAKES += Makefile_environment -endif - -SUBMAKES += $(SYSMENU_ROOT)/build/tools/Makefile \ - $(SYSMENU_ROOT)/build/libraries/Makefile \ - $(SYSMENU_ROOT)/build/libraries_sysmenu/Makefile_autogen \ - \ - $(LAUNCHER_DIR)/Makefile_autogen \ - $(MACHINESETTINGS_DIR)/Makefile_autogen \ - $(WLANFIRM_DIR)/Makefile \ - $(DS_HASH_TABLE)/Makefile \ - $(SHARED_FONT_DIR)/Makefile \ - $(NANDFIRM_DIR)/Makefile \ - $(SYSTEMUPDATER_DIR)/data/Makefile \ - $(SYSTEMUPDATER_DIR)/banner/Makefile \ - $(SYSTEMUPDATER_DIR)/ARM7.TWL/Makefile \ - $(SYSTEMUPDATER_DIR)/ARM9.TWL/Makefile - -# COMPILE SWITCH for build SystemMenu - -export SYSM_UPDATER_RELEASE = TRUE - -export SYSM_DO_NOT_SHOW_LAUNCHER = TRUE -export SYSM_DISABLE_WDS_SCAN = FALSE - -############################################# -# For Wireless development -# - -# disable signature check -export SYSM_IGNORE_WLFIRM_SIGNCHECK = TRUE - -export SYSM_DISABLE_WLFIRM_LOAD = FALSE -export SYSM_DISABLE_INITIAL_SETTINGS = TRUE -export SYSM_OUTSIDE_UI = TRUE - -export SYSM_DEV_WHITELIST_CHECK_SKIP = TRUE - -export SYSM_BUILD_FOR_PRODUCTION_TEST = FALSE - -# MAKEROM SWITCH for build SystemMenu -export SYSM_DISABLE_DEBUG = TRUE -export SYSM_USE_WLANFIRM_LOCAL_PUBKEY = FALSE - -DATE_AND_TIME ?= $(shell date +"%y%m%d %H%M") - -DATE ?= $(word 1,$(DATE_AND_TIME)) -TIME ?= $(word 2,$(DATE_AND_TIME)) -TIME_NOZERO = $(shell echo $(TIME) | sed -e 's/^0*\(.\)/\1/') - -INSTALL_TARGETS = $(SYSTEMUPDATER_DIR)/ARM9.TWL/bin/$(TWL_BUILDTYPE)/SystemUpdater.srl -INSTALL_DIR = . - -GDIRT_INSTALLED += ./$(notdir $(subst .srl,_WL_$(DATE)_*.srl,$(INSTALL_TARGETS))) - -#---------------------------------------------------------------------------- - -SKIP_SUBDIR ?= TRUE - -do-build: do-core -clean: cl-core -clobber: cl-core - -do-build: MY_TARGET=default -clean: MY_TARGET=clean -clobber: MY_TARGET=clobber - -do-core: -ifeq ($(SKIP_SUBDIR),TRUE) - +$(REMAKE) -C ./scripts SKIP_SUBDIR=FALSE $(MY_TARGET) - +$(REMAKE) SKIP_SUBDIR=FALSE $(MY_TARGET) -endif - -cl-core: -ifeq ($(SKIP_SUBDIR),TRUE) - +$(REMAKE) SKIP_SUBDIR=FALSE $(MY_TARGET) - +$(REMAKE) -C ./scripts SKIP_SUBDIR=FALSE $(MY_TARGET) -endif - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -# Override generic DO_INSTALL -define DO_INSTALL - $(INSTALL) -d $(INSTALL_DIR) $(AND) \ - $(foreach FILE, $(INSTALL_TARGETS), \ - if [ ! -e $(INSTALL_DIR)/$(FILE) -o \ - $(FILE) -nt $(INSTALL_DIR)/$(FILE) ]; \ - then \ - $(ECHO) " install: $(FILE) -> $(subst .srl,_WL_$(DATE)_$(TIME).srl,$(FILE))" $(AND) \ - $(INSTALL) $(FILE) $(INSTALL_DIR)/$(notdir $(subst .srl,_WL_$(DATE)_$(TIME).srl,$(FILE))); \ - fi $(AND) ) $(TRUE) -endef - - -#===== End of Makefile ===== diff --git a/build/tests/build4WLDev/readme.txt b/build/tests/build4WLDev/readme.txt deleted file mode 100644 index 14f75eb3..00000000 --- a/build/tests/build4WLDev/readme.txt +++ /dev/null @@ -1,26 +0,0 @@ -* JpSystemUpdater - -1. esystemMenut@C̗p - -TwlIPL/build/tests/build4WLDev ̒Ɉȉ̃fBNg\ -systemMenu֘At@CpӂĂB(HNA*.tad͏ĂB) - -RegiońAJapanAmericâ݂T|[gAJ@ɂ͑ΉĂ܂B - -data_sysmenu - +debugger - l +america/* - l +japan/* - -L*ɂ́A -HNA*.tadȊȎStadnandt@[ƃtHgf[^uĂB - - -2.SystemUpdater̃rh - -TwlIPL/build/tests/build4WLDev makesĂB -TwlIPL_privateKvłB - -ŏIIɁAȉ̂悤ȓtԃ^O‚SystemUpdaterfBNgɍ쐬܂B - -SystemUpdater_WL_yymmdd_hhmm.srl diff --git a/build/tests/build4WLDev/scripts/Makefile b/build/tests/build4WLDev/scripts/Makefile deleted file mode 100644 index 919866fa..00000000 --- a/build/tests/build4WLDev/scripts/Makefile +++ /dev/null @@ -1,74 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: SystemUpdater -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -LAUNCHER_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/Launcher - -SYSMENU_LIBRARIES_DIR = $(SYSMENU_ROOT)/build/libraries_sysmenu - -SYSTEMUPDATER_DIR = $(SYSMENU_ROOT)/build/systemMenu_tools/SystemUpdaterRegionSelect - -SCRIPTS_DIR = ./ - -MAKEFILES_ORG = $(LAUNCHER_DIR)/ARM9/Makefile -MAKE_MAKEFILES = $(SCRIPTS_DIR)/launcher_makefile_region.pl -AUTOGEN_MAKEFILES = $(LAUNCHER_DIR)/ARM9/Makefile_autogen_HNAJ $(LAUNCHER_DIR)/ARM9/Makefile_autogen_HNAE - -LDIRT_CLEAN += $(AUTOGEN_MAKEFILES) - -LOADWLAN_ORG = $(LAUNCHER_DIR)/ARM9/src/loadWlanFirm.c -MAKE_LOADWLAN = $(SCRIPTS_DIR)/launcher_loadWlanFirm_c.pl -AUTOGEN_LOADWLAN = $(LAUNCHER_DIR)/ARM9/src/loadWlanFirm_autogen.c -LDIRT_CLEAN += $(AUTOGEN_LOADWLAN) - -SYSUP_ORG = $(SYSTEMUPDATER_DIR)/ARM9.TWL/src/process_check_console.c \ - $(SYSTEMUPDATER_DIR)/ARM9.TWL/src/process_select_region.c \ - $(SYSTEMUPDATER_DIR)/ARM9.TWL/Makefile -MAKE_SYSUP = $(SCRIPTS_DIR)/systemupdater_source.pl -AUTOGEN_SYSUP = $(SYSTEMUPDATER_DIR)/ARM9.TWL/src/process_check_console_autogen.c \ - $(SYSTEMUPDATER_DIR)/ARM9.TWL/src/process_select_region_autogen.c \ - $(SYSTEMUPDATER_DIR)/ARM9.TWL/Makefile_autogen -LDIRT_CLEAN += $(AUTOGEN_SYSUP) - - -TARGETS = $(AUTOGEN_MAKEFILES) $(AUTOGEN_LOADWLAN) $(AUTOGEN_SYSUP) - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -$(AUTOGEN_MAKEFILES): $(MAKEFILES_ORG) $(MAKE_MAKEFILES) - @echo " make:" $@ - @perl $(MAKE_MAKEFILES) - -$(AUTOGEN_LOADWLAN): $(LOADWLAN_ORG) $(MAKE_LOADWLAN) - @echo " make:" $@ - @perl $(MAKE_LOADWLAN) - -$(AUTOGEN_SYSUP): $(SYSUP_ORG) $(MAKE_SYSUP) - @echo " make:" $@ - @perl $(MAKE_SYSUP) - - -#===== End of Makefile ===== diff --git a/build/tests/build4WLDev/scripts/Makefile_old b/build/tests/build4WLDev/scripts/Makefile_old deleted file mode 100644 index 481ac3b3..00000000 --- a/build/tests/build4WLDev/scripts/Makefile_old +++ /dev/null @@ -1,87 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: SystemUpdater -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -LAUNCHER_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/Launcher -MACHINESETTINGS_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/MachineSettings - -SYSMENU_LIBRARIES_DIR = $(SYSMENU_ROOT)/build/libraries_sysmenu - -SYSTEMUPDATER_DIR = $(SYSMENU_ROOT)/build/systemMenu_tools/SystemUpdater - -SCRIPTS_DIR = ./ - -MAKEFILES_ORG = $(LAUNCHER_DIR)/Makefile $(LAUNCHER_DIR)/ARM9/Makefile \ - $(MACHINESETTINGS_DIR)/Makefile $(MACHINESETTINGS_DIR)/ARM9/Makefile -MAKE_MAKEFILES = $(SCRIPTS_DIR)/launcher_makefile.pl -AUTOGEN_MAKEFILES = $(LAUNCHER_DIR)/Makefile_autogen $(LAUNCHER_DIR)/ARM9/Makefile_autogen \ - $(MACHINESETTINGS_DIR)/Makefile_autogen $(MACHINESETTINGS_DIR)/ARM9/Makefile_autogen - -LDIRT_CLEAN += $(AUTOGEN_MAKEFILES) - -LOADWLAN_ORG = $(LAUNCHER_DIR)/ARM9/src/loadWlanFirm.c -MAKE_LOADWLAN = $(SCRIPTS_DIR)/launcher_loadWlanFirm_c.pl -AUTOGEN_LOADWLAN = $(LAUNCHER_DIR)/ARM9/src/loadWlanFirm_autogen.c -LDIRT_CLEAN += $(AUTOGEN_LOADWLAN) - -MACHSETTING_ORG = $(MACHINESETTINGS_DIR)/ARM9/src/MachineSetting.c -MAKE_MACHSETTING = $(SCRIPTS_DIR)/launcher_MachineSetting_c.pl -AUTOGEN_MACHSETTING = $(MACHINESETTINGS_DIR)/ARM9/src/MachineSetting_autogen.c -LDIRT_CLEAN += $(AUTOGEN_MACHSETTING) - -NWM_ORG = $(SYSMENU_LIBRARIES_DIR)/Makefile \ - $(SYSMENU_LIBRARIES_DIR)/nwm/Makefile \ - $(SYSMENU_LIBRARIES_DIR)/nwm/ARM7/Makefile \ - $(ROOT)/build/libraries/wm/ARM7.TWL/nwm/src/nwmsp_event_handler.c -MAKE_NWM = $(SCRIPTS_DIR)/launcher_fake_macaddress.pl -AUTOGEN_NWM = $(SYSMENU_LIBRARIES_DIR)/Makefile_autogen \ - $(SYSMENU_LIBRARIES_DIR)/nwm/Makefile_autogen \ - $(SYSMENU_LIBRARIES_DIR)/nwm/ARM7/Makefile_autogen \ - $(ROOT)/build/libraries/wm/ARM7.TWL/nwm/src/nwmsp_event_handler_autogen.c -LDIRT_CLEAN += $(AUTOGEN_NWM) - - -TARGETS = $(AUTOGEN_MAKEFILES) $(AUTOGEN_LOADWLAN) $(AUTOGEN_MACHSETTING) $(AUTOGEN_NWM) - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -$(AUTOGEN_MAKEFILES): $(MAKEFILES_ORG) $(MAKE_MAKEFILES) - @echo " make:" $@ - @perl $(MAKE_MAKEFILES) - -$(AUTOGEN_LOADWLAN): $(LOADWLAN_ORG) $(MAKE_LOADWLAN) - @echo " make:" $@ - @perl $(MAKE_LOADWLAN) - -$(AUTOGEN_MACHSETTING): $(MACHSETTING_ORG) $(MAKE_MACHSETTING) - @echo " make:" $@ - @perl $(MAKE_MACHSETTING) - -$(AUTOGEN_NWM): $(NWM_ORG) $(MAKE_NWM) - @echo " make:" $@ - @perl $(MAKE_NWM) - -#===== End of Makefile ===== diff --git a/build/tests/build4WLDev/scripts/launcher_MachineSetting_c.pl b/build/tests/build4WLDev/scripts/launcher_MachineSetting_c.pl deleted file mode 100755 index 0d4e890a..00000000 --- a/build/tests/build4WLDev/scripts/launcher_MachineSetting_c.pl +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - -# File: launcher_MachineSetting_c.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $IPLROOT; - -# search TWL_IPL_RED_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWL_IPL_RED_ROOT/s) { - $IPLROOT = $ENV{$_}; - } -} - -my $src = "$IPLROOT/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.c"; -my $dst = "$IPLROOT/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting_autogen.c"; - -my $rn = "\x0D\x0A"; - -open(F, $src) or die "cant open $src\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst") or die "cant open $dst\n"; -foreach my $line ( @lines ) -{ - print OUT $line; - # ]łƂ̌ڂ̋ʂ̂߂ɁAJp̕\ljB - if( $line =~ m/^[\t ]*PrintfSJIS\(.*\"MACHINE SETTINGS IPL:%s SDK:%s\".*\);/ ) - { - print OUT "//\t[AUTO ADDITION] ]łƂ̌ڂ̋ʂ̂߂ɁAJp̕\\ljB", $rn; - print OUT "\tPrintfSJIS( 0, 22*8, TXT_COLOR_BLUE, \"[ BUILT FOR WIRELESS DEVELOPMENT ]\");", $rn; - } -} -close(OUT); - diff --git a/build/tests/build4WLDev/scripts/launcher_fake_macaddress.pl b/build/tests/build4WLDev/scripts/launcher_fake_macaddress.pl deleted file mode 100755 index 4480c292..00000000 --- a/build/tests/build4WLDev/scripts/launcher_fake_macaddress.pl +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - -# File: launcher_fake_macaddress.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $rn = "\x0D\x0A"; - -my $SDKROOT; - -# search TWLSDK_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWLSDK_ROOT/s) { - $SDKROOT = $ENV{$_}; - } -} - -my $src = "$SDKROOT/build/libraries/wm/ARM7.TWL/nwm/src/nwmsp_event_handler.c"; -my $dst = "$SDKROOT/build/libraries/wm/ARM7.TWL/nwm/src/nwmsp_event_handler_autogen.c"; - -open(F, $src) or die "cant open $src\n"; -my @lines = ; -close(F); - -open(OUT, ">$dst") or die "cant open $dst\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/^ *MI_CpuCopy8\(ev->macaddr, sys->status->macAddress, NWM_SIZE_MACADDR\);/ ) - { - print OUT "//\t\t[AUTO COMMENT] fake MAC address of TWL wireless, copy MAC address from that in NOR flash.", $rn; - # add comment out at the top of line - $line =~ s/ev->macaddr,/wmMac,/; - } - - print OUT $line; -} -close(OUT); - -my $IPLROOT; - -# search TWL_IPL_RED_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWL_IPL_RED_ROOT/s) { - $IPLROOT = $ENV{$_}; - } -} - -my $src_make1 = "$IPLROOT/build/libraries_sysmenu/Makefile"; -my $dst_make1 = "$IPLROOT/build/libraries_sysmenu/Makefile_autogen"; - -open(F, $src_make1) or die "cant open $src_make1\n"; -my @lines = ; -close(F); - -open(OUT, ">$dst_make1") or die "cant open $dst_make1\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/^SUBDIRS/ ) - { - print OUT "SUBMAKES\t\t=\t\tnwm/Makefile_autogen", $rn, $rn; - } - - if( $line =~ m/nwm/ ) - { - $line =~ s/^/\#/; - } - - print OUT $line; -} -close(OUT); - -my $src_make2 = "$IPLROOT/build/libraries_sysmenu/nwm/Makefile"; -my $dst_make2 = "$IPLROOT/build/libraries_sysmenu/nwm/Makefile_autogen"; - -open(F, $src_make2) or die "cant open $src_make2\n"; -my @lines = ; -close(F); - -open(OUT, ">$dst_make2") or die "cant open $dst_make2\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/^SUBDIRS_P *\+= *ARM7/ ) - { - print OUT "SUBMAKES_P += ARM7/Makefile_autogen", $rn; - next - } - - print OUT $line; -} -close(OUT); - -my $src_make3 = "$IPLROOT/build/libraries_sysmenu/nwm/ARM7/Makefile"; -my $dst_make3 = "$IPLROOT/build/libraries_sysmenu/nwm/ARM7/Makefile_autogen"; - -open(F, $src_make3) or die "cant open $src_make3\n"; -my @lines = ; -close(F); - -open(OUT, ">$dst_make3") or die "cant open $dst_make3\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/^[\t ]*nwmsp_event_handler\.c/ ) - { - $line =~ s/nwmsp_event_handler\.c/nwmsp_event_handler_autogen\.c/; - } - - print OUT $line; -} -close(OUT); diff --git a/build/tests/build4WLDev/scripts/launcher_loadWlanFirm_c.pl b/build/tests/build4WLDev/scripts/launcher_loadWlanFirm_c.pl deleted file mode 100755 index c3841558..00000000 --- a/build/tests/build4WLDev/scripts/launcher_loadWlanFirm_c.pl +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - -# File: launcher_loadWlanFirm_c.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $IPLROOT; - -# search TWL_IPL_RED_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWL_IPL_RED_ROOT/s) { - $IPLROOT = $ENV{$_}; - } -} - -my $src = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/src/loadWlanFirm.c"; -my $dst = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/src/loadWlanFirm_autogen.c"; - - -my $rn = "\x0D\x0A"; - -open(F, $src) or die "cant open $src\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst") or die "cant open $dst\n"; -foreach my $line ( @lines ) -{ - # WLANLoadɌAFatalError̃ZbgɂB - if( $line =~ m/^[\t ]*UTL_SetFatalError\([\t ]*FATAL_ERROR_WLANFIRM_(LOAD|AUTH)[\t ]*\)/ ) - { - print OUT "//\t[AUTO COMMENTOUT] Jp`[̏ꍇA֘AFATALG[͖ău[g悤ɂ܂B", $rn; - # add comment out at the top of line - $line =~ s/^/\/\//; - } - - print OUT $line; -} -close(OUT); - diff --git a/build/tests/build4WLDev/scripts/launcher_makefile.pl b/build/tests/build4WLDev/scripts/launcher_makefile.pl deleted file mode 100755 index c558652e..00000000 --- a/build/tests/build4WLDev/scripts/launcher_makefile.pl +++ /dev/null @@ -1,112 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - -# File: launcher_makefile.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $IPLROOT; - -# search TWL_IPL_RED_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWL_IPL_RED_ROOT/s) { - $IPLROOT = $ENV{$_}; - } -} - -my $rn = "\x0D\x0A"; - -my $src1 = "$IPLROOT/build/systemMenu_RED/Launcher/Makefile"; -my $dst1 = "$IPLROOT/build/systemMenu_RED/Launcher/Makefile_autogen"; - -open(F, $src1) or die "cant open $src1\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst1") or die "cant open $dst1\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/^SUBDIRS\t*=\t*banner ARM9/ ) - { - print OUT "SUBMAKES\t\t=\tbanner/Makefile ARM9/Makefile_autogen", $rn; - next; - } - - print OUT $line; -} -close(OUT); - -my $src2 = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/Makefile"; -my $dst2 = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/Makefile_autogen"; - -open(F, $src2) or die "cant open $src2\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst2") or die "cant open $dst2\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/loadWlanFirm\.c/ ) - { - $line =~ s/loadWlanFirm\.c/loadWlanFirm_autogen\.c/; - } - - print OUT $line; -} -close(OUT); - -my $src3 = "$IPLROOT/build/systemMenu_RED/MachineSettings/Makefile"; -my $dst3 = "$IPLROOT/build/systemMenu_RED/MachineSettings/Makefile_autogen"; - -open(F, $src3) or die "cant open $src3\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst3") or die "cant open $dst3\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/^SUBDIRS\t*=\t*banner ARM9/ ) - { - print OUT "SUBMAKES\t\t=\tbanner/Makefile ARM9/Makefile_autogen", $rn; - next; - } - - print OUT $line; -} -close(OUT); - -my $src4 = "$IPLROOT/build/systemMenu_RED/MachineSettings/ARM9/Makefile"; -my $dst4 = "$IPLROOT/build/systemMenu_RED/MachineSettings/ARM9/Makefile_autogen"; - -open(F, $src4) or die "cant open $src4\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst4") or die "cant open $dst4\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/ +MachineSetting\.c/ ) - { - $line =~ s/MachineSetting\.c/MachineSetting_autogen\.c/; - } - - print OUT $line; -} -close(OUT); diff --git a/build/tests/build4WLDev/scripts/launcher_makefile_region.pl b/build/tests/build4WLDev/scripts/launcher_makefile_region.pl deleted file mode 100755 index f11bf281..00000000 --- a/build/tests/build4WLDev/scripts/launcher_makefile_region.pl +++ /dev/null @@ -1,112 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - -# File: launcher_makefile.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $IPLROOT; - -# search TWL_IPL_RED_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWL_IPL_RED_ROOT/s) { - $IPLROOT = $ENV{$_}; - } -} - -my $rn = "\x0D\x0A"; - -my $src1 = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/Makefile"; -my $dst1 = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/Makefile_autogen_HNAJ"; - -open(F, $src1) or die "cant open $src1\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst1") or die "cant open $dst1\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/loadWlanFirm\.c/ ) - { - $line =~ s/loadWlanFirm\.c/loadWlanFirm_autogen\.c/; - } - - if( $line =~ m/^TITLEID_LO/ ) - { - $line =~ s/HNAA/HNAJ/; - } - - if( $line =~ m/^CARD_REGION/ ) - { - $line =~ s/ALL/Japan/; - print OUT $line; - print OUT "BINDIR = ./bin.HNAJ/\$(TWL_BUILDTYPE)", $rn; - next; - } - - if( $line =~ m/^INSTALL_DIR/ ) - { - print OUT "INSTALL_DIR = \$(UPDATER_HOST_ROOT_DIR)/debugger/japan", $rn; - print OUT "MAKETAD := \$(TWL_IPL_RED_PRIVATE_TOOLSDIR)/bin/maketad.updater.exe", $rn; - next; - } - - print OUT $line; -} -close(OUT); - - -my $src2 = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/Makefile"; -my $dst2 = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/Makefile_autogen_HNAE"; - -open(F, $src2) or die "cant open $src2\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst2") or die "cant open $dst2\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/loadWlanFirm\.c/ ) - { - $line =~ s/loadWlanFirm\.c/loadWlanFirm_autogen\.c/; - } - - if( $line =~ m/^TITLEID_LO/ ) - { - $line =~ s/HNAA/HNAE/; - } - - if( $line =~ m/^CARD_REGION/ ) - { - $line =~ s/ALL/America/; - print OUT $line; - print OUT "BINDIR = ./bin.HNAE/\$(TWL_BUILDTYPE)", $rn; - next; - } - - if( $line =~ m/^INSTALL_DIR/ ) - { - print OUT "INSTALL_DIR = \$(UPDATER_HOST_ROOT_DIR)/debugger/america", $rn; - print OUT "MAKETAD := \$(TWL_IPL_RED_PRIVATE_TOOLSDIR)/bin/maketad.updater.exe", $rn; - next; - } - - print OUT $line; -} -close(OUT); - diff --git a/build/tests/build4WLDev/scripts/systemupdater_source.pl b/build/tests/build4WLDev/scripts/systemupdater_source.pl deleted file mode 100755 index a997eec7..00000000 --- a/build/tests/build4WLDev/scripts/systemupdater_source.pl +++ /dev/null @@ -1,125 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - -# File: systemupdater_source.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $IPLROOT; - -# search TWL_IPL_RED_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWL_IPL_RED_ROOT/s) { - $IPLROOT = $ENV{$_}; - } -} - -my $rn = "\x0D\x0A"; - -my $src1 = "$IPLROOT/build/systemMenu_tools/SystemUpdaterRegionSelect/ARM9.TWL/src/process_check_console.c"; -my $dst1 = "$IPLROOT/build/systemMenu_tools/SystemUpdaterRegionSelect/ARM9.TWL/src/process_check_console_autogen.c"; - -my $in_check_console = 0; - -open(F, $src1) or die "cant open $src1\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst1") or die "cant open $dst1\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/^void ProcessCheckConsole\(void\)/ ) - { - $in_check_console = 1; - } - - if ($in_check_console == 1) - { - if( $line =~ m/^\/\*/ ) - { - print OUT "\tkamiFontPrintfConsole( FONT_COLOR_GREEN, \"This updater is for Wireless development.\\n\");", $rn; - print OUT "//\t[AUTO COMMENTOUT] JpSystemUpdateȑꍇARgAEg͂܂B", $rn; - # add comment out at the top of line - $line =~ s/^/\/\//; - } - if( $line =~ m/^\*\// ) - { - print OUT "//\t[AUTO COMMENTOUT] JpSystemUpdateȑꍇARgAEg͂܂B", $rn; - # add comment out at the top of line - $line =~ s/^/\/\//; - } - if( $line =~ m/^}/ ) - { - $in_check_console = 0; - } - } - - print OUT $line; -} -close(OUT); - -my $src2 = "$IPLROOT/build/systemMenu_tools/SystemUpdaterRegionSelect/ARM9.TWL/src/process_select_region.c"; -my $dst2 = "$IPLROOT/build/systemMenu_tools/SystemUpdaterRegionSelect/ARM9.TWL/src/process_select_region_autogen.c"; - -open(F, $src2) or die "cant open $src2\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst2") or die "cant open $dst2\n"; -foreach my $line ( @lines ) -{ - # WLANLoadɌAFatalError̃ZbgɂB - if( $line =~ m/OS_TWL_REGION_AUSTRALIA/ ) - { - print OUT "//\t[AUTO COMMENTOUT] JpSystemUpdateȑꍇARegionJapanAmericâ݁B", $rn; - $line =~ s/OS_TWL_REGION_AUSTRALIA/OS_TWL_REGION_AMERICA/; - } - - print OUT $line; -} -close(OUT); - -my $src3 = "$IPLROOT/build/systemMenu_tools/SystemUpdaterRegionSelect/ARM9.TWL/Makefile"; -my $dst3 = "$IPLROOT/build/systemMenu_tools/SystemUpdaterRegionSelect/ARM9.TWL/Makefile_autogen"; - -open(F, $src3) or die "cant open $src3\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst3") or die "cant open $dst3\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/UPDATER_HOST_ROOT_DIR =/ ) - { - $line =~ s/UPDATER_HOST_ROOT_DIR =/UPDATER_HOST_ROOT_DIR ?=/; - } - - if( $line =~ m/process_select_region\.c/ ) - { - $line =~ s/process_select_region\.c/process_select_region_autogen\.c/; - } - - if( $line =~ m/process_check_console\.c/ ) - { - $line =~ s/process_check_console\.c/process_check_console_autogen\.c/; - } - - print OUT $line; -} -close(OUT); diff --git a/build/tests/compressSharedFontLoad/README.txt b/build/tests/compressSharedFontLoad/README.txt deleted file mode 100644 index 5fed4e21..00000000 --- a/build/tests/compressSharedFontLoad/README.txt +++ /dev/null @@ -1,60 +0,0 @@ -# ------------------------------------------ -# LtHgk̃[hx -# -# 쐬 : nishikawa_takeshi -# ------------------------------------------ - -͈ȉ2Xebv\܂B - -1. LtHg̈kƃC|[g -2. [hx̑ - -ȉAeXebvɂ‚Đ܂B - - -# ------------------------------------------ -# Xebv1 LtHg̈kƃC|[g -# ------------------------------------------ - -(1)LtHg̈k - -compSharedFont fBNgɈړ make ĂB - % cd compSharedFont - % make - -(2)ktHg̃C|[g - -kꂽLtHg NandInitializerRed ŃC|[gKv܂A -NandInitializerRed ́ASDł͂ȂAROMA[JCuC|[g܂B -(‚܂AgSRLɋLtHg܂B) -̂߁ANandInitializerRed ēxArhKv܂B -ktHg(1)̏ɂāANandInitializerRed ̃fBNgɎIɃRs[܂̂ŁA -Rs[Kv͂܂B - - % cd $(TWL_IPL_RED_ROOT)/build/systemMenu_tools/NandIntializerRed - % make clean; make - -ărhꂽ NandInitializerRed.srl (ARM9.TWL/bin/ȉɂ܂) SDJ[hɃRs[āA -SDJ[hu[gƁAj[tHgC|[g鍀ڂIł܂B - -# ------------------------------------------ -# Xebv2 [hx̑ -# ------------------------------------------ - -[hx̑vÓAtestLoadSpeed fBNgɂ܂B -ŁAOS CűLtHg֘Å֐ύXA -ɁATWLSDK SYSMENU pbP[WƂărhȂKv܂B -̕ύXƃeXgvÕrh́Amake ɃIvV‚ƎIɎs܂B -(D݂ŁATWL_WITHOUT_DEMOS=TRUE TWL_FINALROM=TRUE IvV‚B) - - % cd testLoadSpeed - % make TEST_TWLSDK_REBUILD=TRUE - -L TWLSDK ̕ύXȂƂɂ́AeXgvÕrhɂł܂B - -eXgvOύXꍇA TWLSDK rĥ͎Ԃ܂̂ŁA -IvV‚ make ƁAeXgvÕrĥݎs܂B - - % make - -쐬ꂽeXgvOs΁AkLtHg̃[hԂ𑪒ł܂B diff --git a/build/tests/compressSharedFontLoad/compSharedFont/Makefile b/build/tests/compressSharedFontLoad/compSharedFont/Makefile deleted file mode 100644 index 3417d6b0..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/Makefile +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile - -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: -# $Rev: -# $Author: -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU - -SUBDIRS = compBLZ_modified \ - ntrcomp - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -FONT_TIMESTAMP = 08061300 -FONT_DIR = WW -FONTS = TBF1_l.NFTR \ - TBF1_m.NFTR \ - TBF1_s.NFTR -FONT_RSC = $(addprefix $(FONT_DIR)/, $(FONTS)) - -FONT_ORG_DIR = $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/sharedFont/WW -FONT_ORG_RSC = $(addprefix $(FONT_ORG_DIR)/, $(FONTS)) - -ifneq ($(TWL_IPL_RED_PRIVATE_ROOT),) -FONT_TABLE = TWLFontTable.dat -endif - -GEN_FONT_TABLE = ./genFontTable.plx - -#---------------------------------------------------------------------------- -INSTALL_TARGETS = $(FONT_TABLE) -INSTALL_DIR = $(TWL_IPL_RED_ROOT)/build/systemMenu_tools/NandInitializerRed/data - -LDIRT_CLEAN = $(FONT_TABLE) $(FONT_RSC) - -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -do-build : $(FONT_TABLE) - -# step1 : copy sharedFonts into local directory for work -$(FONT_RSC): - cp $(FONT_ORG_RSC) $(FONT_DIR) - -# step2 : compress sharedFonts and them in local directory -$(FONT_TABLE): $(FONT_RSC) - $(GEN_FONT_TABLE) $(FONT_TIMESTAMP) $(FONT_RSC) - -#===== End of Makefile ===== diff --git a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/Makefile b/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/Makefile deleted file mode 100644 index 89101f6e..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/Makefile +++ /dev/null @@ -1,73 +0,0 @@ -#! make -f -#--------------------------------------------------------------------------- -# Project: TwlSDK - tools - compBLZ -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#--------------------------------------------------------------------------- - -TARGET_PLATFORM = TWL NITRO - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#--------------------------------------------------------------------------- - -TARGET_BIN = compBLZ.exe -TARGETS = $(BINDIR)/$(TARGET_BIN) - -SRCS = main.c \ - compress.c \ - file.c \ - version.c - -HEADERS = common.h \ - compress.h \ - file.h - -INCDIR += ../../../include -OBJDIR = obj -BINDIR = bin - -OBJS = $(addprefix $(OBJDIR)/,$(SRCS:.c=.o)) - -MACROS += -DSDK_TWL $(addprefix -I,$(INCDIR)) -NEWDIRS = $(OBJDIR) $(BINDIR) -LDIRT_CLEAN += $(NEWDIRS) version.c - -#INSTALL_DIR = $(TWL_INSTALL_TOOLSDIR)/bin -#INSTALL_TARGETS = $(TARGETS) - -#--------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules.x86 - -do-build: $(TARGETS) - -$(TARGETS): $(OBJS) $(LIBDGT) $(MAKEFILE) - $(CC_X86) $(OBJS) $(LIBDGT) -o $@ - -$(OBJS):%.o: - $(COMPILE_C) - -$(OBJDIR)/main.o: main.c file.h version.c -$(OBJDIR)/compress.o: compress.c compress.h -$(OBJDIR)/file.o: file.c file.h -$(OBJDIR)/version.o: version.c - -version.c: $(filter-out version.c,$(SRCS)) $(HEADERS) $(MAKEFILE) - @for i in $^ ; \ - do \ - date -r $$i +'const unsigned long SDK_DATE_OF_LATEST_FILE=%Y%m%dUL;'; \ - done | sort | tail -1 > $@ - -#===== End of Makefile ===== diff --git a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/_ b/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/_ deleted file mode 100644 index 95665859..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/_ +++ /dev/null @@ -1 +0,0 @@ -SDK_CONFIDENTIAL diff --git a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/common.h b/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/common.h deleted file mode 100644 index 9f60ce54..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/common.h +++ /dev/null @@ -1,42 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - tools - compstatic - File: common.h - - Copyright 2003 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef COMMON_H__ -#define COMMON_H__ - -typedef enum -{ - TRUE = 1, - FALSE = 0 -} -BOOL; - -typedef unsigned char u8; -typedef unsigned short u16; -typedef unsigned long u32; -typedef signed char s8; -typedef signed short s16; -typedef signed long s32; - -// macro -#define MIN(a,b) ((a)<(b)?(a):(b)) -#define ROUNDUP4(x) (((x)+3)&~3) -#define LE(a) ((((a)<<24)&0xff000000)|(((a)<<8)&0x00ff0000)|\ - (((a)>>8)&0x0000ff00)|(((a)>>24)&0x000000ff)) -#define FREE(x) do { if (x){ free(x); x = NULL; } } while(0) - - -#endif //COMMON_H__ diff --git a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/compress.c b/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/compress.c deleted file mode 100644 index 57f4b5bc..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/compress.c +++ /dev/null @@ -1,374 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - tools - compstatic - File: compress.c - - Copyright 2003 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#include -#include -#include "file.h" -#include "compress.h" - -static int LZCompressRV(u8 *src_buffer, int src_size, u8 *dst_buffer, int dst_size); -static int FindMatched(u8 *src_buffer, int src_size, u8 *dic_buffer, int dic_size, int *index); -static int HowManyMatched(u8 *src_buffer, u8 *dic_buffer, int max_len); -static int CheckOverwrite(int orig_size, u8 *cmprs_buffer, int cmprs_buffer_size, - int *orig_safe, int *cmprs_safe); - - -/*---------------------------------------------------------------------------* - Name: Compress - - Description: Buffer ̋ẗksȂD - kf[^ƓWJf[^ԂLł悤 - - - buffer : 툳kf[^ - buffer_size : 툳kf[^TCY - - Return: >=0: k̃TCY - < 0: s - *---------------------------------------------------------------------------*/ -int Compress(u8 *buffer_original, int buffer_original_size) -{ - u8 *buffer; - int buffer_size; - int buffer_start; - u8 *temp_buffer_original; - u8 *temp_buffer; - int temp_buffer_size; - int temp_buffer_start; - int compressed_size; - int aligned_size; - int total_size; - int reduced; - int i; - CompFooter *footer; - - // O - if (NULL == (temp_buffer_original = (u8 *)malloc(buffer_original_size))) - { - ErrorPrintf("Cannot allocate memory size=%d\n", buffer_original_size); - return COMPRESS_FATAL_ERROR; - } - - if ((u32)buffer_original % 4 != 0) - { - ErrorPrintf("Top of buffer is not aligned by 4.\n"); - return COMPRESS_FATAL_ERROR; - } - - buffer = buffer_original; - buffer_size = buffer_original_size; - temp_buffer = temp_buffer_original; - temp_buffer_size = buffer_original_size; - - // ksȂ - reduced = LZCompressRV(buffer, buffer_size, temp_buffer, temp_buffer_size); - if (reduced < 0) - { - DebugPrintf("Compressed buffer size exceeds original data size.\n"); - free(temp_buffer_original); - return COMPRESS_LARGER_ORIGINAL; - } - - temp_buffer_size -= reduced; - temp_buffer += reduced; - - DebugPrintf("1: source size = %d compressed = %d\n", buffer_size, temp_buffer_size); - - // WJs\ȏ㏑邩mF - if (!CheckOverwrite - (buffer_size, temp_buffer, temp_buffer_size, &buffer_start, &temp_buffer_start)) - { - // ㏑Ȃ爳k͈͂ύX - buffer += buffer_start; - buffer_size -= buffer_start; - temp_buffer += temp_buffer_start; - temp_buffer_size -= temp_buffer_start; - - DebugPrintf(" !! Shrink back Compressed region to avoid overwriting.\n" - " !! Expand non-compressed region = +%d\n" - "2: source size = %d compressed = %d\n", - buffer_start, buffer_size, temp_buffer_size); - } - - // PADDING ƃp[^̈ĂȂǂ - compressed_size = buffer_start + temp_buffer_size; // header+body - aligned_size = ROUNDUP4(compressed_size); // +padding - total_size = aligned_size + sizeof(CompFooter); // +footer - - if (buffer_original_size <= total_size) - { - DebugPrintf("Compressed buffer size exceeds or equals original data size.\n"); - free(temp_buffer_original); - return COMPRESS_LARGER_ORIGINAL; - } - - // f[^e|obt@猳f[^֏㏑ - CopyBuffer(temp_buffer, buffer, temp_buffer_size); - free(temp_buffer_original); - - // TCY 4 ̔{ɂȂ悤 PADDING - // LZ ̎㈳k̈̍ŏ̃oCgl 0xff ɂȂȂ(ŏ͈k - // tOłAŏ̃f[^͈kȂŊi[邩)̂ 0xff - // ߂ - for (i = compressed_size; i < aligned_size; i++) - { - buffer_original[i] = 0xff; - } - - // TCYݒ - // compressBottom sizeof(PAD)+sizeof(footer) Ȃ̂ 1oCgŏ\ - footer = (CompFooter *) (buffer_original + aligned_size); - footer->bufferTop = total_size - buffer_start; // ̒l - footer->compressBottom = total_size - compressed_size; // ̒l - footer->originalBottom = buffer_original_size - total_size; // ̒l - - return total_size; -} - - -/*---------------------------------------------------------------------------* - Name: LZCompressRV - - Description: LZ ksȂDf[^̌爳kJn - kʂl߂ɂȂ - - Returns: kf[^̐擪 index - kf[^ dst_buffer+index dst_buffer+dst_size-1 ܂ - -1: ks(kʂ̕傫ꍇ) - *---------------------------------------------------------------------------*/ -static int LZCompressRV(u8 *src_buffer, int src_size, u8 *dst_buffer, int dst_size) -{ - int src_index = src_size; - int dst_index = dst_size; - int compflag; - int compflag_index; - int i; - - while (src_index > 0) - { - if (dst_index < 1) - return -1; // Buffer Overflow - - // 8bit ̈ktȎ}ʒu\ - compflag = 0x00; - compflag_index = --dst_index; - - // tOn8rbgf[^ƂĊi[邽߁A8񃋁[v - for (i = 0; i < 8; i++) - { - compflag <<= 1; - - if (src_index > 0) // src cĂ邩 - { - u8 *dic_buffer; - int dic_size; - u8 *ref_buffer; - int ref_size; - int index; - int len; - - dic_buffer = src_buffer + src_index; - dic_size = src_size - src_index; - ref_size = MIN(src_index, LZ_MAX_COPY); - ref_buffer = dic_buffer - ref_size; - - len = FindMatched(ref_buffer, ref_size, - dic_buffer, MIN(dic_size, LZ_MAX_DIC_LENGTH), &index); - - if (len >= LZ_MIN_COPY) - { - u16 half; - - // Offset/Len ̋L^”\ǂmF - if (dst_index < 2) - return -1; // Buffer Overflow - - // src index i߂ - src_index -= len; - - // len >= LZ_MIN_COPY Ȃ̂ł̕Zlߖ񂷂 - index -= (LZ_MIN_COPY - 1); - len -= (LZ_MIN_COPY - 0); - - // 16bit f[^ƂĂ - half = (u16)((index & (LZ_MAX_INDEX - 1)) | (len << LZ_BIT_INDEX)); - dst_buffer[--dst_index] = (half >> 8) & 0xff; - dst_buffer[--dst_index] = (half >> 0) & 0xff; - - // flag Zbg - compflag |= 0x01; - } - else - { - // l̂܂܂L^ & src index i߂ - if (dst_index < 1) - return -1; // Buffer Overflow - dst_buffer[--dst_index] = src_buffer[--src_index]; - } - } - } - // ktO̕ۑ - dst_buffer[compflag_index] = compflag; - } - return dst_index; -} - - -/*---------------------------------------------------------------------------* - Name: FindMatched - - Description: vp^[̌sȂDf[^̌Oւ - - - src_buffer[0...src_size-1] ̃p^[ src_buffer ̌ - dic_buffer[0...dic_size-1] ̃p^[ƍőv镔 - D - - Returns: vTCY - *index vʒu - *---------------------------------------------------------------------------*/ -static int FindMatched(u8 *src_buffer, int src_size, u8 *dic_buffer, int dic_size, int *index) -{ - u8 *src_bottom = src_buffer + src_size - 1; - u8 char_src_bottom = *src_bottom; - int n, len, max_len; - - // Ԓl - max_len = 0; - - for (n = 0; n < dic_size; n++) - { - // ̂߂̃LbV - if (char_src_bottom == dic_buffer[n]) - { - len = HowManyMatched(src_bottom, dic_buffer + n, MIN(n + 1, src_size)); - if (max_len < len) - { - max_len = len; - *index = n; - } - } - } - - // ŏTCYȏȂ琬 - return max_len; -} - - -/*---------------------------------------------------------------------------* - Name: HowManyMatched - - Description: 2‚̃p^[tɂǂ܂ňvĂ邩𒲍 - - src_buffer, dic_buffer rp^[̃AhX - (̃AhXt֌) - max_len ő咲钷 - - Returns: v - *---------------------------------------------------------------------------*/ -static int HowManyMatched(u8 *src_buffer, u8 *dic_buffer, int max_len) -{ - int i; - - // p^[v(t) - for (i = 0; i < max_len; i++) - { - if (*src_buffer != *dic_buffer) - { - break; - } - src_buffer--; - dic_buffer--; - } - return i; -} - - -/*---------------------------------------------------------------------------* - Name: CheckOverwrite - - Description: LZ WJœWJƓWJ𓯂AhXɒuꍇɁAǂ܂ - ɓWJ”\`FbN - - Returns: Ō܂œWJ”\Ȃ TRUE r܂łȂ FALSE - *---------------------------------------------------------------------------*/ -static int CheckOverwrite(int orig_size, u8 *cmprs_buffer, int cmprs_buffer_size, - int *orig_safe, int *cmprs_safe) -{ - int src = cmprs_buffer_size; - int dst = orig_size; - int flag; - int i; - -//#define DETAIL - while (dst > 0) - { - flag = cmprs_buffer[--src]; // k񈳏ktO 8 [v - -#ifdef DETAIL - DebugPrintf("%08x %08x FLG=0x%02x\n", src, dst, flag); -#endif - for (i = 0; i < 8; i++) - { - if (dst > 0) - { - if (flag & 0x80) // kf[^H - { - u16 half; - int len; - - // WJvZ - src -= 2; - half = (u16)(cmprs_buffer[src] | (cmprs_buffer[src + 1] << 8)); - len = ((half >> LZ_BIT_INDEX) & (LZ_MAX_LENGTH - 1)) + LZ_MIN_COPY; -#ifdef DETAIL - DebugPrintf("%08x %08x-%08x LEN=%d\n", src, dst - 1, dst - len, len); -#endif - // \[Xf[^㏑Ă܂`FbN - dst -= len; - - if (dst < 0) - { - ErrorPrintf("System error in CheckOverwrite???\n"); - exit(-1); // Panic!! - } - - if (dst < src) - { - // ㏑Ă܂Ȃ爳k݂͌̂Ƃ܂łŎ~߂ - *orig_safe = dst; - *cmprs_safe = src; - return FALSE; - } - } - else - { - // 񈳏kf[^Ȃ炻̂܂܃Rs[Ȃ̂ - // j𔺂Ȃ㏑͋NȂ - src--; - dst--; -#ifdef DETAIL - DebugPrintf("%08x %08x CHR=0x%02x\n", src, dst, cmprs_buffer[src]); -#endif - } - flag <<= 1; - } - } - } - *orig_safe = 0; - *cmprs_safe = 0; - return TRUE; -} diff --git a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/compress.h b/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/compress.h deleted file mode 100644 index 9b141d6c..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/compress.h +++ /dev/null @@ -1,55 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - tools - compstatic - File: compress.h - - Copyright 2003 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef COMPRESS_H__ -#define COMPRESS_H__ -#include "common.h" - -//--------------------------------------------------------- -typedef struct -{ - u32 bufferTop:24; // k̈I[ - 擪 - u32 compressBottom:8; // k̈I[ - f[^I[ - u32 originalBottom; // WJ̈I[ - k̈I[ -} -CompFooter; - -//--------------------------------------------------------- -int Compress(u8 *buffer, int buffer_size); - -#define COMPRESS_LARGER_ORIGINAL (-1) -#define COMPRESS_FATAL_ERROR (-2) - - -// loader area -#define LOADER_SIZE_ARM9 (16*1024) -#define LOADER_SIZE_ARM7 ( 1*1024) - -// LZ compress parameters -#define LZ_BIT_INDEX 12 // 12bit offset -#define LZ_BIT_LENGTH 4 // 4bit length -#define LZ_MAX_INDEX (1 << LZ_BIT_INDEX) -#define LZ_MAX_LENGTH (1 << LZ_BIT_LENGTH) - -#define LZ_MIN_COPY 3 -#define LZ_MAX_COPY (LZ_MIN_COPY+LZ_MAX_LENGTH-1) -#define LZ_MAX_DIC_LENGTH (LZ_MIN_COPY+LZ_MAX_INDEX-1) - -// macro -#define MIN(a,b) ((a)<(b)?(a):(b)) -#define ROUNDUP4(x) (((x)+3)&~3) - -#endif diff --git a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/file.c b/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/file.c deleted file mode 100644 index 871c6e46..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/file.c +++ /dev/null @@ -1,314 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - tools - compstatic - File: file.c - - Copyright 2003 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#include -#include // calloc() -#include // free(), exit() -#include // stat() -#include // strlen/strdup/strcpy -#include // va_start(),va_end() -#include // unlink() -#include "file.h" - - -/*---------------------------------------------------------------------------* - Name: ReadFile - - Description: t@C̓ǂݍ obt@̊m - *---------------------------------------------------------------------------*/ -int ReadFile(const char *filename, u8 **buffer) -{ - FILE *fp; - struct stat filestat; - int filesize; - - fp = NULL; - *buffer = NULL; - - if (filename == NULL) - { - ErrorPrintf("Not specified filename\n"); - goto error; - } - - /* Open file */ - if (stat(filename, &filestat) || !S_ISREG(filestat.st_mode) || - NULL == (fp = fopen(filename, "rb"))) - { - ErrorPrintf("Cannot open file '%s'\n", filename); - goto error; - } - - /* Read file */ - filesize = filestat.st_size; - if (NULL == (*buffer = malloc(filesize))) - { - ErrorPrintf("Cannot allocate memory size=%d\n", filesize); - goto error; - } - - if (filesize != fread(*buffer, sizeof(u8), filesize, fp)) - { - ErrorPrintf("Cannot read file '%s'\n", filename); - goto error; - } - - DebugPrintf("%p %8d bytes ReadFile \'%s\'\n", *buffer, filesize, filename); - - /* Close file */ - fclose(fp); - return filesize; - - error: - if (*buffer) - free(*buffer); - if (fp) - fclose(fp); - return -1; -} - - -/*---------------------------------------------------------------------------* - Name: WriteFile - - Description: t@C̍쐬 - *---------------------------------------------------------------------------*/ -int WriteFile(const char *filename, u8 *buffer, int size) -{ - FILE *fp; - - DebugPrintf("%p %8d bytes WriteFile \'%s\'\n", buffer, size, filename); - - /* Open file */ - if (NULL == (fp = fopen(filename, "wb"))) - { - ErrorPrintf("Cannot open file '%s'\n", filename); - return -1; - } - - /* Write file */ - if (size != fwrite(buffer, sizeof(u8), size, fp)) - { - ErrorPrintf("Cannot write file '%s'\n", filename); - (void)fclose(fp); - (void)unlink(filename); - return -1; - } - - /* Close file */ - if (0 > fclose(fp)) - { - ErrorPrintf("Cannot close file '%s'\n", filename); - (void)unlink(filename); - return -1; - } - return size; -} - -/*---------------------------------------------------------------------------* - Name: CopyBuffer - - Description: obt@̃Rs[ - *---------------------------------------------------------------------------*/ -void CopyBuffer(const u8 *src, u8 *dst, int size) -{ - int i; - - if ((unsigned int)src > (unsigned int)dst) - { - for (i = 0; i < size; i++) - { - dst[i] = src[i]; - } - } - else - { - for (i = size - 1; i >= 0; i--) - { - dst[i] = src[i]; - } - } - return; -} - -/*---------------------------------------------------------------------------* - Name: GetDirName - - Description: t@C̃fBNg擾 - *---------------------------------------------------------------------------*/ -char *GetDirName(const char *path) -{ - int i; - char *new_path; - - for (i = strlen(path) - 1; i >= 0; i--) - { - if (path[i] == '/' || path[i] == '\\') - { - if (NULL != (new_path = strdup(path))) - { - new_path[i] = '\0'; - } - return new_path; - } - if (path[i] == ':') - { - if (NULL != (new_path = malloc(i + 3))) - { - strncpy(new_path, path, i); - strcpy(new_path + i, ":."); - } - return new_path; - } - } - - return strdup("."); -} - -/*---------------------------------------------------------------------------* - Name: DebugPrintf - - Description: Debug o͗p Printf - *---------------------------------------------------------------------------*/ -BOOL bDebugMode = FALSE; - -void DebugPrintf(const char *fmt, ...) -{ - va_list va; - - if (bDebugMode) - { - va_start(va, fmt); - vfprintf(stderr, fmt, va); - va_end(va); - } -} - -/*---------------------------------------------------------------------------* - Name: ConsolePrintf - - Description: ʏR\[o͗p Printf - *---------------------------------------------------------------------------*/ -void ConsolePrintf(const char *fmt, ...) -{ - va_list va; - - va_start(va, fmt); - vfprintf(stdout, fmt, va); - va_end(va); -} - -/*---------------------------------------------------------------------------* - Name: ErrorPrintf - - Description: Error o͗p Printf - *---------------------------------------------------------------------------*/ -void ErrorPrintf(const char *fmt, ...) -{ - va_list va; - - fprintf(stderr, "Error: "); - va_start(va, fmt); - vfprintf(stderr, fmt, va); - va_end(va); -} - - -/*---------------------------------------------------------------------------* - Name: StrDup - - Description: G[nhOÂl free t strdup ֐ - *---------------------------------------------------------------------------*/ -char *StrDup(char *old, char *new) -{ - if (old) - { - free(old); - } - if (new && NULL == (new = strdup(new))) - { - ErrorPrintf("Cannot allocate memory\n"); - exit(1); - } - return new; -} - - -/*---------------------------------------------------------------------------* - Name: StrCat - - Description: ̘A - *---------------------------------------------------------------------------*/ -char *StrCat(int num, ...) -{ - va_list va; - int i; - int size; - char *result; - - va_start(va, num); - size = 0; - for (i = 0; i < num; i++) - { - size += strlen(va_arg(va, char *)); - } - va_end(va); - - if (NULL == (result = malloc(size + 1))) - { - ErrorPrintf("Cannot allocate memory\n"); - exit(1); - } - - va_start(va, num); - result[0] = '\0'; - for (i = 0; i < num; i++) - { - (void)strcat(result, va_arg(va, char *)); - } - va_end(va); - - return result; -} - -//--------------------------------------------------------------------------- -// pX񂩂t@C̃|C^擾Agq -// @param path pX -// @return t@C̃|C^ -//--------------------------------------------------------------------------- -char *StrCutFname(char *path) -{ - char *search_tmp; - - if (path == NULL) - { - return NULL; - } - - if ((search_tmp = strrchr(path, '/')) != NULL) - { - path = (search_tmp + 1); - } - if ((search_tmp = strrchr(path, '\\')) != NULL) - { - path = (search_tmp + 1); - } - if ((search_tmp = strrchr(path, '.')) != NULL) - { - *search_tmp = '\0'; - } - return path; -} diff --git a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/file.h b/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/file.h deleted file mode 100644 index b266b0ff..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/file.h +++ /dev/null @@ -1,35 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - tools - compstatic - File: file.h - - Copyright 2003 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef FILE_H__ -#define FILE_H__ - -#include "common.h" - -int ReadFile(const char *filename, u8 **buffer); -int WriteFile(const char *filename, u8 *buffer, int size); -void CopyBuffer(const u8 *src, u8 *dst, int size); -char *GetDirName(const char *filename); -void DebugPrintf(const char *fmt, ...); -void ErrorPrintf(const char *fmt, ...); -void ConsolePrintf(const char *fmt, ...); -char *StrDup(char *old, char *new); -char *StrCat(int num, ...); -char *StrCutFname(char *path); - -extern BOOL bDebugMode; - -#endif //FILE_H__ diff --git a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/main.c b/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/main.c deleted file mode 100644 index f7ec6980..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/main.c +++ /dev/null @@ -1,171 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - tools - compBLZ - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#include -#include -#include -#include // getopt() -#include "file.h" -#include "compress.h" - -extern const unsigned long SDK_DATE_OF_LATEST_FILE; - -static void usage(void); - -/*---------------------------------------------------------------------------* - Name: main - - Description: - *---------------------------------------------------------------------------*/ -int main(int argc, char *argv[]) -{ - int n; - int result; - int iptfilesize; - - char* optfilename; - char* suffix; - u8* filebuf; - - BOOL optfname_flag = FALSE; // if optfilename input, this flag is true. - - optfilename = suffix = NULL; - - while ((n = getopt(argc, argv, "o:e:dhv")) != -1) - { - switch (n) - { - case 'o': // output file name - optfilename = optarg; - optfname_flag = TRUE; - break; - - case 'e': - suffix = optarg; - break; - - case 'd': // Show debug message - bDebugMode = TRUE; - break; - - case 'h': - case 'v': - default: - usage(); // Never returns - break; - } - - DebugPrintf("option -%c: %s\n", n, optarg ? optarg : "No ARG"); - } - - argc -= optind; - argv += optind; - - if (bDebugMode) - { - int i; - - DebugPrintf("argc=%d optind=%d\n", argc, optind); - for (i = 0; i < argc; i++) - { - DebugPrintf("argv[%d] = [%s]\n", i, argv[i]); - } - } - - if (argc == 1) - { - if (optfilename == NULL) - { - optfilename = argv[0]; - } - iptfilesize = ReadFile(argv[0], &filebuf); - } - else - { - usage(); // Never returns - } - - if (iptfilesize < 0) - { - ConsolePrintf("exit...\n"); - return 1; - } - - if ((result = Compress(filebuf, iptfilesize)) < 0) - { - switch (result) - { - case COMPRESS_LARGER_ORIGINAL: - ConsolePrintf("Inputdata ..... Not compressed (enlarged or same size as before)\n"); - break; - case COMPRESS_FATAL_ERROR: - ConsolePrintf("Fatal error occured\n"); - break; - } - ConsolePrintf("exit...\n"); - return 1; - } - - // cut file path and suffix of input file - if (!optfname_flag) - { - optfilename = StrCutFname(optfilename); - } - - // create output filename - if (suffix == NULL) - { - optfilename = StrCat(2, optfilename, "_BLZ.bin"); - } - else - { - optfilename = StrCat(2, optfilename, suffix); - } - - // output file - if (WriteFile(optfilename, filebuf, result) < 0) - { - ConsolePrintf("exit...\n\n"); - return 1; - } - - ConsolePrintf("Inputdata ..... Compressed ... %9d -> %9d\n", iptfilesize, result); - - return 0; -} - -/*---------------------------------------------------------------------------* - Name: usage - - Description: - *---------------------------------------------------------------------------*/ -static void usage(void) -{ - fprintf(stderr, - "TWL-SDK Development Tool - compBLZ - Compress data\n" - "Build %lu\n" - "\n" - "Usage: compBLZ [-d] [-o outputFile] [-e suffix] inputFile\n" - "\n" - " Compress data (backward LZ)\n" - "\n" - " -o outputFile FILENAME for output file (default:input filename)\n" - " -e suffix SUFFIX for output file (default:\"_BLZ\")\n" - " -d Show debug messages (for test purpose)\n" - " -h Show this message\n" "\n", SDK_DATE_OF_LATEST_FILE); - - exit(1); -} diff --git a/build/tests/compressSharedFontLoad/compSharedFont/genFontTable.plx b/build/tests/compressSharedFontLoad/compSharedFont/genFontTable.plx deleted file mode 100644 index 69cd3c09..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/genFontTable.plx +++ /dev/null @@ -1,261 +0,0 @@ -#!/usr/bin/perl - -# -# To Do -# EFont info table padding kt@CTCYi[GgɕύX -# Et@CTCY擾ċlߍޏlj -# ESHA-1nbV‚OɈk -# - -###################################################################### -# genFontTable.pl -# -# generate Secure Shared Font Data Table -# -# [[ HEADER FORMAT ]] -# security code (128 bytes) : RSA signature of Header -# -# Header ( 32 bytes) -# TimeStamp ( 4 bytes) : date %y%m%d%H -# number ( 2 bytes) : number of font files -# padding ( 6 bytes) : -# padding ( 20 bytes) : SHA1 digest of Font info table -# -# Font info table ( 64 bytes * number) -# fileName ( 32 bytes) : font file name -# comp_length ( 4 bytes) : length of the compression file -# file offset ( 4 bytes) : file offset of Font data -# length ( 4 bytes) : length of file (bytes) -# digest ( 20 bytes) : SHA1 digest of Font data -# -# note: each section image is aligned to 32 bytes. -# -###################################################################### - -use POSIX 'strftime'; -use File::Basename; - -if ($#ARGV < 2) { - printf STDOUT ("Usage: %s [genFontTable] timestamp [Target font files...]\n", $0); - exit(-1); -} - -my $outFile = "TWLFontTable.dat"; -my $infoFile = "info.bin"; -my $headerFile = "header.bin"; -my $digestFile = "sha1.bin"; -my $signFile = "sign.bin"; -my $tempFile = "temp.bin"; -my $compprog = "./compBLZ_modified/bin/compBLZ.exe"; # kvO -my $compoption = "-e \"\""; -#my $compprog = "./ntrcomp/gcc/ntrcomp.exe"; -#my $compoption = "-h8 -A32 -s"; - -# n -sub deleteTemp { - system ("rm -f $infoFile"); - system ("rm -f $headerFile"); - system ("rm -f $digestFile"); - system ("rm -f $signFile"); - system ("rm -f $tempFile"); -} - -# ‹ϐSDK̃[gT[`(ntrcomp̏ꏊɕKv) -#foreach ( sort keys ( %ENV ) ){ -# if ($_ =~ m/TWLSDK_ROOT/s) { -# $SDKROOT = $ENV{$_}; -# } -#} -#printf "TWLSDK_ROOT is ${SDKROOT}\n"; - -my $signSize = 0x80; -my $headerSize = 0x20; -my @files; - -# vfZo -my $num = 0; -foreach ( @ARGV ) { - next if( $_ eq $ARGV[0] ); - $files[ $num ] = $_; - $num++; -} - -# e[ȕo -{ - my $elementSize = 0x40; - my $fileNameMax = 0x20; - my $padLen = 0x04; - # offset length = 0x04; - # file length = 0x04; - my $sha1Len = 0x14; - - open INFO, ">$infoFile" or die; - binmode INFO; - - # ItZbgZo - my $offset = $signSize + $headerSize + $num * $elementSize; - if( ( $offset % 32 ) > 0 ) { $offset += 32 - ( $offset % 32 ); } - - printf "---------------------------------------------------------------\n"; - printf "filename\toffset \torig_size\tcompressed_size\n"; - foreach ( @files ) { - # NULLw莞́ANULLo - if( "NULL" eq basename( $_ ) ) { - syswrite( INFO, pack( "x$elementSize") ); - next; - } - - # t@Cl[̏o - if( !( -e $_ ) ) { - close( INFO ); - deleteTemp(); - die "file not exist. : $_\n"; - } - my $name = basename( $_ ); - if( length $name >= $fileNameMax ) { - close( INFO ); - deleteTemp(); - die "file name length must be smaller than $fileNameMax. : $_\n"; - } - my $data = pack( "a$fileNameMax", $name ); - syswrite( INFO, $data, $fileNameMax ); - - # k - # SDKcompBLZ.exe͈oO邽߃[JɏCłĂ - my $compfile = "$_.comp"; - system ("${compprog} $compoption $_ -o $compfile"); - - # pfBȌo - #syswrite( INFO, pack( "x$padLen") ); - - # kt@Co(ƂƂpadding) - $data = pack( "L", -s $compfile ); - syswrite( INFO, $data, 4 ); - - # t@CItZbg̏o - $data = pack( "L", $offset ); - syswrite( INFO, $data, 4 ); - - # t@C̏o - $data = pack( "L", -s $_ ); - syswrite( INFO, $data, 4 ); - - # t@CSHA1nbV̏o - { - my $digest; - #system ("openssl dgst -sha1 -binary -out $digestFile $_"); - system ("openssl dgst -sha1 -binary -out $digestFile $compfile"); # k̃t@CɃnbV‚ - open DIGEST, $digestFile or die; - binmode DIGEST; - sysread( DIGEST, $digest, $sha1Len ); - close DIGEST; - syswrite( INFO, $digest, $sha1Len ); - } - - printf "%s\t0x%08x\t0x%08x\t0x%08x\n", $_, $offset, -s $_, -s $compfile; - - # ItZbgZ - #$offset += -s $_; - $offset += -s $compfile; - if( ( $offset % 32 ) > 0 ) { $offset += 32 - ( $offset % 32 ); } - } - close INFO; - printf "---------------------------------------------------------------\n"; -} - -# wb_̏o -{ - # timestampLen = 0x08; - # elementNumLen = 0x02; - my $padLen = 0x06; - my $sha1Len = 0x14; - - open HEADER, ">$headerFile" or die; - binmode HEADER; - - # ^CX^v̏o -# my $timestamp = strftime "%y%m%d%H", localtime; - my $timestamp = $ARGV[ 0 ]; - printf "timestamp = %s\n", $timestamp; - syswrite( HEADER, pack( "N", unpack( "L", pack( "H8", $timestamp ) ) ) ); - - # vf̏o - syswrite( HEADER, pack( "S", $num ) ); - - # pfBȌo - syswrite( HEADER, pack( "x$padLen") ); - - # e[uSHA1nbV̏o - { - my $digest; - system ("openssl dgst -sha1 -binary -out $digestFile $infoFile"); - open DIGEST, $digestFile or die; - binmode DIGEST; - sysread( DIGEST, $digest, $sha1Len ); - close DIGEST; - syswrite( HEADER, $digest, $sha1Len ); - } - close HEADER; -} - -# ‹ϐT[` -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWL_IPL_RED_PRIVATE_ROOT/s) { - $KEYROOT = $ENV{$_}; - } -} -if (!$KEYROOT) { - deleteTemp(); - die "No TWL_IPL_RED_PRIVATE_ROOT is found.\n"; -} - -# wb_ւ̏t -{ - system ( "openssl dgst -sha1 -binary -out $digestFile $headerFile" ); - system ( "openssl rsautl -sign -in $digestFile -inkey $KEYROOT/keys/rsa/private_sharedFont.der -keyform DER -out $signFile" ); - system ( "cat $signFile $headerFile >$tempFile" ); - system ( "cat $tempFile $infoFile >$outFile" ); - deleteTemp(); -} - - -# tHg̏o -{ - open FONTTABLE, ">>$outFile" or die; - binmode FONTTABLE; - - { - # pfBOo - my $fileLen = -s $outFile; - my $padNum = ( $fileLen % 32 ) ? ( 32 - ( $fileLen % 32 ) ) : 0; - my $padding = pack( "x$padNum" ); - syswrite( FONTTABLE, $padding, $padNum ); - } - - foreach ( @files ) { - # NULLw莞̓XLbv - if( "NULL" eq basename( $_ ) ) { - next; - } - - # tHgo - #my $fileLen = -s $_; - #open TEST, $_ or die; - my $compfile = "$_.comp"; # kt@Co - $fileLen = -s $compfile; - open TEST, $compfile or die; - binmode TEST; - sysread ( TEST, $buffer, $fileLen ); - close TEST; - syswrite( FONTTABLE, $buffer, $fileLen ); - - # pfBOo - my $padNum = ( $fileLen % 32 ) ? ( 32 - ( $fileLen % 32 ) ) : 0; - my $padding = pack( "x$padNum" ); - syswrite( FONTTABLE, $padding, $padNum ); - - # kt@C폜 - system ("rm -rf $compfile"); - } - close FONTTABLE; -} diff --git a/build/tests/compressSharedFontLoad/compSharedFont/makeboot.bat b/build/tests/compressSharedFontLoad/compSharedFont/makeboot.bat deleted file mode 100644 index 2ec4818b..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/makeboot.bat +++ /dev/null @@ -1,18 +0,0 @@ -rem -rem ***** SDNt@C쐬c[ ***** -rem -rem sdmc_launcher_writer.gcd Nt@CƂ menu.srl 󂯕tȂ̂ -rem Ƃė^t@C menu.srl ƂăRs[ -rem - -if "%1" equ "" ( - echo s܂B - echo fBNgƃhbOAhhbvĂB - echo: - goto end -) - -set progdir=%~dp0 - -del %progdir%\menu.srl -copy %1 %progdir%\menu.srl diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/@ b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/@ deleted file mode 100644 index ae91d2ff..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/@ +++ /dev/null @@ -1 +0,0 @@ -NINTENDO PRIVATE diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/Makefile b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/Makefile deleted file mode 100644 index cb219807..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - build - tools - ntrcomp -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -TARGET_PLATFORM = NITRO - -export TWLSDK_PLATFORM = NITRO - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -SUBDIRS += gcc - -include $(TWLSDK_ROOT)/build/buildtools/modulerules.x86 - diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/Makefile.BAK b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/Makefile.BAK deleted file mode 100644 index 5d41f479..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/Makefile.BAK +++ /dev/null @@ -1,25 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - build - tools - ntrcomp -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -TARGET_PLATFORM = NITRO - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -SUBDIRS += gcc - -include $(TWLSDK_ROOT)/build/buildtools/modulerules.x86 - diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/gcc/Makefile b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/gcc/Makefile deleted file mode 100644 index 981c2ad2..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/gcc/Makefile +++ /dev/null @@ -1,59 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - build - tools - ntrcomp - gcc -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -TARGET_PLATFORM = NITRO - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -OBJECTS = ntcompress_main.o ntcompress_test.o nitroCompLib.o multipleCompLib.o rangeCoder.o - -WIN32 ?= 1 - -ifneq ($(WIN32),0) -TARGETS = ntrcomp.exe -CC_X86 := gcc -mno-cygwin -else -TARGETS = ntrcomp -CC_X86 := gcc -endif - -LDIRT_CLEAN = $(OBJECTS) $(TARGETS) - -#INSTALL_DIR = $(NITRO_INSTALL_TOOLSDIR)/bin -#INSTALL_TARGETS = $(TARGETS) - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(OBJECTS) - $(CC_X86) $+ -o $@ - -ntcompress_main.o: ../src/ntcompress_main.c ../src/nitroCompLib.h - $(CC_X86) -c $< -o $@ -ntcompress_test.o: ../src/ntcompress_test.c ../src/nitroCompLib.h - $(CC_X86) -c $< -o $@ -nitroCompLib.o: ../src/nitroCompLib.c ../src/nitroCompLib.h - $(CC_X86) -c $< -o $@ -multipleCompLib.o: ../src/multipleCompLib.c ../src/multipleCompLib.h - $(CC_X86) -c $< -o $@ -rangeCoder.o: ../src/rangeCoder.c ../src/rangeCoder.h - $(CC_X86) -c $< -o $@ - -include $(TWLSDK_ROOT)/build/buildtools/modulerules.x86 - diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/gcc/Makefile.BAK b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/gcc/Makefile.BAK deleted file mode 100644 index c1cde1a4..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/gcc/Makefile.BAK +++ /dev/null @@ -1,59 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - build - tools - ntrcomp - gcc -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -TARGET_PLATFORM = NITRO - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -OBJECTS = ntcompress_main.o ntcompress_test.o nitroCompLib.o multipleCompLib.o rangeCoder.o - -WIN32 ?= 1 - -ifneq ($(WIN32),0) -TARGETS = ntrcomp.exe -CC_X86 := gcc -mno-cygwin -else -TARGETS = ntrcomp -CC_X86 := gcc -endif - -LDIRT_CLEAN = $(OBJECTS) $(TARGETS) - -INSTALL_DIR = $(NITRO_INSTALL_TOOLSDIR)/bin -INSTALL_TARGETS = $(TARGETS) - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(OBJECTS) - $(CC_X86) $+ -o $@ - -ntcompress_main.o: ../src/ntcompress_main.c ../src/nitroCompLib.h - $(CC_X86) -c $< -o $@ -ntcompress_test.o: ../src/ntcompress_test.c ../src/nitroCompLib.h - $(CC_X86) -c $< -o $@ -nitroCompLib.o: ../src/nitroCompLib.c ../src/nitroCompLib.h - $(CC_X86) -c $< -o $@ -multipleCompLib.o: ../src/multipleCompLib.c ../src/multipleCompLib.h - $(CC_X86) -c $< -o $@ -rangeCoder.o: ../src/rangeCoder.c ../src/rangeCoder.h - $(CC_X86) -c $< -o $@ - -include $(TWLSDK_ROOT)/build/buildtools/modulerules.x86 - diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/multipleCompLib.c b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/multipleCompLib.c deleted file mode 100644 index fcb44e89..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/multipleCompLib.c +++ /dev/null @@ -1,2494 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NinTendo Compress tool - File: multipleCompLib.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "multipleCompLib.h" - -#undef _DEBUG -#ifdef _DEBUG - -#endif - -#define LH_CODE_HEADER (0x40) -#define LRC_CODE_HEADER (0x50) - -#define BLEND_COMP_FLAG 1 - -#define LH_ENC_OFFSET_WIDTH /* ̐ݒ肪LȏꍇɂoffsetlŜł͂Ȃoffsetbit𕄍 */ - -#if !defined(LH_ENC_OFFSET_WIDTH) - #define LH_OFFSET_BITS 12 - #define LH_OFFSET_TABLE_BITS LH_OFFSET_BITS -#else // if defined(LH_ENC_OFFSET_WIDTH) - #define LH_OFFSET_BITS 15 - #define LH_OFFSET_TABLE_BITS 5 -#endif - -#define LENGTH_BITS (8 + BLEND_COMP_FLAG) -#define OFFSET_SIZE_MAX (1 << 15) - -#define REVERSE_SEARCH - -typedef struct -{ - u16 WindowPos; // ݂̃XCh̐擪ʒu - u16 WindowLen; // ݂̃XCh̃TCY - - s16 LZOffsetTable[ OFFSET_SIZE_MAX ]; // ItZbgf[^̃e[u - #ifdef REVERSE_SEARCH - s16 LZRevOffsetTable[ OFFSET_SIZE_MAX ]; // ItZbgf[^̋te[u - #endif - s16 LZByteTable[ 256 ]; // f[^̐擪e[u - s16 LZEndTable [ 256 ]; // f[^̏I[e[u - u8 OffsetBits; // ItZbg\ׂ̃rbg -} LZCompressInfo; - -static LZCompressInfo gLZWork; - -INLINE u32 -RoundUp( u32 value, u32 base ) -{ - return (value + (base - 1)) & ~(base - 1); -} - -/*---------------------------------------------------------------------------* - Name: LZInitTable - Description: - Arguments: work - Returns: None. - *---------------------------------------------------------------------------*/ -static void -LZInitTable( LZCompressInfo* info ) -{ - u16 i; - - for ( i = 0; i < 256; i++ ) - { - info->LZByteTable[i] = -1; - info->LZEndTable[i] = -1; - } - info->WindowPos = 0; - info->WindowLen = 0; -} - -/*---------------------------------------------------------------------------* - Name: SlideByte - Description: 1oCgXCh - Arguments: *srcp - work - Returns: None. - *---------------------------------------------------------------------------*/ -static void -SlideByte( LZCompressInfo* info, const u8 *srcp ) -{ - s16 offset; - u8 in_data = *srcp; - u16 insert_offset; - -#if defined( REVERSE_SEARCH ) // Ttɂ(Vf[^D) - s16 *const LZByteTable = info->LZEndTable; - s16 *const LZEndTable = info->LZByteTable; - s16 *const LZOffsetTable = info->LZRevOffsetTable; - s16 *const LZRevOffsetTable = info->LZOffsetTable; -#else - s16 *const LZByteTable = info->LZByteTable; - s16 *const LZEndTable = info->LZEndTable; - s16 *const LZOffsetTable = info->LZOffsetTable; -#endif - const u16 windowPos = info->WindowPos; - const u16 windowLen = info->WindowLen; - const u32 OFFSET_SIZE = (1 << info->OffsetBits); - - if ( windowLen == OFFSET_SIZE ) - { - u8 out_data = *(srcp - OFFSET_SIZE); - if ((LZByteTable[out_data] = LZOffsetTable[LZByteTable[out_data]]) == -1) - { - LZEndTable[out_data] = -1; - } - else - { - #if defined( REVERSE_SEARCH ) - LZRevOffsetTable[LZByteTable[out_data]] = -1; - #endif - } - insert_offset = windowPos; - } - else - { - insert_offset = windowLen; - } - - offset = LZEndTable[in_data]; - if (offset == -1) - { - LZByteTable[in_data] = insert_offset; - #if defined( REVERSE_SEARCH ) - LZRevOffsetTable[insert_offset] = -1; - #endif - } - else - { - #if defined( REVERSE_SEARCH ) - LZRevOffsetTable[insert_offset] = offset; - #endif - LZOffsetTable[offset] = insert_offset; - } - LZEndTable[in_data] = insert_offset; - LZOffsetTable[insert_offset] = -1; - - if (windowLen == OFFSET_SIZE) - { - info->WindowPos = (u16)((windowPos + 1) % OFFSET_SIZE); - } - else - { - info->WindowLen++; - } -} - -/*---------------------------------------------------------------------------* - Name: LZSlide - Description: - Arguments: *srcp - n - Returns: None. - *---------------------------------------------------------------------------*/ -static void -LZSlide( LZCompressInfo* info, const u8 *srcp, u32 n ) -{ - u32 i; - - for (i = 0; i < n; i++) - { - SlideByte(info, srcp++); - } -} - -//-------------------------------------------------------- -// LZ77kŃXCh̒Œv܂B -// Arguments: startp f[^̊Jnʒu|C^ -// nextp Jnf[^̃|C^ -// remainSize cf[^TCY -// offset vItZbgi[̈ւ̃|C^ -// Return : v񂪌‚ꍇ TRUE -// ‚Ȃꍇ FALSE -//-------------------------------------------------------- -static u16 -SearchLZ( const LZCompressInfo* info, const u8 *nextp, u32 remainSize, u16 *offset, u16 minOffset, u32 maxLength ) -{ - const u8 *searchp; - const u8 *headp, *searchHeadp; - u16 currOffset; - u16 currLength = 2; - u16 tmpLength; - s32 w_offset; - const s16 * const LZOffsetTable = info->LZOffsetTable; - const u16 windowPos = info->WindowPos; - const u16 windowLen = info->WindowLen; - - if (remainSize < 3) - { - return 0; - } - - w_offset = info->LZByteTable[ *nextp ]; - - while (w_offset != -1) - { - if (w_offset < windowPos) - { - searchp = nextp - windowPos + w_offset; - } - else - { - searchp = nextp - windowLen - windowPos + w_offset; - } - - /* ĂǂA͂ɍ */ - if (*(searchp + 1) != *(nextp + 1) || *(searchp + 2) != *(nextp + 2)) - { - w_offset = LZOffsetTable[ w_offset ]; - continue; - } - - if (nextp - searchp < minOffset) - { - // VRAM2oCgANZXȂ̂ (VRAMf[^ǂݏoꍇ邽)A - // Ώۃf[^2oCgÕf[^ɂȂ΂ȂȂB - // - // ItZbg12rbgŊi[邽߁A4096ȉ - #if defined( REVERSE_SEARCH ) - w_offset = LZOffsetTable[ w_offset ]; - continue; - #else - break; - #endif - } - tmpLength = 3; - searchHeadp = searchp + 3; - headp = nextp + 3; - - while (((u32)(headp - nextp) < remainSize) && (*headp == *searchHeadp)) - { - headp++; - searchHeadp++; - tmpLength++; - - // f[^8rbgŊi[邽߁A258ȉ (3̉ʂ͂) - if (tmpLength == maxLength) - { - break; - } - } - if (tmpLength > currLength) - { - // ő咷ItZbgXV - currLength = tmpLength; - currOffset = (u16)((u32)nextp - (u32)searchp); - if (currLength == maxLength) - { - // vőȂ̂ŁAIB - break; - } - } - w_offset = LZOffsetTable[w_offset]; - } - - if (currLength < 3) - { - return 0; - } - *offset = currOffset; - return currLength; -} - -/*---------------------------------------------------------------------------* - Name: LZCompWrite - - Description: - - Arguments: *srcp - size - *dstp - lzSearchOffset - - Returns: - *---------------------------------------------------------------------------*/ -static u32 -LZCompWrite_( const u8 *srcp, s32 size, u8 *dstp, u8 lzSearchOffset, u8 offsetBits ) -{ - u32 LZDstCount = 0; // kf[^̃oCg - u8 LZCompFlags; // k̗LtOn - u8 *LZCompFlagsp; // LZCompFlags i[郁̈|Cg - u16 lastOffset; // vf[^܂ł̃ItZbg (̎_ł̍Œvf[^) - u16 lastLength; // vf[^ (̎_ł̍Œvf[^) - u8 i; - const u32 MAX_LENGTH = 0xFF + 3; - - LZInitTable( &gLZWork ); - gLZWork.OffsetBits = offsetBits; - - while ( size > 0 ) - { - LZCompFlags = 0; - LZCompFlagsp = dstp++; // tOn̊i[ - LZDstCount++; - - // tOn8rbgf[^ƂĊi[邽߁A8񃋁[v - for ( i = 0; i < 8; i++ ) - { - LZCompFlags <<= 1; // (i=0) ͓ɈӖ͂Ȃ - if (size <= 0) - { - // I[ɗꍇ̓tOŌ܂ŃVtgĂI - continue; - } - - if ( (lastLength = SearchLZ(&gLZWork, srcp, size, &lastOffset, lzSearchOffset, MAX_LENGTH)) != 0 ) - { - // k”\ȏꍇ̓tO𗧂Ă - LZCompFlags |= 0x1; - - // ItZbg͏4rbgƉ8rbgɕĊi[ - *dstp++ = (u8)(lastLength - 3); - *dstp++ = (u8)((lastOffset - 1) & 0xff); // gGfBA - *dstp++ = (u8)((lastOffset - 1) >> 8); - LZDstCount += 3; - LZSlide( &gLZWork, srcp, lastLength ); - srcp += lastLength; - size -= lastLength; - } - else - { - // kȂ - LZSlide( &gLZWork, srcp, 1 ); - *dstp++ = *srcp++; - size--; - LZDstCount++; - } - } // 8񃋁[vI - *LZCompFlagsp = LZCompFlags; // tOni[ - } - - // 4oCgEACg - // ACgpf[^0 ̓f[^TCYɊ܂߂Ȃ - i = 0; - while ((LZDstCount + i) & 0x3) - { - *dstp++ = 0; - i++; - } - - return LZDstCount; -} - - -typedef struct -{ - u16 No; // f[^No - s16 PaNo; // eNo - u32 Freq; // opx - s16 ChNo[2]; // qNo (0: C 1: E) - u16 PaDepth; // em[h̐[ - u16 LeafDepth; // t܂ł̐[ - u32 HuffCode; // nt} - u16 Bit; // m[h̃rbgf[^ - u16 HWord; // eԐߓ_ɂāA̐ߓ_[gƂ镔؂ HuffTree i[ɕKvȃ -} -HuffData; - -typedef struct -{ - u8 leftOffsetNeed; // ̎qߓ_ւ̃ItZbgKvȂ1 - u8 rightOffsetNeed; // E̎qߓ_ւ̃ItZbgKvȂ1 - u16 leftNodeNo; // ̎qߓ_No - u16 rightNodeNo; // E̎qߓ_No -} -HuffTreeCtrlData; - -// nt}[Nobt@\ -typedef struct -{ - HuffData* huffTable; // huffTable[ 512 ]; 12288B - u16* huffTree; // huffTree[ 256 * 2 ]; 512B - HuffTreeCtrlData* huffTreeCtrl; // huffTreeCtrl[ 256 ]; 1536B - u16 huffTreeTop; // - u8 bitSize; // - u8 padding_[1]; // -} -HuffInfo; // v 14340B - -static void HuffMakeHuffTree ( HuffInfo* info, u16 rootNo ); -static void HuffMakeSubsetHuffTree ( HuffInfo* info, u16 huffTreeNo, BOOL rightNodeFlag ); -static BOOL HuffRemainingNodeCanSetOffset( HuffInfo* info, u16 costHWord ); -static void HuffSetOneNodeOffset ( HuffInfo* info, u16 huffTreeNo, BOOL rightNodeFlag ); -static u16 HuffMakeNode ( HuffData* table, u8 bitSize ); - -static void HuffAddParentDepthToTable( HuffData *table, u16 leftNo, u16 rightNo ); -static void HuffAddCodeToTable ( HuffData* table, u16 nodeNo, u32 paHuffCode ); -static u16 HuffAddCountHWordToTable ( HuffData *table, u16 nodeNo ); - - -// rbgXg[ -typedef struct -{ - u8* dstp; // o͐|C^ - u32 cnt; // o̓TCY - u32 stream; // JgXg[f[^ - u32 stream_len; // Xg[̒ -} -BitStream; - -static void -BitStream_Init( BitStream* context, u8* dstp ) -{ - context->dstp = dstp; - context->cnt = 0; - context->stream = 0; - context->stream_len = 0; -} - -static void -BitStream_Write( BitStream* context, u32 data, u32 width ) -{ - u32 i; - u32 stream = context->stream; - u32 cnt = context->cnt; - u32 stream_len = context->stream_len; - u32 mask = (1 << width) - 1; - - if ( width == 0 ) - { - return; - } - - stream = (stream << width) | ( data & mask ); - stream_len += width; - - for ( i = 0; i < stream_len / 8; i++ ) - { - context->dstp[ cnt++ ] = (u8)( stream >> ( stream_len - ( i + 1 ) * 8 ) ); - } - stream_len %= 8; - - context->stream = stream; - context->cnt = cnt; - context->stream_len = stream_len; -} - -static void -BitStream_Terminate( BitStream* context, u32 align ) -{ - u32 stream = context->stream; - u32 cnt = context->cnt; - u32 stream_len = context->stream_len; - - if ( stream_len > 0 ) - { - stream <<= 8 - stream_len; - - if ( context->stream_len != 0 ) - { - context->dstp[ cnt++ ] = (u8)( stream ); - } - } - - while ( cnt % align ) - { - context->dstp[ cnt++ ] = 0; - } - context->cnt = cnt; - context->stream_len = 0; -} - - - - -/*---------------------------------------------------------------------------* - Name: HuffInitTable - Description: - Arguments: info - bitSize - Returns: None. - *---------------------------------------------------------------------------*/ -static void -HuffInitTable( HuffInfo* info, u8 bitSize ) -{ - u32 tableSize = (1 << bitSize); - u32 i; - - info->huffTable = (HuffData*)malloc( sizeof(HuffData) * tableSize * 2 ); - info->huffTree = (u16*)malloc( sizeof(u16) * tableSize * 2 ); - info->huffTreeCtrl = (HuffTreeCtrlData*)malloc( sizeof(HuffTreeCtrlData) * tableSize ); - - info->huffTreeTop = 1; - info->bitSize = bitSize; - - // huffTable - { - HuffData* table = info->huffTable; - const HuffData HUFF_TABLE_INIT_DATA = { 0, 0, 0, {-1, -1}, 0, 0, 0, 0, 0 }; - for ( i = 0; i < tableSize * 2; i++ ) - { - table[ i ] = HUFF_TABLE_INIT_DATA; - table[ i ].No = (u16)i; - } - } - - // huffTree, huffTreeCtrl - { - const HuffTreeCtrlData HUFF_TREE_CTRL_INIT_DATA = { 1, 1, 0, 0 }; - u16* huffTree = info->huffTree; - HuffTreeCtrlData* huffTreeCtrl = info->huffTreeCtrl; - - for ( i = 0; i < tableSize; i++ ) - { - huffTree[ i * 2 ] = 0; - huffTree[ i * 2 + 1 ] = 0; - huffTreeCtrl[ i ] = HUFF_TREE_CTRL_INIT_DATA; - } - } -} - - -/*---------------------------------------------------------------------------* - Name: LZCountHuffData - Description: - Arguments: srcp - srcSize - info8 - info16 - Returns: None. - *---------------------------------------------------------------------------*/ -static void -LZCountHuffData( const u8* srcp, u32 srcSize, HuffInfo* info8, HuffInfo* info16 ) -{ - u32 srcCnt = 0; - u32 i; - - while ( srcCnt < srcSize ) - { - u8 compFlags = srcp[ srcCnt++ ]; // k̗LtO - for ( i = 0; i < 8; i++ ) - { - if ( compFlags & 0x80 ) // kĂAlength:8, offset:16 - { - u8 length = srcp[ srcCnt++ ]; - u16 offset = srcp[ srcCnt++ ]; // gGfBA - offset |= (srcp[ srcCnt++ ] << 8); - - #if BLEND_COMP_FLAG - info8->huffTable[ length | 0x100 ].Freq++; - #else - info8->huffTable[ length ].Freq++; - #endif - #if !defined(LH_ENC_OFFSET_WIDTH) - info16->huffTable[ offset ].Freq++; - #else - { - u32 offset_bit = 0; - while ( offset != 0 ) - { - ++offset_bit; - offset >>= 1; - } - info16->huffTable[ offset_bit ].Freq++; - } - #endif - } - else - { - u8 data = srcp[ srcCnt++ ]; - info8->huffTable[ data ].Freq++; - } - compFlags <<= 1; - if ( srcCnt >= srcSize ) - { - break; - } - } - } -} - - -/*---------------------------------------------------------------------------* - Name: ConstructHuffTree - Description: - Arguments: info - bitSize - Returns: None. - *---------------------------------------------------------------------------*/ -static void -ConstructHuffTree( HuffInfo* info, u8 bitSize ) -{ - HuffData* table = info->huffTable; - u16 rootNo; - - // opxm[h\z - rootNo = HuffMakeNode( table, bitSize ); - - // nt}R[h (table[i].HuffCode ) - HuffAddCodeToTable( table, rootNo, 0x00 ); // PaDepth̃rbgAHuffCode ̉ʃrbg}XN̂nt}R[h - - // eԐߓ_ɂāA̐ߓ_[gƂ镔؂ huffTree i[ɕKvȃʂ̌vZ - HuffAddCountHWordToTable( table, rootNo ); - - HuffMakeHuffTree( info, rootNo ); - info->huffTreeTop--; -} - -//----------------------------------------------------------------------- -// nt}R[h\쐬 -//----------------------------------------------------------------------- -static void -HuffMakeHuffTree( HuffInfo* info, u16 rootNo ) -{ - s16 i; - s16 costHWord, tmpCostHWord; // ؂̃R[h\쐬Ȃ̃RXg ől̐ߓ_̕؃R[h\ - s16 costOffsetNeed, tmpCostOffsetNeed; - s16 costMaxKey; // RXgŏ̐ߓ_ huffTreeBuf.huffTree 肷邽߂̏ - BOOL costMaxRightFlag; - u16 offsetNeedNum; - BOOL tmpRightFlag; - const u32 MAX_COST = 1 << (info->bitSize - 2); - - info->huffTreeTop = 1; - costOffsetNeed = 0; - - info->huffTreeCtrl[0].leftOffsetNeed = 0; // gpȂ (e[uTCYƂĎgp) - info->huffTreeCtrl[0].rightNodeNo = rootNo; - - while ( 1 ) // return ܂ - { - // ItZbgݒ肷Kv̂m[ȟvZ - offsetNeedNum = 0; - for ( i = 0; i < info->huffTreeTop; i++ ) - { - if ( info->huffTreeCtrl[ i ].leftOffsetNeed ) - { - offsetNeedNum++; - } - if ( info->huffTreeCtrl[ i ].rightOffsetNeed ) - { - offsetNeedNum++; - } - } - - // őRXg̐ߓ_ - costHWord = -1; - costMaxKey = -1; - tmpRightFlag = 0; - - for ( i = 0; i < info->huffTreeTop; i++ ) - { - tmpCostOffsetNeed = (u16)( info->huffTreeTop - i ); - - // ̎qߓ_̃RXg] - if ( info->huffTreeCtrl[i].leftOffsetNeed ) - { - tmpCostHWord = (s16)info->huffTable[ info->huffTreeCtrl[i].leftNodeNo ].HWord; - - if ( (u32)(tmpCostHWord + offsetNeedNum) > MAX_COST ) - { - goto leftCostEvaluationEnd; - } - if ( ! HuffRemainingNodeCanSetOffset( info, (u16)tmpCostHWord ) ) - { - goto leftCostEvaluationEnd; - } - if ( tmpCostHWord > costHWord ) - { - costMaxKey = i; - costMaxRightFlag = 0; - } - else if ( (tmpCostHWord == costHWord) && (tmpCostOffsetNeed > costOffsetNeed) ) - { - costMaxKey = i; - costMaxRightFlag = 0; - } - } -leftCostEvaluationEnd:{} - - if ( info->huffTreeCtrl[i].rightOffsetNeed ) - { - tmpCostHWord = (s16)info->huffTable[ info->huffTreeCtrl[i].rightNodeNo ].HWord; - - if ( (u32)(tmpCostHWord + offsetNeedNum) > MAX_COST ) - { - goto rightCostEvaluationEnd; - } - if ( ! HuffRemainingNodeCanSetOffset( info, (u16)tmpCostHWord ) ) - { - goto rightCostEvaluationEnd; - } - if ( tmpCostHWord > costHWord ) - { - costMaxKey = i; - costMaxRightFlag = 1; - } - else if ( (tmpCostHWord == costHWord) && (tmpCostOffsetNeed > costOffsetNeed) ) - { - costMaxKey = i; - costMaxRightFlag = 1; - } - } -rightCostEvaluationEnd:{} - } - - // ؂܂܂ huffTree Ɋi[ - if ( costMaxKey >= 0 ) - { - HuffMakeSubsetHuffTree( info, (u16)costMaxKey, costMaxRightFlag); - goto nextTreeMaking; - } - else - { - // KvItZbgő̃m[h - for ( i = 0; i < info->huffTreeTop; i++ ) - { - u16 tmp = 0; - tmpRightFlag = 0; - if ( info->huffTreeCtrl[i].leftOffsetNeed ) - { - tmp = info->huffTable[ info->huffTreeCtrl[i].leftNodeNo ].HWord; - } - if ( info->huffTreeCtrl[i].rightOffsetNeed ) - { - if ( info->huffTable[ info->huffTreeCtrl[i].rightNodeNo ].HWord > tmp ) - { - tmpRightFlag = 1; - } - } - if ( (tmp != 0) || (tmpRightFlag) ) - { - HuffSetOneNodeOffset( info, (u16)i, tmpRightFlag ); - goto nextTreeMaking; - } - } - } - return; -nextTreeMaking:{} - } -} - -//----------------------------------------------------------------------- -// ؂܂܂ huffTree Ɋi[ -//----------------------------------------------------------------------- -static void -HuffMakeSubsetHuffTree( HuffInfo* info, u16 huffTreeNo, BOOL rightNodeFlag ) -{ - u16 i; - - i = info->huffTreeTop; - HuffSetOneNodeOffset( info, huffTreeNo, rightNodeFlag ); - - if ( rightNodeFlag ) - { - info->huffTreeCtrl[ huffTreeNo ].rightOffsetNeed = 0; - } - else - { - info->huffTreeCtrl[ huffTreeNo ].leftOffsetNeed = 0; - } - - while ( i < info->huffTreeTop ) - { - if ( info->huffTreeCtrl[ i ].leftOffsetNeed ) - { - HuffSetOneNodeOffset( info, i, 0 ); - info->huffTreeCtrl[ i ].leftOffsetNeed = 0; - } - if ( info->huffTreeCtrl[ i ].rightOffsetNeed ) - { - HuffSetOneNodeOffset( info, i, 1 ); - info->huffTreeCtrl[ i ].rightOffsetNeed = 0; - } - i++; - } -} - -//----------------------------------------------------------------------- -// ^ꂽf[^ʂ̕؂WJĂ huffTree \zɎxႪȂׂ -//----------------------------------------------------------------------- -static BOOL -HuffRemainingNodeCanSetOffset( HuffInfo* info, u16 costHWord ) -{ - u16 i; - s16 capacity; - const u32 MAX_COST = 1 << (info->bitSize - 2); - - capacity = (s16)( MAX_COST - costHWord ); - - // ItZbg i قǑ傫̂ŁA\[gAi = 0 -> huffTreeTop ŌvZ΂悢 - for ( i = 0; i < info->huffTreeTop; i++ ) - { - if ( info->huffTreeCtrl[i].leftOffsetNeed ) - { - if ( (info->huffTreeTop - i) <= capacity ) - { - capacity--; - } - else - { - return 0; - } - } - if ( info->huffTreeCtrl[i].rightOffsetNeed ) - { - if ( (info->huffTreeTop - i) <= capacity ) - { - capacity--; - } - else - { - return 0; - } - } - } - - return 1; -} - - -/*---------------------------------------------------------------------------* - Name: HuffSetOneNodeOffset - Description: 1ߓ_Ant}R[h\쐬 - Arguments: *table nt}e[u - huffTreeNo - rightNodeFlag Ẽm[hł邩ǂ̃tO - Returns: None. - *---------------------------------------------------------------------------*/ -static void -HuffSetOneNodeOffset( HuffInfo* info, u16 huffTreeNo, BOOL rightNodeFlag) -{ - u16 nodeNo; - u16 offsetData = 0; - - HuffData* huffTable = info->huffTable; - u16* huffTree = info->huffTree; - HuffTreeCtrlData* huffTreeCtrl = info->huffTreeCtrl; - u16 huffTreeTop = info->huffTreeTop; - - if (rightNodeFlag) - { - nodeNo = huffTreeCtrl[ huffTreeNo ].rightNodeNo; - huffTreeCtrl[ huffTreeNo ].rightOffsetNeed = 0; - } - else - { - nodeNo = huffTreeCtrl[ huffTreeNo ].leftNodeNo; - huffTreeCtrl [huffTreeNo ].leftOffsetNeed = 0; - } - - // ̎qߓ_ - if ( huffTable[ huffTable[nodeNo].ChNo[0] ].LeafDepth == 0) - { - offsetData |= 0x8000; - huffTree[ huffTreeTop * 2 + 0 ] = (u16)huffTable[ nodeNo ].ChNo[0]; - huffTreeCtrl[ huffTreeTop ].leftNodeNo = (u16)huffTable[ nodeNo ].ChNo[0]; - huffTreeCtrl[ huffTreeTop ].leftOffsetNeed = 0; // ItZbg͕KvȂȂ - } - else - { - huffTreeCtrl[ huffTreeTop ].leftNodeNo = (u16)huffTable[ nodeNo ].ChNo[0]; // ItZbg͕Kv - } - - // E̎qߓ_ - if ( huffTable[ huffTable[ nodeNo ].ChNo[1] ].LeafDepth == 0 ) - { - offsetData |= 0x4000; - huffTree[ huffTreeTop * 2 + 1 ] = (u16)huffTable[nodeNo].ChNo[1]; - huffTreeCtrl[ huffTreeTop ].rightNodeNo = (u16)huffTable[ nodeNo ].ChNo[1]; - huffTreeCtrl[ huffTreeTop ].rightOffsetNeed = 0; // ItZbg͕KvȂȂ - } - else - { - huffTreeCtrl[ huffTreeTop ].rightNodeNo = (u16)huffTable[ nodeNo ].ChNo[1]; // ItZbg͕Kv - } - - offsetData |= (u16)( huffTreeTop - huffTreeNo - 1 ); - huffTree[ huffTreeNo * 2 + (rightNodeFlag? 1 : 0) ] = offsetData; - - info->huffTreeTop++; -} - -/*---------------------------------------------------------------------------* - Name: HuffMakeNode - Description: opxm[hf[^\z - Arguments: table - Returns: None. - *---------------------------------------------------------------------------*/ -static u16 -HuffMakeNode( HuffData* table, u8 bitSize ) -{ - u16 dataNum = ( 1 << bitSize ); - u16 tableTop = (u16)dataNum; // e[u쐬́Ae[ugbvNo - - u32 i; - s32 leftNo, rightNo; // 2؍쐬̃m[hNo - u16 rootNo; // 񕪖؂̃[gNo - - leftNo = -1; - rightNo = -1; - while ( 1 ) - { - // Freq̏ؒ_2’T 1‚͕K‚͂ - // q_()̒T - for ( i = 0; i < tableTop; i++ ) - { - if ( ( table[i].Freq == 0 ) || - ( table[i].PaNo != 0 ) ) - { - continue; - } - - if ( leftNo < 0 ) - { - leftNo = i; - } - else if ( table[i].Freq < table[ leftNo ].Freq ) - { - leftNo = i; - } - } - - // q_(E)̒T - for ( i = 0; i < tableTop; i++ ) - { - if ( ( table[i].Freq == 0 ) || - ( table[i].PaNo != 0 ) || - ( i == leftNo ) ) - { - continue; - } - - if ( rightNo < 0 ) - { - rightNo = i; - } - else if ( table[i].Freq < table[ rightNo ].Freq ) - { - rightNo = i; - } - } - - // 1‚ȂAe[u쐬I - if ( rightNo < 0 ) - { - // lނȂ݂Ȃꍇɂ01ǂlƂȂm[hP쐬 - if ( tableTop == dataNum ) - { - table[ tableTop ].Freq = table[ leftNo ].Freq; - table[ tableTop ].ChNo[0] = (s16)leftNo; - table[ tableTop ].ChNo[1] = (s16)leftNo; - table[ tableTop ].LeafDepth = 1; - table[ leftNo ].PaNo = (s16)tableTop; - table[ leftNo ].Bit = 0; - table[ leftNo ].PaDepth = 1; - } - else - { - tableTop--; - } - rootNo = tableTop; - return rootNo; - } - - // ؂ƉE؂𓝍钸_쐬 - table[ tableTop ].Freq = table[ leftNo ].Freq + table[ rightNo ].Freq; - table[ tableTop ].ChNo[0] = (s16)leftNo; - table[ tableTop ].ChNo[1] = (s16)rightNo; - if ( table[ leftNo ].LeafDepth > table[ rightNo ].LeafDepth ) - { - table[ tableTop ].LeafDepth = (u16)( table[ leftNo ].LeafDepth + 1 ); - } - else - { - table[ tableTop ].LeafDepth = (u16)( table[ rightNo ].LeafDepth + 1 ); - } - - table[ leftNo ].PaNo = table[ rightNo ].PaNo = (s16)( tableTop ); - table[ leftNo ].Bit = 0; - table[ rightNo ].Bit = 1; - - HuffAddParentDepthToTable( table, (u16)leftNo, (u16)rightNo ); - - tableTop++; - leftNo = rightNo = -1; - } -} - - -//----------------------------------------------------------------------- -// 2؍쐬ɁA؂𓝍ƂɁA؂̊e\m[h̐[{1 -//----------------------------------------------------------------------- -static void -HuffAddParentDepthToTable( HuffData *table, u16 leftNo, u16 rightNo ) -{ - table[ leftNo ].PaDepth++; - table[ rightNo ].PaDepth++; - - if ( table[ leftNo ].LeafDepth != 0 ) - { - HuffAddParentDepthToTable( table, (u16)table[ leftNo ].ChNo[0], (u16)table[ leftNo ].ChNo[1] ); - } - if ( table[ rightNo ].LeafDepth != 0 ) - { - HuffAddParentDepthToTable( table, (u16)table[ rightNo ].ChNo[0], (u16)table[ rightNo ].ChNo[1] ); - } -} - -//----------------------------------------------------------------------- -// nt}R[h -//----------------------------------------------------------------------- -static void -HuffAddCodeToTable( HuffData* table, u16 nodeNo, u32 paHuffCode ) -{ - table[ nodeNo ].HuffCode = (paHuffCode << 1) | table[ nodeNo ].Bit; - - if ( table[ nodeNo ].LeafDepth != 0 ) - { - HuffAddCodeToTable( table, (u16)table[ nodeNo ].ChNo[0], table[ nodeNo ].HuffCode ); - HuffAddCodeToTable( table, (u16)table[ nodeNo ].ChNo[1], table[ nodeNo ].HuffCode ); - } -} - - -//----------------------------------------------------------------------- -// ԃm[h huffTree 쐬ɕKvƂf[^ -//----------------------------------------------------------------------- -static u16 -HuffAddCountHWordToTable( HuffData *table, u16 nodeNo) -{ - u16 leftHWord, rightHWord; - - switch ( table[ nodeNo ].LeafDepth ) - { - case 0: - return 0; - case 1: - leftHWord = rightHWord = 0; - break; - default: - leftHWord = HuffAddCountHWordToTable( table, (u16)table[nodeNo].ChNo[0] ); - rightHWord = HuffAddCountHWordToTable( table, (u16)table[nodeNo].ChNo[1] ); - break; - } - - table[ nodeNo ].HWord = (u16)( leftHWord + rightHWord + 1 ); - return (u16)( leftHWord + rightHWord + 1 ); -} - - - -/*---------------------------------------------------------------------------* - Name: LZMakeHuffTree - Description: - Arguments: srcp - tree8 - tree16 - Returns: None. - *---------------------------------------------------------------------------*/ -static void -LZMakeHuffTree( const u8* srcp, u32 srcSize, HuffInfo* info8, HuffInfo* info16 ) -{ - HuffInitTable( info8, LENGTH_BITS ); - HuffInitTable( info16, LH_OFFSET_TABLE_BITS ); - - LZCountHuffData( srcp, srcSize, info8, info16 ); - - ConstructHuffTree( info8, LENGTH_BITS ); - ConstructHuffTree( info16, LH_OFFSET_TABLE_BITS ); -} - - -/*---------------------------------------------------------------------------* - Name: ExportHuffTree - Description: - Arguments: dstp - info - bitSize - Returns: - *---------------------------------------------------------------------------*/ -static u32 -ExportHuffTree( u8* dstp, HuffInfo* info, u8 bitSize ) -{ - BitStream stream; - u32 i; - u8* pSize; - u32 tblSize; - - BitStream_Init( &stream, dstp ); - - pSize = dstp; - BitStream_Write( &stream, 0, RoundUp( bitSize, 8 ) ); - - for ( i = 1; i < (u16)( (info->huffTreeTop + 1) * 2); i++ ) - { - u16 flags = (u16)( info->huffTree[ i ] & 0xC000 ); - u32 data = info->huffTree[ i ] | (flags >> (16 - bitSize)); - BitStream_Write( &stream, data, bitSize ); - } - BitStream_Terminate( &stream, 4 ); - - // e[uTCY1/4TCŸ֕ۑ - tblSize = (stream.cnt / 4) - 1; - if ( RoundUp( bitSize, 8 ) == 8 ) - { - if ( tblSize >= 0x100 ) - { - fprintf(stderr, "table size is over!\n"); - } - *pSize = (u8)( tblSize ); - } - else // RoundUp( bitSize, 8 ) == 16 ) - { - if ( tblSize >= 0x10000 ) - { - fprintf(stderr, "table size is over!\n"); - } - *(u16*)pSize = (u16)( tblSize ); - } - return stream.cnt; -} - - -/*---------------------------------------------------------------------------* - Name: ConvertHuff - Description: - Arguments: info - data - stream - Returns: None. - *---------------------------------------------------------------------------*/ -static void -ConvertHuff( HuffInfo* info, u16 data, BitStream* stream ) -{ - u16 width = info->huffTable[ data ].PaDepth; - u32 code = info->huffTable[ data ].HuffCode; - - BitStream_Write( stream, code, width ); -} - - -/*---------------------------------------------------------------------------* - Name: LZConvertHuffData - Description: - Arguments: srcp - tmpSize - dstp - info8 - info16 - Returns: - *---------------------------------------------------------------------------*/ -static u32 -LZConvertHuffData( const u8* srcp, u32 srcSize, u8* dstp, HuffInfo* info8, HuffInfo* info16 ) -{ - u32 srcCnt = 0; - u32 dstCnt = 0; - - BitStream stream; - - BitStream_Init( &stream, dstp ); - - while ( srcCnt < srcSize ) - { - u32 i; - u8 compFlags = srcp[ srcCnt++ ]; // k̗LtO - #if BLEND_COMP_FLAG - #else - BitStream_Write( &stream, compFlags, 8 ); - #endif - - for ( i = 0; i < 8; i++ ) - { - if ( compFlags & 0x80 ) // kĂAlength:8, offset:16 - { - u8 length = srcp[ srcCnt++ ]; - u16 offset = srcp[ srcCnt++ ]; // gGfBA - offset |= srcp[ srcCnt++ ] << 8; - - #if BLEND_COMP_FLAG - ConvertHuff( info8, length | 0x100, &stream ); - #else - ConvertHuff( info8, length, &stream ); - #endif - #if ! defined(LH_ENC_OFFSET_WIDTH) - ConvertHuff( info16, offset, &stream ); - #else - { - u16 offset_bit = 0; - u16 offset_tmp = offset; - while ( offset_tmp > 0 ) - { - offset_tmp >>= 1; - ++offset_bit; - } - ConvertHuff( info16, offset_bit, &stream ); - // offset0ł邱Ƃ͂Ȃ̂ŁAŏʂ̃rbg͏ȗ - BitStream_Write( &stream, offset & ~(1 << (offset_bit - 1)), offset_bit - 1 ); - } - #endif - } - else - { - u8 data = srcp[ srcCnt++ ]; - - ConvertHuff( info8, data, &stream ); - } - compFlags <<= 1; - if ( srcCnt >= srcSize ) - { - break; - } - } - } - - BitStream_Terminate( &stream, 4 ); - return stream.cnt; -} - -/*---------------------------------------------------------------------------* - Name: LHCompWrite - Description: - Arguments: *srcp - size - *dstp - Returns: - *---------------------------------------------------------------------------*/ -u32 -LHCompWrite( const u8 *srcp, s32 srcSize, u8 *dstp ) -{ - static HuffInfo sTree8; - static HuffInfo sTree16; - - u32 tmpSize; - u32 dstSize; - u8* tmpBuf = (u8*)malloc( srcSize * 3 ); - // ܂srcp𕁒ʂLZk - tmpSize = LZCompWrite_( srcp, srcSize, tmpBuf, 2, LH_OFFSET_BITS ); - - // offsetlength̏Wv - LZMakeHuffTree( tmpBuf, tmpSize, &sTree8, &sTree16 ); - - dstSize = 0; - - // wb_̏ - if ( srcSize < 0x1000000 && srcSize > 0 ) - { - *(u32*)dstp = LH_CODE_HEADER | ( srcSize << 8 ); - dstSize = 4; - } - else - { - *(u32*)dstp = LH_CODE_HEADER; - *(u32*)&dstp[4] = srcSize; - dstSize = 8; - } - // nt}e[uo - dstSize += ExportHuffTree( &dstp[ dstSize ], &sTree8, LENGTH_BITS ); - dstSize += ExportHuffTree( &dstp[ dstSize ], &sTree16, LH_OFFSET_TABLE_BITS ); - - // kʂnt}Ȃo - dstSize += LZConvertHuffData( tmpBuf, tmpSize, &dstp[ dstSize ], &sTree8, &sTree16 ); - - return dstSize; -} - - - -typedef struct -{ - u16 huffTable9 [ (1 << LENGTH_BITS) * 2 ]; - u16 huffTable12[ OFFSET_SIZE_MAX * 2 ]; -} -LHContext; - - -/*---------------------------------------------------------------------------* - Name: HuffImportTree - Description: - Arguments: pTable - srcp - bitSize - srcRemainSize - Returns: - *---------------------------------------------------------------------------*/ -static u32 -HuffImportTree( u16* pTable, const u8* srcp, u8 bitSize, u32 srcRemainSize ) -{ - u32 tableSize; - u32 idx = 1; - u32 data = 0; - u32 bitNum = 0; - u32 bitMask = (1 << bitSize) - 1; - u32 srcCnt = 0; - - if ( bitSize > 8 ) - { - tableSize = *(u16*)srcp; - srcp += 2; - srcCnt += 2; - } - else - { - tableSize = *srcp; - srcp += 1; - srcCnt += 1; - } - tableSize = (tableSize + 1) * 4; - if ( srcRemainSize < tableSize ) - { - return tableSize; - } - - while ( srcCnt < tableSize ) - { - while ( bitNum < bitSize ) - { - data <<= 8; - data |= *srcp++; - ++srcCnt; - bitNum += 8; - } - if ( idx < (u32)((1 << bitSize) * 2) ) - { - pTable[ idx++ ] = (u16)( ( data >> (bitNum - bitSize) ) & bitMask ); - } - bitNum -= bitSize; - } - - pTable[ 0 ] = (u16)idx; - return tableSize; -} - - -/*---------------------------------------------------------------------------* - Name: HuffVerifyTable - - Description: nt}e[u̐`FbN - - Arguments: pTable nt}e[uւ̃|C^ - bit nt}̃rbg - - Returns: ȃe[ȕꍇɂ TRUE - sȃe[ȕꍇɂ FALSE - *---------------------------------------------------------------------------*/ -static BOOL -HuffVerifyTable( const void* pTable, u8 bit ) -{ -#if !defined(LH_ENC_OFFSET_WIDTH) - enum { FLAGS_ARRAY_NUM = 8192 / 8 }; /* 1024Byte */ - static u8 end_flags[ FLAGS_ARRAY_NUM ]; -#else - enum { FLAGS_ARRAY_NUM = 1024 / 8 }; /* 128Byte */ - u8 end_flags[ FLAGS_ARRAY_NUM ]; -#endif - u16* treep = (u16*)pTable; - u16* treeStartp = treep + 1; - u32 treeSize = *treep; - u16* treeEndp = (u16*)pTable + treeSize; - u32 i; - u32 idx; - const u16 ofs_mask = (u16)( (1 << (bit - 2)) - 1 ); - const u16 l_mask = (u16)( 1 << (bit - 1) ); - const u16 r_mask = (u16)( 1 << (bit - 2) ); - - for ( i = 0; i < FLAGS_ARRAY_NUM; i++ ) - { - end_flags[ i ] = 0; - } - - if ( treeSize > (1U << (bit + 1)) ) - { - return FALSE; - } - - idx = 1; - treep = treeStartp; - while ( treep < treeEndp ) - { - if ( (end_flags[ idx / 8 ] & (1 << (idx % 8) )) == 0 ) - { - u32 offset = (u32)( ( (*treep & ofs_mask) + 1 ) << 1 ); - u16* nodep = (u16*)((u32)treep & ~0x3) + offset; - - // I[̃ACgpf[^͓ǂݔ΂ - if ( *treep == 0 && idx >= treeSize - 4 ) - { - goto next; - } - if ( nodep >= treeEndp ) - { - return FALSE; - } - if ( *treep & l_mask ) - { - u32 left = (idx & ~0x1) + offset; - end_flags[ left / 8 ] |= (u8)( 1 << (left % 8) ); - } - if ( *treep & r_mask ) - { - u32 right = (idx & ~0x1) + offset + 1; - end_flags[ right / 8 ] |= (u8)( 1 << (right % 8) ); - } - } - next: - ++idx; - ++treep; - } - return TRUE; -} - - -typedef struct -{ - const u8* srcp; - u32 cnt; - u32 srcSize; - u32 stream; - u32 stream_len; -} -BitReader; - -static INLINE void -BitReader_Init( BitReader* context, const u8* srcp, u32 srcSize ) -{ - context->srcp = srcp; - context->cnt = 0; - context->stream = 0; - context->stream_len = 0; - context->srcSize = srcSize; -} - -static INLINE s8 -BitReader_Read( BitReader* context ) -{ - s8 bit; - if ( context->stream_len == 0 ) - { - if ( context->cnt > context->srcSize ) - { - return -1; - } - context->stream = context->srcp[context->cnt++]; - context->stream_len = 8; - } - bit = (s8)( (context->stream >> (context->stream_len - 1)) & 0x1 ); - context->stream_len--; - return bit; -} - -static s32 -BitReader_ReadEx( BitReader* context, u8 width ) -{ - s32 data; - - ASSERT( width <= 24 ); - - if ( width == 0 ) - { - return 0; - } - - while ( context->stream_len < width ) - { - if ( context->cnt > context->srcSize ) - { - return -1; - } - context->stream <<= 8; - context->stream |= context->srcp[context->cnt++]; - context->stream_len += 8; - } - data = (s32)( (context->stream >> (context->stream_len - width)) & ((1 << width) - 1) ); - context->stream_len -= width; - return data; -} - - -/*---------------------------------------------------------------------------* - Name: LHCompRead - Description: - Arguments: srcp - size - *dstp - Returns: - *---------------------------------------------------------------------------*/ -s32 -LHCompRead( const u8* srcp, u32 srcSize, u8* dstp ) -{ - static LHContext sContext; - u32 dstSize; - u32 srcCnt = 0; - u32 dstCnt = 0; - BitReader stream; - - if ( srcSize < 4 ) - { - return -1; - } - - // wb_̓ǂݍ - dstSize = *(u32*)srcp >> 8; - srcCnt = 4; - if ( dstSize == 0 ) - { - if ( srcSize < 8 ) - { - return -1; - } - dstSize = *(u32*)(srcp + 4); - srcCnt += 4; - } - - // nt}e[uǂ - srcCnt += HuffImportTree( sContext.huffTable9, &srcp[srcCnt], LENGTH_BITS, srcSize - srcCnt ); - if ( srcCnt >= srcSize || (!HuffVerifyTable( sContext.huffTable9, LENGTH_BITS )) ) - { - return -1; - } - - srcCnt += HuffImportTree( sContext.huffTable12, &srcp[srcCnt], LH_OFFSET_TABLE_BITS, srcSize - srcCnt ); - - if ( srcCnt >= srcSize || (!HuffVerifyTable( sContext.huffTable12, LH_OFFSET_TABLE_BITS )) ) - { - return -1; - } - - BitReader_Init( &stream, &srcp[srcCnt], srcSize - srcCnt ); - - while ( dstCnt < dstSize ) - { - u16* nodep = sContext.huffTable9 + 1; - u16 val; - do - { - s8 bit = BitReader_Read( &stream ); - u32 offset = (((*nodep & 0x7F) + 1) << 1) + bit; - - if ( bit < 0 ) - { - return -1; - } - - if ( *nodep & (0x100 >> bit) ) - { - nodep = (u16*)((u32)nodep & ~0x3); - val = *(nodep + offset); - break; - } - else - { - nodep = (u16*)((u32)nodep & ~0x3); - nodep += offset; - } - } while ( 1 ); - - if ( val < 0x100 ) - // 񈳏kf[^ - { - dstp[dstCnt++] = (u8)val; - } - else - // kf[^ - { - #if !defined(LH_ENC_OFFSET_WIDTH) - #define OFFSET_MASK 0x3FF - #define LEAF_FLAG 0x800 - #else - #define OFFSET_MASK 0x07 - #define LEAF_FLAG 0x10 - u16 offset_bit; - #endif - u16 length = (val & 0xFF) + 3; - u16* nodep = sContext.huffTable12 + 1; - do - { - s8 bit = BitReader_Read( &stream ); - u32 offset = (((*nodep & OFFSET_MASK) + 1) << 1) + bit; - - if ( bit < 0 ) - { - return -1; - } - - if ( *nodep & (LEAF_FLAG >> bit) ) - { - nodep = (u16*)((u32)nodep & ~0x3); - val = *(nodep + offset); - break; - } - else - { - nodep = (u16*)((u32)nodep & ~0x3); - nodep += offset; - } - } while ( 1 ); - - #if defined(LH_ENC_OFFSET_WIDTH) - offset_bit = val; - val = 0; - if ( offset_bit > 0 ) - { - val = 1; - while ( --offset_bit > 0 ) - { - val <<= 1; - val |= BitReader_Read( &stream ); - } - } - #endif - val += 1; - - // obt@I[o[`FbN - if ( dstCnt + length > dstSize ) - { - return -1; - } - if ( dstCnt < val ) - { - return -1; - } - if ( srcCnt + stream.cnt > srcSize ) - { - return -1; - } - - while ( length-- > 0 ) - { - dstp[dstCnt] = dstp[dstCnt - val]; - ++dstCnt; - } - #undef OFFSET_MASK - #undef LEAF_FLAG - } - } - return dstCnt; - - -} - - -//============================================================================== -// -// LRCk/WJ -// -//============================================================================== - -#define LRC_ADAPTIVE // K^WR[_gp邩ǂ -#define RC_MAX_RANGE 0x80000000 -#define RC_UNIT_BITS 8 // 1oCgPʂŏo -// #define LRC_ENC_OFFSET_WIDTH // NOTE: ̃IvVł͐ɓłȂB - // mɂ́AWJɐbitf[^WR[hƂĐ - // ǂ܂Ă܂̂ŁAɂ͎̃f[^oȂB - -#if defined( LRC_ADAPTIVE ) - #define TABLE8_ADAPTIVE TRUE -#else - #define TABLE8_ADAPTIVE FALSE -#endif - -#if defined( LRC_ENC_OFFSET_WIDTH ) - #define TABLE16_ADAPTIVE FALSE // bitLengpꍇɂ́AEe[ûofs͐ÓIRCOK - #define LRC_OFFSET_BITS 15 - #define LRC_OFFSET_TABLE_BITS 5 -#else - #define TABLE16_ADAPTIVE TRUE // bitLengpȂꍇɂ́AEe[u傫Ȃ̂ofs͓IRCgp - #define LRC_OFFSET_BITS 12 - #define LRC_OFFSET_TABLE_BITS LRC_OFFSET_BITS -#endif - -// WR[_p\ -typedef struct -{ - u32 *freq; // opxe[u (1 << bitSize) * sizeof(u32) Byte - u32 *low_cnt; // LOWEle[u (1 << bitSize) * sizeof(u32) Byte - u32 total; // g[^ 4 Byte - u8 bitSize; // rbgTCY 1 Byte - u8 padding_[1]; // -} -RCCompressionInfo; - -// WR[_ԍ\ -typedef struct -{ - u32 low; - u32 range; - u32 code; // WĴݎgp - u8 carry; // k̂ݎgp - u32 carry_cnt; // k̂ݎgp -} -RCState; - -/*---------------------------------------------------------------------------* - Name: RCInitState_ - - Description: RCԂ̏Ȃ܂B - - Arguments: state - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -RCInitState_( RCState* state ) -{ - // JnRange0x80000000Ȃ̂ŁA񂢂Ȃ茅グ邱Ƃ͂Ȃ - state->low = 0; - state->range = RC_MAX_RANGE; - state->code = 0; - state->carry = 0; - state->carry_cnt = 0; -} - - -/*---------------------------------------------------------------------------* - Name: RCInitInfo_ - - Description: ÓIWR[_̃e[u - ׂĂ̏opx0ŏ܂B - - Arguments: info - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -RCInitInfo_( RCCompressionInfo* info, u8 bitSize ) -{ - u32 tableSize = (1 << bitSize); - u32 i; - - info->bitSize = bitSize; - info->freq = (u32*)malloc( sizeof(u32) * tableSize ); - info->low_cnt = (u32*)malloc( sizeof(u32) * tableSize ); - - for ( i = 0; i < tableSize; i++ ) - { - info->freq[ i ] = 0; - info->low_cnt[ i ] = 0; - } - info->total = 0; -} - -/*---------------------------------------------------------------------------* - Name: RCExportTable_ - - Description: ÓIRCe[uo͂܂B - - Arguments: dstp - info - - Returns: o̓f[^TCY - *---------------------------------------------------------------------------*/ -static u32 -RCExportTable_( u8* dstp, RCCompressionInfo* info ) -{ - u32 tableSize = (1 << info->bitSize); - u32 cnt = 0; - u32 i; - - // pxe[ȕo(16bitgGfBA) - for ( i = 0; i < tableSize; i++ ) - { - dstp[ cnt++ ] = (u8)( info->freq[ i ] ); - dstp[ cnt++ ] = (u8)( info->freq[ i ] >> 8 ); - } - return cnt; -} - -/*---------------------------------------------------------------------------* - Name: RCImportTable_ - - Description: - - Arguments: info - srcp - srcRemainSize - - Returns: - *---------------------------------------------------------------------------*/ -static u32 -RCImportTable_( RCCompressionInfo* info, const u8* srcp, u32 srcRemainSize ) -{ - u32 tableSize = (1 << info->bitSize); - u32 cnt = 0; - u32 i; - - if ( srcRemainSize < tableSize * sizeof(u16) ) - { - return srcRemainSize; - } - - // pxe[ũC|[g(16bitgGfBA) - for ( i = 0; i < tableSize; i++ ) - { - info->freq[ i ] = srcp[ cnt ] | ( srcp[ cnt + 1 ] << 8 ); - cnt += 2; - } - info->low_cnt[ 0 ] = 0; - info->total = info->freq[ 0 ]; - for ( i = 1; i < tableSize; i++ ) - { - info->low_cnt[ i ] = info->low_cnt[ i - 1 ] + info->freq[ i - 1 ]; - info->total += info->freq[ i ]; - } - return cnt; -} - -/*---------------------------------------------------------------------------* - Name: RCNormalizeTable_ - - Description: RCe[u̐K - - Arguments: info - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -RCNormalizeTable_( RCCompressionInfo* info ) -{ - u32 tableSize = (1 << info->bitSize); - u32 i; - - // g[^̃JEg - info->total = 0; - for ( i = 0; i < tableSize; i++ ) - { - info->total += info->freq[ i ]; - } - - // K - // 0x10000֐K - #define NORMAL_FREQ 0x10000 - { - f32 rate = (f32)NORMAL_FREQ / info->total; - u32 max_i = 0; - u32 max_freq = 0; - - info->total = 0; - for ( i = 0; i < tableSize; i++ ) - { - u32 orig = info->freq[ i ]; - info->freq[ i ] = (u32)(rate * info->freq[ i ] + 0.5f); - if ( orig != 0 && info->freq[ i ] == 0 ) - { - info->freq[ i ] = 1; - } - - info->total += info->freq[ i ]; - if ( info->freq[ i ] >= max_freq ) - { - max_i = i; - max_freq = info->freq[ i ]; - } - } - // łopx̍l덷ɗp - if ( info->total > NORMAL_FREQ ) - { - info->freq[ max_i ] -= (info->total - NORMAL_FREQ); - } - else - { - info->freq[ max_i ] += (NORMAL_FREQ - info->total); - } - info->total = NORMAL_FREQ; - } - #undef NORMAL_FREQ - - // low_cnťvZ - info->low_cnt[ 0 ] = 0; - for ( i = 1; i < tableSize; i++ ) - { - info->low_cnt[ i ] = info->low_cnt[ i - 1 ] + info->freq[ i - 1 ]; - } -} - - -/*---------------------------------------------------------------------------* - Name: RCCountData_ - - Description: LZkf[^ÓIWR[_p̃e[u쐬܂B - - Arguments: srcp - srcSize - info8 - info16 - - Returns: - *---------------------------------------------------------------------------*/ -static void -RCCountData_( const u8* srcp, u32 srcSize, RCCompressionInfo* info8, RCCompressionInfo* info16 ) -{ - u32 srcCnt = 0; - u32 i; - - while ( srcCnt < srcSize ) - { - u8 compFlags = srcp[ srcCnt++ ]; // k̗LtO - for ( i = 0; i < 8; i++ ) - { - if ( compFlags & 0x80 ) // kĂAlength:8, offset:16 - { - u8 length = srcp[ srcCnt++ ]; - u16 offset = srcp[ srcCnt++ ]; // gGfBA - offset |= (srcp[ srcCnt++ ] << 8); - - #if BLEND_COMP_FLAG - info8->freq[ length | 0x100 ]++; - #else - info8->freq[ length ]++; - #endif - #if !defined( LRC_ENC_OFFSET_WIDTH ) - info16->freq[ offset ]++; - #else - { - u32 offset_bit = 0; - while ( offset != 0 ) - { - ++offset_bit; - offset >>= 1; - } - info16->freq[ offset_bit ]++; - } - #endif - } - else - { - u8 data = srcp[ srcCnt++ ]; - info8->freq[ data ]++; - } - compFlags <<= 1; - if ( srcCnt >= srcSize ) - { - break; - } - } - } - - RCNormalizeTable_( info8 ); - RCNormalizeTable_( info16 ); -} - - - -/*---------------------------------------------------------------------------* - Name: RCAInitInfo_ - - Description: K^WR[_̃e[u - ׂĂ̏opx1ŏ܂B - - Arguments: info - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -RCAInitInfo_( RCCompressionInfo* info, u8 bitSize ) -{ - u32 tableSize = (1 << bitSize); - u32 i; - - info->bitSize = bitSize; - info->freq = (u32*)malloc( sizeof(u32) * tableSize ); - info->low_cnt = (u32*)malloc( sizeof(u32) * tableSize ); - - for ( i = 0; i < tableSize; i++ ) - { - info->freq[ i ] = 1; - info->low_cnt[ i ] = i; - } - info->total = tableSize; -} - - -/*---------------------------------------------------------------------------* - Name: RCAAddCount_ - - Description: K^WR[_̕pxe[uXV܂B - - Arguments: info - val - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -RCAAddCount_( RCCompressionInfo* info, u16 val ) -{ - u32 i; - u32 tableSize = (1 << info->bitSize); - - info->freq[ val ]++; - info->total++; - for ( i = val + 1; i < tableSize; i++ ) - { - info->low_cnt[ i ]++; - } - - // g[^őlzꍇɂ́Ač\B - if ( info->total >= 0x00010000 ) - { - if ( info->freq[ 0 ] > 1 ) - { - info->freq[ 0 ] = info->freq[ 0 ] / 2; - } - info->low_cnt[ 0 ] = 0; - info->total = info->freq[ 0 ]; - - for ( i = 1; i < tableSize; i++ ) - { - if ( info->freq[ i ] > 1 ) - { - info->freq[ i ] >>= 1; - } - info->low_cnt[ i ] = info->low_cnt[ i - 1 ] + info->freq[ i - 1 ]; - info->total += info->freq[ i ]; - } - } -} - - -/*---------------------------------------------------------------------------* - Name: ConvertRC - Description: - Arguments: info - data - stream - Returns: None. - *---------------------------------------------------------------------------*/ -static void -ConvertRC( RCCompressionInfo* info, u16 data, BitStream* stream, RCState* state, BOOL adaptive ) -{ -#define MIN_RANGE 0x01000000 - u32 temp = state->range / info->total; - u32 prevLow = state->low; - - state->low += info->low_cnt[ data ] * temp; - state->range = info->freq[ data ] * temp; - - if ( adaptive ) - { - // opxe[uXV - RCAAddCount_( info, data ); - } - - // オ肪ꍇ̏ - if ( prevLow > state->low ) - { - // L[Pグ - state->carry++; - // L[(L[JE^ - 1)‚0x00o͂܂B - if ( state->carry_cnt > 1 ) - { - BitStream_Write( stream, state->carry, RC_UNIT_BITS ); - state->carry_cnt--; - state->carry = 0x00; - } - while ( state->carry_cnt > 1 ) - { - BitStream_Write( stream, 0x00, RC_UNIT_BITS ); - state->carry_cnt--; - } - } - - // Rangȅ1oCgɂȂ猅グ - while ( state->range < MIN_RANGE ) - { - u8 candidate = (u8)( state->low >> 24 ); - // ̃L[0xFF̏ꍇ͍XɌグ蓾̂carryo͂carry_cnt₷ - if ( candidate == 0xFF ) - { - state->carry_cnt++; - } - else - // ̃L[0xFFł͂Ȃꍇcarryo͂ - { - // carry(carry_cnt - 1)0xFFo͂ - if ( state->carry_cnt > 0 ) - { - BitStream_Write( stream, state->carry, RC_UNIT_BITS ); - state->carry_cnt--; - } - while ( state->carry_cnt > 0 ) - { - BitStream_Write( stream, 0xFF, RC_UNIT_BITS ); - state->carry_cnt--; - } - // Vcarryɒu - state->carry = candidate; - state->carry_cnt = 1; - } - state->low <<= 8; - state->range <<= 8; - } -#undef MIN_RANGE -} - -/*---------------------------------------------------------------------------* - Name: FinalizeRC_ - Description: - Arguments: srcp - tmpSize - dstp - info8 - info16 - Returns: - *---------------------------------------------------------------------------*/ -static void -FinalizeRC_( BitStream* stream, RCState* state ) -{ - // carry(carry_cnt - 1)0xFFo͂ - if ( state->carry_cnt > 0 ) - { - BitStream_Write( stream, state->carry, RC_UNIT_BITS ); - state->carry_cnt--; - } - while ( state->carry_cnt > 0 ) - { - BitStream_Write( stream, 0xFF, RC_UNIT_BITS ); - state->carry_cnt--; - } - // lowɎcf[^o - BitStream_Write( stream, state->low >> 24, RC_UNIT_BITS ); - BitStream_Write( stream, state->low >> 16, RC_UNIT_BITS ); - BitStream_Write( stream, state->low >> 8, RC_UNIT_BITS ); - BitStream_Write( stream, state->low , RC_UNIT_BITS ); -} - - -/*---------------------------------------------------------------------------* - Name: LZConvertDataRC - Description: - Arguments: srcp - tmpSize - dstp - info8 - info16 - Returns: - *---------------------------------------------------------------------------*/ -static u32 -LZConvertDataRC( const u8* srcp, u32 srcSize, u8* dstp, RCCompressionInfo* info8, RCCompressionInfo* info16 ) -{ - u32 srcCnt = 0; - u32 dstCnt = 0; - - BitStream stream; - RCState rcState; - - RCInitState_( &rcState ); - - BitStream_Init( &stream, dstp ); - - while ( srcCnt < srcSize ) - { - u32 i; - u8 compFlags = srcp[ srcCnt++ ]; // k̗LtO - - for ( i = 0; i < 8; i++ ) - { - if ( compFlags & 0x80 ) // kĂAlength:8, offset:16 - { - u8 length = srcp[ srcCnt++ ]; - u16 offset = srcp[ srcCnt++ ]; // gGfBA - offset |= srcp[ srcCnt++ ] << 8; - - // length | 0x100WR[_Ɋ| - ConvertRC( info8, length | 0x100, &stream, &rcState, TABLE8_ADAPTIVE ); - - #if !defined( LRC_ENC_OFFSET_WIDTH ) // e[uTCY傫̂ŋIɓK^ - ConvertRC( info16, offset, &stream, &rcState, TABLE16_ADAPTIVE ); - #else - { - u16 offset_bit = 0; - u16 offset_tmp = offset; - while ( offset_tmp > 0 ) - { - offset_tmp >>= 1; - ++offset_bit; - } - ConvertRC( info16, offset_bit, &stream, &rcState, TABLE16_ADAPTIVE ); - // offset0ł邱Ƃ͂Ȃ̂ŁAŏʂ̃rbg͏ȗ - BitStream_Write( &stream, offset & ~(1 << (offset_bit - 1)), offset_bit - 1 ); - } - #endif - } - else - { - u8 data = srcp[ srcCnt++ ]; - - ConvertRC( info8, data, &stream, &rcState, TABLE8_ADAPTIVE ); - } - compFlags <<= 1; - if ( srcCnt >= srcSize ) - { - break; - } - } - } - // carrylowɎcf[^fo - FinalizeRC_( &stream, &rcState ); - - BitStream_Terminate( &stream, 4 ); - return stream.cnt; -} - - -/*---------------------------------------------------------------------------* - Name: LRCCompWrite - - Description: - - Arguments: srcp - size - dstp - - Returns: - *---------------------------------------------------------------------------*/ -u32 LRCCompWrite( const u8* srcp, u32 srcSize, u8* dstp ) -{ - RCCompressionInfo sRCInfo8; - RCCompressionInfo sRCInfo16; - - u32 tmpSize; - u32 dstSize; - u8* tmpBuf = (u8*)malloc( srcSize * 3 ); - // ܂srcp𕁒ʂLZk - tmpSize = LZCompWrite_( srcp, srcSize, tmpBuf, 2, LRC_OFFSET_BITS ); - - // e[u - RCInitInfo_( &sRCInfo8, LENGTH_BITS ); - RCInitInfo_( &sRCInfo16, LRC_OFFSET_TABLE_BITS ); - - dstSize = 0; - - // wb_̏ - if ( srcSize < 0x1000000 && srcSize > 0 ) - { - *(u32*)dstp = LRC_CODE_HEADER | ( srcSize << 8 ); - dstSize = 4; - } - else - { - *(u32*)dstp = LRC_CODE_HEADER; - *(u32*)&dstp[4] = srcSize; - dstSize = 8; - } - - // ÓIWR[_̕px\쐬Ă(gp邩ǂ̓IvV) - RCCountData_( tmpBuf, tmpSize, &sRCInfo8, &sRCInfo16 ); - -#if TABLE8_ADAPTIVE - RCAInitInfo_( &sRCInfo8, LENGTH_BITS ); -#else // if (! TABLE8_ADAPTIVE ) - dstSize += RCExportTable_( &dstp[ dstSize ], &sRCInfo8 ); -#endif - -#if TABLE16_ADAPTIVE - RCAInitInfo_( &sRCInfo16, LRC_OFFSET_TABLE_BITS ); -#else // if (! TABLE16_ADAPTIVE ) - dstSize += RCExportTable_( &dstp[ dstSize ], &sRCInfo16 ); -#endif - - // kʂWR[_Ȃo - dstSize += LZConvertDataRC( tmpBuf, tmpSize, &dstp[ dstSize ], &sRCInfo8, &sRCInfo16 ); - - return dstSize; -} - - - -/*---------------------------------------------------------------------------* - Name: SearchRC_ - - Description: - - Arguments: info - code - range - low - - Returns: - *---------------------------------------------------------------------------*/ -static u16 -SearchRC_( RCCompressionInfo* info, u32 code, u32 range, u32 low ) -{ - u32 tableSize = (1 << info->bitSize); - u32 codeVal = code - low; - u32 i; - u32 temp = range / info->total; - u32 tempVal = codeVal / temp; - -#if 0 - // TODO: Ƃ肠`TA񕪒Tɂׂ - for ( i = 0; i < tableSize - 1; i++ ) - { - if ( info->low_cnt[ i + 1 ] > tempVal ) - { - while ( info->freq[ i ] == 0 ) - { - --i; - } - return (u16)i; - } - } - return (u16)( (1 << info->bitSize) - 1 ); -#else - // 񕪒T - u32 left = 0; - u32 right = tableSize - 1; - - while ( left < right ) - { - i = (left + right) / 2; - - if ( info->low_cnt[ i ] > tempVal ) - { - right = i; - } - else - { - left = i + 1; - } - } - - i = left; - while ( info->low_cnt[ i ] > tempVal ) - { - --i; - } - return (u16)i; - -#endif -} - - - -static u16 -RCGetDate_( BitReader* stream, RCCompressionInfo* info, RCState* state, BOOL adaptive ) -{ -#define MIN_RANGE 0x01000000 - u16 val = SearchRC_( info, state->code, state->range, state->low ); - - { - u32 tmp; - tmp = state->range / info->total; - state->low += info->low_cnt[ val ] * tmp; - state->range = info->freq[ val ] * tmp; - } - - // opxe[uXV - if ( adaptive ) - { - RCAAddCount_( info, val ); - } - while ( state->range < MIN_RANGE ) - { - state->code <<= 8; - state->code += BitReader_ReadEx( stream, 8 ); - state->range <<= 8; - state->low <<= 8; - } - return val; -#undef MIN_RANGE -} - - -/*---------------------------------------------------------------------------* - Name: LRCCompRead - - Description: - - Arguments: srcp - size - dstp - - Returns: - *---------------------------------------------------------------------------*/ -s32 LRCCompRead( const u8* srcp, u32 srcSize, u8* dstp ) -{ - RCCompressionInfo sRCInfo8; - RCCompressionInfo sRCInfo16; - RCState rcState; - - u32 dstSize; - u32 srcCnt = 0; - u32 dstCnt = 0; - BitReader stream; - - if ( srcSize < 4 ) - { - return -1; - } - - // wb_̓ǂݍ - dstSize = *(u32*)srcp >> 8; - srcCnt = 4; - if ( dstSize == 0 ) - { - if ( srcSize < 8 ) - { - return -1; - } - dstSize = *(u32*)(srcp + 4); - srcCnt += 4; - } - - // RCpxe[uǂ -#if TABLE8_ADAPTIVE - RCAInitInfo_( &sRCInfo8, LENGTH_BITS ); -#else - RCInitInfo_( &sRCInfo8, LENGTH_BITS ); - srcCnt += RCImportTable_( &sRCInfo8, &srcp[ srcCnt ], srcSize - srcCnt ); -#endif -#if TABLE16_ADAPTIVE - RCAInitInfo_( &sRCInfo16, LRC_OFFSET_TABLE_BITS ); -#else - RCInitInfo_( &sRCInfo16, LRC_OFFSET_TABLE_BITS ); - srcCnt += RCImportTable_( &sRCInfo16, &srcp[ srcCnt ], srcSize - srcCnt ); -#endif - - BitReader_Init( &stream, &srcp[ srcCnt ], srcSize - srcCnt ); - - if ( srcSize - srcCnt <= 4 ) - { - // Œł̃R[h4Byte͕Kv - return -1; - } - - RCInitState_( &rcState ); - - rcState.code = (u32)( (BitReader_ReadEx( &stream, 8 ) << 24) | - (BitReader_ReadEx( &stream, 8 ) << 16) | - (BitReader_ReadEx( &stream, 8 ) << 8) | - (BitReader_ReadEx( &stream, 8 ) ) ); - - while ( dstCnt < dstSize ) - { - u16 val = (u16)( RCGetDate_( &stream, &sRCInfo8, &rcState, TABLE8_ADAPTIVE ) ); - - if ( val < 0x100 ) - // 񈳏kf[^ - { - dstp[ dstCnt++ ] = (u8)val; - } - else - // kf[^ - { - u16 length = (val & 0xFF) + 3; - val = (u16)( RCGetDate_( &stream, &sRCInfo16, &rcState, TABLE16_ADAPTIVE ) ); - - #if defined( LRC_ENC_OFFSET_WIDTH ) - { - u16 offset_bit = val; - val = 0; - if ( offset_bit > 0 ) - { - val = 1; - while ( --offset_bit > 0 ) - { - val <<= 1; - val |= BitReader_Read( &stream ); - } - } - } - #endif - val += 1; - - // obt@I[o[`FbN - if ( dstCnt + length > dstSize ) - { - return -1; - } - if ( dstCnt < val ) - { - return -1; - } - if ( srcCnt + stream.cnt > srcSize ) - { - return -1; - } - - while ( length-- > 0 ) - { - dstp[ dstCnt ] = dstp[ dstCnt - val ]; - ++dstCnt; - } - } - } - - return dstCnt; -} - - diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/multipleCompLib.h b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/multipleCompLib.h deleted file mode 100644 index 72dc2e5b..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/multipleCompLib.h +++ /dev/null @@ -1,55 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NinTendo Compress tool - File: multipleCompLib.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -// nitroCompLib.h : nitroCompLib.DLL ̃C wb_[ t@C -// - -#ifndef __MULTIPLE_COMPLIB_H__ -#define __MULTIPLE_COMPLIB_H__ - -//=========================================================================================== -// CN[h -//=========================================================================================== -#include -#include -#include -#include -#include "types.h" - -//=========================================================================================== -// vg^Cv錾 -//=========================================================================================== -// C++p -#ifdef __cplusplus -extern "C" -{ -#endif - -s32 LHCompRead( const u8* srcp, u32 srcSize, u8* dstp ); - -u32 LHCompWrite( const u8* srcp, s32 size, u8* dstp ); - -s32 LRCCompRead( const u8* srcp, u32 srcSize, u8* dstp ); - -u32 LRCCompWrite( const u8* srcp, u32 size, u8* dstp ); - - -#ifdef __cplusplus -} -#endif - -#endif // __MULTIPLEX_COMPLIB_H__ diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/nitroCompLib.c b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/nitroCompLib.c deleted file mode 100644 index 135f7a45..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/nitroCompLib.c +++ /dev/null @@ -1,2282 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NinTendo Compress tool - File: nitroCompLib.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "nitroCompLib.h" - -#undef _DEBUG -#ifdef _DEBUG -#define new DEBUG_NEW -#define DEBUG_PRINT -// #define DEBUG_PRINT_DIFFFILT -#define DEBUG_PRINT_RL -// #define DEBUG_PRINT_HUFF -// #define DEBUG_PRINT_LZ -// #define DEBUG_PRINT_DATAMATCH -#endif - - -#ifdef __cplusplus -#define EXTERN extern "C" -#define STATIC -#else -#define EXTERN -#define STATIC static -#endif - - -#ifdef DEBUG_PRINT -#define dbg_printf fprintf -#else -#define dbg_printf dummy -#endif - -#ifdef DEBUG_PRINT_DIFFFILT -#define dbg_printf_dif fprintf -#else -#define dbg_printf_dif dummy -#endif - -#ifdef DEBUG_PRINT_RL -#define dbg_printf_rl fprintf -#else -#define dbg_printf_rl dummy -#endif - -#ifdef DEBGU_PRINT_HUFF -#define dbg_printf_huff fprintf -#else -#define dbg_printf_huff dummy -#endif - -#ifdef DEBGU_PRINT_LZ -#define dbg_printf_lz fprintf -#else -#define dbg_printf_lz dummy -#endif - -#ifdef DEBUG_PRINT_DATAMATCH -#define dbg_printf_match fprintf -#else -#define dbg_printf_match dummy -#endif - -void dummy(void *fp, ...) -{ -} - - -//================================================================================== -// O[oϐ錾 -//================================================================================== -static u8 *pCompBuf[2]; // kɗp_uobt@ -static u8 compBufNo = 1; // Lȃ_uobt@ - -//================================================================================== -// vg^Cv錾 -//================================================================================== -static u32 RawWrite(u8 *srcp, u32 size, u8 *dstp); -static u32 DiffFiltWrite(u8 *srcp, u32 size, u8 *dstp, u8 diffBitSize); -static u32 RLCompWrite(u8 *srcp, u32 size, u8 *dstp); -static u32 LZCompWriteEx(u8 *srcp, u32 size, u8 *dstp, u8 lzSearchOffset, BOOL ex_available); -static u32 HuffCompWrite(u8 *srcp, u32 size, u8 *dstp, u8 huffBitSize); - -static s32 RawRead ( const u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize ); -static s32 DiffFiltRead( const u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize, u8 diffBitSize ); -static s32 RLCompRead ( const u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize ); -static s32 LZCompReadEx( const u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize, BOOL ex_available ); -static s32 HuffCompRead( const u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize, u8 huffBitSize ); - -/* -//================================================================================== -// DLLp֐ -//================================================================================== -EXTERN BOOL WINAPI DllMain( HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved) -{ - return TRUE; -} -*/ - -//---------------------------------------------------------------------------------- -// k̃f[^u߂̃̈m -// kÕf[^2{̗̈mۂ -//---------------------------------------------------------------------------------- -EXTERN u8 * STDCALL nitroCompMalloc(u32 size) -{ - return (u8 *)malloc(size * 3 + 512); -} - -//---------------------------------------------------------------------------------- -// k̃f[^uĂ̈ -//---------------------------------------------------------------------------------- -EXTERN void STDCALL nitroCompFree(u8 *p) -{ - if (p != NULL) - { - free((void *)p); - p = NULL; - } -} - -//------------------------------------------------------------ -// f[^̈k -//------------------------------------------------------------ -EXTERN u32 STDCALL nitroCompress( const u8 *srcp, u32 srcSize, u8 *dstp, char *compList, u8 rawHeaderFlag ) -{ - char *pCompList; // compLisť݂̎Qƃ|Cg - u32 dataSize, nextDataSize; // kf[^̃TCY(oCgP) - u8 *pReadBuf; // kf[^̐擪Ԓnw|C^ - u8 bitSize; // tB^Cnt}̓KpP - char str[16]; - u16 i, j; - u8 lzSearchOffset; - -// pCompBuf[0] = (u8 *)malloc(srcSize*2 + 4 + 256*2); // ň̃nt} size*2 + 4 + 256*2 Ȃ̂ŁA -// pCompBuf[1] = (u8 *)malloc(srcSize*2 + 4 + 256*2); // ̑̈kf[^wb_ljŁAs”\ - pCompBuf[0] = (u8 *)malloc(srcSize * 3 + 256 * 2); - pCompBuf[1] = (u8 *)malloc(srcSize * 3 + 256 * 2); - pReadBuf = pCompBuf[0]; - compBufNo = 1; // dv!!@ȂƂQڂnitroCompressĂяoƂɂȂ - - // malloc `FbN - if (pCompBuf[0] == NULL || pCompBuf[1] == NULL) - { - fprintf(stderr, "Error: Memory is not enough.\n"); - exit(1); - } - - dataSize = srcSize; - - // NULLwb_(kÕf[^ṕA[wb_) ̒lj - if (rawHeaderFlag) - { - dataSize += 4; - *(u32 *)pReadBuf = srcSize << 8 | 0; // f[^Ewb_ - memcpy(&pReadBuf[4], srcp, srcSize); - } - else - { - memcpy(pReadBuf, srcp, srcSize); - } - - pCompList = compList; // ki[z|Cg - - // ki[zɗvfA[v - while (1) - { - switch (*pCompList) - { - case 'd': - { - pCompList++; // 'd' ̎ɂ́A8 16 - str[0] = *pCompList; - if (*pCompList == '1') - { - pCompList++; - str[1] = *pCompList; - str[2] = '\n'; - } - bitSize = atoi(str); // tB^̓KpPʂi[ - str[0] = str[1] = '\n'; - - dbg_printf(stderr, "nitroCompress Diff %d\n", bitSize); - - if ((bitSize == 16) && (dataSize & 0x01)) - { - fprintf(stderr, "16-bit differencial filter must be 2-byte allignment.\n"); - exit(1); - } - nextDataSize = DiffFiltWrite(pReadBuf, dataSize, pCompBuf[compBufNo], bitSize); - } - break; - - case 'r': - { - dbg_printf(stderr, "nitroCompress RL\n"); - - nextDataSize = RLCompWrite(pReadBuf, dataSize, pCompBuf[compBufNo]); - } - break; - - case 'l': - case 'L': - { - BOOL ex_format = (*pCompList == 'L')? TRUE : FALSE; - - pCompList++; - i = 0; - while (isdigit(*pCompList)) - { - str[i] = *pCompList; - pCompList++; - i++; - if (i == 15) - { - break; - } - } - str[i] = '\n'; - pCompList--; - lzSearchOffset = (u8)atoi(str); // 傫Ȓl͐؂̂ĂĊۂ - for (j = 0; j < i; j++) - { - str[j] = '\n'; - } - dbg_printf(stderr, "nitroCompress L %d\n", lzSearchOffset); - - nextDataSize = LZCompWriteEx(pReadBuf, dataSize, pCompBuf[compBufNo], lzSearchOffset, ex_format); - } - break; - - case 'h': - { - pCompList++; // 'h' ̎ɂ́A4 8 - str[0] = *pCompList; - str[1] = '\n'; - bitSize = atoi(str); // 4 or 8 - str[0] = '\n'; - - dbg_printf(stderr, "nitroCompress Huff %d\n", bitSize); - - nextDataSize = HuffCompWrite(pReadBuf, dataSize, pCompBuf[compBufNo], bitSize); - } - break; - //----------------------------------------- - // kI (*CompTypeBufp NULL) - default: - { - dbg_printf(stderr, "nitroCompress raw\n"); - - RawWrite(pReadBuf, dataSize, dstp); - if (pCompBuf[0] != NULL) - { - free((void *)pCompBuf[0]); - pCompBuf[0] = NULL; - } - if (pCompBuf[1] != NULL) - { - free(pCompBuf[1]); - pCompBuf[1] = NULL; - } - return dataSize; - } - } - // - pReadBuf = pCompBuf[compBufNo]; - compBufNo ^= 0x01; - dataSize = nextDataSize; - pCompList++; - } -} - - -//=========================================================================== -// kf[^̃Rs[ -//=========================================================================== -static u32 RawWrite(u8 *srcp, u32 size, u8 *dstp) -{ - u32 i; - - dbg_printf(stderr, "RawWrite\tsize=%d\n\n", size); - - size = (size + 0x3) & ~0x3; - for (i = 0; i < size - 1; i++) - { - *dstp = *srcp; - dstp++; - srcp++; - } - *dstp = *srcp; - - return size; -} - - -//=========================================================================== -// tB^ -//=========================================================================== -static u32 DiffFiltWrite(u8 *srcp, u32 size, u8 *dstp, u8 diffBitSize) -{ - u32 DiffCount; // kf[^̃oCg - u32 i; - - u16 *src16p = (u16 *)srcp; - u16 *dst16p = (u16 *)dstp; - - dbg_printf_dif(stderr, "DiffFiltWrite\tsize=%d\tdiffBitSize=%d\n", size, diffBitSize); - - if ( size < 0x1000000 && size > 0 ) - { - *(u32 *)dstp = size << 8 | (DIFF_CODE_HEADER | diffBitSize / 8); // f[^Ewb_ - DiffCount = 4; - } - else - { - *(u32 *)dstp = (DIFF_CODE_HEADER | diffBitSize / 8); // f[^Ewb_ - *(u32 *)(dstp + 4) = size; - DiffCount = 8; - } - - if (diffBitSize == 8) - { -#ifdef DEBUG_PRINT_DIFFFILT - for (i = 0; i < 16; i++) - { - dbg_printf_dif(stderr, "srcp[%d] = %x\n", i, srcp[i]); - } -#endif - dstp[DiffCount] = srcp[0]; // 擪f[^̂ݍ - DiffCount++; - for (i = 1; i < size; i++, DiffCount++) - { - dbg_printf_dif(stderr, "dstp[%x] = srcp[%d]-srcp[%d] = %x - %x = %x\n", - DiffCount, i, i - 1, srcp[i], srcp[i - 1], srcp[i] - srcp[i - 1]); - - dstp[DiffCount] = srcp[i] - srcp[i - 1]; // f[^i[ - } - } - else // 16rbgTCY - { - dst16p[DiffCount / 2] = src16p[0]; - DiffCount += 2; - for (i = 1; i < size / 2; i++, DiffCount += 2) - { - dst16p[DiffCount / 2] = src16p[i] - src16p[i - 1]; - } - } - - // 4oCgEACg - // ACgpf[^0 ̓f[^TCYɊ܂߂Ȃ - i = 0; - while ((DiffCount + i) & 0x3) - { - dstp[DiffCount + i] = 0; - i++; - } - - return DiffCount; -} - - -//=========================================================================== -// OX (oCgP) -//=========================================================================== -static u32 RLCompWrite(u8 *srcp, u32 size, u8 *dstp) -{ - u32 RLDstCount; // kf[^̃oCg - u32 RLSrcCount; // kΏۃf[^̏σf[^(oCgP) - u8 RLCompFlag; // OXsꍇP - u8 runLength; // OX - u8 rawDataLength; // ɂȂĂȂf[^̃OX - u32 i; - - u8 *startp; // ̏[vɂAkΏۃf[^̐擪|Cg - - dbg_printf_rl(stderr, "RLCompWrite\tsize=%d\n", size); - - // f[^wb_ (TCY͓WĴ) - if ( size < 0x1000000 && size > 0 ) - { - *(u32 *)dstp = size << 8 | RL_CODE_HEADER; // f[^Ewb_ - RLDstCount = 4; - } - else - // TCY24bitɎ܂Ȃꍇɂ͊g`̃wb_ƂȂ - { - *(u32 *)dstp = RL_CODE_HEADER; - *(u32 *)(dstp + 4) = size; - RLDstCount = 8; - } - - RLSrcCount = 0; - rawDataLength = 0; - RLCompFlag = 0; - - while (RLSrcCount < size) - { - startp = &srcp[RLSrcCount]; // kΏۃf[^̐ݒ - - for (i = 0; i < 128; i++) // 7rbgŕ\łf[^ʂ 0~127 - { - // kΏۃf[^̖ɓB - if (RLSrcCount + rawDataLength >= size) - { - rawDataLength = (u8)(size - RLSrcCount); - break; - } - - if (RLSrcCount + rawDataLength + 2 < size) - { - if (startp[i] == startp[i + 1] && startp[i] == startp[i + 2]) - { - RLCompFlag = 1; - break; - } - } - rawDataLength++; - } - - // Ȃf[^i[ - // f[^i[oCg8rbgڂ0ȂAȂf[^n - // f[^ -1 ɂȂ̂ŁA0-127 1-128 ƂȂ - if (rawDataLength) - { - dstp[RLDstCount++] = rawDataLength - 1; // "f[^-1" i[(7rbg) - for (i = 0; i < rawDataLength; i++) - { - dstp[RLDstCount++] = srcp[RLSrcCount++]; - } - rawDataLength = 0; - } - - // OX - if (RLCompFlag) - { - runLength = 3; - for (i = 3; i < 128 + 2; i++) - { - // kpf[^̖ɓB - if (RLSrcCount + runLength >= size) - { - runLength = (u8)(size - RLSrcCount); - break; - } - - // r؂ꂽꍇ - if (srcp[RLSrcCount] != srcp[RLSrcCount + runLength]) - { - break; - } - // p - runLength++; - } - - // f[^i[oCg8rbgڂ1ȂAf[^n - dstp[RLDstCount++] = 0x80 | (runLength - 3); // R̉ʂ͂āA3~130i[ - dstp[RLDstCount++] = srcp[RLSrcCount]; - RLSrcCount += runLength; - RLCompFlag = 0; - } - } - - // 4oCgEACg - // ACgpf[^0 ̓f[^TCYɊ܂߂Ȃ - i = 0; - while ((RLDstCount + i) & 0x3) - { - dstp[RLDstCount + i] = 0; - i++; - } - - return RLDstCount; -} - - -//=========================================================================== -// LZ77k -//=========================================================================== - -#define LZ_OFFSET_BITS 12 -#define LZ_OFFSET_SIZE (1<LZByteTable[i] = -1; - info->LZEndTable[i] = -1; - } - info->WindowPos = 0; - info->WindowLen = 0; -} - -/*---------------------------------------------------------------------------* - Name: SlideByte - Description: 1oCgXCh - Arguments: *srcp - work - Returns: None. - *---------------------------------------------------------------------------*/ -static void SlideByte(LZCompressInfo * info, const u8 *srcp) -{ - s16 offset; - u8 in_data = *srcp; - u16 insert_offset; - - s16 *const LZByteTable = info->LZByteTable; - s16 *const LZEndTable = info->LZEndTable; - s16 *const LZOffsetTable = info->LZOffsetTable; - const u16 windowPos = info->WindowPos; - const u16 windowLen = info->WindowLen; - - if (windowLen == LZ_OFFSET_SIZE) - { - u8 out_data = *(srcp - LZ_OFFSET_SIZE); - if ((LZByteTable[out_data] = LZOffsetTable[LZByteTable[out_data]]) == -1) - { - LZEndTable[out_data] = -1; - } - insert_offset = windowPos; - } - else - { - insert_offset = windowLen; - } - - offset = LZEndTable[in_data]; - if (offset == -1) - { - LZByteTable[in_data] = insert_offset; - } - else - { - LZOffsetTable[offset] = insert_offset; - } - LZEndTable[in_data] = insert_offset; - LZOffsetTable[insert_offset] = -1; - - if (windowLen == LZ_OFFSET_SIZE) - { - info->WindowPos = (u16)((windowPos + 1) % LZ_OFFSET_SIZE); - } - else - { - info->WindowLen++; - } -} - -static void LZSlide(LZCompressInfo * info, const u8 *srcp, u32 n) -{ - u32 i; - - for (i = 0; i < n; i++) - { - SlideByte(info, srcp++); - } -} - - -/*---------------------------------------------------------------------------* - Name: LZCompWriteEx - - Description: LZ77ksȂ֐(őlength̊g) - - Arguments: srcp kf[^ւ̃|C^ - size kf[^TCY - dstp kf[^ւ̃|C^ - kf[^傫TCỸobt@KvłB - - Returns: k̃f[^TCYB - k̃f[^kO傫Ȃꍇɂ͈k𒆒f0Ԃ܂B - *---------------------------------------------------------------------------*/ -static u32 LZCompWriteEx(u8 *srcp, u32 size, u8 *dstp, u8 lzSearchOffset, BOOL ex_available ) -{ - static LZCompressInfo sLZInfo; - - u32 LZDstCount; // kf[^̃oCg - u8 LZCompFlags; // k̗LtOn - u8 *LZCompFlagsp; // LZCompFlags i[郁̈|Cg - u16 lastOffset; // vf[^܂ł̃ItZbg (̎_ł̍Œvf[^) - u32 lastLength; // vf[^ (̎_ł̍Œvf[^) - u8 i; - const u32 MAX_LENGTH = (ex_available)? (0xFFFF + 0xFF + 0xF + 3) : (0xF + 3); - - if ( size < 0x1000000 && size > 0 ) - { - *(u32 *)dstp = size << 8 | LZ_CODE_HEADER | (ex_available? 1 : 0 ); // f[^Ewb_ - dstp += 4; - LZDstCount = 4; - } - else - { - *(u32 *)dstp = LZ_CODE_HEADER | (ex_available? 1 : 0); - *(u32 *)(dstp + 4) = size; - dstp += 8; - LZDstCount = 8; - } - LZInitTable( &sLZInfo ); - - while (size > 0) - { - LZCompFlags = 0; - LZCompFlagsp = dstp++; // tOn̊i[ - LZDstCount++; - - // tOn8rbgf[^ƂĊi[邽߁A8񃋁[v - for (i = 0; i < 8; i++) - { - LZCompFlags <<= 1; // (i=0) ͓ɈӖ͂Ȃ - if (size <= 0) - { - // I[ɗꍇ̓tOŌ܂ŃVtgĂI - continue; - } - - if ( (lastLength = SearchLZ(&sLZInfo, srcp, size, &lastOffset, lzSearchOffset, MAX_LENGTH)) != 0) - { - u32 length; - // k”\ȏꍇ̓tO𗧂Ă - LZCompFlags |= 0x1; - - if ( ex_available ) - { - if ( lastLength >= 0xFF + 0xF + 3 ) - { - length = lastLength - 0xFF - 0xF - 3; - *dstp++ = (u8)( 0x10 | (length >> 12) ); - *dstp++ = (u8)( length >> 4 ); - LZDstCount += 2; - } - else if ( lastLength >= 0xF + 2 ) - { - length = lastLength - 0xF - 2; - *dstp++ = (u8)( length >> 4 ); - LZDstCount += 1; - } - else - { - length = lastLength - 1; - } - } - else - { - length = lastLength - 3; - } - // ItZbg͏4rbgƉ8rbgɕĊi[ - *dstp++ = (u8)( length << 4 | (lastOffset - 1) >> 8 ); - *dstp++ = (u8)( (lastOffset - 1) & 0xFF ); - LZDstCount += 2; - LZSlide( &sLZInfo, srcp, lastLength); - srcp += lastLength; - size -= lastLength; - } - else - { - // kȂ - LZSlide(&sLZInfo, srcp, 1); - *dstp++ = *srcp++; - size--; - LZDstCount++; - } - } // 8񃋁[vI - *LZCompFlagsp = LZCompFlags; // tOni[ - } - - // 4oCgEACg - // ACgpf[^0 ̓f[^TCYɊ܂߂Ȃ - i = 0; - while ((LZDstCount + i) & 0x3) - { - *dstp++ = 0; - i++; - } - - return LZDstCount; -} - - -//-------------------------------------------------------- -// LZ77kŃXCh̒Œv܂B -// Arguments: startp f[^̊Jnʒu|C^ -// nextp Jnf[^̃|C^ -// remainSize cf[^TCY -// offset vItZbgi[̈ւ̃|C^ -// Return : v񂪌‚ꍇ TRUE -// ‚Ȃꍇ FALSE -//-------------------------------------------------------- -static u32 SearchLZ( const LZCompressInfo * info, const u8 *nextp, u32 remainSize, u16 *offset, u16 minOffset, u32 maxLength ) -{ - const u8 *searchp; - const u8 *headp, *searchHeadp; - u16 currOffset; - u32 currLength = 2; - u32 tmpLength; - s32 w_offset; - const s16 * const LZOffsetTable = info->LZOffsetTable; - const u16 windowPos = info->WindowPos; - const u16 windowLen = info->WindowLen; - - if (remainSize < 3) - { - return 0; - } - - w_offset = info->LZByteTable[*nextp]; - - while (w_offset != -1) - { - if (w_offset < windowPos) - { - searchp = nextp - windowPos + w_offset; - } - else - { - searchp = nextp - windowLen - windowPos + w_offset; - } - - /* ĂǂA͂ɍ */ - if (*(searchp + 1) != *(nextp + 1) || *(searchp + 2) != *(nextp + 2)) - { - w_offset = LZOffsetTable[w_offset]; - continue; - } - - if (nextp - searchp < minOffset) - { - // VRAM2oCgANZXȂ̂ (VRAMf[^ǂݏoꍇ邽)A - // Ώۃf[^2oCgÕf[^ɂȂ΂ȂȂB - // - // ItZbg12rbgŊi[邽߁A4096ȉ - break; - } - tmpLength = 3; - searchHeadp = searchp + 3; - headp = nextp + 3; - - while (((u32)(headp - nextp) < remainSize) && (*headp == *searchHeadp)) - { - headp++; - searchHeadp++; - tmpLength++; - - // vőȂ̂ŁAI - if (tmpLength == maxLength) - { - break; - } - } - if (tmpLength > currLength) - { - // ő咷ItZbgXV - currLength = tmpLength; - currOffset = (u16)(nextp - searchp); - if (currLength == maxLength) - { - // vőȂ̂ŁAIB - break; - } - } - w_offset = LZOffsetTable[w_offset]; - } - - if (currLength < 3) - { - return 0; - } - *offset = currOffset; - return currLength; -} - - -//=========================================================================== -// nt} -//=========================================================================== -#define HUFF_END_L 0x80 -#define HUFF_END_R 0x40 - -typedef struct -{ - u16 No; // f[^No - s16 PaNo; // eNo - u32 Freq; // opx - s16 ChNo[2]; // qNo (0: C 1: E) - u16 PaDepth; // em[h̐[ - u16 LeafDepth; // t܂ł̐[ - u32 HuffCode; // nt} - u8 Bit; // m[h̃rbgf[^ - u16 HWord; // eԐߓ_ɂāA̐ߓ_[gƂ镔؂ HuffTree i[ɕKvȃ -} -HuffData; - -typedef struct -{ - u8 leftOffsetNeed; // ̎qߓ_ւ̃ItZbgKvȂ1 - u8 rightOffsetNeed; // E̎qߓ_ւ̃ItZbgKvȂ1 - u16 leftNodeNo; // ̎qߓ_No - u16 rightNodeNo; // E̎qߓ_No -} -HuffTreeCtrlData; - -// nt}[Nobt@\ -typedef struct -{ - HuffData huffTable[ 512 ]; // huffTable[ 512 ]; 12288B - u8 huffTree [ 256 * 2 ]; // huffTree[ 256 * 2 ]; 512B - HuffTreeCtrlData huffTreeCtrl[ 256 ]; // huffTreeCtrl[ 256 ]; 1536B - u16 huffTreeTop; // - u8 bitSize; // - u8 padding_[1]; // -} -HuffCompressionInfo; // v 14340B - -static void HuffInitTable( HuffCompressionInfo* info, u8 bitSize ); -static void HuffCountData( HuffData* table, const u8 *srcp, u32 size, u8 bitSize ); -static void HuffConstructTree( HuffCompressionInfo *info, u8 bitSize ); -static u32 HuffExportTree( u8* dstp, HuffCompressionInfo* info ); -static u32 HuffConvertData( const HuffData *table, const u8* srcp, u8* dstp, u32 srcSize, u8 bitSize ); - -static void HuffAddParentDepthToTable( HuffData *table, u16 leftNo, u16 rightNo ); -static void HuffAddCodeToTable ( HuffData *table, u16 nodeNo, u32 paHuffCode ); -static u16 HuffAddCountHWordToTable ( HuffData *table, u16 nodeNo ); - -static u16 HuffMakeNode ( HuffData* table, u8 bitSize ); -static void HuffMakeHuffTree ( HuffCompressionInfo* info, u16 rootNo ); -static void HuffMakeSubsetHuffTree ( HuffCompressionInfo* info, u16 huffTreeNo, BOOL rightNodeFlag ); -static BOOL HuffRemainingNodeCanSetOffset( HuffCompressionInfo* info, u16 costHWord ); -static void HuffSetOneNodeOffset ( HuffCompressionInfo* info, u16 huffTreeNo, BOOL rightNodeFlag ); - -HuffCompressionInfo sHuffCompressionInfo; - -/*---------------------------------------------------------------------------* - Name: HuffCompWrite - Description: nt}k - Arguments: *srcp - size - *dstp - huffBitSize - Returns: None. - *---------------------------------------------------------------------------*/ -static u32 HuffCompWrite(u8 *srcp, u32 size, u8 *dstp, u8 huffBitSize) -{ - u32 huffDstCount; // kf[^̃oCg - u32 offset; - HuffCompressionInfo* info = &sHuffCompressionInfo; - - u16 huffDataNum = 1 << huffBitSize; // 8->256, 4->16 - - // e[u - HuffInitTable( info, huffBitSize ); - - // opx`FbN - HuffCountData( info->huffTable, srcp, size, huffBitSize ); - - // nt}e[u쐬 - HuffConstructTree( info, huffBitSize ); - - // f[^Ewb_ - if ( size < 0x1000000 && size > 0 ) - { - *(u32 *)dstp = size << 8 | HUFF_CODE_HEADER | huffBitSize; - offset = 4; - } - else - { - *(u32 *)dstp = HUFF_CODE_HEADER | huffBitSize; - *(u32 *)(dstp + 4) = size; - offset = 8; - } - huffDstCount = offset; - - // nt}e[uoCio - huffDstCount += HuffExportTree( &dstp[ huffDstCount ], info ); - - // nt}e[uɂf[^ϊ - huffDstCount += HuffConvertData( info->huffTable, srcp, &dstp[ huffDstCount ], size, huffBitSize ); - - return huffDstCount; -} - - - - -/*---------------------------------------------------------------------------* - Name: HuffInitTable - Description: nt}e[ȕ - Arguments: table - size - Returns: None. - *---------------------------------------------------------------------------*/ -static void HuffInitTable( HuffCompressionInfo* info, u8 bitSize ) -{ - u32 tableSize = (1 << bitSize); - u32 i; - - info->huffTreeTop = 1; - info->bitSize = bitSize; - - // huffTable - { - HuffData* table = info->huffTable; - - const HuffData HUFF_TABLE_INIT_DATA = { 0, 0, 0, {-1, -1}, 0, 0, 0, 0, 0 }; - for ( i = 0; i < tableSize * 2U; i++ ) - { - table[ i ] = HUFF_TABLE_INIT_DATA; - table[ i ].No = (u16)i; - } - } - - // huffTree, huffTreeCtrl - { - const HuffTreeCtrlData HUFF_TREE_CTRL_INIT_DATA = { 1, 1, 0, 0 }; - u8* huffTree = info->huffTree; - HuffTreeCtrlData* huffTreeCtrl = info->huffTreeCtrl; - - for ( i = 0; i < 256; i++ ) - { - huffTree[ i * 2 ] = 0; - huffTree[ i * 2 + 1 ] = 0; - huffTreeCtrl[ i ] = HUFF_TREE_CTRL_INIT_DATA; - } - } -} - - -/*---------------------------------------------------------------------------* - Name: HuffCountData - Description: opx̃JEg - Arguments: table - *srcp - size - bitSize - Returns: None. - *---------------------------------------------------------------------------*/ -static void HuffCountData( HuffData* table, const u8 *srcp, u32 size, u8 bitSize ) -{ - u32 i; - u8 tmp; - - if ( bitSize == 8 ) - { - for ( i = 0; i < size; i++ ) - { - table[ srcp[ i ] ].Freq++; // 8rbg - } - } - else - { - for ( i = 0; i < size; i++ ) // 4rbg - { - tmp = (srcp[ i ] & 0xf0) >> 4; - table[ tmp ].Freq++; // 4rbgɊi[// ǂł - tmp = srcp[ i ] & 0x0f; - table[ tmp ].Freq++; // ͕̂Ƃ - } - } -} - - -/*---------------------------------------------------------------------------* - Name: HuffConstructTree - Description: nt}c[\z - Arguments: *table - dataNum - Returns: None. - *---------------------------------------------------------------------------*/ -static void HuffConstructTree( HuffCompressionInfo *info, u8 bitSize ) -{ - HuffData* table = info->huffTable; - u16 rootNo; // 񕪖؂̃[gNo - - // opxm[h\z - rootNo = HuffMakeNode( table, bitSize ); - - // nt}R[h (table[i].HuffCode ) - HuffAddCodeToTable( table, rootNo, 0x00 ); // PaDepth̃rbgAHuffCode ̉ʃrbg}XN̂nt}R[h - - // eԐߓ_ɂāA̐ߓ_[gƂ镔؂ huffTree i[ɕKvȃʂ̌vZ - HuffAddCountHWordToTable( table, rootNo ); - - // sHuffTreeBuf.huffTree 쐬 - HuffMakeHuffTree( info, rootNo ); - - info->huffTree[0] = (u8)( --info->huffTreeTop ); -} - - -/*---------------------------------------------------------------------------* - Name: HuffMakeNode - Description: opxm[hf[^\z - Arguments: table - Returns: None. - *---------------------------------------------------------------------------*/ -static u16 -HuffMakeNode( HuffData* table, u8 bitSize ) -{ - u16 dataNum = ( 1 << bitSize ); - u16 tableTop = (u16)dataNum; // e[u쐬́Ae[ugbvNo - - u32 i; - s32 leftNo, rightNo; // 2؍쐬̃m[hNo - u16 rootNo; // 񕪖؂̃[gNo - - leftNo = -1; - rightNo = -1; - while ( 1 ) - { - // Freq̏ؒ_2’T 1‚͕K‚͂ - // q_()̒T - for ( i = 0; i < tableTop; i++ ) - { - if ( ( table[i].Freq == 0 ) || - ( table[i].PaNo != 0 ) ) - { - continue; - } - - if ( leftNo < 0 ) - { - leftNo = i; - } - else if ( table[i].Freq < table[ leftNo ].Freq ) - { - leftNo = i; - } - } - - // q_(E)̒T - for ( i = 0; i < tableTop; i++ ) - { - if ( ( table[i].Freq == 0 ) || - ( table[i].PaNo != 0 ) || - ( i == leftNo ) ) - { - continue; - } - - if ( rightNo < 0 ) - { - rightNo = i; - } - else if ( table[i].Freq < table[ rightNo ].Freq ) - { - rightNo = i; - } - } - - // 1‚ȂAe[u쐬I - if ( rightNo < 0 ) - { - // lނȂ݂Ȃꍇɂ01ǂlƂȂm[hP쐬 - if ( tableTop == dataNum ) - { - if ( leftNo < 0 ) - { - leftNo = 0; - } - table[ tableTop ].Freq = table[ leftNo ].Freq; - table[ tableTop ].ChNo[0] = (s16)leftNo; - table[ tableTop ].ChNo[1] = (s16)leftNo; - table[ tableTop ].LeafDepth = 1; - table[ leftNo ].PaNo = (s16)tableTop; - table[ leftNo ].Bit = 0; - table[ leftNo ].PaDepth = 1; - } - else - { - tableTop--; - } - rootNo = tableTop; - return rootNo; - } - - // ؂ƉE؂𓝍钸_쐬 - table[ tableTop ].Freq = table[ leftNo ].Freq + table[ rightNo ].Freq; - table[ tableTop ].ChNo[0] = (s16)leftNo; - table[ tableTop ].ChNo[1] = (s16)rightNo; - if ( table[ leftNo ].LeafDepth > table[ rightNo ].LeafDepth ) - { - table[ tableTop ].LeafDepth = (u16)( table[ leftNo ].LeafDepth + 1 ); - } - else - { - table[ tableTop ].LeafDepth = (u16)( table[ rightNo ].LeafDepth + 1 ); - } - - table[ leftNo ].PaNo = table[ rightNo ].PaNo = (s16)( tableTop ); - table[ leftNo ].Bit = 0; - table[ rightNo ].Bit = 1; - - HuffAddParentDepthToTable( table, (u16)leftNo, (u16)rightNo ); - - tableTop++; - leftNo = rightNo = -1; - } -} - - -//----------------------------------------------------------------------- -// 2؍쐬ɁA؂𓝍ƂɁA؂̊e\m[h̐[{1 -//----------------------------------------------------------------------- -static void HuffAddParentDepthToTable( HuffData *table, u16 leftNo, u16 rightNo ) -{ - table[ leftNo ].PaDepth++; - table[ rightNo ].PaDepth++; - - if ( table[ leftNo ].LeafDepth != 0 ) - { - HuffAddParentDepthToTable( table, (u16)table[ leftNo ].ChNo[0], (u16)table[ leftNo ].ChNo[1] ); - } - if ( table[ rightNo ].LeafDepth != 0 ) - { - HuffAddParentDepthToTable( table, (u16)table[ rightNo ].ChNo[0], (u16)table[ rightNo ].ChNo[1] ); - } -} - -//----------------------------------------------------------------------- -// nt}R[h -//----------------------------------------------------------------------- -static void HuffAddCodeToTable( HuffData* table, u16 nodeNo, u32 paHuffCode ) -{ - table[ nodeNo ].HuffCode = (paHuffCode << 1) | table[ nodeNo ].Bit; - - if ( table[ nodeNo ].LeafDepth != 0 ) - { - HuffAddCodeToTable( table, (u16)table[ nodeNo ].ChNo[0], table[ nodeNo ].HuffCode ); - HuffAddCodeToTable( table, (u16)table[ nodeNo ].ChNo[1], table[ nodeNo ].HuffCode ); - } -} - - -//----------------------------------------------------------------------- -// ԃm[h huffTree 쐬ɕKvƂf[^ -//----------------------------------------------------------------------- -static u16 HuffAddCountHWordToTable( HuffData *table, u16 nodeNo) -{ - u16 leftHWord, rightHWord; - - switch ( table[ nodeNo ].LeafDepth ) - { - case 0: - return 0; - case 1: - leftHWord = rightHWord = 0; - break; - default: - leftHWord = HuffAddCountHWordToTable( table, (u16)table[nodeNo].ChNo[0] ); - rightHWord = HuffAddCountHWordToTable( table, (u16)table[nodeNo].ChNo[1] ); - break; - } - - table[ nodeNo ].HWord = (u16)( leftHWord + rightHWord + 1 ); - return (u16)( leftHWord + rightHWord + 1 ); -} - - -//----------------------------------------------------------------------- -// nt}R[h\쐬 -//----------------------------------------------------------------------- -static void HuffMakeHuffTree( HuffCompressionInfo* info, u16 rootNo ) -{ - s16 i; - s16 costHWord, tmpCostHWord; // ؂̃R[h\쐬Ȃ̃RXg ől̐ߓ_̕؃R[h\ - s16 costOffsetNeed, tmpCostOffsetNeed; - s16 costMaxKey; // RXgŏ̐ߓ_ huffTreeBuf.huffTree 肷邽߂̏ - BOOL costMaxRightFlag; - u16 offsetNeedNum; - BOOL tmpRightFlag; - const u32 MAX_COST = 64; - - info->huffTreeTop = 1; - costOffsetNeed = 0; - - info->huffTreeCtrl[0].leftOffsetNeed = 0; // gpȂ (e[uTCYƂĎgp) - info->huffTreeCtrl[0].rightNodeNo = rootNo; - - - while ( 1 ) // return ܂ - { - // ItZbgݒ肷Kv̂m[ȟvZ - offsetNeedNum = 0; - for ( i = 0; i < info->huffTreeTop; i++ ) - { - if ( info->huffTreeCtrl[ i ].leftOffsetNeed ) - { - offsetNeedNum++; - } - if ( info->huffTreeCtrl[ i ].rightOffsetNeed ) - { - offsetNeedNum++; - } - } - - // őRXg̐ߓ_ - costHWord = -1; - costMaxKey = -1; - tmpRightFlag = 0; - - for ( i = 0; i < info->huffTreeTop; i++ ) - { - tmpCostOffsetNeed = (u16)( info->huffTreeTop - i ); - - // ̎qߓ_̃RXg] - if ( info->huffTreeCtrl[i].leftOffsetNeed ) - { - tmpCostHWord = (s16)info->huffTable[ info->huffTreeCtrl[i].leftNodeNo ].HWord; - - if ( (u32)(tmpCostHWord + offsetNeedNum) > MAX_COST ) - { - goto leftCostEvaluationEnd; - } - if ( ! HuffRemainingNodeCanSetOffset( info, (u16)tmpCostHWord ) ) - { - goto leftCostEvaluationEnd; - } - if ( tmpCostHWord > costHWord ) - { - costMaxKey = i; - costMaxRightFlag = 0; - } - else if ( (tmpCostHWord == costHWord) && (tmpCostOffsetNeed > costOffsetNeed) ) - { - costMaxKey = i; - costMaxRightFlag = 0; - } - } -leftCostEvaluationEnd:{} - - if ( info->huffTreeCtrl[i].rightOffsetNeed) - { - tmpCostHWord = (s16)info->huffTable[info->huffTreeCtrl[i].rightNodeNo].HWord; - - if ( (u32)(tmpCostHWord + offsetNeedNum) > MAX_COST ) - { - goto rightCostEvaluationEnd; - } - if ( ! HuffRemainingNodeCanSetOffset( info, (u16)tmpCostHWord ) ) - { - goto rightCostEvaluationEnd; - } - if ( tmpCostHWord > costHWord ) - { - costMaxKey = i; - costMaxRightFlag = 1; - } - else if ( (tmpCostHWord == costHWord) && (tmpCostOffsetNeed > costOffsetNeed) ) - { - costMaxKey = i; - costMaxRightFlag = 1; - } - } -rightCostEvaluationEnd:{} - } - - // ؂܂܂ huffTree Ɋi[ - if ( costMaxKey >= 0 ) - { - HuffMakeSubsetHuffTree( info, (u16)costMaxKey, costMaxRightFlag); - goto nextTreeMaking; - } - else - { - // KvItZbgő̃m[h - for ( i = 0; i < info->huffTreeTop; i++ ) - { - u16 tmp = 0; - tmpRightFlag = 0; - if (info->huffTreeCtrl[i].leftOffsetNeed) - { - tmp = info->huffTable[ info->huffTreeCtrl[i].leftNodeNo ].HWord; - } - if (info->huffTreeCtrl[i].rightOffsetNeed) - { - if ( info->huffTable[info->huffTreeCtrl[i].rightNodeNo ].HWord > tmp ) - { - tmpRightFlag = 1; - } - } - if ( (tmp != 0) || (tmpRightFlag) ) - { - HuffSetOneNodeOffset( info, (u16)i, tmpRightFlag); - goto nextTreeMaking; - } - } - } - return; -nextTreeMaking:{} - } -} - -//----------------------------------------------------------------------- -// ؂܂܂ huffTree Ɋi[ -//----------------------------------------------------------------------- -static void HuffMakeSubsetHuffTree( HuffCompressionInfo* info, u16 huffTreeNo, BOOL rightNodeFlag ) -{ - u16 i; - - i = info->huffTreeTop; - HuffSetOneNodeOffset( info, huffTreeNo, rightNodeFlag ); - - if ( rightNodeFlag ) - { - info->huffTreeCtrl[ huffTreeNo ].rightOffsetNeed = 0; - } - else - { - info->huffTreeCtrl[ huffTreeNo ].leftOffsetNeed = 0; - } - - while ( i < info->huffTreeTop ) - { - if ( info->huffTreeCtrl[ i ].leftOffsetNeed ) - { - HuffSetOneNodeOffset( info, i, 0); - info->huffTreeCtrl[ i ].leftOffsetNeed = 0; - } - if ( info->huffTreeCtrl[ i ].rightOffsetNeed ) - { - HuffSetOneNodeOffset( info, i, 1); - info->huffTreeCtrl[ i ].rightOffsetNeed = 0; - } - i++; - } -} - -//----------------------------------------------------------------------- -// ^ꂽf[^ʂ̕؂WJĂ huffTree \zɎxႪȂׂ -//----------------------------------------------------------------------- -static BOOL HuffRemainingNodeCanSetOffset( HuffCompressionInfo* info, u16 costHWord ) -{ - u16 i; - s16 capacity; - const u32 MAX_COST = 64; - - capacity = (s16)( MAX_COST - costHWord ); - - // ItZbg i قǑ傫̂ŁA\[gAi = 0 -> huffTreeTop ŌvZ΂悢 - for ( i = 0; i < info->huffTreeTop; i++ ) - { - if ( info->huffTreeCtrl[i].leftOffsetNeed ) - { - if ( (info->huffTreeTop - i) <= capacity ) - { - capacity--; - } - else - { - return 0; - } - } - if ( info->huffTreeCtrl[i].rightOffsetNeed ) - { - if ( (info->huffTreeTop - i) <= capacity ) - { - capacity--; - } - else - { - return 0; - } - } - } - - return 1; -} - - -/*---------------------------------------------------------------------------* - Name: HuffSetOneNodeOffset - Description: 1ߓ_Ant}R[h\쐬 - Arguments: *table nt}e[u - huffTreeNo - rightNodeFlag Ẽm[hł邩ǂ̃tO - Returns: None. - *---------------------------------------------------------------------------*/ -static void HuffSetOneNodeOffset( HuffCompressionInfo* info, u16 huffTreeNo, BOOL rightNodeFlag) -{ - u16 nodeNo; - u16 offsetData = 0; - - HuffData* huffTable = info->huffTable; - u8* huffTree = info->huffTree; - HuffTreeCtrlData* huffTreeCtrl = info->huffTreeCtrl; - u16 huffTreeTop = info->huffTreeTop; - - if (rightNodeFlag) - { - nodeNo = huffTreeCtrl[ huffTreeNo ].rightNodeNo; - huffTreeCtrl[ huffTreeNo ].rightOffsetNeed = 0; - } - else - { - nodeNo = huffTreeCtrl[ huffTreeNo ].leftNodeNo; - huffTreeCtrl [huffTreeNo ].leftOffsetNeed = 0; - } - - // ̎qߓ_ - if ( huffTable[ huffTable[nodeNo].ChNo[0] ].LeafDepth == 0) - { - offsetData |= 0x80; - huffTree[ huffTreeTop * 2 + 0 ] = (u8)huffTable[ nodeNo ].ChNo[0]; - huffTreeCtrl[ huffTreeTop ].leftNodeNo = (u8)huffTable[ nodeNo ].ChNo[0]; - huffTreeCtrl[ huffTreeTop ].leftOffsetNeed = 0; // ItZbg͕KvȂȂ - } - else - { - huffTreeCtrl[ huffTreeTop ].leftNodeNo = (u16)huffTable[ nodeNo ].ChNo[0]; // ItZbg͕Kv - } - - // E̎qߓ_ - if ( huffTable[ huffTable[ nodeNo ].ChNo[1] ].LeafDepth == 0 ) - { - offsetData |= 0x40; - huffTree[ huffTreeTop * 2 + 1 ] = (u8)huffTable[nodeNo].ChNo[1]; - huffTreeCtrl[ huffTreeTop ].rightNodeNo = (u8)huffTable[ nodeNo ].ChNo[1]; - huffTreeCtrl[ huffTreeTop ].rightOffsetNeed = 0; // ItZbg͕KvȂȂ - } - else - { - huffTreeCtrl[ huffTreeTop ].rightNodeNo = (u16)huffTable[ nodeNo ].ChNo[1]; // ItZbg͕Kv - } - - offsetData |= (u16)( huffTreeTop - huffTreeNo - 1 ); - huffTree[ huffTreeNo * 2 + (rightNodeFlag? 1 : 0) ] = (u8)offsetData; - - info->huffTreeTop++; -} - - -/*---------------------------------------------------------------------------* - Name: HuffExportTree - - Description: nt}e[uoCio - - Arguments: dstp - info - bitSize - - Returns: - *---------------------------------------------------------------------------*/ -static u32 HuffExportTree( u8* dstp, HuffCompressionInfo* info ) -{ - u32 cnt = 0; - s32 i; - - for ( i = 0; i < (info->huffTreeTop + 1) * 2; i++ ) // c[e[u - { - dstp[ cnt++ ] = ((u8*)info->huffTree)[ i ]; - } - - // 4oCgEACg - // ACgpf[^0 ̓f[^TCYɊ܂߂ (fR[_̃ASYɂ) - while ( cnt & 0x3 ) - { - if ( cnt & 0x1 ) - { - info->huffTreeTop++; - dstp[ 0 ] = dstp[ 0 ] + 1; - } - dstp[ cnt++ ] = 0; - } - return cnt; -} - - -/*---------------------------------------------------------------------------* - Name: HuffConvertData - Description: nt}e[uɃf[^ϊ - Arguments: *table - srcp - dstp - srcSize - bitSize - Returns: None. - *---------------------------------------------------------------------------*/ -static u32 HuffConvertData( const HuffData *table, const u8* srcp, u8* dstp, u32 srcSize, u8 bitSize ) -{ - u32 i, ii, iii; - u8 srcTmp; - u32 bitStream = 0; - u32 streamLength = 0; - u32 dstSize = 0; - - // nt} - for ( i = 0; i < srcSize; i++ ) - { // f[^k - u8 val = srcp[ i ]; - if ( bitSize == 8 ) - { // 8rbgnt} - bitStream = (bitStream << table[ val ].PaDepth) | table[ val ].HuffCode; - streamLength += table[ val ].PaDepth; - for ( ii = 0; ii < streamLength / 8; ii++ ) - { - dstp[ dstSize++ ] = (u8)(bitStream >> (streamLength - (ii + 1) * 8)); - } - streamLength %= 8; - } - else // 4rbgnt} - { - for ( ii = 0; ii < 2; ii++ ) - { - if ( ii ) - { - srcTmp = val >> 4; // 4rbg - } - else - { - srcTmp = val & 0x0F; // 4rbg( fR[_LittleEndianŃANZX֌W ) - } - bitStream = (bitStream << table[ srcTmp ].PaDepth) | table[ srcTmp ].HuffCode; - streamLength += table[srcTmp].PaDepth; - for ( iii = 0; iii < streamLength / 8; iii++ ) - { - dstp[ dstSize++ ] = (u8)(bitStream >> (streamLength - (iii + 1) * 8)); - } - streamLength %= 8; - } - } - } - if ( streamLength != 0 ) - { - dstp[ dstSize++ ] = (u8)(bitStream << (8 - streamLength)); - } - - // 4oCgEACg - // ACgpf[^0 ̓f[^TCYɊ܂߁uv - // nt}!@gGfBAϊ邽߁AACgEf[^Ƀf[^i[ - while ( dstSize & 0x3 ) - { - dstp[ dstSize++ ] = 0; - } - - // gGfBAϊ - for ( i = 0; i < dstSize / 4; i++ ) - { - u8 tmp; - tmp = dstp[i * 4 + 0]; - dstp[i * 4 + 0] = dstp[i * 4 + 3]; - dstp[i * 4 + 3] = tmp; // Xbv - tmp = dstp[i * 4 + 1]; - dstp[i * 4 + 1] = dstp[i * 4 + 2]; - dstp[i * 4 + 2] = tmp; // Xbv - } - return dstSize; -} - - - -/*---------------------------------------------------------------------------* - Name: HuffVerifyTable - - Description: nt}e[u̐`FbN - - Arguments: nt}e[uւ̃|C^ - - Returns: ȃe[ȕꍇɂ TRUE - sȃe[ȕꍇɂ FALSE - *---------------------------------------------------------------------------*/ -static BOOL -HuffVerifyTable( const void* pTable, u8 bit ) -{ - enum { FLAGS_ARRAY_NUM = 512 / 8 }; /* 64Byte */ - u8* treep = (u8*)pTable; - u8* treeStartp = treep + 1; - u32 treeSize = *treep; - u8* treeEndp = (u8*)pTable + (treeSize + 1) * 2; - u32 i; - u8 end_flags[ FLAGS_ARRAY_NUM ]; - u32 idx; - - for ( i = 0; i < FLAGS_ARRAY_NUM; i++ ) - { - end_flags[ i ] = 0; - } - - if ( bit == 4 ) - { - if ( treeSize >= 0x10 ) - { - return FALSE; - } - } - - idx = 1; - treep = treeStartp; - while ( treep < treeEndp ) - { - if ( (end_flags[ idx / 8 ] & (1 << (idx % 8) )) == 0 ) - { - u32 offset = (u32)( ( (*treep & 0x3F) + 1 ) << 1); - u8* nodep = (u8*)( (((u32)treep >> 1) << 1) + offset ); - - // I[̃ACgpf[^͓ǂݔ΂ - if ( *treep == 0 && idx >= (treeSize * 2) ) - { - goto next; - } - if ( nodep >= treeEndp ) - { - return FALSE; - } - if ( *treep & 0x80 ) - { - u32 left = (idx & ~0x1) + offset; - end_flags[ left / 8 ] |= (u8)( 1 << (left % 8) ); - } - if ( *treep & 0x40 ) - { - u32 right = (idx & ~0x1) + offset + 1; - end_flags[ right / 8 ] |= (u8)( 1 << (right % 8) ); - } - } - next: - ++idx; - ++treep; - } - return TRUE; -} - - - - -//############################################################################################## -//############################################################################################## -// WJ֘Å֐͈ȉ -//############################################################################################## -//############################################################################################## - -//================================================================================== -// Rawf[^WJ -//================================================================================== -static s32 RawRead( const u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize ) -{ -// memcpy(dstp, srcp, size); - u32 i; - - if ( srcSize < dstSize ) - { - return -1; - } - - for (i = 0; i < dstSize; i++) - { - *dstp = *srcp; - dstp++; - srcp++; - } - - return dstSize; -} - -//================================================================================== -// kf[^WJ -//================================================================================== -static s32 DiffFiltRead( const u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize, u8 diffBitSize ) -{ - s32 DiffCount = 0; // WJf[^̃oCg - u32 i; - - u16 *src16p = (u16 *)srcp; - u16 *dst16p = (u16 *)dstp; - - // \[X̃obt@I[o[t[`FbN - if ( dstSize > srcSize ) - { - return -1; - } - - if (diffBitSize == 8) - { -#ifdef DEBUG_PRINT_DIFFFILT - for (i = 0; i < 16; i++) - { - dbg_printf_dif(stderr, "srcp[%d] = %x\n", i, srcp[i]); - } -#endif - dstp[DiffCount] = srcp[0]; // 擪f[^̂ݍ - DiffCount++; - for (i = 1; i < dstSize; i++, DiffCount++) - { - dbg_printf_dif(stderr, "dstp[%x] = srcp[%d]+dstp[%d] = %x + %x = %x\n", - DiffCount, i, i - 1, srcp[i], dstp[i - 1], srcp[i] - dstp[i - 1]); - dstp[DiffCount] = srcp[i] + dstp[i - 1]; // f[^i[ - } - } - else // 16rbgTCY - { - dst16p[DiffCount / 2] = src16p[0]; - DiffCount += 2; - for (i = 1; i < dstSize / 2; i++, DiffCount += 2) - { - dst16p[DiffCount / 2] = src16p[i] + dst16p[i - 1]; - } - } - - // 4oCgEACg - // ACgpf[^0 ̓f[^TCYɊ܂߂Ȃ - i = 0; - while ((DiffCount + i) & 0x3) - { - dstp[DiffCount + i] = 0; - i++; - } - - return DiffCount; -} - -//================================================================================== -// OXkf[^WJ -//================================================================================== -static s32 RLCompRead( const u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize ) -{ - u32 RLDstCount; // WJf[^̃oCg - u32 RLSrcCount; // WJΏۃf[^̏σf[^(oCgP) - u32 i; - - RLSrcCount = 0; - RLDstCount = 0; - while ( RLDstCount < dstSize ) - { - if ( srcp[ RLSrcCount ] & 0x80 ) // (OXĂ) - { - u8 length = (srcp[ RLSrcCount++ ] & 0x7f) + 3; // f[^i[(R̉ʂ𗚂Ă̂ŁAۂ+3čl) - // obt@I[o[`FbN - if ( RLSrcCount >= srcSize ) - { - return -1; - } - if ( RLDstCount + length > dstSize ) - { - return -1; - } - for ( i = 0; i < length; i++ ) - { - dstp[ RLDstCount++ ] = srcp[ RLSrcCount ]; - } - RLSrcCount++; - } - else // f[^Rs[(OXĂȂ) - { - u8 length = srcp[ RLSrcCount++ ] + 1; // (srcp[RLSrcCount] & 0x7f Ɠ) - // obt@I[o[`FbN - if ( RLSrcCount + length > srcSize ) - { - return -1; - } - if ( RLDstCount + length > dstSize ) - { - return -1; - } - - for ( i = 0; i < length; i++ ) - { // f[^ -1 Ċi[Ă邽 +1 - dstp[ RLDstCount++ ] = srcp[ RLSrcCount++ ]; - } - } - } - - // 4oCgEACg - // ACgpf[^0 ̓f[^TCYɊ܂߂Ȃ - i = 0; - while ((RLDstCount + i) & 0x3) - { - dstp[RLDstCount + i] = 0; - i++; - } - - return RLDstCount; -} - -//================================================================================== -// LZ77kf[^WJ -//================================================================================== -static s32 LZCompReadEx( const u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize, BOOL ex_available) -{ - u32 LZDstCount; // WJf[^̃oCg - u32 LZSrcCount; // WJΏۃf[^̏σf[^(oCgP) - u32 i; - - LZSrcCount = 0; - LZDstCount = 0; - - while ( LZDstCount < dstSize ) - { - u8 compFlags = srcp[LZSrcCount++]; // k̗LtO - if ( LZSrcCount > srcSize ) - { - return -1; - } - - for ( i = 0; i < 8; i++ ) - { - if (compFlags & 0x80) // kĂ - { - u32 length; // Ώۃf[^ - u16 offset; // vf[^ItZbg - 1 (2ȏ)(4rbgCoffsetł11-8rbg) - - length = srcp[ LZSrcCount ] >> 4; - - if ( ex_available ) - { - if ( length == 1 ) - { - length = (srcp[ LZSrcCount ] & 0x0F) << 12; - LZSrcCount++; - length |= srcp[ LZSrcCount ] << 4; - LZSrcCount++; - length |= srcp[ LZSrcCount ] >> 4; - length += 0xFF + 0xF + 3; - } - else if ( length == 0 ) - { - length = (srcp[ LZSrcCount ] & 0x0F) << 4; - LZSrcCount++; - length |= srcp[ LZSrcCount ] >> 4; - length += 0xF + 2; - } - else - { - length += 1; - } - } - else - { - length += 3; - } - offset = (srcp[LZSrcCount] & 0x0F) << 8; - LZSrcCount++; - offset |= srcp[LZSrcCount]; - offset++; - LZSrcCount++; - - // obt@I[o[`FbN - if ( LZSrcCount > srcSize ) - { - return -1; - } - if ( LZDstCount + length > dstSize ) - { - return -1; - } - if ( LZDstCount < offset ) - { - return -1; - } - - // WJ - do - { - dstp[ LZDstCount++ ] = dstp[ LZDstCount - offset ]; - } while ( --length > 0 ); - } - else // k - { - dstp[ LZDstCount++ ] = srcp[ LZSrcCount++ ]; - if ( LZSrcCount > srcSize ) - { - return -1; - } - } - // TCYɒBI - if ( LZDstCount >= dstSize ) - { - break; - } - compFlags <<= 1; - } - } - - // 4oCgEACg - // ACgpf[^0 ̓f[^TCYɊ܂߂Ȃ - i = 0; - while ( (LZDstCount + i) & 0x3 ) - { - dstp[ LZDstCount + i ] = 0; - i++; - } - return LZDstCount; -} - - -//================================================================================== -// nt}f[^WJ -//================================================================================== -static s32 HuffCompRead( const u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize, u8 huffBitSize ) -{ - u16 treeSize; // huffTreẽTCY * 2 - u32 HuffSrcCount; // WJΏۃf[^̏σf[^(oCgP) - u32 HuffDstCount; // WJf[^ - u32 currentBitStream; - u8 currentBit; - u16 treeAddr; - u8 treeData; - u8 preTreeData; - u8 isUpper4bits = 0; - - treeSize = ((*srcp) + 1) * 2; - HuffSrcCount = treeSize; // f[^̐擪擾 - HuffDstCount = 0; - treeAddr = 1; - preTreeData = srcp[ 1 ]; - - dbg_printf_huff(stderr, "HuffSrcCount = %d\n", HuffSrcCount); - - // nt}e[u̐`FbN - if ( ! HuffVerifyTable( srcp, huffBitSize ) ) - { - return -1; - } - if ( srcSize < treeSize ) - { - return -1; - } - - // WJ - while ( HuffDstCount < dstSize ) // return ܂ - { - u16 i; - - currentBitStream = srcp[HuffSrcCount++]; - currentBitStream |= srcp[HuffSrcCount++] << 8; - currentBitStream |= srcp[HuffSrcCount++] << 16; - currentBitStream |= srcp[HuffSrcCount++] << 24; - - if ( HuffSrcCount > srcSize ) - { - return -1; - } - - for ( i = 0; i < 32; i++ ) - { - currentBit = (u8)(currentBitStream >> 31); - currentBitStream <<= 1; - - if (((currentBit == 0) && (preTreeData & 0x80)) || - ((currentBit == 1) && (preTreeData & 0x40))) - { - if (huffBitSize == 8) - { - treeData = srcp[(treeAddr * 2) + currentBit]; // f[^ - dstp[HuffDstCount++] = treeData; - } - else if (isUpper4bits) - { - treeData |= (srcp[(treeAddr * 2) + currentBit]) << 4; - dstp[HuffDstCount++] = treeData; - isUpper4bits = 0; - } - else - { - treeData = srcp[(treeAddr * 2) + currentBit]; - isUpper4bits = 1; - } - - if (HuffDstCount >= dstSize) - { - return HuffDstCount; - } - - treeAddr = 1; - preTreeData = srcp[ 1 ]; - } - else - { - preTreeData = srcp[(treeAddr * 2) + currentBit]; // ItZbgEf[^ - treeAddr += (preTreeData & 0x3f) + 1; - } - } - } - return HuffDstCount; -} - - -//================================================================================== -// kt@Čt@CTCY擾 -//================================================================================== -EXTERN u32 STDCALL nitroGetDecompFileSize( const void* srcp ) -{ - const u32* p = (const u32*)srcp; - - u32 size = *p >> 8; - if ( size == 0 ) - { - size = *(p + 1); - } - return size; -} - - -//================================================================================== -// f[^WJ֐ (WĴ߁AŌrawf[^WJpwb_ȂƓ삵Ȃ) -//================================================================================== -EXTERN s32 STDCALL nitroDecompress( const u8 *srcp, u32 srcSize, u8 *dstp, s8 depth ) -{ - // rawData // f[^Ewb_ - // *(u32 *)pReadBuf = size << 8 | 0; - // [i+3] [i+2] [i+1](TCY) | [0000 0000] - // DiffFilt - // *(u32 *)dstp = size << 8 | 0x80 | diffBitSize/8; - // [i+3] [i+2] [i+1](TCY) | [1000 00XX] - // RL - // *(u32 *)dstp = size << 8 | 0x30; - // [i+3] [i+2] [i+1](TCY) | [0011 0000] - // LZ77 - // *(u32 *)dstp = size << 8 | 0x10; - // [i+3] [i+2] [i+1](TCY) | [0001 0000] - // Huffman - // *(u32 *)dstp = size << 8 | 0x20 | huffBitSize; - // [i+3] [i+2] [i+1](TCY) | [0010 XX00] - u32 header; - s32 dstSize; - u32 memSize = srcSize * 3 + 256 * 2; - u8 *pReadBuf; // kf[^̐擪Ԓnw|C^ - u8 offset; - s8 curDepth = 0; - s8 targetDepth; - - pCompBuf[0] = (u8 *)malloc(memSize); - pCompBuf[1] = (u8 *)malloc(memSize); - pReadBuf = pCompBuf[0]; - - // malloc `FbN - if (pCompBuf[0] == NULL || pCompBuf[1] == NULL) - { - fprintf(stderr, "Error: Memory is not enough.\n"); - exit(1); - } - - compBufNo = 1; - memcpy(pReadBuf, srcp, srcSize); - - if (depth < 1) - { - targetDepth = -1; - } - else - { - targetDepth = depth; - } - dbg_printf(stderr, "nitroCompress \t(Compressed size is 0x%x)\n", srcSize); - - while (1) - { - // targetDepthw̍ۂ̏I - if (curDepth == targetDepth) - { - dbg_printf(stderr, "nitroDecompress Raw \t(Decompressed size will be 0x%x)\n", - dstSize); - dstSize = RawRead(pReadBuf, dstSize, dstp, dstSize); - - if (pCompBuf[0] != NULL) - { - free(pCompBuf[0]); - pCompBuf[0] = NULL; - } - if (pCompBuf[1] != NULL) - { - free(pCompBuf[1]); - pCompBuf[1] = NULL; - } - return dstSize; - } - - header = *(u32 *)pReadBuf; - dstSize = header >> 8; // wb_܂܂ȂTCY, WJ֐ɂwb_܂߂ɓn - offset = 4; - - if ( dstSize == 0 ) - { - dstSize = *(u32 *)(pReadBuf + 4); - offset = 8; - } - - if ( memSize < (u32)dstSize ) - { - memSize = dstSize * 3 + 256 * 2; - pCompBuf[0] = (u8 *)realloc(pCompBuf[0], memSize); - pCompBuf[1] = (u8 *)realloc(pCompBuf[1], memSize); - pReadBuf = pCompBuf[compBufNo ^ 0x1]; - - } - - switch (header & CODE_HEADER_MASK) - { - case DIFF_CODE_HEADER: - { - dbg_printf(stderr, "nitroDecompress Diff %d \t(Decompressed size will be 0x%x)\n", - ((u8)header & 0x03) * 8, dstSize ); - dstSize = - DiffFiltRead(&pReadBuf[offset], srcSize - offset, pCompBuf[compBufNo], dstSize, - ((u8)header & 0x03) * 8); - } - break; - case HUFF_CODE_HEADER: - { - dbg_printf(stderr, "nitroDecompress Huff %d \t(Decompressed size will be 0x%x)\n", - ((u8)header & 0x0f), dstSize); - dstSize = - HuffCompRead(&pReadBuf[offset], srcSize - offset, pCompBuf[compBufNo], dstSize, (u8)header & 0x0f); - } - break; - case LZ_CODE_HEADER: - { - BOOL ex_format = ((header & 0xF) == 0)? FALSE : TRUE; - - dbg_printf(stderr, "nitroDecompress LZ \t(Decompressed size will be 0x%x)\n", - dstSize); - dstSize = LZCompReadEx(&pReadBuf[offset], srcSize - offset, pCompBuf[compBufNo], dstSize, ex_format); - } - break; - case RL_CODE_HEADER: - { - dbg_printf(stderr, "nitroDecompress RL \t(Decompressed size will be 0x%x)\n", - dstSize); - dstSize = RLCompRead(&pReadBuf[offset], srcSize - offset, pCompBuf[compBufNo], dstSize); - } - break; - default: - { - dbg_printf(stderr, "nitroDecompress Raw \t(Decompressed size will be 0x%x)\n", - dstSize); - - dstSize = RawRead(&pReadBuf[offset], srcSize - offset, dstp, dstSize); - if (pCompBuf[0] != NULL) - { - free(pCompBuf[0]); - pCompBuf[0] = NULL; - } - if (pCompBuf[1] != NULL) - { - free(pCompBuf[1]); - pCompBuf[1] = NULL; - } - return dstSize; - } - } - - if ( dstSize < 0 ) - // sȃt@Cʼn𓀂Ɏs - { - dbg_printf(stderr, "decompress fail\n"); - return -1; - } - - // - pReadBuf = pCompBuf[compBufNo]; - compBufNo ^= 0x01; - srcSize = dstSize; - curDepth++; - } -} - -//================================================================================== -// e16iŏo -//================================================================================== -EXTERN void STDCALL debugMemPrint(FILE * fp, u8 *str, u32 size) -{ - u32 i = 0; - - while (str) - { - fprintf(fp, "%4lx:\t0x%2x\n", i, *str); - str++; - i++; - if (i >= size) - { - break; - } - } -} - -//================================================================================== -// e2iŏo -//================================================================================== -EXTERN void STDCALL debugMemBitPrint(FILE * fp, u8 *str, u32 size) -{ - u32 i = 0; - u8 j; - - while (str) - { - if (i >= size) - { - break; - } - - fprintf(fp, "%4lx:\t0x%2x\t(binary\t", i, *str); - for (j = 0; j < 8; j++) - { - fprintf(fp, "%d", *str >> (7 - j) & 0x01); - } - fprintf(fp, " )\n"); - str++; - i++; - } -} - -//================================================================================== -// kOƓWJ̃f[^̔r(WJłĂ΁A"DATA match"Əo͂) -//================================================================================== -EXTERN int STDCALL matchingCheck(u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize) -{ - u32 minSize, i; - u8 dataMatchFlag = 1; - u8 sizeMatchFlag; - - sizeMatchFlag = (srcSize == dstSize); - if (srcSize < dstSize) - { - minSize = srcSize; - } - else - { - minSize = dstSize; - } - - for (i = 0; i < minSize; i++) - { - dbg_printf_match(stderr, "src[%3x], dst[%3x] = %2x , %2x", i, i, srcp[i], dstp[i]); - if (srcp[i] != dstp[i]) - { - dataMatchFlag = 0; - dbg_printf_match(stderr, "\t; mismatch here!"); - } - dbg_printf_match(stderr, "\n"); - } - - if (sizeMatchFlag) - { - fprintf(stderr, "\nSIZE match.\n"); - } - else - { - fprintf(stderr, "\nSIZE mismatch!\n"); - } - - if (dataMatchFlag) - { - fprintf(stderr, "DATA match.\n"); - } - else - { - fprintf(stderr, "DATA mismatch!\n"); - } - - if (dataMatchFlag && sizeMatchFlag) - { - return 1; - } - else - { - return 0; - } -} - - diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/nitroCompLib.h b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/nitroCompLib.h deleted file mode 100644 index 7c96d8db..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/nitroCompLib.h +++ /dev/null @@ -1,127 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NinTendo Compress tool - File: nitroCompLib.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -// nitroCompLib.h : nitroCompLib.DLL ̃C wb_[ t@C -// - -#ifndef __NITROCOMPLIB_H__ -#define __NITROCOMPLIB_H__ - -//=========================================================================================== -// CN[h -//=========================================================================================== -#include -#include -#include -#include -#include "types.h" - -#ifdef WIN32 -#define STDCALL __stdcall -#else -#define STDCALL -#endif - -//=========================================================================================== -// vg^Cv錾 -//=========================================================================================== -// C++p -#ifdef __cplusplus - extern "C" - { -#endif - -//BOOL WINAPI DllMain( HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved); -u8* STDCALL nitroCompMalloc( u32 size ); -void STDCALL nitroCompFree( u8 *p ); -u32 STDCALL nitroCompress ( const u8 *srcp, u32 srcSize, u8 *dstp, char *compList, u8 rawHeader ); -s32 STDCALL nitroDecompress( const u8 *srcp, u32 srcSize, u8 *dstp, s8 depth ); -void STDCALL debugMemPrint ( FILE * fp, u8 *str, u32 size ); -void STDCALL debugMemBitPrint( FILE * fp, u8 *str, u32 size ); -int STDCALL matchingCheck( u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize ); -u32 STDCALL nitroGetDecompFileSize( const void* srcp ); - -#ifdef __cplusplus - } -#endif - -//=========================================================================================== -// ֐̎gp@ -//=========================================================================================== -//---------------------------------------------------------------------------------- -// k̃f[^u߂̃̈m -// kÕf[^2{̗̈mۂ -// -// u32 size kÕf[^TCY -// u32 ͕^łẮA -// unsigned int (nˑ) -// Ԃl -// u8 * k̃f[^̈w|C^ -// (ėp|C^Ȃ̂ŁADȌ^ɃLXg) -// ł͂Ȃ -//---------------------------------------------------------------------------------- -//u8 *nitroCompMalloc(u32 size); - -//---------------------------------------------------------------------------------- -// k̃f[^uĂ̈ -// -// u8 *p k̃f[^̈w|C^ -//---------------------------------------------------------------------------------- -//void nitroCompFree(u8 *p); - -//---------------------------------------------------------------------------------- -// f[^k -// kAk͈compListpĎw -// -// u8 *srcp kΏۃf[^w|C^ -// u32 size kΏۃf[^̃TCY(Pʂ̓oCg) -// u8 *dstp k̃f[^ێf[^̈w|C^ -// \ȗ̈mۂĂKv -// nitroCompMalloc̕Ԃlł悢 -// char *compList kAki[Xg (C̃k) -// d8 : 8rbgtB^ -// d16 : 16rbgtB^ -// r : OX -// lx : LZ77Dxɂ͓f[^̊Jn_ItZbg -// : 2ȏłȂ΂ȂȂD255. -// h4 : 4rbgEnt}k -// h8 : 8rbgEnt}k -// u8 rawHeaderFlag kÕf[^ł邱Ƃwb_t邩ǂ -// wtOD0łΕtA1ł΁AWJ -// f[^ɂwb_tD -// Ԃl -// k̃f[^TCY -//---------------------------------------------------------------------------------- -//u32 nitroCompress(u8 *srcp, u32 size, u8 *dstp, char *compList, u8 rawHeader); - -//---------------------------------------------------------------------------------- -// f[^WJ -// WJAWJ̓f[^̃wb_Ĕf -// -// u8 *srcp WJΏۃf[^w|C^ -// u32 size WJΏۃf[^̃TCY(Pʂ̓oCg) -// u8 *dstp WJ̃f[^ێf[^̈w|C^ -// \ȗ̈mۂĂKv -// nitroCompMalloc̕Ԃlł悢 -// u8 depth WJ[() -// 0̏ꍇ́AkOf[^wb_񂪓܂œWJ -// Ԃl -// WJ̃f[^TCY -//---------------------------------------------------------------------------------- -//u32 nitroDecompress(u8 *srcp, u32 size, u8 *dstp, s8 depth); - -#endif // __NITROCOMPLIB_H__ diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_main.c b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_main.c deleted file mode 100644 index ce37efb2..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_main.c +++ /dev/null @@ -1,1164 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NinTendo Compress tool - File: ntcompress_main.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include "nitroCompLib.h" -#include "ntcompress_test.h" -#include "multipleCompLib.h" -#include "rangeCoder.h" - -#define FOR_NITRO - -#if defined( FOR_NITRO ) - #define INCLUDE_TARGET "nitro" - #define TARGET_NAME "ntrcomp" - #define NTCOMPRESS_VERSION "1.1.0" -#else // for revolution - #define SUPPORT_LH_LRC - #define INCLUDE_TARGET "revolution" - #define TARGET_NAME "ntcompress" - #define NTCOMPRESS_VERSION "2.0.0" -#endif - - -#define uint unsigned int -#define ushort unsigned short -#define ulong unsigned long -#define uchar unsigned char - - -#define ROUNDUP(x,n) (((x) + ((n) - 1)) & (~((n)-1))) -#define ROUNDUP4(x) ROUNDUP((x),4) - -#define TEXT_BIG_ENDIAN_FLAG 0x10 -#define TEXT_WIDTH_MASK 0x07 - -//--------------------------------------------------------------------------- -// ^` -//--------------------------------------------------------------------------- -// k^Cv -typedef enum -{ - CONV_TYPE_NON, // ϊȂ - CONV_TYPE_DIFF, // tB^ - CONV_TYPE_RUNLENGTH, // OX - CONV_TYPE_LZ77, // LZ77k - CONV_TYPE_HUFFMAN, // nt}k - CONV_TYPE_UNCOMPRESS, // - CONV_TYPE_LZ77EX, // gLZ77k - CONV_TYPE_LH, // LZ77-nt}k - CONV_TYPE_LRC, // LZ77-RangeCoderk - CONV_TYPE_RANGECODER // WR[_ -} -t_conv_type; - -// kf[^\ -typedef struct -{ - t_conv_type type; // k^Cv - uint opt; // kp[^ - ulong src_size; // kOf[^TCY - ulong dest_size; // kf[^TCY - uchar *src_buf; // kOf[^obt@ - uchar *dest_buf; // kf[^obt@ - uchar textout_width; // eLXgo͂邩ǂ̃tOTCY - uchar alignment; // o̓t@CTCỸACg - uchar header_flg :1; // wb_t邩ǂ̃tO - uchar silent_flg :1; // Wo͂փbZ[Wo͂邩ǂ̃tO - uchar verify_flg :1; // kt@CWJۂׂ̂t@CȂǂ̃tO -} -t_conv_data; - -typedef enum -{ - OPT_NONE, // ȃIvV - OPT_VERSION, // o[W\(-v) - OPT_SILENT, // Wo͗}~(-s) - OPT_LOWER_TEXT, // ł̃eLXgo(-t) - OPT_UPPER_TEXT, // 啶ł̃eLXgo(-T) - OPT_ALIGN, // ACgw(-A4|8|16|32) - OPT_HEADER, // wb_t(-H) - OPT_OUTPUT, // o̓t@Cw(-o) - OPT_EXTRACT, // (-x) - OPT_DIFF_FILTER, // tB^(-d) - OPT_RUN_LENGTH, // OXk(-r) - OPT_LZ77, // LZ77k(-l) - OPT_LZ77EX, // LZ77k(-lex) - OPT_LH, // LHk(-lh) - OPT_LRC, // LRCk(-lrc) - OPT_HUFFMAN, // nt}k(-h4|8) - - OPT_RANGECODER, // WR[_k(fobOł̂) (-R) - OPT_VERIFY, // xt@C (fobOł̂) (-D) - OPT_TEST, // eXg (fobOł̂) (--TEST) -} -t_opt; - - - - -//--------------------------------------------------------------------------- -// vg^Cv錾 -//--------------------------------------------------------------------------- -static void usage( const char *cmd_string ); -static void version_info( void ); -static int parse_opt( int argc, char *argv[], t_conv_data * cnv_dat, char **in_fname, - char **out_fname ); -static int load_file ( const char *fname, t_conv_data * cnv_dat ); -static int save_file ( const char *fname, const t_conv_data * cnv_dat ); -static int convert_data( t_conv_data * cnv_dat ); -static int fwrite_text ( const uchar * buf, ulong size, uint width, FILE * fp, const char *name ); -static char* cut_fname ( char *path ); -static char* make_output_fname( const char *input_fname, const t_conv_data * cnv_dat ); -static int verify_data ( t_conv_data * cnv_dat ); - - -//--------------------------------------------------------------------------- -// GfBAϊ -//--------------------------------------------------------------------------- -static ushort -reverse_endian16( ushort x ) -{ - return (ushort)( ( (x >> 8) & 0x00FF ) | ( (x << 8) & 0xFF00 ) ); -} - -static ulong -reverse_endian32( ulong x ) -{ - return (ulong)( ( (x >> 24) & 0x000000FF ) | - ( (x >> 8) & 0x0000FF00 ) | - ( (x << 8) & 0x00FF0000 ) | - ( (x << 24) & 0xFF000000 ) ); -} - - - -//--------------------------------------------------------------------------- -// C֐ -//--------------------------------------------------------------------------- -int main(int argc, char *argv[]) -{ - t_conv_data cnv_dat; - char *in_fname, *out_fname; - -#ifdef _DEBUG - if ( argc >= 2 && strcmp(argv[1], "-TEST") == 0 ) - { - ntcompress_test(); - return 0; - } -#endif - - // f[^̏ - memset(&cnv_dat, 0, sizeof(cnv_dat)); - - // R}hIvV̉ - if (parse_opt(argc, argv, &cnv_dat, &in_fname, &out_fname) != 0) - { - exit(1); - } - - // ̓t@Cobt@֓ǂݍ - if (load_file(in_fname, &cnv_dat) != 0) - { - exit(1); - } - - // t@C̈k - if (convert_data(&cnv_dat) != 0) - { - exit(1); - } - - // kf[^̃xt@C - if (verify_data( &cnv_dat ) != 0) - { - exit(1); - } - - // obt@o̓t@Cւ̏ - if (save_file(out_fname, &cnv_dat) != 0) - { - exit(1); - } - - if (!cnv_dat.silent_flg) - { - fprintf(stdout, "convert %s(%ldbyte) to %s(%ldbyte)\n", in_fname, cnv_dat.src_size, - out_fname, cnv_dat.dest_size); - } - - free(cnv_dat.src_buf); - if (cnv_dat.dest_buf != cnv_dat.src_buf) - { - free(cnv_dat.dest_buf); - } - - return 0; -} - -//--------------------------------------------------------------------------- -// USAGE: -//--------------------------------------------------------------------------- -static void usage(const char *cmd_string) -{ - fprintf(stderr, "\n"); -#if defined( SUPPORT_LH_LRC ) - fprintf(stderr, - "Usage: %s <-d(4|8)|r|l|lex|h(8|16)|lh|lrc> [-o outputFile] [-A(4|8|16|32)] [-[width]] [-s] [-H] [-v] \n" - " %s -x [-o outputFile] [-s] \n", - cmd_string, cmd_string); -#else - fprintf(stderr, - "Usage: %s <-d(4|8)|r|l|lex|h(8|16)> [-o outputFile] [-A(4|8|16|32)] [-[width]] [-s] [-H] [-v] \n" - " %s -x [-o outputFile] [-s] \n", - cmd_string, cmd_string); -#endif - fprintf(stderr, "\t-v Show version\n"); - fprintf(stderr, "\t-r Runlength encode.\n"); - fprintf(stderr, "\t-l LZ77 encode(compatible with previous LZ77).\n"); - fprintf(stderr, "\t-lex LZ77 encode.\n"); - fprintf(stderr, "\t-h BitSize(4|8) Huffman encode.\n"); - fprintf(stderr, "\t-d BitSize(8|16) Differential filter.\n"); -#if defined( SUPPORT_LH_LRC ) - fprintf(stderr, "\t-lh LZ and Huffman encode\n"); - fprintf(stderr, "\t-lrc LZ and RangeCoder encode\n"); -#endif - fprintf(stderr, "\n"); - fprintf(stderr, "\t-A(4|8|16|32) Align n byte for compressed filesize\n"); - fprintf(stderr, "\t-o outputFile Specify the output file name.\n"); - fprintf(stderr, "\t-t[TypeWidth(1|2|4)] output C format text(little endian).\n"); - fprintf(stderr, "\t We can specify the type(1=u8,2=u16,4=u32).\n"); - fprintf(stderr, "\t-T[TypeWidth(1|2|4)] output C format text(big endian).\n"); - fprintf(stderr, "\t We can specify the type(1=u8,2=u16,4=u32).\n"); - fprintf(stderr, "\t-s Print no message if you've been successful in the conversion.\n"); - fprintf(stderr, "\t-H Raw data header\n"); - fprintf(stderr, "\t-x Extract compressed file.\n"); -} - - -static void version_info( void ) -{ - fprintf(stderr, "%s version %s\n", TARGET_NAME, NTCOMPRESS_VERSION); -} - -//--------------------------------------------------------------------------- -// pX񂩂t@C̃|C^擾Agq -// @param path pX -// @return t@C̃|C^ -//--------------------------------------------------------------------------- -static char *cut_fname(char *path) -{ - char *search_tmp; - - if (path == NULL) - { - return NULL; - } - - if ((search_tmp = strrchr(path, '/')) != NULL) - { - path = (search_tmp + 1); - } - if ((search_tmp = strrchr(path, '\\')) != NULL) - { - path = (search_tmp + 1); - } - if ((search_tmp = strrchr(path, '.')) != NULL) - { - *search_tmp = '\0'; - } - return path; -} - -//--------------------------------------------------------------------------- -// ̓t@Co̓t@C𐶐֐ -// @param input_fname ̓t@C -// @param cnv_dat ϊ -// @return o̓t@Cւ̃|C^ -//--------------------------------------------------------------------------- -static char *make_output_fname(const char *input_fname, const t_conv_data * cnv_dat) -{ - char *out_fname, *edit_tmp; - - if (input_fname == NULL) - { - return NULL; - } - - // ̈̊m - if ((out_fname = (char *)malloc(strlen(input_fname) + 0x10)) == NULL) - { - fprintf(stderr, "internal err: malloc fail!\n"); - exit(1); - } - - strcpy(out_fname, input_fname); - edit_tmp = cut_fname(out_fname); - - // kt@Cɕt - switch ( cnv_dat->type ) - { - case CONV_TYPE_NON: - strcat(edit_tmp, "_NONE"); - break; - case CONV_TYPE_DIFF: - strcat(edit_tmp, "_DIFF"); - break; - case CONV_TYPE_RUNLENGTH: - strcat(edit_tmp, "_RL"); - break; - case CONV_TYPE_LZ77: - case CONV_TYPE_LZ77EX: - strcat(edit_tmp, "_LZ"); - break; - case CONV_TYPE_HUFFMAN: - strcat(edit_tmp, "_HUFF"); - break; - case CONV_TYPE_LH: - strcat(edit_tmp, "_LH"); - break; - case CONV_TYPE_LRC: - strcat(edit_tmp, "_LRC"); - break; - case CONV_TYPE_RANGECODER: - strcat(edit_tmp, "_RC"); - break; - case CONV_TYPE_UNCOMPRESS: - strcat(edit_tmp, "_DECOMP"); - } - // gqt - if (cnv_dat->textout_width != 0) - { - strcat(edit_tmp, ".c"); - } - else - { - strcat(edit_tmp, ".bin"); - } - return out_fname; -} - - -//--------------------------------------------------------------------------- -// ̃IvṼ^Cv -// @param opt ʂIvV -// @return IvṼ^Cv -//--------------------------------------------------------------------------- -t_opt -get_opt_type( const char* opt ) -{ - if ( strncmp( opt, "--", 2 ) == 0 ) - { - } - else - { - // IvV - switch ( opt[1] ) - { - case 'v': - return OPT_VERSION; - case 's': - return OPT_SILENT; - case 'D': - return OPT_VERIFY; - case 't': - return OPT_LOWER_TEXT; - case 'T': - return OPT_UPPER_TEXT; - case 'A': - return OPT_ALIGN; - case 'H': - return OPT_HEADER; - case 'o': - return OPT_OUTPUT; - case 'x': - return OPT_EXTRACT; - case 'd': - return OPT_DIFF_FILTER; - case 'r': - return OPT_RUN_LENGTH; - case 'R': - return OPT_RANGECODER; - case 'l': - if ( strcmp(opt, "-lex" ) == 0 ) - { - return OPT_LZ77EX; - } -#if defined( SUPPORT_LH_LRC ) - else if ( strcmp(opt, "-lh") == 0 ) - { - return OPT_LH; - } - else if ( strcmp(opt, "-lrc") == 0 ) - { - return OPT_LRC; - } -#endif - else - { - return OPT_LZ77; - } - case 'h': - return OPT_HUFFMAN; - } - } - return OPT_NONE; -} - - -//--------------------------------------------------------------------------- -// R}hp[^ -// @param argc p[^ -// @param argv p[^z -// @retval cnv_dat kf[^ -// @retval in_fname ̓t@C -// @retval out_fname o̓t@C -// @return 0 t@C̏ݐ -// -1 t@C̏݃G[ -//--------------------------------------------------------------------------- - -static int parse_opt(int argc, char *argv[], t_conv_data * cnv_dat, - char **in_fname, char **out_fname) -{ - int i = 1; - t_conv_type type; - int opt_num; - char *cmd_string; -#define SYNTAX_CHECK(exp) do { if (!(exp)) { usage(cmd_string); return -1; } } while(0) - - // R}h擾 - cmd_string = cut_fname(argv[0]); - - // ԏ - cnv_dat->type = CONV_TYPE_NON; - cnv_dat->header_flg = 0; - cnv_dat->textout_width = 0; - cnv_dat->silent_flg = 0; - cnv_dat->alignment = 0; - cnv_dat->verify_flg = 0; - *out_fname = NULL; - *in_fname = NULL; - - // IvV - while (i < argc) - { - t_opt opt; - - if (argv[i][0] != '-') - { - SYNTAX_CHECK(*in_fname == NULL); // Qdǂ݃`FbN - - // ̓t@C擾 - *in_fname = argv[i]; - i++; - continue; - } - - opt = get_opt_type( argv[i] ); - - // nCttIvV - switch ( opt ) - { - //-------------------- - // o[W\IvV'v'(0) - case OPT_VERSION: - SYNTAX_CHECK(argv[i][2] == '\0'); // `FbN - - version_info(); - return -1; - - //-------------------- - // Wo͖IvV's' (0) - case OPT_SILENT: - SYNTAX_CHECK(argv[i][2] == '\0'); // `FbN - SYNTAX_CHECK(!cnv_dat->silent_flg); // Qdǂ݃`FbN - - cnv_dat->silent_flg = 1; - break; - -#ifdef _DEBUG - //-------------------- - // xt@CIvV'D' (0) - case OPT_VERIFY: - SYNTAX_CHECK(argv[i][2] == '\0'); // `FbN - SYNTAX_CHECK(!cnv_dat->verify_flg); // Qdǂ݃`FbN - cnv_dat->verify_flg = 1; - break; -#endif - - //-------------------- - // CeLXgo̓IvV't' (0-1) (gGfBA) - case OPT_LOWER_TEXT: - SYNTAX_CHECK(cnv_dat->textout_width == 0); // Qdǂ݃`FbN - - if (strlen(argv[i]) == 2) // p[^ꍇ̓oCgPʂŏ - { - cnv_dat->textout_width = 1; - } - else - { - cnv_dat->textout_width = atoi(&argv[i][2]); - SYNTAX_CHECK(cnv_dat->textout_width == 1 || cnv_dat->textout_width == 2 - || cnv_dat->textout_width == 4); - } - break; - - //-------------------- - // CeLXgo̓IvV'T' (0-1) (rbOGfBA) - case OPT_UPPER_TEXT: - SYNTAX_CHECK(cnv_dat->textout_width == 0); // Qdǂ݃`FbN - - if (strlen(argv[i]) == 2) // p[^ꍇ̓oCgPʂŏ - { - cnv_dat->textout_width = 1; - } - else - { - cnv_dat->textout_width = atoi(&argv[i][2]); - SYNTAX_CHECK(cnv_dat->textout_width == 1 || cnv_dat->textout_width == 2 - || cnv_dat->textout_width == 4); - } - cnv_dat->textout_width |= TEXT_BIG_ENDIAN_FLAG; - break; - - //-------------------- - // o̓t@CTCYACw'A4|8|16|32' (0) - case OPT_ALIGN: - SYNTAX_CHECK(strlen(argv[i]) <= 4 ); // `FbN - SYNTAX_CHECK( cnv_dat->alignment == 0 ); // Qdǂ݃`FbN - - cnv_dat->alignment = atoi(&argv[i][2]); - SYNTAX_CHECK( cnv_dat->alignment == 4 || cnv_dat->alignment == 8 || cnv_dat->alignment == 16 || cnv_dat->alignment == 32 ); - - break; - - //-------------------- - // WJf[^̐擪Ƀf[^TCYtIvV'H' (0) - case OPT_HEADER: - SYNTAX_CHECK(strlen(argv[i]) == 2); // `FbN - SYNTAX_CHECK(!cnv_dat->header_flg); // Qdǂ݃`FbN - - cnv_dat->header_flg = 1; - break; - - //-------------------- - // o̓t@CwIvV 'o' (1) - case OPT_OUTPUT: - SYNTAX_CHECK(strlen(argv[i]) == 2); // `FbN - SYNTAX_CHECK(*out_fname == NULL); // Qdǂ݃`FbN - SYNTAX_CHECK(i + 1 < argc); // p[^`FbN - - *out_fname = argv[++i]; - break; - - //-------------------- - // 𓀎w 'x'(0) - case OPT_EXTRACT: - SYNTAX_CHECK(strlen(argv[i]) == 2); // `FbN - - type = CONV_TYPE_UNCOMPRESS; - opt_num = 0; - goto common; - - //-------------------- - // tB^w 'd'(1) - case OPT_DIFF_FILTER: - type = CONV_TYPE_DIFF; - goto common_opt1; - - //-------------------- - // OXkw'r'(0) - case OPT_RUN_LENGTH: - SYNTAX_CHECK(strlen(argv[i]) == 2); // `FbN - - type = CONV_TYPE_RUNLENGTH; - opt_num = 0; - goto common; - -#ifdef _DEBUG - //-------------------- - // WR[_kw'R'(0) - case OPT_RANGECODER: - SYNTAX_CHECK(strlen(argv[i]) == 2); // `FbN - - type = CONV_TYPE_RANGECODER; - opt_num = 0; - goto common; -#endif - //-------------------- - // LZ77k"-l"(0) - case OPT_LZ77: - SYNTAX_CHECK( (argv[i][2] == '\0') || isdigit(argv[i][2]) ); - type = CONV_TYPE_LZ77; - opt_num = 0; - cnv_dat->opt = 2; - - #if defined( FOR_NITRO ) - // Ƀp[^A̓t@CłȂΓǂݔ΂ - if ( i + 2 < argc && argv[i + 1][0] != '-' && - argv[i + 1][1] == '\0' && atoi(&argv[i + 1][0]) != 0 ) - { - i++; - } - #endif - goto common; - - //-------------------- - // LZ77k"-lex"(0) - case OPT_LZ77EX: - type = CONV_TYPE_LZ77EX; - opt_num = 0; - cnv_dat->opt = 2; // Jnʒu̓IvVŎwłȂɂ - goto common; - - //-------------------- - // LHk"-lh"(0) - case OPT_LH: - type = CONV_TYPE_LH; - opt_num = 0; - goto common; - - //-------------------- - // LRCk"-lrc"(0) - case OPT_LRC: - type = CONV_TYPE_LRC; - opt_num = 0; - goto common; - - //-------------------- - // nt}kw'h'(1) - case OPT_HUFFMAN: - type = CONV_TYPE_HUFFMAN; - goto common_opt1; - - //-------------------- - // kw蕔̋ʏ - common_opt1: - if (strlen(argv[i]) == 2) - // 񂪏IĂΎ̈p[^ƂȂ - { - opt_num = 1; - } - else - // 񂪑Ă΂̒lp[^ƂȂ - { - cnv_dat->opt = atoi(&argv[i][2]); - SYNTAX_CHECK(cnv_dat->opt != 0); // p[^1ȏ̐ł邩̃`FbN - opt_num = 0; - } - // don't break; - common: - SYNTAX_CHECK(cnv_dat->type == CONV_TYPE_NON); // Qdǂ݃`FbN - - cnv_dat->type = type; - - if (opt_num == 0) - { - break; - } - - // ꍇ - SYNTAX_CHECK(i + 1 < argc); // p[^`FbN - i++; - SYNTAX_CHECK(argv[i][0] != '-'); // p[^ɃnCtŎn܂Ȃ̃`FbN - - cnv_dat->opt = atoi(argv[i]); - - SYNTAX_CHECK(cnv_dat->opt != 0); // p[^1ȏ̐ł邩̃`FbN - - break; - - //-------------------- - default: - usage(cmd_string); - return -1; - } - i++; - } - - SYNTAX_CHECK(*in_fname != NULL); // ̓t@Cw肳ꂽǂ̃`FbN - - // o̓t@C̎ - if (*out_fname == NULL) - { - *out_fname = make_output_fname(*in_fname, cnv_dat); - } - - if (strcmp(*in_fname, *out_fname) == 0) - { - fprintf(stderr, "ERR: output file %s is same as input file\n", *out_fname); - return -1; - } - - if ( cnv_dat->type == CONV_TYPE_UNCOMPRESS ) - // 𓀃IvVw肳ꂽꍇ̃IvV`FbN - { - SYNTAX_CHECK(cnv_dat->alignment == 0); // ACg̎w͕s\ł - SYNTAX_CHECK(cnv_dat->header_flg == 0); // wb_̒ljIvV͕s\ł - } - - return 0; -#undef SYNTAX_CHECK -} - - - -//--------------------------------------------------------------------------- -// ̓t@C̓ǂݍ݊֐ -// -// @param fname ̓t@C -// @retval k\̂ւ̃|C^ -// @return 0 t@C̓ǂݍݐ -// -1 t@C̓ǂݍ݃G[ -//--------------------------------------------------------------------------- - -static int load_file(const char *fname, t_conv_data * cnv_dat) -{ - FILE *in_file; - - // t@C̃I[v - if ((in_file = fopen(fname, "rb")) == NULL) - { - fprintf(stderr, "ERR: could not open file: %s\n", fname); - return -1; - } - - // t@C̃TCY擾 - fseek(in_file, 0, SEEK_END); - if ((cnv_dat->src_size = ftell(in_file)) < 0) - { - fprintf(stderr, "ERR: file error\n"); - return -1; - } - - // ̓t@Cobt@֓ǂݍ - if ((cnv_dat->src_buf = (uchar *) malloc(ROUNDUP4(cnv_dat->src_size))) == NULL) - { - fprintf(stderr, "ERR: memory exhausted\n"); - return -1; - } - - fseek(in_file, 0, SEEK_SET); - if (fread(cnv_dat->src_buf, 1, cnv_dat->src_size, in_file) != cnv_dat->src_size) - { - fprintf(stderr, "ERR: read error\n"); - return -1; - } - - fclose(in_file); - - // SoCgAC܂ł0Ŗ߂ - { - ulong i; - for (i = 0; (cnv_dat->src_size + i) & 3; i++) - { - cnv_dat->src_buf[cnv_dat->src_size + i] = 0; - } - } - - return 0; -} - - -//--------------------------------------------------------------------------- -// o̓t@Cւ̏݊֐ -// -// @param fname o̓t@C -// @retval k\̂ւ̃|C^ -// @return 0 t@C̏ݐ -// -1 t@C̏݃G[ -//--------------------------------------------------------------------------- - -static int save_file(const char *fname, const t_conv_data * cnv_dat) -{ - FILE *out_file; - - // ݃f[^̃`FbN - if (cnv_dat->dest_buf == NULL || cnv_dat->dest_size < 0) - { - fprintf(stderr, "ERR: convert error\n"); - return -1; - } - - // t@C̃I[v - if ((out_file = fopen(fname, "wb")) == NULL) - { - fprintf(stderr, "ERR: could not open file: %s\n", fname); - return -1; - } - - // obt@o̓t@C֏ - if (cnv_dat->textout_width != 0) - { - // eLXgo - if ( fwrite_text(cnv_dat->dest_buf, cnv_dat->dest_size, cnv_dat->textout_width, out_file, fname) - != cnv_dat->dest_size ) - { - fprintf(stderr, "ERR: write error\n"); - return -1; - } - } - else - { - // oCio - if ( fwrite(cnv_dat->dest_buf, 1, cnv_dat->dest_size, out_file) != cnv_dat->dest_size ) - { - fprintf(stderr, "ERR: write error\n"); - return -1; - } - } - - fclose(out_file); - - return 0; -} - -//--------------------------------------------------------------------------- -// CtH[}bgł̃eLXgo -// @param buf f[^obt@ -// @param size f[^TCY -// @param fp o̓t@C|C^ -// @param name 萔x -// @return 0 t@C̏ݐ -// -1 t@C̏݃G[ -//--------------------------------------------------------------------------- - -static int fwrite_text(const uchar * buf, ulong size, uint width, FILE * fp, const char *name) -{ - char *const_name_buf; - char *const_name_ptr; - ulong i; - ulong line_num; - uint big_endian = width & TEXT_BIG_ENDIAN_FLAG; - - width &= TEXT_WIDTH_MASK; - - if (fp == NULL) - { - return -1; - } - if (buf == NULL) - { - return -1; - } - if (name == NULL) - { - return -1; - } - - // 萔̌ - if ((const_name_buf = (char *)malloc( strlen(name) + 1 )) == NULL) - { - fprintf(stderr, "internal err: malloc fail!\n"); - return -1; - } - - strcpy(const_name_buf, name); - const_name_ptr = cut_fname(const_name_buf); - size = (size + width - 1) / width; - - // f[^̏ - if ( fprintf(fp, "#include <%s/types.h>\n\n", INCLUDE_TARGET) < 0 ) - { - return -1; - } - - if ( fprintf(fp, "const u%d %s[0x%lX] = {", width * 8, const_name_ptr, size) < 0 ) - { - return -1; - } - - line_num = (width >= 2) ? 2 : 1; - - for ( i = 0; i < size; i++ ) - { - if ((i * line_num) % 0x10 == 0) - { - if (fprintf(fp, "\n") < 0) - { - return -1; - } - } - switch ( width ) - { - case 1: - { - if ( fprintf(fp, "0x%02X,", *buf) < 0 ) - { - return -1; - } - buf++; - } - break; - case 2: - { - ushort val = *(ushort*)buf; - if ( big_endian ) - { - val = reverse_endian16( val ); - } - - if ( fprintf(fp, "0x%04X,", val) < 0 ) - { - return -1; - } - buf += 2; - } - break; - case 4: - { - ulong val = *(ulong*)buf; - if ( big_endian ) - { - val = reverse_endian32( val ); - } - - if ( fprintf(fp, "0x%08lX,", val) < 0 ) - { - return -1; - } - buf += 4; - } - break; - default: - return -1; - } - } - - if (fprintf(fp, "\n};\n") < 0) - { - return -1; - } - - free(const_name_buf); - - return i * width; -} - - -//--------------------------------------------------------------------------- -// f[^̕ϊ -// @retval cnv_dat ϊf[^ -// @return 0 ϊ -// -1 ϊs -//--------------------------------------------------------------------------- - -static int convert_data(t_conv_data * cnv_dat) -{ - char cmd_str[16]; - - // R}hXgO̐ - switch (cnv_dat->type) - { - //--------------------- - // tB^ - case CONV_TYPE_DIFF: - if (cnv_dat->opt != 8 && cnv_dat->opt != 16) - { - fprintf(stderr, "ERR: invalid DIFF parameter %d\n", cnv_dat->opt); - return -1; - }; - sprintf(cmd_str, "d%d", cnv_dat->opt); - break; - - //--------------------- - // OXk - case CONV_TYPE_RUNLENGTH: - // OX - strcpy(cmd_str, "r"); - break; - - //--------------------- - // LZ77k - case CONV_TYPE_LZ77: - if (cnv_dat->opt < 2 || cnv_dat->opt > 255) - { - fprintf(stderr, "ERR: invalid LZ77 parameter %d\n", cnv_dat->opt); - return -1; - }; - sprintf(cmd_str, "l%d", cnv_dat->opt); - break; - - //--------------------- - // LZ77gk - case CONV_TYPE_LZ77EX: - if (cnv_dat->opt < 2 || cnv_dat->opt > 255) - { - fprintf(stderr, "ERR: invalid LZ77 parameter %d\n", cnv_dat->opt); - return -1; - }; - sprintf(cmd_str, "L%d", cnv_dat->opt); - break; - - //--------------------- - // nt}k - case CONV_TYPE_HUFFMAN: - if (cnv_dat->opt != 4 && cnv_dat->opt != 8) - { - fprintf(stderr, "ERR: invalid HUFFMAN parameter %d\n", cnv_dat->opt); - return -1; - }; - sprintf(cmd_str, "h%d", cnv_dat->opt); - break; - - //--------------------- - // WR[_k - case CONV_TYPE_RANGECODER: - cnv_dat->dest_buf = nitroCompMalloc( cnv_dat->src_size ); - cnv_dat->dest_size = RCACompWrite( cnv_dat->src_buf, cnv_dat->src_size, cnv_dat->dest_buf ); - goto finish; - - //--------------------- - // LZ-nt}k - case CONV_TYPE_LH: - cnv_dat->dest_buf = nitroCompMalloc( cnv_dat->src_size ); - cnv_dat->dest_size = LHCompWrite( cnv_dat->src_buf, cnv_dat->src_size, cnv_dat->dest_buf ); - goto finish; - - //--------------------- - // LZ-RangeCoderk - case CONV_TYPE_LRC: - cnv_dat->dest_buf = nitroCompMalloc( cnv_dat->src_size ); - cnv_dat->dest_size = LRCCompWrite( cnv_dat->src_buf, cnv_dat->src_size, cnv_dat->dest_buf ); - goto finish; - - //--------------------- - // k - case CONV_TYPE_NON: - { - cnv_dat->dest_size = cnv_dat->src_size; - cnv_dat->dest_buf = cnv_dat->src_buf; - - // 4oCgAC`FbN - if (cnv_dat->alignment) - { - cnv_dat->dest_size = ROUNDUP(cnv_dat->src_size, cnv_dat->alignment); - } - else if (cnv_dat->textout_width >= 2) - { - cnv_dat->dest_size = ROUNDUP( cnv_dat->src_size, cnv_dat->textout_width & TEXT_WIDTH_MASK ); - } - } - return 0; - - //--------------------- - // - case CONV_TYPE_UNCOMPRESS: - { - s32 ret; - if ( cnv_dat->src_size == 4 ) - { - cnv_dat->dest_size = 0; - cnv_dat->dest_buf = NULL; - goto finish; - } - cnv_dat->dest_size = nitroGetDecompFileSize( cnv_dat->src_buf ); - cnv_dat->dest_buf = (void*)malloc( cnv_dat->dest_size + 0x20 ); // ACg]Ɋm - memset(cnv_dat->dest_buf, 0, cnv_dat->dest_size + 0x20); - - switch ( *cnv_dat->src_buf & 0xF0 ) - { - case LH_CODE_HEADER: - ret = LHCompRead( cnv_dat->src_buf, cnv_dat->src_size, cnv_dat->dest_buf ); - break; - case LRC_CODE_HEADER: - ret = LRCCompRead( cnv_dat->src_buf, cnv_dat->src_size, cnv_dat->dest_buf ); - break; - case DIFF_CODE_HEADER: - case LZ_CODE_HEADER: - case HUFF_CODE_HEADER: - case RL_CODE_HEADER: - ret = nitroDecompress( cnv_dat->src_buf, cnv_dat->src_size, cnv_dat->dest_buf, 1 ); - break; - default: - ret = -1; - } - if ( ret < 0 ) - { - fprintf(stderr, "ERR: Can't extract this file.\n"); - return -1; - } - } - goto finish; - - default: - fprintf(stderr, "ERR: invalid convert type\n"); - return -1; - } - - // kt@C̃obt@̈m - cnv_dat->dest_buf = nitroCompMalloc( cnv_dat->src_size ); - - // f[^k - cnv_dat->dest_size = nitroCompress(cnv_dat->src_buf, - cnv_dat->src_size, - cnv_dat->dest_buf, cmd_str, cnv_dat->header_flg); - // 4oCgAC`FbN - if (cnv_dat->alignment) - { - cnv_dat->dest_size = ROUNDUP(cnv_dat->dest_size, cnv_dat->alignment); - } - -finish: - // eLXg`o͂̌^ɂAC`FbN - if (cnv_dat->textout_width >= 2) - { - cnv_dat->dest_size = ROUNDUP( cnv_dat->dest_size, cnv_dat->textout_width & TEXT_WIDTH_MASK ); - } - - return 0; -} - - -/*---------------------------------------------------------------------------* - Name: verify_data - - Description: kf[^̓WJȂAf[^ƈv邩ǂ - mFB - - Arguments: cnv_dat ϊf[^ - - Returns: 0 xt@COK - -1 xt@CNG - *---------------------------------------------------------------------------*/ -static int verify_data( t_conv_data * cnv_dat ) -{ - // kf[^̓WJ`FbN - char *decomp_buf; - ulong decomp_size; - - if ( ! cnv_dat->verify_flg ) - { - return 0; - } - - decomp_buf = nitroCompMalloc( cnv_dat->src_size ); - decomp_size = nitroDecompress( cnv_dat->dest_buf, cnv_dat->dest_size, decomp_buf, 1 ); - - if ( matchingCheck(cnv_dat->src_buf, cnv_dat->src_size, decomp_buf, decomp_size) == 0 ) - { - fprintf(stderr, "ERR: data convert error\n"); - return -1; - } - return 0; -} - - diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_test.c b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_test.c deleted file mode 100644 index 588590d9..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_test.c +++ /dev/null @@ -1,661 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NinTendo Compress tool - File: ntcompress_test.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#if defined( _DEBUG ) - -#include -#include -#include -#include -#include -#include "nitroCompLib.h" -#include "multipleCompLib.h" - -#define MAX_DATA_SIZE_EX 0x02000000 // 32MB -#define MAX_DATA_SIZE 0x00100000 // 1MB -//#define MAX_DATA_SIZE 0x100 // 256B - -#define LOOP_CNT 100 -#define LOOP_CNT_EX 4 - -#if 0 -#define TestReport(...) (void)0 -#else -#define TestReport printf -#endif - -#define ASSERT assert - -static u8* s_original; - -static int TestInit( void ); -static void TestLZ8( void ); -static void TestRL8( void ); -static void TestHuffman( void ); - -static struct -{ - u64 x; // l - u64 mul; // 搔 - u64 add; // Z鐔 -} -sRandContext; - -static void InitRand32_(u64 seed) -{ - sRandContext.x = seed; - sRandContext.mul = (1566083941LL << 32) + 1812433253LL; - sRandContext.add = 2531011; -} - -static u32 Rand32_(u32 max) -{ - sRandContext.x = sRandContext.mul * sRandContext.x + sRandContext.add; - - // max萔Ȃ΃RpCɂœKB - if (max == 0) - { - return (u32)(sRandContext.x >> 32); - } - else - { - return (u32)((((sRandContext.x >> 32) * (max >> 1)) >> 32) + (max >> 1)); - } -} - - - -static int compare( const u8 a[], const u8 b[], int size ) -{ - int i; - int equivalent_flag = 1; - for ( i = 0; i < size; ++i ) - { - if ( a[i] != b[i] ) - { - equivalent_flag = 0; - break; - } - } - return equivalent_flag; -} - - -//-------------------------------------------------- -// f[^p֐ -//-------------------------------------------------- - -// LZ,Huffmanňk₷f[^쐬B -static u32 makeOriginalDataForLZHuff( u32 seed ) -{ - u32 fsize; - u32 i; - - TestReport("seed: %u\n", seed); - InitRand32_( seed ); - (void)Rand32_( 0 ); - fsize = Rand32_( MAX_DATA_SIZE ); - if ( fsize <= 4 ) - { - fsize += 5; - } - - for ( i = 0; i < fsize; ++i ) - { - s_original[ i ] = (u8)(Rand32_(0x100) & 0xF0); - } - return fsize; -} - - -// RLk₷f[^쐬B -static u32 makeOriginalDataForRL( u32 seed ) -{ - u8 val; - u32 i; - u32 fsize; - - TestReport("seed: %u\n", seed); - InitRand32_( seed ); - (void)Rand32_( 0 ); - fsize = Rand32_( MAX_DATA_SIZE ); - if ( fsize <= 4 ) - { - fsize += 5; - } - - for ( i = 0; i < fsize; ++i ) - { - if ( (i % 4) == 0 ) - { - val = (u8)Rand32_(0x100); - } - s_original[ i ] = val; - } - return fsize; -} - -// kɂf[^쐬B -static u32 makeOriginalDataRand( u32 seed ) -{ - u32 i; - u32 fsize; - - TestReport("seed: %u\n", seed); - InitRand32_( seed ); - (void)Rand32_( 0 ); - fsize = Rand32_( MAX_DATA_SIZE ); - if ( fsize <= 4 ) - { - fsize += 5; - } - - for ( i = 0; i < fsize; ++i ) - { - s_original[ i ] = (u8)Rand32_(0x100); - } - return fsize; -} - - -// ׂĂPľf[^쐬B -static u32 makeOriginalDataMonoValue( u32 seed ) -{ - u32 i; - u32 fsize; - u8 val; - - TestReport("seed: %u\n", seed); - InitRand32_( seed ); - (void)Rand32_( 0 ); - fsize = Rand32_( MAX_DATA_SIZE ); - if ( fsize <= 4 ) - { - fsize += 5; - } - - val = (u8)Rand32_(0x100); - for ( i = 0; i < fsize; ++i ) - { - s_original[ i ] = val; - } - return fsize; -} - -// LZ,Huffmanňk₷f[^쐬B -static u32 makeOriginalDataForLZHuffEx( u32 seed ) -{ - u32 i; - u32 fsize; - - TestReport("seed: %u\n", seed); - InitRand32_( seed ); - fsize = Rand32_(MAX_DATA_SIZE_EX / 2) + (MAX_DATA_SIZE_EX / 2); - if ( fsize <= 4 ) - { - fsize += 5; - } - - for ( i = 0; i < fsize; ++i ) - { - s_original[ i ] = (u8)(Rand32_(0x100) & 0xF0); - } - return fsize; -} - - -// RLk₷f[^쐬B -static u32 makeOriginalDataForRLEx( u32 seed ) -{ - u32 i; - u32 fsize; - u8 val; - - TestReport("seed: %u\n", seed); - InitRand32_( seed ); - fsize = Rand32_(MAX_DATA_SIZE_EX / 2) + (MAX_DATA_SIZE_EX / 2); - if ( fsize <= 4 ) - { - fsize += 5; - } - - val; - for ( i = 0; i < fsize; ++i ) - { - if ( (i % 4) == 0 ) - { - val = (u8)Rand32_(0x100); - } - s_original[ i ] = val; - } - return fsize; -} - -// kɂf[^쐬B -static u32 makeOriginalDataRandEx( u32 seed ) -{ - u32 fsize; - u32 i; - - TestReport("seed: %u\n", seed); - InitRand32_( seed ); - fsize = Rand32_(MAX_DATA_SIZE_EX / 2) + (MAX_DATA_SIZE_EX / 2); - if ( fsize <= 4 ) - { - fsize += 5; - } - - for ( i = 0; i < fsize; ++i ) - { - s_original[ i ] = (u8)Rand32_(0x100); - } - return fsize; -} - - -// ׂĂPľf[^쐬B -static u32 makeOriginalDataMonoValueEx( u32 seed ) -{ - u32 fsize; - u32 i; - u8 val; - - TestReport("seed: %u\n", seed); - InitRand32_( seed ); - fsize = Rand32_(MAX_DATA_SIZE_EX / 2) + (MAX_DATA_SIZE_EX / 2); - if ( fsize <= 4 ) - { - fsize += 5; - } - - val = (u8)Rand32_(0x100); - for ( i = 0; i < fsize; ++i ) - { - s_original[ i ] = val; - } - return fsize; -} - - - -typedef u32 (*MakeDataFunc)( u32 seed ); -#define WATER_MARK 0xDeadBeaf - - -static void TestLZ8_template( MakeDataFunc makeDataFunc, u32 exFmt, u32 loop_cnt ) -{ - u32 i; - for ( i = 0; i < loop_cnt; ++i ) - { - u32 fsize = makeDataFunc( i ); - - u8* s_compressed = nitroCompMalloc( fsize ); - u8* s_uncompressed = (u8*)malloc( fsize + 4 ); - u32 sz; - - TestReport("size = %d\n", fsize); - if ( ! exFmt ) - { - sz = nitroCompress( s_original, fsize, s_compressed, "l2", 0 ); - } - else - { - sz = nitroCompress( s_original, fsize, s_compressed, "L2", 0 ); - } - - if ( sz == 0 ) - { - TestReport( "compress LZ fail size %d\n", fsize ); - } - else - { - TestReport("compress LZ %d -> %d\n", fsize, sz ); - *(u32*)(&s_uncompressed[ fsize ]) = WATER_MARK; - nitroDecompress( s_compressed, sz, s_uncompressed, 1 ); - ASSERT( compare( s_original, s_uncompressed, (int)fsize ) ); - // WJ̃I[o[ANZX`FbN - ASSERT( *(u32*)(&s_uncompressed[ fsize ]) == WATER_MARK ); - } - - nitroCompFree( s_compressed ); - free( s_uncompressed ); - } -} - -static void TestRL8_template( MakeDataFunc makeDataFunc, u32 loop_cnt ) -{ - u32 i; - for ( i = 0; i < loop_cnt; ++i ) - { - u32 fsize = makeDataFunc( i ); - - u8* s_compressed = nitroCompMalloc( fsize ); - u8* s_uncompressed = (u8*)malloc( fsize + 4 ); - u32 sz; - - TestReport("size = %d\n", fsize); - sz = nitroCompress( s_original, fsize, s_compressed, "r", 0 ); - - if ( sz == 0 ) - { - TestReport( "compress RL fail size %d\n", fsize ); - } - else - { - TestReport("compress RL %d -> %d\n", fsize, sz ); - *(u32*)(&s_uncompressed[ fsize ]) = WATER_MARK; - nitroDecompress( s_compressed, sz, s_uncompressed, 1 ); - ASSERT( compare(s_original, s_uncompressed, (int)fsize) ); - // WJ̃I[o[ANZX`FbN - ASSERT( *(u32*)(&s_uncompressed[ fsize ]) == WATER_MARK ); - } - - nitroCompFree( s_compressed ); - free( s_uncompressed ); - } -} - -static void TestHuffman_template( MakeDataFunc makeDataFunc, u8 encBit, u32 loop_cnt ) -{ - u32 i; - for (i = 0; i < loop_cnt; ++i ) - { - u32 fsize = makeDataFunc( i ); - u8* s_compressed = nitroCompMalloc( fsize ); - u8* s_uncompressed = (u8*)malloc( ((fsize + 0x3) & ~0x3) + 4 ); - u32 sz; - - TestReport("size = %d\n", fsize); - sz = nitroCompress( s_original, fsize, s_compressed, (encBit == 4 )? "h4" : "h8", 0 ); - - if ( sz == 0 ) - { - TestReport( "compress Huff fail size %d\n", fsize ); - } - else - { - TestReport("compress Huff %d -> %d\n", fsize, sz ); - // nt}WJł͖4oCgAC܂ł̓I[o[ANZX꓾ - // R[hɂȂĂ - *(u32*)(&s_uncompressed[ (fsize + 0x3) & ~0x3 ]) = WATER_MARK; - nitroDecompress( s_compressed, sz, s_uncompressed, 1 ); - ASSERT( compare(s_original, s_uncompressed, (int)fsize) ); - // WJ̃I[o[ANZX`FbN - ASSERT( *(u32*)(&s_uncompressed[ (fsize + 0x3) & ~0x3 ]) == WATER_MARK ); - } - nitroCompFree( s_compressed ); - free( s_uncompressed ); - } -} - - -static void TestLH8_template( MakeDataFunc makeDataFunc, u32 exFmt, u32 loop_cnt ) -{ - u32 i; - for ( i = 0; i < loop_cnt; ++i ) - { - u32 fsize = makeDataFunc( i ); - - u8* s_compressed = nitroCompMalloc( fsize ); - u8* s_uncompressed = (u8*)malloc( fsize + 4 ); - u32 sz; - - TestReport("size = %d\n", fsize); - sz = LHCompWrite( s_original, fsize, s_compressed ); - - if ( sz == 0 ) - { - TestReport( "compress LH fail size %d\n", fsize ); - } - else - { - TestReport("compress LH %d -> %d\n", fsize, sz ); - *(u32*)(&s_uncompressed[ fsize ]) = WATER_MARK; - LHCompRead( s_compressed, sz, s_uncompressed ); - ASSERT( compare(s_original, s_uncompressed, (int)fsize) ); - // WJ̃I[o[ANZX`FbN - ASSERT( *(u32*)(&s_uncompressed[ fsize ]) == WATER_MARK ); - } - - nitroCompFree( s_compressed ); - free( s_uncompressed ); - } -} - - -static void TestLRC8_template( MakeDataFunc makeDataFunc, u32 exFmt, u32 loop_cnt ) -{ - u32 i; - for ( i = 0; i < loop_cnt; ++i ) - { - u32 fsize = makeDataFunc( i ); - - u8* s_compressed = nitroCompMalloc( fsize ); - u8* s_uncompressed = (u8*)malloc( fsize + 4 ); - u32 sz; - - TestReport("size = %d\n", fsize); - sz = LRCCompWrite( s_original, fsize, s_compressed ); - - if ( sz == 0 ) - { - TestReport( "compress LRC fail size %d\n", fsize ); - } - else - { - TestReport("compress LRC %d -> %d\n", fsize, sz ); - *(u32*)(&s_uncompressed[ fsize ]) = WATER_MARK; - LRCCompRead( s_compressed, sz, s_uncompressed ); - ASSERT( compare(s_original, s_uncompressed, (int)fsize) ); - // WJ̃I[o[ANZX`FbN - ASSERT( *(u32*)(&s_uncompressed[ fsize ]) == WATER_MARK ); - } - - nitroCompFree( s_compressed ); - free( s_uncompressed ); - } -} - - -//-------------------------------------------------- -// eXgC -//-------------------------------------------------- - -static int TestInit( void ) -{ - time_t t; - s_original = (u8*)malloc( MAX_DATA_SIZE_EX + 4 ); - makeOriginalDataRand( (u32)time( &t ) ); - - return 0; -} - - -static void TestLZ8_normal( void ) -{ - TestLZ8_template( makeOriginalDataForLZHuff, 0, LOOP_CNT ); -} -static void TestLZ8_random( void ) -{ - TestLZ8_template( makeOriginalDataRand, 0, LOOP_CNT ); -} -static void TestLZ8_mono( void ) -{ - TestLZ8_template( makeOriginalDataMonoValue, 0, LOOP_CNT ); -} - -static void TestLZ8EX_normal( void ) -{ - TestLZ8_template( makeOriginalDataForLZHuff, 1, LOOP_CNT ); -} -static void TestLZ8EX_random( void ) -{ - TestLZ8_template( makeOriginalDataRand, 1, LOOP_CNT ); -} -static void TestLZ8EX_mono( void ) -{ - TestLZ8_template( makeOriginalDataMonoValue, 1, LOOP_CNT ); -} - - -static void TestRL8_normal( void ) -{ - TestRL8_template( makeOriginalDataForRL, LOOP_CNT ); -} -static void TestRL8_random( void ) -{ - TestRL8_template( makeOriginalDataRand, LOOP_CNT ); -} -static void TestRL8_mono( void ) -{ - TestRL8_template( makeOriginalDataMonoValue, LOOP_CNT ); -} - -static void TestHuffman8_normal( void ) -{ - TestHuffman_template( makeOriginalDataForLZHuff, 8, LOOP_CNT ); -} -static void TestHuffman8_random( void ) -{ - TestHuffman_template( makeOriginalDataRand, 8, LOOP_CNT ); -} -static void TestHuffman8_mono( void ) -{ - TestHuffman_template( makeOriginalDataMonoValue, 8, LOOP_CNT ); -} - -static void TestHuffman4_normal( void ) -{ - TestHuffman_template( makeOriginalDataForLZHuff, 4, LOOP_CNT ); -} -static void TestHuffman4_random( void ) -{ - TestHuffman_template( makeOriginalDataRand, 4, LOOP_CNT ); -} -static void TestHuffman4_mono( void ) -{ - TestHuffman_template( makeOriginalDataMonoValue, 4, LOOP_CNT ); -} - -static void TestLZ_ex(void) -{ - TestLZ8_template( makeOriginalDataForLZHuffEx, 0, LOOP_CNT_EX ); -} - -static void TestLZEX_ex(void) -{ - TestLZ8_template( makeOriginalDataForLZHuffEx, 1, LOOP_CNT_EX ); -} - -static void TestRL_ex(void) -{ - TestRL8_template( makeOriginalDataForRLEx, LOOP_CNT_EX ); -} - -static void TestHuffman8_ex(void) -{ - TestHuffman_template( makeOriginalDataForLZHuffEx, 8, LOOP_CNT_EX ); -} - -static void TestHuffman4_ex(void) -{ - TestHuffman_template( makeOriginalDataForLZHuffEx, 4, LOOP_CNT_EX ); -} - -static void TestLH_normal(void) -{ - TestLH8_template( makeOriginalDataForLZHuff, 0, LOOP_CNT ); -} - -static void TestLH_random(void) -{ - TestLH8_template( makeOriginalDataRand, 0, LOOP_CNT ); -} - -static void TestLH_mono(void) -{ - TestLH8_template( makeOriginalDataMonoValue, 0, LOOP_CNT ); -} - -static void TestLRC_normal(void) -{ - TestLRC8_template( makeOriginalDataForLZHuff, 0, LOOP_CNT ); -} - -static void TestLRC_random(void) -{ - TestLRC8_template( makeOriginalDataRand, 0, LOOP_CNT ); -} - -static void TestLRC_mono(void) -{ - TestLRC8_template( makeOriginalDataMonoValue, 0, LOOP_CNT ); -} - -#endif /* defined( _DEBUG ) */ - - - - - -/*---------------------------------------------------------------------------* - Name: ntcompress_test - - Description: eXgC - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void ntcompress_test( void ) -{ -#if defined( _DEBUG ) - TestInit(); - - TestLH_normal(); - TestLH_random(); - TestLH_mono (); - TestLRC_normal(); - TestLRC_random(); - TestLRC_mono (); - - TestLZ8EX_normal(); - TestLZ8EX_random(); - TestLZ8EX_mono (); - TestLZ8_normal(); - TestLZ8_random(); - TestLZ8_mono (); - TestRL8_normal(); - TestRL8_random(); - TestRL8_mono (); - TestHuffman8_normal(); - TestHuffman8_random(); - TestHuffman8_mono (); - TestHuffman4_normal(); - TestHuffman4_random(); - TestHuffman4_mono (); - TestLZ_ex(); - TestLZEX_ex(); - TestRL_ex(); - TestHuffman8_ex(); - TestHuffman4_ex(); - -#endif -} - - - diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_test.h b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_test.h deleted file mode 100644 index 1167a58d..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_test.h +++ /dev/null @@ -1,23 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NinTendo Compress tool - File: ntcompress_test.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef NTCOMPRESS_TEST_H__ -#define NTCOMPRESS_TEST_H__ - -void ntcompress_test( void ); - -#endif // NTCOMPRESS_TEST_H__ - diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/rangeCoder.c b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/rangeCoder.c deleted file mode 100644 index 193baa9c..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/rangeCoder.c +++ /dev/null @@ -1,539 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NinTendo Compress tool - File: rangeCoder.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "rangeCoder.h" - -typedef struct -{ - u32 freq[ 0x100 ]; - u32 low_cnt[ 0x100 ]; - u32 total; -} -RCCompressionInfo; - -// WR[_ԍ\ -typedef struct -{ - u32 low; - u32 range; - u32 code; // WĴݎgp - u8 carry; // k̂ݎgp - u32 carry_cnt; // k̂ݎgp -} -RCState; - - -#define MAX_RANGE 0x80000000 - -/*---------------------------------------------------------------------------* - Name: RCInitInfo_ - Description: - Arguments: info - Returns: None. - *---------------------------------------------------------------------------*/ -static void -RCInitInfo_( RCCompressionInfo* info, BOOL adaptive ) -{ - u32 i; - - if ( adaptive ) - // K^WR[_ - { - for ( i = 0; i < 0x100; i++ ) - { - info->freq[ i ] = 1; - info->low_cnt[ i ] = i; - } - info->total = 0x100; - } - else - // ÓIWR[_ - { - for ( i = 0; i < 0x100; i++ ) - { - info->freq[ i ] = 0; - info->low_cnt[ i ] = 0; - } - info->total = 0; - } -} - - -/*---------------------------------------------------------------------------* - Name: RCCount_ - Description: - Arguments: info - srcp - size - Returns: None. - *---------------------------------------------------------------------------*/ -static void -RCCount_( RCCompressionInfo* info, const u8* srcp, u32 size ) -{ - u32 srcCnt = 0; - u32 i; - - while ( srcCnt < size ) - { - info->freq[ srcp[ srcCnt ] ]++; - info->total++; - srcCnt++; - } - - // 0x10000֐K - #define NORMAL_FREQ 0x10000 - { - f32 rate = (f32)NORMAL_FREQ / info->total; - u32 max_i = 0; - u32 max_freq = 0; - - info->total = 0; - for ( i = 0; i < 0x100; i++ ) - { - u32 orig = info->freq[ i ]; - info->freq[ i ] = (u32)(rate * info->freq[ i ] + 0.5f); - if ( orig != 0 && info->freq[ i ] == 0 ) - { - info->freq[ i ] = 1; - } - - info->total += info->freq[ i ]; - if ( info->freq[ i ] >= max_freq ) - { - max_i = i; - max_freq = info->freq[ i ]; - } - } - if ( info->total > NORMAL_FREQ ) - { - info->freq[ max_i ] -= (info->total - NORMAL_FREQ); - } - else - { - info->freq[ max_i ] += (NORMAL_FREQ - info->total); - } - info->total = NORMAL_FREQ; - } - #undef NORMAL_FREQ - - info->low_cnt[ 0 ] = 0; - - for ( i = 1; i < 0x100; i++ ) - { - info->low_cnt[ i ] = info->low_cnt[ i - 1 ] + info->freq[ i - 1 ]; - } -} - - - -/*---------------------------------------------------------------------------* - Name: RCAAddCount_ - - Description: K^WR[_̕pxe[uXV܂B - - Arguments: info - val - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -RCAAddCount_( RCCompressionInfo* info, u8 val ) -{ - u32 i; - - info->freq[ val ]++; - info->total++; - for ( i = val + 1; i < 0x100; i++ ) - { - info->low_cnt[ i ]++; - } - - // g[^őlzꍇɂ́Ač\B - if ( info->total >= 0x00010000 ) - { - if ( info->freq[ 0 ] > 1 ) - { - info->freq[ 0 ] = info->freq[ 0 ] / 2; - } - info->low_cnt[ 0 ] = 0; - info->total = info->freq[ 0 ]; - - for ( i = 1; i < 0x100; i++ ) - { - if ( info->freq[ i ] > 1 ) - { - info->freq[ i ] >>= 1; - } - info->low_cnt[ i ] = info->low_cnt[ i - 1 ] + info->freq[ i - 1 ]; - info->total += info->freq[ i ]; - } - } -} - - -/*---------------------------------------------------------------------------* - Name: RCCompWrite - - Description: WR[_̈k(e[u^) - - Arguments: srcp - size - dstp - - Returns: - *---------------------------------------------------------------------------*/ -s32 -RCCompWrite_( const u8* srcp, u32 size, u8* dstp, BOOL adaptive ) -{ -#define MIN_RANGE 0x01000000 - static RCCompressionInfo sInfo; - u32 srcCnt = 0; - u32 dstCnt = 0; - u32 low, range; - u8 carry; - u32 carry_cnt; - u32 i; - - // [N̏ - RCInitInfo_( &sInfo, adaptive ); - - if ( ! adaptive ) - { - // opxvZ - RCCount_( &sInfo, srcp, size ); - } - - // JnRange0x80000000Ȃ̂ŁA񂢂Ȃ茅グ邱Ƃ͂Ȃ - low = 0; - range = MAX_RANGE; - carry = 0; - carry_cnt = 0; - - // wb_o - dstp[ dstCnt++ ] = LRC_CODE_HEADER; - if ( size > 0x1000000 ) - { - dstp[ dstCnt++ ] = 0; - dstp[ dstCnt++ ] = 0; - dstp[ dstCnt++ ] = 0; - } - dstp[ dstCnt++ ] = (u8)( size ); - dstp[ dstCnt++ ] = (u8)( size >> 8 ); - dstp[ dstCnt++ ] = (u8)( size >> 16 ); - if ( size > 0x1000000 ) - { - dstp[ dstCnt++ ] = (u8)( size >> 24 ); - } - - if ( ! adaptive ) - { - // pxe[ȕo(16bitgGfBA) - for ( i = 0; i < 0x100; i++ ) - { - dstp[ dstCnt++ ] = (u8)( sInfo.freq[ i ] ); - dstp[ dstCnt++ ] = (u8)( sInfo.freq[ i ] >> 8 ); - } - } - - // R[h̏o - while ( srcCnt < size ) - { - u8 val = srcp[ srcCnt++ ]; - u32 temp = range / sInfo.total; - u32 prevLow = low; - low = low + sInfo.low_cnt[ val ] * temp; - range = sInfo.freq[ val ] * temp; - - if ( adaptive ) - { - // opxe[uXV - RCAAddCount_( &sInfo, val ); - } - - // オ肪ꍇ̏ - if ( prevLow > low ) - { - // L[PJグ - ++carry; - // L[(L[JE^ - 1)0x00o͂܂B - if ( carry_cnt > 1 ) - { - dstp[ dstCnt++ ] = carry; - --carry_cnt; - carry = 0x00; - } - while ( carry_cnt > 1 ) - { - dstp[ dstCnt++ ] = 0x00; - --carry_cnt; - } - } - - // Rangȅ1oCgɂȂ猅グ - while ( range < MIN_RANGE ) - { - u8 candidate = (u8)( low >> 24 ); - - // ̃L[0xFF̏ꍇ͍XɌグ蓾̂carryo͂carry_cnt₷ - if ( candidate == 0xFF ) - { - ++carry_cnt; - } - else - // ̃L[0xFFł͂Ȃꍇcarryo͂ - { - // carry(carry_cnt - 1)0xFFo͂ - if ( carry_cnt > 0 ) - { - dstp[ dstCnt++ ] = carry; - --carry_cnt; - } - while ( carry_cnt > 0 ) - { - dstp[ dstCnt++ ] = 0xFF; - --carry_cnt; - } - // Vcarryɒu - carry = candidate; - carry_cnt = 1; - } - low <<= 8; - range <<= 8; - } - } - - if ( carry_cnt > 0 ) - { - dstp[ dstCnt++ ] = carry; - --carry_cnt; - } - while ( carry_cnt > 0 ) - { - dstp[ dstCnt++ ] = 0xFF; - --carry_cnt; - } - dstp[ dstCnt++ ] = (u8)( (low >> 24) & 0xFF ); - dstp[ dstCnt++ ] = (u8)( (low >> 16) & 0xFF ); - dstp[ dstCnt++ ] = (u8)( (low >> 8 ) & 0xFF ); - dstp[ dstCnt++ ] = (u8)( (low >> 0 ) & 0xFF ); - - return dstCnt; -#undef MIN_RANGE -} - - -/*---------------------------------------------------------------------------* - Name: RCACompWrite - - Description: WR[_̈k(K^) - - Arguments: srcp - size - dstp - - Returns: - *---------------------------------------------------------------------------*/ -s32 -RCCompWrite( const u8* srcp, u32 size, u8* dstp ) -{ - return RCCompWrite_( srcp, size, dstp, FALSE ); -} - -s32 -RCACompWrite( const u8* srcp, u32 size, u8* dstp ) -{ - return RCCompWrite_( srcp, size, dstp, TRUE ); -} - -static u8 -SearchRC_( RCCompressionInfo* info, u32 code, u32 range, u32 low ) -{ -#define TABLE_SIZE 0x100 - u32 codeVal = code - low; - u32 i; - u32 temp = range / info->total; - u32 tempVal = codeVal / temp; - -#if 0 - // TODO: Ƃ肠`TA񕪒Tɂׂ - for ( i = 0; i < TABLE_SIZE - 1; i++ ) - { - if ( info->low_cnt[ i + 1 ] > tempVal ) - { - while ( info->freq[ i ] == 0 ) - { - --i; - } - return (u8)i; - } - } - return TABLE_SIZE - 1; -#else - // 񕪒T - u32 left = 0; - u32 right = TABLE_SIZE - 1; - - while ( left < right ) - { - i = (left + right) / 2; - - if ( info->low_cnt[ i ] > tempVal ) - { - right = i; - } - else - { - left = i + 1; - } - } - - i = left; - while ( info->low_cnt[ i ] > tempVal ) - { - --i; - } - return (u8)i; -#endif -} - -/*---------------------------------------------------------------------------* - Name: RCCompRead - - Description: WR[_WJ(e[u^) - - Arguments: srcp - size - dstp - - Returns: - *---------------------------------------------------------------------------*/ -s32 -RCCompRead_( const u8* srcp, u32 srcSize, u8* dstp, BOOL adaptive ) -{ -#define MIN_RANGE 0x01000000 - static RCCompressionInfo sInfo; - - u32 dstSize = *(u32*)srcp >> 8; - u32 dstCnt = 0; - u32 srcCnt = 0; - u32 i; - u32 code, range, low; - - if ( srcSize < 4 ) - { - return -1; - } - - srcCnt = 4; - if ( dstSize == 0 ) - { - dstSize = *(u32*)&srcp[ srcCnt ]; - srcCnt += 4; - if ( srcSize < 8 ) - { - return -1; - } - } - - if ( srcSize < sizeof(u16) * 0x100 + srcCnt ) - { - return -1; - } - - // [N̏ - if ( adaptive ) - { - RCInitInfo_( &sInfo, TRUE ); - } - else - { - sInfo.total = 0; - for ( i = 0; i < 0x100; i++ ) - { - sInfo.freq[ i ] = *(u16*)&srcp[ srcCnt ]; - srcCnt += 2; - sInfo.total += sInfo.freq[ i ]; - } - sInfo.low_cnt[ 0 ] = 0; - for ( i = 1; i < 0x100; i++ ) - { - sInfo.low_cnt[ i ] = sInfo.low_cnt[ i - 1 ] + sInfo.freq[ i - 1 ]; - } - } - - code = (u32)((srcp[ srcCnt ] << 24) | (srcp[ srcCnt + 1 ] << 16) | - (srcp[ srcCnt + 2 ] << 8) | (srcp[ srcCnt + 3 ])); - range = MAX_RANGE; - low = 0; - srcCnt += 4; - - while ( dstCnt < dstSize ) - { - u8 val = SearchRC_( &sInfo, code, range, low ); - - dstp[ dstCnt++ ] = val; - - { - u32 tmp; - tmp = range / sInfo.total; - low = low + sInfo.low_cnt[ val ] * tmp; - range = sInfo.freq[ val ] * tmp; - } - - if ( adaptive ) - { - // opxe[uXV - RCAAddCount_( &sInfo, val ); - } - - while ( range < MIN_RANGE ) - { - code <<= 8; - code += srcp[ srcCnt++ ]; - range <<= 8; - low <<= 8; - } - } - - return dstSize; -#undef MIN_RANGE -} - - -/*---------------------------------------------------------------------------* - Name: RCACompRead - - Description: WR[_WJ(K^) - - Arguments: srcp - size - dstp - - Returns: - *---------------------------------------------------------------------------*/ -s32 -RCCompRead( const u8* srcp, u32 srcSize, u8* dstp ) -{ - return RCCompRead_( srcp, srcSize, dstp, FALSE ); -} - -s32 -RCACompRead( const u8* srcp, u32 srcSize, u8* dstp ) -{ - return RCCompRead_( srcp, srcSize, dstp, TRUE ); -} - diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/rangeCoder.h b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/rangeCoder.h deleted file mode 100644 index 53808e5a..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/rangeCoder.h +++ /dev/null @@ -1,46 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NinTendo Compress tool - File: rangeCoder.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "types.h" - -#ifndef __NTCOMPRESS_RANGE_CODER_H__ -#define __NTCOMPRESS_RANGE_CODER_H__ - -/*---------------------------------------------------------------------------* - Name: RCCompWrite - - Description: WR[_̈k - - Arguments: srcp - size - dstp - - Returns: - *---------------------------------------------------------------------------*/ -s32 -RCCompWrite( const u8* srcp, u32 size, u8* dstp ); - -s32 -RCCompRead( const u8* srcp, u32 srcSize, u8* dstp ); - -s32 -RCACompWrite( const u8* srcp, u32 size, u8* dstp ); - -s32 -RCACompRead( const u8* srcp, u32 srcSize, u8* dstp ); - -#endif // __NTCOMPRESS_RANGE_CODER_H__ diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/types.h b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/types.h deleted file mode 100644 index 7d76786b..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/types.h +++ /dev/null @@ -1,57 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NinTendo Compress tool - File: types.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __NTCOMPRESS_TYPES_H__ -#define __NTCOMPRESS_TYPES_H__ - -//=========================================================================================== -// ^` -//=========================================================================================== -typedef unsigned char u8; -typedef unsigned short u16; -typedef unsigned long u32; -typedef signed char s8; -typedef signed short s16; -typedef signed long s32; -typedef float f32; -typedef unsigned long BOOL; -#define FALSE 0 -#define TRUE 1 - -#define DIFF_CODE_HEADER (0x80) -#define LZ_CODE_HEADER (0x10) -#define HUFF_CODE_HEADER (0x20) -#define RL_CODE_HEADER (0x30) -#define LH_CODE_HEADER (0x40) -#define LRC_CODE_HEADER (0x50) -#define CODE_HEADER_MASK (0xF0) - - -#if defined( __GNUC__ ) - typedef unsigned long long int u64; - typedef signed long long int s64; - #define INLINE inline - #define ASSERT(x) (void)0 -#else - #include - #define INLINE __inline - #define ASSERT assert - typedef unsigned __int64 u64; - typedef signed __int64 s64; -#endif - -#endif // __NTCOMPRESS_TYPES_H__ diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/vc++/ntcompress.sln b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/vc++/ntcompress.sln deleted file mode 100644 index 541afd75..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/vc++/ntcompress.sln +++ /dev/null @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ntcompress", "ntcompress.vcproj", "{FA042C1E-4CB1-4B8A-87A6-B46B4222605E}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {FA042C1E-4CB1-4B8A-87A6-B46B4222605E}.Debug.ActiveCfg = Debug|Win32 - {FA042C1E-4CB1-4B8A-87A6-B46B4222605E}.Debug.Build.0 = Debug|Win32 - {FA042C1E-4CB1-4B8A-87A6-B46B4222605E}.Release.ActiveCfg = Release|Win32 - {FA042C1E-4CB1-4B8A-87A6-B46B4222605E}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/vc++/ntcompress.vcproj b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/vc++/ntcompress.vcproj deleted file mode 100644 index 050e7b60..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/vc++/ntcompress.vcproj +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/tests/compressSharedFontLoad/testLoadSpeed/Makefile b/build/tests/compressSharedFontLoad/testLoadSpeed/Makefile deleted file mode 100644 index 4f394d4f..00000000 --- a/build/tests/compressSharedFontLoad/testLoadSpeed/Makefile +++ /dev/null @@ -1,54 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - FS - overlay -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - - -ifeq ($(TEST_TWLSDK_REBUILD),TRUE) -export TWLSDK_SYSMENU_PRIVATE = TRUE -SUBDIRS = copy_to_sdk \ - $(ROOT) -endif # ifeq ($(TEST_TWLSDK_REBUILD),TRUE) - -#---------------------------------------------------------------------------- - -TARGET_BIN = main.srl - -SRCS = main.c loadSharedFont.c - -LLIBRARIES += libsharedfont$(TWL_LIBSUFFIX).a - -ROM_SPEC = ROM-TS_nand.rsf - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib - -MAKEROM_ARM7_BASE = $(TWL_COMPONENTSDIR)/armadillo/$(TWL_BUILDTYPE_ARM7)/armadillo -MAKEROM_ARM7 = $(MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#---------------------------------------------------------------------------- - -do-build: oslib $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -oslib: - touch $(ROOT)/build/libraries/os/ARM9.TWL/src/os_sharedFont.c - -#===== End of Makefile ===== diff --git a/build/tests/compressSharedFontLoad/testLoadSpeed/ROM-TS_nand.rsf b/build/tests/compressSharedFontLoad/testLoadSpeed/ROM-TS_nand.rsf deleted file mode 100644 index 8cb68fb1..00000000 --- a/build/tests/compressSharedFontLoad/testLoadSpeed/ROM-TS_nand.rsf +++ /dev/null @@ -1,277 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "MY APP NAME" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile ./etc/myGameBanner.bnr - BannerFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # -################################################################ - - WramMapping MAP_TS_SCR - -################################################################ - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - NANDAccess TRUE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - # - # Disable debug [TRUE/FALSE] - # - DisableDebug FALSE - - # - # Agree EULA [TRUE/FALSE] - # - #AgreeEULA FALSE - - # - # Agree EULA version [0 - 255] - # - #AgreeEULAVersion 0 - - ### - #### END -} - -AppendProperty -{ - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType System - - # - # Boot allowed Media: [GameCard] - # - Media NAND - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - #GameCode ABCJ - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Use Shared2 file index: [0-65535] - #Shared2FileIndex 0 - - # - # Use Shared2 file size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - #Shared2FileSize 0K - - # - # Game card power on: [TRUE/FALSE] - # - #GameCardOn FALSE -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(MAKEROM_ROMROOT) - Root / - File $(MAKEROM_ROMFILES) -} - -Rating -{ - # - # Permited age to play for each rating organization [0 - 31, ALWAYS, FREE] - # - # Supported organization - # - CERO (OGN0) : for Japan - # - ESRB (OGN1) : for North America - # - BBFC (OGN2) : obsolete organization - # - USK (OGN3) : for German - # - PEGI_GEN (OGN4) : for Europe - # - PEGI_FINLAND (OGN5) : obsolete organization - # - PEGI_PRT (OGN6) : for Portugal - # - PEGI_BBFC (OGN7) : for UK - # - OFLC (OGN8) : for Australia and NewZealand - # - GRB (OGN9) : for Korea - # - OGN10 : reserved - # - OGN11 : reserved - # - OGN12 : reserved - # - OGN13 : reserved - # - OGN14 : reserved - # - OGN15 : reserved - # - # Available age [ 0 - 31 / ALWAYS / FREE ] - - CERO FREE -# ESRB FREE -# USK FREE -# PEGI_GEN FREE -# PEGI_PRT FREE -# PEGI_BBFC FREE -# OFLC FREE -# GRB FREE -} diff --git a/build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/Makefile b/build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/Makefile deleted file mode 100644 index a859f4e3..00000000 --- a/build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile - -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: -# $Rev: -# $Author: -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ORG_H = sharedFont.h -ORG_C = os_sharedFont.c - -CP_H_DIR = $(TWLSDK_ROOT)/include/twl/os/common -CP_C_DIR = $(TWLSDK_ROOT)/build/libraries/os/ARM9.TWL/src/ - -#---------------------------------------------------------------------------- - -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -do-build: - cp $(ORG_H) $(CP_H_DIR) - cp $(ORG_C) $(CP_C_DIR) - -#===== End of Makefile ===== diff --git a/build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/os_sharedFont.c b/build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/os_sharedFont.c deleted file mode 100644 index d6f94dd1..00000000 --- a/build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/os_sharedFont.c +++ /dev/null @@ -1,352 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - OS - File: os_sharedFont.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include - -#ifdef USE_FONT_WRAM_LOAD -#include "fs_wram.h" -#endif // USE_FONT_WRAM_LOAD - -// compile switch-------------------------------------------------------------- -//#define DISABLE_HASH_CHECK - -// extern data----------------------------------------------------------------- -// define data----------------------------------------------------------------- -#ifdef USE_FONT_WRAM_LOAD -#define THREAD_PRIO_FS_FRAM 3 -#define WRAM_TOP_SLOT_FOR_FS 4 -#define WRAM_SIZE_FOR_FS MI_WRAM_SIZE_96KB -#endif // USE_FONT_WRAM_LOAD - -#define OS_SHARED_FONT_TABLE_PATH "nand:/" -#define OS_SHARED_FONT_FILE_NAME_LENGTH 0x20 -#define OS_SHARED_FONT_SIGN_SIZE 0x80 - -// LtHge[uwb_ -typedef struct OSSharedFontHeader { - u32 timestamp; - u16 fontNum; - u8 pad[ 6 ]; - u8 digest[ SVC_SHA1_DIGEST_SIZE ]; -}OSSharedFontHeader; - -// LtHge[u -typedef struct OSSharedFontEntry { - u8 fileName[ OS_SHARED_FONT_FILE_NAME_LENGTH ]; -// u8 pad[ 4 ]; - u32 compLength; // kTCY - u32 offset; - u32 origLength; // ̃TCY - u8 digest[ SVC_SHA1_DIGEST_SIZE ]; -}OSSharedFontEntry; - -// LtHgCu[N -typedef struct OSSharedFontWork { - OSSharedFontHeader header; - OSSharedFontEntry *pInfoTable; -}OSSharedFontWork; - -#ifdef USE_FONT_WRAM_LOAD -// SHA1R[obN -typedef struct CalcSHA1CallbackArg -{ - SVCSHA1Context ctx; - u32 hash_length; -} CalcSHA1CallbackArg; -#endif // USE_FONT_WRAM_LOAD - -// function's prototype------------------------------------------------------- -#ifdef USE_FONT_WRAM_LOAD -static void CalcSHA1Callback(const void* addr, const void* orig_addr, u32 len, MIWramPos wram, s32 slot, void* arg); -#endif // USE_FONT_WRAM_LOAD - -// global variable------------------------------------------------------------- -// static variable------------------------------------------------------------- -static OSSharedFontWork s_work; -static BOOL s_isInitialized = FALSE; - -// const data------------------------------------------------------------------ -// LtHgmFpJ -static const u8 s_sharedFontPubKey[] = { - 0x9f, 0x80, 0xbc, 0x5f, 0xb6, 0xb6, 0x1d, 0x2a, 0x46, 0x02, 0x52, 0x64, 0xb2, 0xa3, 0x86, 0xce, - 0xe6, 0x54, 0xd3, 0xa9, 0x70, 0x5b, 0xe3, 0xc2, 0x10, 0xa9, 0xb5, 0x2f, 0x38, 0xc5, 0x51, 0xfb, - 0xb5, 0xd1, 0x80, 0xfd, 0xff, 0x20, 0x65, 0xc1, 0x28, 0x4d, 0x56, 0xbe, 0xfb, 0xbd, 0x3f, 0xe4, - 0xba, 0xf7, 0x9c, 0x3a, 0x33, 0x74, 0x74, 0x9d, 0xdb, 0xdd, 0x9e, 0x86, 0x05, 0x2c, 0xad, 0xfc, - 0x93, 0xfa, 0xfb, 0x08, 0xea, 0x71, 0x18, 0x36, 0xc5, 0xdc, 0x4c, 0x06, 0x34, 0x57, 0xa7, 0x8f, - 0x4e, 0x82, 0xf7, 0xb3, 0xe2, 0x9c, 0xe4, 0x72, 0xe3, 0xdc, 0x60, 0xaf, 0xcc, 0x18, 0xe2, 0xd4, - 0xef, 0xd2, 0x76, 0x47, 0x31, 0xe6, 0x14, 0x0e, 0x1d, 0x26, 0xb5, 0x85, 0x97, 0xbc, 0xc6, 0xb6, - 0xd8, 0xe7, 0x69, 0x2d, 0x2c, 0x26, 0xfb, 0x5f, 0x70, 0x9e, 0x19, 0x9c, 0x6b, 0x02, 0x6d, 0x97 -}; - -// LtHg -BOOL OS_InitSharedFont( void ) -{ - FSFile file[1]; - u8 signature[ OS_SHARED_FONT_SIGN_SIZE ]; - - if( s_isInitialized ) { - return TRUE; - } - - MI_CpuClear32( &s_work, sizeof(s_work) ); - - if( !FS_OpenFileEx( file, OS_SHARED_FONT_TABLE_PATH, FS_FILEMODE_R ) ) { - return FALSE; - } - - // [h - if( FS_ReadFile( file, signature, OS_SHARED_FONT_SIGN_SIZE ) != OS_SHARED_FONT_SIGN_SIZE ){ - goto ERROR; - } - - // wb_[h - if( FS_ReadFile( file, &s_work.header, sizeof(OSSharedFontHeader) ) != sizeof(OSSharedFontHeader) ){ - goto ERROR; - } - - FS_CloseFile( file ); - -#ifndef DISABLE_HASH_CHECK - // wb_`FbN - { - u8 calc_digest[ SVC_SHA1_DIGEST_SIZE ]; - u8 sign_digest[ SVC_SHA1_DIGEST_SIZE ]; - static u32 heap[ 4096 / sizeof(u32) ]; - - SVCSignHeapContext acmemoryPool; - SVC_CalcSHA1( calc_digest, &s_work.header, sizeof(OSSharedFontHeader) ); - SVC_InitSignHeap( &acmemoryPool, heap, 4096 ); - if( !SVC_DecryptSign( &acmemoryPool, sign_digest, signature, s_sharedFontPubKey ) ) { - return FALSE; - } - if( !SVC_CompareSHA1( calc_digest, sign_digest ) ) { - return FALSE; - } - } -#endif - -#ifdef USE_FONT_WRAM_LOAD - // WRAMpRead֐̏AWRAMČ㔼Ă - FS_InitWramTransfer( THREAD_PRIO_FS_FRAM ); - MI_FreeWramSlot_C( WRAM_TOP_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_ARM7 ); - MI_FreeWramSlot_C( WRAM_TOP_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_ARM9 ); - MI_FreeWramSlot_C( WRAM_TOP_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_DSP ); - MI_CancelWramSlot_C( WRAM_TOP_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_ARM7 ); - MI_CancelWramSlot_C( WRAM_TOP_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_ARM9 ); - MI_CancelWramSlot_C( WRAM_TOP_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_DSP ); -#endif // USE_FONT_WRAM_LOAD - - s_isInitialized = TRUE; - return TRUE; - -ERROR: - FS_CloseFile( file ); - return FALSE; -} - - -// LtHg@e[uTCY擾 -int OS_GetSharedFontTableSize( void ) -{ - if( s_isInitialized ) { - return (int)( s_work.header.fontNum * sizeof(OSSharedFontEntry) ); - }else { - return -1; - } -} - - -// LtHg@e[u[h -BOOL OS_LoadSharedFontTable( void *pBuffer ) -{ - FSFile file[1]; - u32 tableLen = sizeof(OSSharedFontEntry) * s_work.header.fontNum; - - if( ( !s_isInitialized ) || - ( s_work.header.fontNum == 0 ) || - ( pBuffer == NULL ) || - ( s_work.pInfoTable ) ) { - return FALSE; - } - - // tHge[u[h - if( !FS_OpenFileEx( file, OS_SHARED_FONT_TABLE_PATH, FS_FILEMODE_R ) ) { - return FALSE; - } - if( !FS_SeekFile( file, OS_SHARED_FONT_SIGN_SIZE + sizeof(OSSharedFontHeader), FS_SEEK_SET ) ){ - goto ERROR; - } - if( FS_ReadFile( file, pBuffer, (int)tableLen ) != tableLen ){ - goto ERROR; - } - FS_CloseFile( file ); - -#ifndef DISABLE_HASH_CHECK - // tHge[u@nbV`FbN - { - u8 calc_digest[ SVC_SHA1_DIGEST_SIZE ]; - SVC_CalcSHA1( calc_digest, pBuffer, tableLen ); - if( !SVC_CompareSHA1( calc_digest, s_work.header.digest ) ) { - return FALSE; - } - } -#endif - - s_work.pInfoTable = pBuffer; - return TRUE; - -ERROR: - FS_CloseFile( file ); - return FALSE; -} - - -// LtHg@tHgTCY擾 -int OS_GetSharedFontSize( OSSharedFontIndex index ) -{ - if( ( s_isInitialized == NULL ) || - ( s_work.pInfoTable == NULL ) || - ( index >= s_work.header.fontNum ) || - ( index < 0 ) || - ( index >= OS_SHARED_FONT_MAX ) ) { - return -1; - } - - return (int)s_work.pInfoTable[ index ].origLength; -} - - -// LtHg ktHgTCY擾 -int OS_GetSharedFontCompressedSize( OSSharedFontIndex index ) -{ - if( ( s_isInitialized == NULL ) || - ( s_work.pInfoTable == NULL ) || - ( index >= s_work.header.fontNum ) || - ( index < 0 ) || - ( index >= OS_SHARED_FONT_MAX ) ) { - return -1; - } - - return (int)s_work.pInfoTable[ index ].compLength; -} - - -// LtHg@tHgl[擾 -const u8 *OS_GetSharedFontName( OSSharedFontIndex index ) -{ - if( ( s_isInitialized == NULL ) || - ( s_work.pInfoTable == NULL ) || - ( index >= s_work.header.fontNum ) || - ( index < 0 ) || - ( index >= OS_SHARED_FONT_MAX ) ) { - return NULL; - } - - return s_work.pInfoTable[ index ].fileName; -} - - -// LtHg@^CX^v擾 -u32 OS_GetSharedFontTimestamp( void ) -{ - if( ( s_isInitialized == NULL ) ) { - return 0; - } - return s_work.header.timestamp; -} - - -// LtHg@tHg[h -BOOL OS_LoadSharedFont( OSSharedFontIndex index, void *pBuffer ) -{ - FSFile file[1]; - OSSharedFontEntry *pInfo = &s_work.pInfoTable[ index ]; - u8 calc_digest[ SVC_SHA1_DIGEST_SIZE ]; - - if( ( s_isInitialized == NULL ) || - ( s_work.pInfoTable == NULL ) || - ( index >= s_work.header.fontNum ) || - ( index < 0 ) || - ( index >= OS_SHARED_FONT_MAX ) ) { - return FALSE; - } - - // tHg@[h - if( !FS_OpenFileEx( file, OS_SHARED_FONT_TABLE_PATH, FS_FILEMODE_R ) ) { - return FALSE; - } - if( !FS_SeekFile( file, (int)pInfo->offset, FS_SEEK_SET ) ){ - goto ERROR; - } -#ifdef USE_FONT_WRAM_LOAD - { - CalcSHA1CallbackArg arg; - SVC_SHA1Init( &arg.ctx ); - arg.hash_length = pInfo->compLength; - if( !FS_ReadFileViaWram( file, pBuffer, (s32)MATH_ROUNDUP( pInfo->compLength, 0x20 ), MI_WRAM_C, - WRAM_TOP_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, -#ifndef DISABLE_HASH_CHECK - CalcSHA1Callback, -#else - NULL, -#endif // DISABLE_HASH_CHECK - &arg ) ) { - goto ERROR; - } - SVC_SHA1GetHash( &arg.ctx, &calc_digest ); - } -#else - if( FS_ReadFile( file, pBuffer, (int)pInfo->compLength ) != pInfo->compLength ){ - goto ERROR; - } -#ifndef DISABLE_HASH_CHECK - SVC_CalcSHA1( calc_digest, pBuffer, pInfo->compLength ); -#endif // DISABLE_HASH_CHECK -#endif // USE_FONT_WRAM_LOAD - - FS_CloseFile( file ); - -#ifndef DISABLE_HASH_CHECK - // tHg@nbV`FbN - if( !SVC_CompareSHA1( calc_digest, pInfo->digest ) ) { - return FALSE; - } -#endif // DISABLE_HASH_CHECK - - return TRUE; - -ERROR: - FS_CloseFile( file ); - return FALSE; -} - - -#ifdef USE_FONT_WRAM_LOAD -// FS-WRAM]SHA1vZR[obN -static void CalcSHA1Callback(const void* addr, const void* orig_addr, u32 len, MIWramPos wram, s32 slot, void* arg) -{ -#pragma unused(orig_addr) -#pragma unused(wram) -#pragma unused(slot) - CalcSHA1CallbackArg *cba = (CalcSHA1CallbackArg *)arg; - u32 calc_len = ( cba->hash_length < len ? cba->hash_length : len ); - if( calc_len == 0 ) return; - cba->hash_length -= calc_len; - SVC_SHA1Update( &cba->ctx, addr, calc_len ); -} -#endif // USE_FONT_WRAM_LOAD diff --git a/build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/sharedFont.h b/build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/sharedFont.h deleted file mode 100644 index 98447dda..00000000 --- a/build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/sharedFont.h +++ /dev/null @@ -1,69 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - OS - include - File: sharedFont.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - - *---------------------------------------------------------------------------*/ - -#ifndef TWL_OS_SHARED_FONT_H_ -#define TWL_OS_SHARED_FONT_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef SDK_ARM9 - -// LtHgCfbNX -typedef enum OSSharedFontIndex { - OS_SHARED_FONT_WW_L = 0, - OS_SHARED_FONT_WW_M = 1, - OS_SHARED_FONT_WW_S = 2, - OS_SHARED_FONT_MAX = 3 -}OSSharedFontIndex; - - -// LtHg -BOOL OS_InitSharedFont( void ); - -// LtHg@e[uTCY擾 -int OS_GetSharedFontTableSize( void ); - -// LtHg@e[u[h -BOOL OS_LoadSharedFontTable( void *pBuffer ); - -// LtHg@tHgTCY擾 -int OS_GetSharedFontSize( OSSharedFontIndex index ); - -// LtHg kTCY擾 -int OS_GetSharedFontCompressedSize( OSSharedFontIndex index ); - -// LtHg@tHgl[擾 -const u8 *OS_GetSharedFontName( OSSharedFontIndex index ); - -// LtHg@^CX^v擾 -u32 OS_GetSharedFontTimestamp( void ); - -// LtHg@tHg[h -BOOL OS_LoadSharedFont( OSSharedFontIndex index, void *pBuffer ); - -#endif // SDK_ARM9 - -#ifdef __cplusplus -} -#endif - -#endif // TWL_OS_SHARED_FONT_H_ diff --git a/build/tests/compressSharedFontLoad/testLoadSpeed/src/loadSharedFont.c b/build/tests/compressSharedFontLoad/testLoadSpeed/src/loadSharedFont.c deleted file mode 100644 index 4fbb98a5..00000000 --- a/build/tests/compressSharedFontLoad/testLoadSpeed/src/loadSharedFont.c +++ /dev/null @@ -1,198 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: loadSharedFont.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "loadSharedFont.h" - -// ktHg𓀂Ƃ1ɂ -#define UNCOMPRESS_FONTS 1 - -// Ok̂Ƃɂ1ɂ -#define FORWARD_COMPRESS 0 - -// extern data----------------------------------------------------------------- - -// function's prototype------------------------------------------------------- -BOOL g_isSucceededLoad[ OS_SHARED_FONT_MAX ]; - -// static variable------------------------------------------------------------- -static u8 *s_pFontBuffer[ OS_SHARED_FONT_MAX ]; // ǂݍ݂̓eXgȂ̂Ń[hstaticϐɂĂB -static BOOL s_isStarted = FALSE; -static u8 *s_pCompressedBuffer[ OS_SHARED_FONT_MAX ]; // kpTempBuffer - -// const data------------------------------------------------------------------ - - -// ============================================================================ -// LtHg[h -// ============================================================================ -void LoadSharedFont( STicks *pTicks ) -{ - u8 *pBuffer; - int size; - OSSharedFontIndex i; - OSTick starttick; - - pTicks->all = 0; - pTicks->comp = 0; - - if( s_isStarted ) return; - - starttick = OS_GetTick(); - - // tHg[h - if( !OS_InitSharedFont() ) { - OS_TPrintf( "OS_InitSharedFont failed.\n" ); - return; - } - size = OS_GetSharedFontTableSize(); - if( size < 0 ) { - OS_TPrintf( "OS_GetSharedTableSize failed.\n" ); - return; - } - - pBuffer = OS_Alloc( (u32)size ); - if( pBuffer == NULL ) { - OS_TPrintf( "malloc failed.\n" ); - return; - } - if( !OS_LoadSharedFontTable( pBuffer ) ) { - OS_TPrintf( "OS_LoadSharedTable failed.\n" ); - return; - } - - for( i = OS_SHARED_FONT_WW_L; i < OS_SHARED_FONT_MAX; i++ ) - { - int origsize; -#if (UNCOMPRESS_FONTS==1) - int compsize; - int comperr; - OSTick comptick; -#endif - - OS_TPrintf( "%s read.\n", OS_GetSharedFontName( i ) ); - - // tHǧ(𓀌)TCY - origsize = OS_GetSharedFontSize( i ); - if( origsize < 0 ) - { - OS_TPrintf( " get font size failed.\n" ); - } - origsize = MATH_ROUNDUP( origsize, 32 ); // FS̃LbVȂ̂ŁAƂ肠ACgƂĂB - OS_TPrintf( " original size = %d\n", origsize ); - -#if (UNCOMPRESS_FONTS==1) - compsize = OS_GetSharedFontCompressedSize( i ); - if( compsize < 0 ) - { - OS_TPrintf( " get compressed font size failed.\n" ); - } - OS_TPrintf( " compressed size = %d\n", compsize ); -#endif - - s_pFontBuffer[ i ] = OS_Alloc( (u32)origsize ); // ̃tHgTCYŃobt@m - if( s_pFontBuffer[ i ] == NULL ) - { - OS_TPrintf( " malloc failed.\n" ); - } - - // k̃tHg[h -#if (FORWARD_COMPRESS==1) - s_pCompressedBuffer[i] = OS_Alloc( (u32)MATH_ROUNDUP( compsize, 32 ) ); - if( OS_LoadSharedFont( i, s_pCompressedBuffer[ i ] ) ) -#else - if( OS_LoadSharedFont( i, s_pFontBuffer[ i ] ) ) -#endif - { - OS_TPrintf( " load succeeded.\n" ); - g_isSucceededLoad[ i ] = TRUE; - } - else - { - OS_TPrintf( " load failed.\n" ); - g_isSucceededLoad[ i ] = FALSE; - } - - // -#if (UNCOMPRESS_FONTS==1) - comptick = OS_GetTick(); - OS_TPrintf( " uncompress font\n" ); -#if (FORWARD_COMPRESS==1) - //comperr = MI_SecureUncompressLZ( s_pCompressedBuffer[i], (u32)compsize, s_pFontBuffer[i], (u32)origsize ); - //comperr = MI_SecureUncompressHuffman( s_pCompressedBuffer[i], (u32)compsize, s_pFontBuffer[i], (u32)origsize ); - MI_UncompressHuffman( s_pCompressedBuffer[i], s_pFontBuffer[i] ); - comperr = MI_ERR_SUCCESS; -#else - comperr = MI_SecureUncompressBLZ( s_pFontBuffer[i], (u32)compsize, (u32)origsize ); -#endif - if( MI_ERR_SUCCESS == comperr ) - { - OS_TPrintf( " uncompression succeeded\n" ); - } - else - { - OS_TPrintf( " uncompression failed %d\n", comperr ); - } - pTicks->comp += (OS_GetTick() - comptick); // 𓀂ɂ -#endif - } - - // S̏ɂ - pTicks->all = OS_GetTick() - starttick; - - s_isStarted = TRUE; -} - -void WriteFontIntoSD( void ) -{ - u8 *pFont = NULL; - int size; - OSSharedFontIndex i; - char str[100]; - FSFile fp[1]; - - FS_InitFile( fp ); - - for( i = OS_SHARED_FONT_WW_L; i < OS_SHARED_FONT_MAX; i++ ) - { - pFont = s_pFontBuffer[i]; - size = OS_GetSharedFontSize(i); - if( pFont != NULL) - { - STD_TSPrintf( str, "sdmc:/%s.uncomp", OS_GetSharedFontName(i) ); - FS_DeleteFile( str ); - if( !FS_CreateFile( str, FS_PERMIT_R|FS_PERMIT_W ) ) - { - OS_TPrintf( "sd create failed %d\n", FS_GetArchiveResultCode(str) ); - } - if( FS_OpenFileEx( fp, str, FS_FILEMODE_W ) ) - { - FS_WriteFile( fp, pFont, size ); - FS_CloseFile( fp ); - OS_TPrintf( "%s is written\n", str ); - } - else - { - OS_TPrintf( "sd write failed %d\n", FS_GetArchiveResultCode(str) ); - } - } - } -} - - - - diff --git a/build/tests/compressSharedFontLoad/testLoadSpeed/src/loadSharedFont.h b/build/tests/compressSharedFontLoad/testLoadSpeed/src/loadSharedFont.h deleted file mode 100644 index 4095ee9c..00000000 --- a/build/tests/compressSharedFontLoad/testLoadSpeed/src/loadSharedFont.h +++ /dev/null @@ -1,46 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: loadSharedFont.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __LOAD_SHARED_FONT_H__ -#define __LOAD_SHARED_FONT_H__ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// define data------------------------------------------------------- -typedef struct _STicks -{ - OSTick all; // S̎ - OSTick comp; // 𓀂̎ -} STicks; - -// global variables-------------------------------------------------- -extern BOOL g_isSucceededLoad[ OS_SHARED_FONT_MAX ]; - -// function---------------------------------------------------------- -void LoadSharedFont( STicks *pTicks ); -void WriteFontIntoSD( void ); - -#ifdef __cplusplus -} -#endif - -#endif // __LOAD_SHARED_FONT_H__ diff --git a/build/tests/compressSharedFontLoad/testLoadSpeed/src/main.c b/build/tests/compressSharedFontLoad/testLoadSpeed/src/main.c deleted file mode 100644 index ce1781e3..00000000 --- a/build/tests/compressSharedFontLoad/testLoadSpeed/src/main.c +++ /dev/null @@ -1,101 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - demos - FS - overlay - File: main.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - - -#include -#include - -#include "DEMO.h" -#include "loadSharedFont.h" - -/*---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: NitroMain - - Description: AvP[VCGg - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void NitroMain(void) -{ - STicks ticks; - - OS_Init(); - OS_InitTick(); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - { - OSHeapHandle hh; - void *tmp; - tmp = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetArenaLo(OS_ARENA_MAIN, tmp); - hh = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - if (hh < 0) - { - OS_TPanic("ARM9: Fail to create heap...\n"); - } - (void)OS_SetCurrentHeap(OS_ARENA_MAIN, hh); - } - - DEMOInitCommon(); - DEMOInitVRAM(); - DEMOInitDisplayBitmap(); - DEMOHookConsole(); - - DEMOSetBitmapTextColor(GX_RGBA(31, 31, 0, 1)); - DEMOSetBitmapGroundColor(DEMO_RGB_CLEAR); - DEMOStartDisplay(); - - FS_Init(FS_DMA_NOT_USE); - - OS_TPrintf("--------------------------------\n" - "Shared Font sample.\n"); - - LoadSharedFont( &ticks ); - - // ʕ\ - { - int i; - int ox = 10; - int oy = 60; - - DEMOFillRect(0, 0, GX_LCD_SIZE_X, GX_LCD_SIZE_Y, DEMO_RGB_CLEAR); - DEMOSetBitmapTextColor(GX_RGBA(0, 31, 0, 1)); - DEMOSetBitmapTextColor(GX_RGBA(31, 31, 31, 1)); - DEMODrawFrame(ox, oy, 240, 10 + OS_SHARED_FONT_MAX * 10 + 20, GX_RGBA( 0, 31, 0, 1)); - for (i = 0; i < OS_SHARED_FONT_MAX; ++i) - { - DEMODrawText(ox + 10, oy + 5 + i * 10, "%s load %s", - OS_GetSharedFontName( (OSSharedFontIndex)i ), g_isSucceededLoad[ i ] ? "suceeded" : "failed"); - } - DEMODrawText(ox + 10, oy + 5 + OS_SHARED_FONT_MAX * 10, "all time %d msec", OS_TicksToMilliSeconds(ticks.all) ); - DEMODrawText(ox + 10, oy + 5 + OS_SHARED_FONT_MAX * 10 + 10, "comp time %d msec", OS_TicksToMilliSeconds(ticks.comp) ); - } - DEMO_DrawFlip(); - - WriteFontIntoSD(); - OS_TPrintf( "end\n" ); - OS_WaitVBlankIntr(); - - OS_Terminate(); -} - - diff --git a/build/tests/yuv2rgb/Makefile b/build/tests/yuv2rgb/Makefile deleted file mode 100644 index 3bf6d022..00000000 --- a/build/tests/yuv2rgb/Makefile +++ /dev/null @@ -1,121 +0,0 @@ -#! make -f -#--------------------------------------------------------------------------- -# Project: TwlSDK - YUV2RGB -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev:$ -# $Author:$ -#--------------------------------------------------------------------------- - -ifdef TWL_IPL_RED_ROOT -#R|[lg؂ւ܂B -#RgAEgracoonALjackalg܂B -#̍sύXmake cleanĂB -TWL_IPL_USE_RED_IPL := TRUE -endif - -ifdef TWL_IPL_USE_RED_IPL -TARGET_FIRM = SYSTEMMENU -REBOOT_LIB = libreboot$(TWL_LIBSUFFIX).a -LDEPENDS_NEF += $(REBOOT_LIB) -ADDRESS_DTCM = 0x0e000000 -DEFAULT_COMP_ARM7 = jackal -MAKEROM_FLAGS += -F -LCFILE_SPEC = $(SYSMENU_ROOT)/build/systemMenu_RED/Launcher/ARM9/ARM9-TS.lsf -LCFILE_TEMPLATE = $(SYSMENU_ROOT)/build/systemMenu_RED/Launcher/ARM9/ARM9-TS.lcf.template -MACRO_FLAGS += -DTWL_IPL_USE_RED_IPL -MAKELCF_FLAGS += -DREBOOT_LIB='$(REBOOT_LIB)' -endif - - -TARGET_PLATFORM := TWL -TWL_PROC := ARM9 -TWL_ARCHGEN := LIMITED - -TARGET_BIN = main.srl -ROM_SPEC_TEMPLATE = yuv2rgb.rsf.template -ROM_SPEC = yuv2rgb.autogen.rsf -SRCS = snd_data.c mainy.cpp new.cpp cpu_yuv2rgb.c menuIrqHandler.c menuCameraManager.cpp #dsp_yuv2rgb.c -DATA_DIR = ./data -EXT_OBJS += $(patsubst $(DATA_DIR)/%.dat,$(OBJDIR)/%.o,$(wildcard $(DATA_DIR)/*.dat)) - -# DSPt@[EFA萔ƂĐÓINB -#DSP_FIRMWARE_DIR = $(ROOT)/build/dspcomponents/build/tests/yuv2rgb/bin -#DATA_DIR = . -#EXT_OBJS += $(patsubst $(DSP_FIRMWARE_DIR)/%.a,$(OBJDIR)/%.o,$(wildcard $(DSP_FIRMWARE_DIR)/*.a)) - -MACRO_FLAGS += -DTWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - -#---------------------------------------------------------------------------- - -ifdef TWL_IPL_USE_RED_IPL -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs -include $(TWLSDK_ROOT)/build/libraries/reboot/commondefs.reboot -MAKEROM := $(TWL_IPL_RED_ROOT)/tools/bin/makerom.TWL.launcher.exe -else -include $(TWLSDK_ROOT)/build/buildtools/commondefs -endif -include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib - - -LLIBRARIES += libcpu_jpegEncoder$(TWL_LIBSUFFIX).a - - -#---------------------------------------------------------------------------- - -#do-build: $(ROM_SPEC) prepare $(TARGETS) -do-build: $(ROM_SPEC) $(TARGETS) - -#SUBDIRS = ../../../dspcomponents/build/tests/yuv2rgb - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -# UIG`[̃\[X̂܂܃Rs[܂B -.PHONY: prepare -prepare: - cp -p $(TWL_IPL_ROOT)/menu/scene/src/menuCameraManager.cpp src - cp -p $(TWL_IPL_ROOT)/menu/scene/include/menuCameraManager.h include - -ifdef TWL_IPL_USE_RED_IPL -# for $(SYSMENU_LIBS) -include redipl_defs_autogen_by_uig -LLIBRARIES += $(SYSMENU_LIBS) - -$(ROM_SPEC): $(ROM_SPEC_TEMPLATE) Makefile - grep -v MAKEROM_WRAM_MAPPING $(ROM_SPEC_TEMPLATE) | grep -v NTRJ | grep -v User > $(ROM_SPEC) - -else -$(ROM_SPEC): $(ROM_SPEC_TEMPLATE) Makefile - grep -v WramMappingDirect $(ROM_SPEC_TEMPLATE) | grep -v HNAJ | grep -v Secure | grep -v System | grep -v HwAESSlot > $(ROM_SPEC) - -endif - -LDIRT_CLEAN += $(ROM_SPEC) - -#---------------------------------------------------------------------------- - -$(OBJDIR)/%.o : $(DATA_DIR)/%.dat - $(BIN2OBJ) --compatible $< $@ >/dev/null - -$(DATA_DIR)/%.dat : $(call eupath,$(DSP_FIRMWARE_DIR)/%.a) - cp -T $< $@ - - -ZIPDIR=$(notdir $(shell pwd)) -ZIPFILE=$(HOME)/$(ZIPDIR)-$(shell date +%y%m%d_%H%M).zip -.PHONY: zip -zip: - @cd .. && find $(ZIPDIR) ! -type d | grep -v -e \~ -e .tmp -e .svn -e .obj -e /bin/ -e /depend/ -e /obj/ | zip $(ZIPFILE) -@ - @ls -l $(ZIPFILE) - - -#===== End of Makefile ===== diff --git a/build/tests/yuv2rgb/data/camera_shutter.dat b/build/tests/yuv2rgb/data/camera_shutter.dat deleted file mode 100644 index 14b56eb53116a5602d87950353d76d3d8af7bc63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32628 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 diff --git a/build/tests/yuv2rgb/data/wheel.dat b/build/tests/yuv2rgb/data/wheel.dat deleted file mode 100644 index 81a737dcc5e2aed6fbb698c7ea3a048f3683575a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136388 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

    o zkhYxl>8sRcBh%BIE}t1J*P+7IIxDZ^T>2QI@>FQDD#@2Kd* z-hyD^SGFNh55EH)ms{yvT*2X<-@>Y@lhWHRIkYiK3@w!eEa#N0|GDxt#>+pb#$rts zL;cs_lhzjWSkHZ$rSEaufVJ!d=z1uGR|b0PHgmz`iQ>)brK-W6R}#;U1P1*XZ{Ory z=lG=R0@Ob}DHa@_x zg#AoA*$vl~@FO$qDEFwm_e5UMmzpOoNE?T>5x7Gwt4T-qBDwd1`#riqxFw-j2BllE z0WvxK#Cc6{wy1_+DoT+Z{^B4H9=5y1qrFMGVL-k3DTF*uCqG3@mbJ6A!rgDjQ}U00 zIKTP&I&UUaa!ndB%Czjms>_m7&=1$zz{ZlOjjW;_cg(jsY9eeUz(pMVUit~#AqAtS z@fpkra1EWp*DyYA1gvHZLVK7*-cX~$&FEgi7_t-Wpn57^2szo?*oENYZn?Q z9R+^JHFpGJ3oBP3+2*iyb@*TzsMuq5r|Li?{g7^lbY6TKDI*q70ygU1;AJfZWFwE*O*W9JQ}S2z5}6=< zgH$V58DfMxjN5}^>7<&rz#w}<=sGC#9#>5cWU04sn}rB!;Fm%<5f#6LPJ=k|PeBHC zif9HmiCU_+g89S)awg089=OraAnzLbI8@9WRPKg$E4#^b*c`)i3RhhSJdB=a7g{fn zITapyg?TcZ$n=%vYTqeGr@j@`i9;d>@qW?d=8@2m3L(?obe|g?^7H2;JW{4DAr44w zL{r!dz2WwT=d#Vn?vW(EJG~k16Pd%ep5 z-~+pzbsTqs@xfmZgAJ0+mG9DIOTH>Tq7BeWU?Mr64SUvx&v-xiqV7n4byy7Cfdz6z zIXS9p-Gr6PA?iQ2lDyzFvn?FAxT4^za5C_K9E=grEBv+O4LVl38)*u!L7C7e#1-@d z2e|dL7H;G3z#sK(V}gE_&(SpTnT5=@n}DO zHd=|-M4hS+*d2nFWC!qScn6;cyyQP(KbiCBAj%j0$9m>av}G{>&qFrh7qP!U13Z#> zON&^8uQ^=etApL+9Z|E5HDpw~=&Qo7SQ52W+{^33RH0@}TXtZmJKrE`2KvOK@MKIv zxI~9#QAZkn7DC9C^h{UlK&n40@R{kw&4xYVO8ll`0kKgqQRHBHK~JbZ!Y`S5!M_;+ zb0pjy?nk`@6CoSu>PH<|2J;E-<3C2$b{}%Q59GM|0}QoJxD~6Btd}*Fs5Ir+4doS%g(p%^ zJrH@&@(1bj7E!ODX53S8C3;lYQXw0sMSYyK+C9*aSRuZNrN{_W(ykv z6J$dpONeYbNa@4>S;!z_y%?&^JYv2p?_-OMBW2$t%jMVT-MG|OmpK%uBzsYt=o-ev z_5qi3^YCktfkXy*Q_z%#AhQsOAjWUO3kG4R1W9F2+9qLVN}CaaD7kC`(;A9Zt|rgL zzVbcNHlgd`TLp8eCW=L#XN2BqV6XT$c{W1rUC*R->Gd+5G#B5e|IGH5{0x5%Mzczm zj?7Z`EpP&K52a)b+EbDb9{>&fQ@Rnkk9p%$0LBQz93oniPt-5ywz4t!Z2p?G!gWD# z#XOo_rB<6dx5h>c8OH$$a-U;Yc09Zh%Nh~RN! z(Z1Rd#3F7JZY~43$k(K>-87HNlU6dNbv`pYGY3Y#2rmG*vxE42Rf^)UM~buX%+NSl z8`nPJ3f~|)p6Tiviaa1U3#OudMDeOAqB31RsuLfLaDfe;zpAdeJvDEcqtUMKBjgkD zT)YvXl`FXh+C1*6ax{1weZzCEmUME#XY#+_HOwOaD)fWVEnHkb6+Mzs#P~(EBT|Qw zo1TAB7Mi#mTw!o$)zPr0#9Ji!o2qJ1_*@TGGq=tLCDm0U`^H zG%OKTXf8@?gSU}vw}M&Zrhr>)OYz;Puduf;+FV8u>nGrY>kTv*y@fAU-$#x}7lssY zAFBZz?idf|!Y$|)aSuKBlIwcoa-3qg=^FAi*eyB-`plfut%CZhHn4B7 z4jz3(>{=H(1JdDB`i-2yI2AmGp5k1t;mmAnJh+AIB={zHiwJ3Os{g{5mjE@DLb-OW>yX3^>X=1{y^C^d6@*xZK`|SsS@6 z^2?XWpBiAnE4hQ}%oTfcyuC<^w+O+bd>$tfm$E@4qXM3q}zyc)i%*sVhdM5O$tr$oaKfE_sVv0la#f=Z(K3+ zz*0qDHy?%%((M$WyrY&ego!SyRl!H#pvny2>Z+5jBlL(+oWjHp(T~6`%U%ncN54i! z`7^;4q5j-XxHWWFm<0v+P1HZ0*&KZeCV!wYUCQ838!j% z;~Lp!>@lB;^a`f~Zb}>33Y?}^Vqx|;Gz{rW&K1agU-7RY9+ZK_j9CJ)W3-dF?($0Z zR^%0vVE(|hs+omdk6e^omBGXY*--8gZ1&EG+;U%t9E|d&Fwr=Cocue4i!V}*kfLBI z)0|2r8E#gv0rY~7X1tJ3=yOq~aD0?hbeWwG*J0;yeUXD| zoPvG&W!z`cwa8(zCH>L7iz=^P$B2SiP;*g^@U+$@t*?$3%LV%Zf^`KHVZYlFEcN#b z4d!Aa8o|GyO8f&KMhquz;lJ?{&|9vI0Vr!|BE2nu0EfvrNFOF1$^#~_0DhJ|E+P10 zS(Mi#qWOGo7w&MYW!KCLB_~{qI1N}}yD58BRV`oWcZ*g@c3}gP#=)kzu54@cci_Bp zhv&X|VQ`b@Edss#|CSWHx3}&!B5k zo=2a*R%Z+)4$u|P!O2zi#Ye*vMNNcLfi&59`X6a8Zk=!n+5_$&c*-LdVku=q>W)Aj(X!*XMZrVtW8YQ!Pd`bgQ6RwJ4bhSMrD%+y0E$H) zLVq}ZVHKt^!m++@;0|E}-)EJ@tR_0TGT3F%QgVi7T|^l33OcXqk5(Z!L96#JyR~vV zd&pE9=tg#gvSlBEo%&IcN%D1MPvjdb;Z>4$d~I(2qTq~*tl*=BnO$PQ@$Fb+A8Id`{OH8q7HM51?9U=TLxVKbyY@*ote-xc% zcof&)hR1zpQORyr1$d*R?yd zbLRZc^W3*3>^D(@~wJ(hQYxC*bX~=$8 zUmG_!G>w{;|0i3!uvK0yeoTG=lP0w(vCg$E2`#mPI-O8YDXDDNWdwXA7!<2jWg5)nm8SG0OyWVVNt=Fb$K~a;A8Lf|vDCnt zyGZIM(-Mmsdqh&C11se{pv1)l`ihKF4$6Bc?;PH4}>IFb!`&kgql}4f69WC$| zX)}<|9ke44d-!|DSYoepgz=E*&Mi=R&cfFL1_=A`{px0{qcIu$sg2WS z>F3l|XgB>=MmJ)N8%)C=gYC3Wz$B460gjMSgZ5 zv$(E$GtvM(qV5H@fLo-pXt6em{=_t}wn31*Z%Bk_f+ zp4F*UafXEV~ly(Wras1)PFLBNBuZx8=u~~Fg-hn{pf|u-8?GJsQ=RdekJb_L{(}|7I zF!OI{JX1!c;mKrM_9wll=mk+exEi@8FO<{pN73>2n*0v;Vm-?;AD^Slv{v*VW>WnS z++J!V&&F;DN2!7GFnqh(8agF+H0G$KjPpb{;FWVLIM4P0Yy%Y;uOg+DJH8s+pX^BX zF!@t|>ISXrm=(_3Qaf@)aK74yJHsBqcCeb`jr76(pFRm8;FHm5#B*Os3XYaVIk1ja z-&&GC?_9ubW7=vT_37v+E{bpDucF7aGU)5$ustTy<% zx;uEU_&~v|z{}W2;3)CJ9(E%(#(oC44Gd*#a##7eYy`HezcKG%fEjAi^$%*9YHMv< zI3KFwUy6O^{79Gz>&Ypt`2P|&N1uZ`XgfICw37j{ZpfB!>|Ppz-KI^$eJ%4A!^lsroQv z3zUNH!Q-@b;2c&8_2GBtmxf>SukEkB3tjaqm%y+R8PP8+U0nW6lsoY;iYjU~%af$K z_~DeR%HPBlaWYQ<0rna`RqI9Bk!gq@d0}Q&j};PtYXP!F!ikWZe0D6$qMe8lQ&C73YrBrOEbfF7)EL8nvd-uP1BOn%C<{9ikd+* zZXDq%8jGw7{>uFTel6;RL@7ECAMd@1->H zN|h=B9}@BkGNaE6e|vu$;URV>n@2O??!a#;zw4VyB*H%GFm`}n57@#d*b~ur zL7p`+-~vk3h4uJ&PfFb1DY;M?d%fUhu4=)A+)v?(`O^TE%cS4Xu)~tv-@ZKAhis!i zvJE4>L-NT?S6W=hIgEACx&) z@ZNcc`%iv@9`v`jKt+D$NbotD-RgoWQQI4mHesmNPkeaSBLMzE(w1NW5Nde#9yhA36VGQk!uTkJ-BGq{E6Fc^lHqkl{_}4rsKo489$m2Db|r80D0Xij~GB)_qcaYp;Vef<44< z{8%D0@RnR#Jc+o>ch#QK-2%6ggo4ZQQ+NqFV$+M?m*`hOoBYeL)*D||Si!ossFRuC zIiusY4Qd_cJ5(O{f;Nz&+B7|xt&KF|XtW=63GQj{0`+wa2981f^jX zzTy^gzWtL6vdFeXuqw19c1Kw08_fIs?Su{BC2nBiY_VFYPslDuisx^uF!hw>)K-(H$!^BR7Bk4I@SgC7z(w`-N1{$Xi0A|_W3EN^2`}muv z)c(1X>?8kljErAHef2bXt zHCO?7%qK_xfvSaZ<{yzF6&TT;Sgvq|HlMf<@qn|VuSv1!Z+a@<39Lvj<6p%8F20J} z1m$282qQ88x{+&67z(?wW8{1=(ej@&C4uvZNgfP$oDQYSqYG!}@8)8;$yl#gb?O1U zAE|5U1MappLW(T`tOIGlZn%>+Kzk?*5FT?xbR=Jwy&+#T`v;FO*4+gAGyW|yiTsyb z8ERuI`;%jk;1=)&F*;)M4svgko%7yH&7@zXg`V^HU!|S)$0lS!xU)#V0sqTh z=W;{AqD2Z>c*r^@LuImDa&u0(uZIuV1Bj6o=H{2fjip(Hu;0>wW zSR?Esz<_h)d>xWpz)@wX&HyIG9X`%`phh64hOHa*!Or989_%rGAo>8Dm7gxp2-Oi^ zQQNiBrP?F0GzR+#SBIzMe$voSJ(X33gQ2SE2Ks7=8H84PtP-FP!sU+Ys# zeY@Xy0H+Dz-~zcx?kZ$RFrVCy#3KV;yM$e~UqT~cIy%S5G=`xQongFP8m8Y$niV<& z-zXlI?-91W?~HZJW^A>Md-m;#Q!Gm9&)CuAcrBHRg~#wo#h(kFL@(rM;8cGCb5~zQ zUvc!uo+mNbu!I@qam#|Ic?m`RLw{+Nka3Qdp40A`E{@OvP5)oCwDFI) z3Cd)e8zsFJ*~V1gz>QE(4*T959iA7qtkk<&G83NAY-x*Wk>~mqc{R!D~8t^ zAX`?Njxs8rn1OdFeS|6H-47KCQ`s7y$40Z?H`IyfOG4SN|CprC z5LU|nfPbm4k=F1w<%8+PxQ_LRTJ&vjL^|dvFcK3Dyrp%p>6Ui@jY5z4gP}?M-=a@X z1uLV^!Dq;R{j6yM&q234UlKc#N1>-&7CBc4gmXXjiVl7gl>7MSAtA>;+E$UWekj|5 zxom5V&k*WqnZ>muRg2H~UxZJ^){0NS5U|Hmnp$H$@9anP@MNGV)_+h6=mqzS_E#Ph zSB!Wga{^)gf7~{50XCjm?HPnFkKYLWVLgNG)CVx#qFsqdV6}KMV(tmm_l528M$%C- z%X$q>PMC`j9v|6*Ok$R(X;5zT*U0+t=z`o>gW%uNXwVP+o$@T3_5UGA-~({;uA^CfGMpRlHlEp43du9NFWw_>ay?s@-}Cnj&pR=N2r7E))t% zQ)QA=!m?R!?|5fED=M4bj%;)qTpwOxOaeY}*ObgqhE#z+t33fE zS8dNQ%DxwvW)gDl_||ej-b&dF9-~Rt7mm0%)={4-f>M-jky%n@|5#ufUlqB8$xt=N ze6Wq{BKUy$!x*Jam*$6t^ZyHe)?V=$bbGLYeG+pQOLwf0L`vZwf(MLF+7xuLIszyy zcN7Wki!__7fUN>eUA6ToIn4AhucFSgLEx=eP96_0RFX&%ScliuZ-C2%LUB6_ML){3 zxn4vD+Qj3DAD*}?xrKW(0fMkEIse|r9q(!t9?R~6kAl9W^e?e1Ilt@zx<&FQMK#a! ze{eh5zW!3e;==Lrv%;&oBRUBlgTBWmCw(P9m1$=AnOKsZ06UC6A@iIg=ZSAu_B_6A z)v$p3FZ7)4iSk)!9UPKdn445!@##t*^VdyrApnRXWD`Qsx;Irk$RdQ&QXpC-=zV-am9jrjl1|| z<0`-dS+W;RoH~8d`U>g|Qq}Zkp1WFJV%?ve@OdAq1y|*wg_7dt zUoeH3ZY8blm=RPH+h!Puvx7t34}iTu4`V^jNcGj*2Yl!Jx6wA_M)5&O1f$@%x+D*k_-HUJrKLtaC z&cPe`SBvV&sp2>9VB&t6ne;u+Nq8zZT}%5;8I^yuLJzSWNrw$1c9i&TL=$^QWU61` z5am_)QnWmFGnA0v3l$~pjlHLGW`o28$)Tfz_5;=CqDD5HI#T%BkmwG0=PJ5*w&c50xd6haK zr-yd)^Ds~^l+n4sTx^2t22ww9B|OSg+gMH=6uSU_3XQ~OT1t32QZulLSTDRl7Ll}^ z;LMK|m|U!UJV0&{-4)Vf%{^1MtK z_^U!H_QdfKX%?xfkND9`Sz2%zWaRoZVxBr(CcEfX1PWW=hT&2qq+h3>GmW4V&Zg1n zOy%O`#vU$_zeqZ`d{3IR(AriXBi4c|7Pi5^henat$U9im5@mrGiEEX{Kzn6u&O2?~ zr_*4hs5bJ1yb4uKf2+l%my#)KTlK7XA8G2BENqd<`HtR1{!#Rw2e`Y{x{n<|bz0*7d#Qq3|;`{cO>FR@q0a*e6L zy-;^)dqCz2?T;b|_UT6?fZ;L&`2^CsAA06?Cx9j+owMLGrgAV;IWz>SDxuvhXb z14#*LSIB8vo2Uisndd^_qWZ>9eJOX*eI>F#J|wGnqV-iQGr32weOv>1koJWhkyFpz z@Jo4Scc`B@(|WrwF7>a#BJUXJ52%N;ad?rly1x_AQ+Te`N3%toswmG#FKZ@?RckLM zNaf|O(kx&EvJmq)x{!_R!!Zy#V|-;Z)kd+XT2EOe??NVWX~b{bU^w2eD}UIh2;Y*o zs*63HOpfCmrb_ludiR(1$fa-@iMG59xf0Ju_M0}a+wdJq5JQZeKm8~7frf&&rQ_;cuB@%Z-pR1vpgFDm>l+1QaDiPh8c!7IsZ4Fk@ZrG6G zo^hk|_F8Mi7HRKsJ$%OAI@+07suoKJkbc}}q_1(wIKv!Mt5{!ylYuRCo$zj}Gss}u zC0g7EO$?rfoM8t3S52cfG0*IGTuqpkbgt4wk$wNLw{u8sL+ApLh5E@4abf*&QgRe` z=Y}$&O!YyaoAu~VF7D5Q0rsg{7x0b~=c;=fMQSrOxL4YBbr{zRLc}u2Vc-b53VubE zHcC6D$oH&&iWz!XKH;ke9m%dnj*T>+v+0BQmXt3#mT;N(B28F6QjePz?jujtHX&uH zC_RttL|4|TU|XWux|3Tg^oBibb4Mp`q^qOyk?4pHm-|_tMRwZ1Mk)NhWRK+N5?&46Pi|B-ouE9h!)D1*T{*%l=pv zAw?<)+49oJOZ)(kXK(AS?fBqv;X4OJI35LPryq$`#27vIB-9NfpmUGUQI zGuJ`G;DfC{b z9A3k3Rr-NEU5dq9Z<&GE};h#M%zx= zD%tLd4Uwt70RJKI#DBzGai3DnmORu@THN@}^SXWG{6Bjst`;2TPQy!e7<3+9~vr`nP3|eu(}@U7&Uld-;>41;xX` zeC01{ul=fZQR46P16Nn*29zw-iGB#R@qNz+iyQiC3Jri~M8~wn-Y!*kC(bhSjjO}E z<*}az`L}16@FUV7{ww|vIzn!s(}|ImL-Y`0pS3Hn8FeVDVz9c@Hv-reo)7l{Y;Y1a z0GLMpqOC()%l|=-q__HO?N7NE)#+s)Q%v7jd9}3pf%+2r?Ee!^7t_3qql}LE^apZ7~H^)E#4dU zZhUvBk8nCKzR+FVx=1pr8$IIs#&IdB$#&Om z1~CqDLcqwsP%yw(FNn&e4bt|TvrW>;q+2ehyPSGcd!COM+{_)E{hn{aIV?@=P2!4@ zWZNXiGGw*BMClccv1DXUsFct=2m;5%j)ccTTW=+lkO^q7CHf4GinPx3qD2<{^-O_h>bDs*!;{NDJ9*vT>Gq3fl zwqtZ!q>q1fcxv=#WIAZqCfd$A1ZSTT0wp@!dNTKpTb?tK$BUb)&yAtrGi!B7vyB1E zlcsAK{DyT9FC&|SAGMbORLRrof!{qXiS;E;qbzAM@(aJSEx#-?X~uKF8;)XnY2tKS zE?tkbo4?EfTzj)OSw6az1BHv+L~yx&z*5$F)zRJ?!oJwjg`>)k=vE(KJ~<|!f5mx`(+Um5AwRIr=j2FAJ|^K zEnJHL^uLH#@(6jl+}r=3=8rT*pArUhDt;()&mrrJ^b;XEnjHRLWERwxKj?zxRgMCq zKd{U4G*UOIPIQasPraJBgxLIf1z!GZE%0CUPu-hb5&R?dGyH@KgO7PpZ5!Pq?-81* zm*iGP4Y>{cP@6^!ASP0%V*+Ac9eJTTfo~Tbs`z82;nngLw5n;%0+0-KB|X;Qt^3Ti zjIglLOQ^4Cg)mYW85+o}W?OiiKsGjl$Ou}PS%p0qi!R|(+_K7rA-oT@g71khf+S&@ZgSCN7j~Km(n`_@JZ^Zhe`(sCl zXhBm$3=E8|HO9qWTfae#J;hGVvC08rLyTl$aOg*1LJW_*L~rQxEI-H#Mq~U&sEK-s zwaPvs1@G%F=k8?bY5l4-7VfZ5@>01y{)YT*_!)P=rK`;qE(4}>^6M^?&QCvSNM^k zW`(!vCzxk|kaANU6IZ~U((H2MqKQnt?`5JYE_26`N3=cG#|1JqHunN@hTEinBiqRj z>}B|}{;Q-F=&JhG7gg8mx51q_N2a5ngc=;Itt6?z&W z`%!b@3>}Or#ciUKRI5~<)6UjDUfx9_-%spQ$f$zqeajU2fMP&?^e`su^APKF} zGvs~SEO%8$g7rPoRy%Dx@M}u-g6q<$sKj@o{>PU|t0(m<)d{%EIGMf0ZCoclPGyGV z)=+G4R`7755_ZO$NiX~vT2H@#UomsKJB%puyTWQDcS&r)rzwScCOjA|OSL67VHKz) z(mMhPcSmIYo2F4Ugc5NtglEJU;ClET+_30Z^^x+3FR-2g>e?oHZUSwy)i7Qwa$qBvTDTdk!9J5_&~2i0@+tA97iSDG zAx`oiB}e*XuCZ_+oQ(IB=hGwLLFWFVB-BUx2v-qz;$y-6NM)vilwjK#nv5-vc9UNN zJNdJ={lWy#AKVIyAas+P;FEkK;(jekccvQW)vobI@%iLhVKX%X4Dq>$i`nns?!qrd zE6-@?d|GR2nQa9zn+1ekh35*v@YCp5y(hDTDD>8&Z;?86ikofHq8wl|Kvi#}e<@b| zxU^ib3QN?pLMq-0{7m^BCt)xtRXJ~yl%@Px=zlqjpxp(dq>kWw_HBG4{cQX;x;19C z>|*=D1>wInpG-qTv5)W>a<&*jUla{CUIjI2Aa+rTCb!i4Cf`IPIF))@{E@8YTMAjl zfzm*9KKB|METzK*KxcRmIt3k!I?ca#w6ECzw7wVzegl?)f^bJZ8hyf56ll3Od;|H_ ziqi9JE+PpV3VoH1gY9DL-~!gn`l{b!{c(r?ll5Y(iY1+V3@Qot*s<~6h>P4NZx9xd zuS|9N3*Z09e2NAg!{!`e39#zjP zRR|-hTXMOj(gy$lqgz5Ilz6thK{{D~-EsvB=C>`pMbXa>sRJ81hcCnfxH4x_J^QWN?!c(j~ z?1GQbzd>DzSy&yl9(J95tZkB~@q^LNLOr6S=7h@uz4b@%7wsU~!FW~`LLG$m z$eYkas6Bf@T>>XcWo(LijcSZ-R2MOJ;UKXa^r^iq=UF!)3E#N(P|xBVT#Mwx1EF#H zP)BuRuEz`GObxiSwoXrq%~C?)(Z*;t9V@M-V;_+$-6VU8^Ud^qM`{f`gQUrla2@KB}kG{&4+bi%Xm;F&s5>zt4U z=9{9+LvcV8aewpyy`t!ZcOh5DmTVm=N6nEMl@p)4d5 zpdxLEIlnANc2?ROmw=vp9n)8}6K*7J2gXA2x|^A)HL;I2x|3N@P<#&N_?KwaW3-xt zbH+LMU6f@CumyZgW2z6}!t6|LhUGLINXWNWw_dPbhNEq; zp>#R@4?0sFhMSsrs1`Cz8)JUrV^FWiWc3B>6{Z14M2TqtRd@em?u1&}BfvpK3(bt( z^rZ*JvUlWs;=KK;tD|=ibrzGP)Ud{OEGlI@6wffL=zPZN>Z3kl9u&_5LxDze0GK0g zcib00J1>~u_;{t9whOr_cCe8v+Ymi5wumWu2g~w14a0ZU=}k}8bx`qRr)<@Fs_@`A>no#=>x}$^ z=*|Bp9~6diC5)2tICM974Zen&xl^<=OoQ79pPG#~Qr7~K{)ArvyCW^gFgKeLP5;h6 z=uGYf{xwpX%9Ov*_p#FWLpoc^!XEht8n23*86U(fcr7syerk`&wA~jvOBkUC`g8CO z=ZlMkHz(eV&Z71!PA-`+8|Jo9@Lw9$w}T;al4PfEiw2yb{;jRmzUq6`N9lEPyuB{i4B4wK%c&{3$~GKNKN7;;xDy_xt0UkC3>Xz(pJEWR9y*D{o3}xDEM(vfDrgw%n9nM znK&2?l%t=-eu}k1bz%~~LO+0HG36{(=yTLVX$PPcC&)u0JG2hSY{c#Ak1ls)=r^JJ ze3ZK?Oyiy4R((D74t&r2PxE6Nr3b1~cQN;w$+lzg9AqOmjcdh9;R-M#m$Vbu z0lE@XUTI7B3_pa&ad%9kCdj2(N$CqFgTIMa@dWk`x=V8b%gIUF6S|XuATwZ0Ig2X% z2B3@dr%)GM%q<~X=`$#m8U&58`-A{-GB!e*BXtRmM@vSBTW>(u>B>&VIOllGo&^2u z(a2k+Yw$g2mDa;o$op^y*I;zLWiOVZRzmXp*%}zw!>?D}>`5!C{O3M^dgzDbZ^~e7 zhk0jg5SttIfUwaK=mS`lj`{_emA@lZjp7RqCraXs0%cswc^}>~I7M0& zY0cFDI0OtCr^a}d=vKeI|mBOeL1z;;Rx<)SfEUJrjVsj6d*Bd`l-1m+p{ z^`=l=Z9WETea&?4C+IRbQH78!F$~J`3hg3tT=p~dmAT{~qpOOe`Qg8b`H?JQzn%^^ zwI)h;+&97@OaEv@a~c~$<1IsikL{zSS~!S4k%!VlIfVI7n1XduD;d=cr&K8FEOeU>%k}BJSbag4EK>xw1H6_u85#&f22S60P1hD z3+k)KfkRkR?V){#Smc6)=2Um>tuPm#>T^(RVJVp4H)z*MCr~c216(Va)(v_n+l=F5 zHeVuG&tK8@MTppDAlIQu%p~?SGsn#7)KgQCEHn+QfJU{)`c!GKT2Zi@vz*#+D&T+~ z!EcP0XkB9jdRV^3|n-dp#l!=scoNL$-NCdNVlQh>!Yw)LKCfv_z$10eBnYWC9Tv5 zqZbHbb8!!~hNg%i#2~P*en6?hzmo==dzW+o(aI2~jBaE*a1K%d`b9eeuM-Z#$>KAk z6>!6Rqi(G=vz~{~6J7CjstA^e^%8_wVMJCc3$qbBa-0}%pM=kI)<75G1u!SH0M-P5 zk=urb34pjl*5Pz;wk3>lwiWnZvI6`_JFYL}x~e&BMU663qRZ7{LV)g28>lz0b!FiDY@*r$%!xK+7YCoQ3)tqs zbGRE;}|bkk#J-hzfay6>%(l8p@fUz6VEHSB=Q*P5$cG-d2hj*#pmTR+GO@O zyPvC`kO>ZRUbn_WO`M0h19%*pBD5DL2Q!s}vA61Kqbz_B-|-gIVcS=1nw0{I!6ao% ztiSRi)b{@g=HOYh8?cJ1qCZ9f{k_)RSSH1R3)Pe0Qe+VDnxueV@FP%?!NTqMYewbh zeet%im}`XYmLNxe=&}7X`3LfZ9xVKVZH_Ee3u0Gzhn6n>N0e1}*xu@UE%D$^bC0pc z+`nG+XA<8c)A1|tP+*m32m35e4vfa~*jyGs9|rc@Z-p~$mz2K{8#PL*;atjwes4NRlmGNju+mMZ(_6g zd+F;{tn42cNy5_V_}xd9&wvm;6F^+DagtexG&D&b)`FJM zqP)NP(Oi>Q1*WDJNx4PUO|NM^qqvx>=2iYIrLt^ihwd#<*XI;dQBZS_pGdhfMPo7Eu3q~7U+m1++}MJM zsuGr61erF-+N0!XYL{yWm@Ji(4}V|J*ZAn;Q-c+h7WQg@P=<#x(sv=V2@ZQ7*o!Ma zPr!%G{=jYRliBN;!ro0fs+{oLM$3XC{k|}PWWQw@v0z7Ws^z{^oOaPTmDCd+idBJk zM;{o6i{>juffe#6A*6Xx4E8$y#-_#1!a6u=K_!7|YTsgyK;(Lbxsg%&ZelRD%iAAc z;Q0W}$8PBncAai5?gWNHLGUOzO3QOi6ze49N}CuCJizTCn&s`o_7(0m{Mt;lo_mYF zJh3S-)c#m20pbVF#_wWs1Yqh-b*XA}QFx)A@Vwlsu5E#YNFav|t=eej)Ek{V4ft&DFcC zX)^h-9@v&W8n`6<&esFB z)GWIdSdALc@u&-EU)V|+7#c0N0eb40Rt0YAs*NA8PDh`?yNyDAv~(oUnSUPcB?f`v zz$V)YinO<|UVuNMPtAmNqr1m<&fh)39P)b8k_t+f1*&H_8N>#ocX zBC^(sRDtGrXS4rx4grDQ5TQ5LYbuy*X0yem!UXMx(iCrp&9JVvyQr_$)#?DCQFLHr zWo&fdgT9dGsIF+7rIsxS|7~e4R|W|wKe}HFgcz`oG7&6IKLdw28XyF56Rj>Bg6ak5 zYtPxAa&@?t@|L=;Iq=`16wroG2bU0|;Wvn+J=RiVONBwfw?a=51Vq|RjEavZTDqSQx?f1oRaTV0VRu1}2%P`ONCj*Hgw^BpuqIu9Q$Ti{v zQ65=gD;maL4dqs7|bmKF*kGPXA^CU7S-Wps-Dz>0%C z$>L}#vPGY!+AXvgH46!#&9AjJeubDwMW{*ek#SbcGOlAy;K`N;cz}9=$k2NEzI-6| zjtBX1(h{Hu8~(M3u*!T8JD?snilz=mL%=aZlfOcck6A%X=RMh_-u0*Q4(&# z|Ab41522ew5%`b@BfSj;jNyDHRv)cPlw*#e<*^dbVD&eBnBb8tauebIMkOz(&I^BH?-$jwyS-FV+HTXi_?w<(_H=S|<@(yWfs|LQb-BKX@h1gFSptR*< zzz|tPF9LP3J@6=C6Et1Euj^8V${0QL;fNpV1z*CJYsFYKH4{pLa+QVnF|jvVLuss% z;PRM=U|ceM$4tIfVQvE5t-0uPbQ;z~E^iQ=l}`{}#G0u~)nC9nR4VeH;|lVe0?`iU zK4EfXBvc_%L3Jwqxk^NRuBSai|J`- z_0sNiwS@PWQqg|QxQAe9BPkJ|5L| zHSkP-A#gcZ0o*4BksoMl46^Msy4kj|Q!zDsS~?_mWOK-w${&si_!;^t&1o*UESt{x zxt!ooJ;JSkub|hUiS88Op?AE&(E$JxS!hjRUD#Ie53o0OP`!kr(m~f1X_9xi(aJFs z`2`(>74UzeYm4@QT?&?HP_&nphHcX`yvf?R#MjD7Yg3(2^PmGk0gV_b7SAef8PJy?Q_-c&YWfuU0q0dh+aLPKYJP+-Bdph}V(YOtjviD} z+*M+!Bh9D@XU7(W9>*LxfGn_`>GlRrls5+qQ1DZR5?hC)>6)xhA`*rkZT~;&5~A zwcho2pX$`zXYKVoKYU%Lbw)CN|7}fA`5hccFGNeken)5G`+I*$nf(pzk4i1;mUGN` z5$;ZUhZaW-V@S9!`-7$6nsHCnvzegpy32933LORgz9&a&gf^u7DgKj|+5gjCVl(Zacn_V6l6mFbW{?TJRN0`{@S-1EpwjrjZ?Pw>uL4o1vU(;p<|F$loYwEzbDgL~%6I?Y=P85w~r}M*_quRTiL|B((<7tzLxU$|? zZfcE|GvV@}r01)#GPbZ;JGL`8BF+|P2cuB=>L%u|dSty*5|;2i!h7RSfP66p9Zg9A zOTbihfzH(F0gL>bzAtT#{yKFtZyYTcm+qMszcPLhZ5zR0AD#GRtMvh;-VG zB(Hcz=uH$LSx1am_HSgAu*SHC1K^XhLf)X?bY0SZsP)-coYhmr-W(f_?ovKPy*eUy zQl?3j!t;E$@kDnfem1onXX?u}AN*}i7Vikd@HRO=$OlieA!cdxNI#29ILWAq zn2{}WwIcJB3#2IP$c{wEG9yx)_NLijJ?^{C>1w0!JEhP!@}IL#pKi94pXzsGtDEIr z-{>>Fh}*@ zXWxPgG}%csev)q_0iIx6IjgM;Y$SH3C*>2Ywwys&Dh}njfD(2WJ7e^p@Ga}VU__p( zuko7bolwaCuc2h9tatZQT7)GCx6L_V#d()-mQ+;-aTiVdXzP!O(dl0^fw6o-E*n21{@;vsm5RQS z)*je1ywT1P?O~Q9YYYdMHm@u1&68?Y`4l96Zo?Gd8;+m&d^xkkL!fCD}`gzyQNC@UL z`j9D3Zq^RO!}*|svl^YU|5F!n9&cxPvv-rw(rI9KOp~=LsSoU9dK2*)E+fBC=b}SO zUbaHK0+vhjaJrfm?32D}xy=FLv|j;d+K=X*PZ6K*vswYy&RW3ynj@F_GUf@pr3Y~P zFCEeAPu19xU?JK~=ugYWzN2^JUa)!YI5bvhEFA}Lm0EUZJT2VPtQGh#dN*3o8V^UY zA)W(hf&Zk?#3jfj&~^7JtR6nz)ms zy6dysMje><=OEnS+crEu*dN@*UF?GKos2gbQ>`&^AK+U2S=tc|OLfwZ2wMW>&})4Q z>xSyvCEa_XlYHMI*F3MCS5mrbn=`}zKi&#wBZOxFF1}tq|^k0K}|6l70-=UcBvrsCs84vo^nC(mP(+Ok`IvCqT{F(I$jU;T) z{-z`KZNIw0t3QUgy?QHmZz(GieZ3=BJwNmzVr4Xl){uktQ!&Bm2Di~VJX_k<$xB<< zvFxZ-AFO6M;CS&iZX$o+_mU90joP!v4g|UELmG zwpag+Z>^4wj}se-nAX1`0x@-CHd%J-&LGem6K`tAoEE z^ZW{z@TRNxlw9#^sn5GI!f>bHJ|`MIWSphtqaJx>^l#5?-rn6_d8uykjiRkw9U}i@ zIfK=-N6|Uj7BGx%P-pPnssYByziVXJT;=% zwGLKg>o1-h8}6NtB5s#(M|dHXb%=0Z`$p2kBs$ADtbOJ;x~s}9>4jQT9V@*MN}-*= zqM1=Pl2wSaa?tfA2tBv;G&j!2M!Mg}GuQCM)u1V71NMvdF@ph{RWLdTKcRtk2(6eK zo}mz&16%PPR7K2$*MQbAiF@t}IF54|yPRX#vObbi#Ame<^0FlUnLfKx(QQ1P4zNVQvG6W$7j2Ca#{aQ;Ucnfoj*kolA9-u5WX~oJ%x!m251SKw z|Jo7H3)maqmFw#>l-+@bI1;*QPbPKsk@6qbbx$cc(^XJ>%r`t!onrWrT>+G%eeDdO zjQKYm=X9`#;KCLaT&yTwB>#X{-KW4krJgei54XC}vi1>kIbEaW#i7V>+0-5>{lGA+ z__mtalS)P#CX6+^3U5K-Kv`+dSI*A-Sr1wtnS`&2%thb`tV(kgP>(y5il&pWlTN%Duue(`zZe)AH$xof zsUG*9&XEfR>qMmASJEG(za*KR)~?s?(Vklgf;c~6p*`E3!8}UNQYmdA8uR^)lRrIb z@EnVCE&iKWB{8=WaOac?gLC3`L&1$AOLaYzka9`;nSLJJMILY74F8KOo3XF^y4u6B zB6Y(Xf1QqG3(ungd_}C_ejqN9x}#TM2k$$&YxgG$$z=N*3bQNf1gWW-ORfx(K_qhD zXdj%WCz+RQQF;!~`G!j8z30W|QdNEi7eghi8z?2R$(a-^qD|9oMLps#XH#5%d31&r zo+4c5jyhe0%xRa5R^Ps-RZRUH91KRnIj-r>~@tbikg^7b-ejn)U}H*2E;s3r(_ znmO-cKN-h8i}inDagaxU;u)D9@zzZJk7W+u3vLI#NWGZJ_`gg=y>pUQNSjr`DyL=D z_I<5G{{1KlThdR78>FYOYepFq&r%ZS_bC^sHj8-<8!0-&4_~5T|)aP$x+%K;^8ak}0OQ6tx!E&M!|m`>(3{6Ro^lQtA>n z#M{x`#XZ!_CS6K@3wK4&IETRzBd5GgtEFTnzl2mN6W#2cYK~FHI{oY}Vp2#GUq@Qe zi!h*F_qNdjewj{Drl`rzE?@2NQ7Mp?-z*>f9%&)8wn^+gus(hZYr*^LuV@D$NP8*f z3zd{=v#!DtcT@1e-`NVgvAz?H;Oy2>Y*l)yFecbm`RFW{`*Ig|G>#Y>e4~y3&>&Vh zx&)s}$pOcu_X60Nia&d9;4KL+9GCxzHUj+AUxj+3-06wl7y3a@eQ`VO?Fpp!bWI5s zz?JZy)*rF2BXv9ljA!JMz~2`!)1q1Y1|0ymNlim{Cv{|5)pyQYycu@2 z?jbc=h~GzsI9nx%mwB4HhKb*l&peNX!n4!clVK?X)$hjN?pRMS?Yl5PvK%xZ5@{=+ z1W&!2UD(Tv>Aa!M zwW-<|Jtce^-#3f;vBoB8+j8HVAx4zXu&HUAQjR7E1Z*I|r0K z5#5;<#`ZZfAG}mw3#Vg5_&-lxb0>^7*6aJg(O`l)Hk7P1BE3OtRklBSgU)O@9Z#V5 zvCm$_lR#(9wRjyF#FxO7}^eSpaLPO-U=3(X6SRG!E&L zoGze(7!fb3$@qpk-$|A~*in$k7U;L}upp2Ih3DaRiUp8-}#8f(PG9Wr$MH_RRV;Tn}1cD)a1Y%i%C zIiVP#Q@&GnRnIap7N1g|n%o(v6_amU0xAv;nzvD<$O|NBJ#k&qSZsi=3PsfF?325f zv0a^^^+PS4u(4ASf=zwB(znq)x80nMXyMjexF>976CjrixrfL|AR8f!^U!rzpC>A4@1qB ziqb|U1x8`i;Ld#gQ1BdR9X;>K3oPFtR|#>0_lbT`c@z9Z{n}_fK>sxwO1XfeoW%Q- z-mJZ>8M*OBW3@dE*3e8(6+`j2q*&O4N=0Ku-diOf)~CsFLUF-S^3vzR7V{6LSSfTB zJs?25TRw|))|Z|N-zHzv-@r5GQ)Qw0hwEPKWTBfUg|ubc_0G|p+TW4OMkewn@0tEX za)b<=zVWwT0rT8E2LrCMIiY0K_xE7@I{g^P;B2(sxx4D6GE^Y<5*)1+p-=m!H5Bk*{WNy^&>NWKe_HCmz zD#A|6b(BR?Wv>tBRb9?Nmgqb%p0kS9aWI}ww;y@dXq1#j(v0yqHc(vYtzVWp$w%47 znA2uaUsJ1t_<$}aqtP<0AzByxA025Ou>S$yc@jUuUAD88F-k+JiWqSgf?wJLT19_G zACuAcO4Lk`m-g6qq)c)Nv6AOF+%H}y`^X}Fo0S}0#CBN?#MaVr@viSWi}es=78qcZ z)wa+tVJM^-F+yKhNZ76Pmz$`Iw1 z&lj+{#RNCi8j2^=PQ%jS4(uoA){j<8qV8%Cln}QPQy8f~7J;!A+=Q=mo=1-K^^LXt zyleMtc(I%{@IvTgRDn$Rz{Y!`Qhrd#?4FJ~!S7oG7BqR-OwzV@Hv%zUo{l`rAkkUdF>x zWe?B`%O&L<)}5Fckp|wjW&&D-=IfK>x8eVZ$1DqmOc5srWf}bXO1)gd(&d_+$@sFsnog;UVNRN~BF31r{{}!U;Q3ZjDypb;>Bx z*nM69B~LUuvwP0N=m+6bV6A#hd#6<7j{na7WV@_)yfy>1*Y6weh^gNbhSLqM`}m|< z6xYVx*hxE&1GF7Z*=P>X)qajM@NUu=4^V2l-@}z?rWs>?(wat}+vSWnT#ikZYKo_X zO_B;13vIy>_yhH%rFe7jDf-M7twO91r=~<%ZET1Dc2cg=)zVx#0XAiuto_WF=Ve7Ti z!oC)oMR$e9!RbyiEbRj9h4&}tMc$!b?Uk^uaay=*R}osmYJA(!$O%KysREAE0^kQ& z0N!%{TdLg~t+unn9&nBGKuNKiyQ|SNLRVbhkscbv`p>8 zlX5rZPS!bER9~cf&GE)Es z?k+r|i||b{6m+2rzWMOYGp6-^Ln1wP8w&o{x2M`q$ucq}9%ccfVOWqrILp@H~aPQ`Rp&Orc zOMSwUQ?1-kw-@#jN z7jWFQ8I=*riTA)vp(Y)~cq;%;NLgUWE{0aY|lu+~g=ev%(%Zr5}WJ{tK?cIU# z_C&pk(^kkyUwHbHKRhl1@c>xbP+T3O)LV-DC-)N9**jEsc!M-NWbhuW}7?hMxj+~f8;s*#1e&8o|?*zn0{(Omlx%vAN3#M zNMu?tlRe7FAdJFH&fsn-^!K!(Zgn`Bj32T&WT5apvP$R|Jjsr0V{8o_uon5x+L;p) z8FhaZhLd+no&b`sr79Pnd(STIZUp>j2I^@=QG2@%o`}~9x0Rm4-?%S( zt*hqlz&^d1mXXvFTcFe!U5xlgh?Z~-ZMIs1PR2-j#@6}C{TF#|SEEbJ46v!whI=3% zpj~m7IVbK<&`;b93kU1LIbX-J9KYW>O`Yvdt(br4tc=US|6932<5n%i$dNX|72IeWlQ!uKVUkI!~Jw z>8xK4)wZ6R=h#K~S;``eb)UmoU8BX-xR=t?{w^<#&VXy8HH^vj%uro^OJw4Bl3U3x zC#q?_FTySVB-^7*jTEwuXyLSLtbE{!)WxYMwRInYW&Me)mAshUA$_6B-%yjtQg#Af zCMEDi=MkF<7`Y7AvEgj95DV%^x%mXrTKq+tGv@>GRZ}$n0a?NU!DF-%8li(Q-rX3k^^8EOR2YsXGJO=~ zOL!p{msY9O)s@1ZauxdsT@@`E@tfT^>+?{wwG=Pz5SPalgva9D z^dsM}$YwV(x%880J@%?Y+~b_9MnJ*^=yyOJn; z^=(5p)F;kBn$29SjWxac1)$JpY93kjcJ?ll-?{QRKk1tAkIj>YO^f;BPp=eNqi z#Ls1{ec={TQBOwis!TcEyArk`QEXxE)uu%^2Ai1)+9z0;6;nsb=apS*6qv#o^D!m* zOnV0DVVB0$X#qI_^OUo+5?q%LlRd&^JKZ@?4r&W&(Qp8~(`_6l&K2$04Y*Ijeb(3I z*bU8$rto`+Y5i=(rs^7ZL??Od49(?w3ICCDauLo!YNizru68yCdEn1jfPAw6jqjWYa#Ob#@6{PjExO>!;&V*V#SMNBf$!n0C=R!`njW8(%#W9q*O3G^ls#8^dD=4whC8uKFP)L04bCB5>^o*PaUpy%82;G zQ9lW5IXM^N8H=dn@MF(Saff_aiqIr}+r#v=e%{zX&g&U)YrBkm8gTc&&<0eMyrd}a zH{XC)!IOwnR#-`)vssm`4A&r+w9n3LvD;x8M?~2rXl8ph~nXUZ}qmm(h%P zG!~u0JmGj2LHjW%0&}zd(i^&8(ZPA~A==J<0Blcja#`3(vj?)}YywQf9pO|d5ws95 zvUWTdahaCGujmv6>1?`?yGj<@S*)MzC7Uc}kvb@4m50(#aXhR67TfF1q9)WOvc=YT zzjp+!mdB#qoDMONDd;^J4{ti7VJT1uzJ%jg6l8Md&=sUDt;y2BQ8X59!YyG-{DrN? zUs)wYn2V`wIw{UJ*$y1UcjQ;$cyLjuNb(9#$uF1y8OtvGVmt8}Fbrg8|2l=88nhT2 z0uG=u@G<|F1f zW7+>ii+S){?h;sr`q{ID_fAOojk>_{0=E0IUV5DU*!<#@0#n4_;#1|P+=qKQC)+Z- zU?z~pbg<>e(@0aHEjtbK!ADLG)ZST#UVtUYBTR$sgx4$qrP8kSH$862Y?3*jc5_Nn zLwL&ysVnd$oZ6Vuv@UZ%%mHIeDtP}%(a7$AjN(v#1SYJWlzyi)SEKg zk?h2!9FccA_n_MmH2dMt`chDrbtOUNsa?fA8nzH>E2fpA^w*1`4)&jBWB4iB7oRe{ z@HO~Fvx?Q>9kGo#Ra_!G#?9$fR@l61oiS$_F*F~EAOnq(I!c)(uaE>yc9ef}UfYXV z0IUc6nPrFIEqdKP4de9HLX0^ab;Q_t<>MeJ{|Yi1Z%0?dIpq9lljXmoGlhF-8!PP& zn1|Ii(dn?V#_aoS3LWS@gzLvYLg&@R_DZ9G_98vm%on|eQrUM`PHBj{yfg0xwtej86%d!7*K#~uF3oWk5% zxkz@2*Yskni(SB8gwNXprGxYv=m|5~@8D9B3m!u}(t1D;9$Vz#yRnDULSrx#0z-`daaoof%ybH#xQ4Bgt%`9=&Uv1lOavP+58c9hdJS zMX3v~^JjOR6|tY0g;{22o>&#VkYl6)@E>8deu--+8%aC5&3UQR0n^-<;AOELxJpNp zN@Sz8gj8n*$Yq&tgj}y^QPfPBsI675gy+bRj7QC+9rU;hITz)<)-L8TDjFxP2l{sI zQXb)(E_~zpvB^*p9z-bB!?JzAX=j^KDmx_46c)g$!c39_^m8iFM$lra%{h zfU^QECVQPq?5%#2=aBwTy1*{tZr3&1z-<|og+}^4r;oLe=SeiHndGwSx|W;Gm441p zHeGI^<&T{b@x+w1Z=&(yj&LnkhO}wo#c&3$s2t<$;ib+fzs>yKk?=M&!KG+2+Z`TC z2a|pDiL{69QOCg5s4+TjnBcyK*akY8ev!7qmdZ@&v#>*W1_RuU{5d#lnQhNs;T`6{ug-%`k1wyVkkj7smu=-S3200ITQ0GIiB#0 zc;nWBStu6_2lta_ziqQ*=nGxP2Fh1F-_)gXC2(iYZBuqeYbArt?c~UBe#)a%T>(!Oa#is$t_Y6d zRV)rI#V27eDF@ob-vsTA{C1;AGd-iV&}uG(g#xaMoS0D7&xGeND~klT>HhRJp@ViX zTGIv41n(r@KVo9c6Vg|hWfs*6k%FNT@Pp|U&f~r4g|wYL!l&sBSOgSD+0j3c@fkk_ z?ls%faVBqAVpr{h(j+{YD=cZaur$MI=-e_#n7hn#&T#Ss6BsXElfQvw$}G|gRVQ!F zqJTw3F~+(hCgMCOk+(k8m0D7n&L+ubAv-^*NZ-O8xR@|ov{4l0fzLs2))5VJ_TUDD zu>GW`wUVwi3Za{}E+(N5(r~#KULvPC@xnwa0WC8dLCI?F%y&GxB)pGqR5DXlnV>$z zMZHg{N11NThm|-@_7AI-wUW)XIto|FQ$YfKQ7b$hj1_W#MmRgni>5;jy{4Ci$95jP zo1C(%fo{9u-Epg`)CHFkgC)g7lJH#dt5}FeW;KcmtlrzNViB%gk}e zua;3B#y)jZ-z!0u>T30gnJRPcOom`{9IvnRY{Dhghu-Jls<#OJC6wR}cm*vt$C6`2 z(aVFrRuXuOrqJxtSWpR<7fm2YV^C&L02j1|(16`lKZiSLUiCC@eLAU>rX^fO^#|~^ ze$U9nJE{6fjj^gSX{yu-2H-{OtTW9Da^H4;^CEmso1^WbfX+y{(E)S>W?^sH8Y?@2z82=kyII)u)^vpkL1 zTX;kB;RP%ktOR0MDmX^ogAdjZ`j7pbd;zoRTKNIr29=fP377Ezr=K;*dJ=wPuQRT& zkeG^&_$Q;r?lz#BU6WNxFUj(RJMkvPnmEZDCk^pD5w~%_^A4+pF-4ma*`^<{Ch*Sl zQ`p7XH?Nf#S5cu0ZVEEkJJ=UJfsV2U7%QAPkyp-b^9p?-O&3eXHS|SdyLt17@9D?r zq_lf!2Y&w*T4&y+v)s(pKem_enDR!sLT<5uUc|^~wbKVW3x+nQRxpT!_miEirSQfjgkv$X$9SYruEGHU0Bky(f zcAfOj6ywF(sIfI2W#A|6X;Oh?1jyJ7G$T7q;vFrm6wYFHuL2FE#o(7S1U5Bqz z`wdpuH(?L!IDFs~K@S8I^i@95<#;Ep?|cDy=t`U$)e^dan!L${(bjqa^3o}6k5>>~ z>xsoHq%6_{GDj+{$BJ==0*~6j-bX)Z>(NM~lTw^!aqSS^qHn5c3~+zZAIpzfW1xsL z^Y(zo6WhsW6Qnx%udMoF1 zH5HR^H!$0LLssZslEryRI>6HGJKc=x6Cln)#f6ogPpqS7s6CE0<__5V2n1RytLXpa zldi4cpz0VgD8JU1zA|U=Th)EmLEYor^z?KVsUIK&M zZ$)=i|9N2>>PSmySxG+b8GPfkwkcRmb~wA>K5|&;fZw~OcpeJzzEb2jPSyKHlgvzM z2b@izEqE&}q|92PE6P{L z1)tExdNrCBxsP%<-&{SE;oh+8lhg@)G&}13)BcW>OAj~)$al55dyxB1Oi47;-O0*_ zT3WNoOOlIsg?u+}J7dfMEKhW)G&sfGtp#zs($!h6-m(r$qxt8VPU0*^VzlY3B0mdi zvcKFX#0JVQc_bMmo{GE#I^PJkfbCF0+>|R3K3dWlXqM!s@fa!5iIK*LDQvuJuhm+e zVb2gY@^^WFR9?o9XX)ziRiJ5>uwz_{*P#pzcCS#{!&bHOF#ZKN%{3Fau0TE!JsE~6pB zN;3n$$#u35@fN|6U>LavcY|LjpL7Mimq*dIIG1^ne6wzw#YMwD?+vnguHKN5Y_L$U zfUqwxR1wG|>7BBXZt#RT*(WXqTuH` zNI|-k9c9a%f4~)MG#JaS{~gC+Mt_ zqz0MSeZe>>-;bODHMDG2C7M%jp$s=#`${`^-5D@t$K{dXJZc~~P0D8dyVjZnA zUJ;$iZ_0H+CBcKrx$?t;N)0j_%rReDOXwM5Oa0M$^#=;!K4h$&XdKt~IFI?=$t?i6 zm)eHrlv9k+tQMVOHkIp|idxAj4*T#^VVV3m{7vm_wi73#n`E2PRDY}5`gM7Q(+3Ua zyPs@I_fSqLYqUA+3tF*yY5}-k@gRm~IJen)eKc!l{z+e;;-s|Ou!g&zIa6>9-eR5> zM7=BsJJ2pAJ|&}t_PmEABFB+p_!w|g3X0oyT=Zo~wcp6XI)J3Iu zKfqxdiMNfv@P6l^*g|R{y;lp;G%*@HLI}L* z^c28l?8V}tA5*30-)^I4##TGC|A1aB;|h`(GhQqX{*-@*PlNM;9M;3=4Z9qxg&!&z z<+|RksH1#=t7C^r%g}P{GP_HSB(Bo9N9wJGx!Nr9k{uvXbunn`_Of<8!F{E zkqPWSzMm={I|NPh*JFoSPr5kJ6YfcGA>6ayqZIkEv)^^k6cn!c@Pz6Qa1T$^^U1jb zH`P*+0qRDy9ZvF1i4^xePMI&*p>NhW{HNX|?knf9Hg~2fMOXOk<5B__K$tfJq?$S>m|?eCJ2)l zb87I!%-&xZ-3ot_a*OF=i`d$%b!-J=tx`pMOp>gPVHNccE_TQ0C1TRxO!W`sk1rNRS?#7caSScnS~?fIPx%My)`~{31~^z zOZ{Sohy@Z_vSo^GPc!p7Im6lMFutEu$VE^JoR-=Oh1Bv&c|1bNZO(ybqYmH1#7DNs z-^ngzsQi@utz6M9IFN54=8BKW4|j2Di!NeVr>!Jy7(8lS@Jz%lV%90TkWcEyC)zhZ ztDA|D{MHz`1@y;FS7NW-8yPy#)W_>STd1QI}B#;~L+! zEr*j`vGA~`4{gS~R{pWExzzZNL~Rp`Ah$9JZj{Z@TD zoB6NR4`cz2mCVvt&fLxe((yH84sR};Yo4^0SigWD6p{}}mTRH1M;(BQ!ye|Th^CE5 zA4<0xQMrlIK+PYM55>DAd!19n>Y~TfW>yPSfE5vjfM)0}8%PsjHU8e+=cI{0;4xT1 z>SpDWyXzlNioL{Mj)(9h?Ln)TTpI?^Cr&Osj%w<2@ffX_G>0q^CrSeQ?zy9TT-~&h zY=eCw(iTk#^%WEBZlWy}kXCvw$gh=I;!=KQU)H_{rbbQ&`q>wqsCe4l!`;VUL5WeX zF&(@zlDLB2bwe?oIU16 zO6i!Xk=1f;akqKVe|m=V2yoB%BFW#vC&1z4H!D9rs*BMCsI9X&A?91h5tl~$3L`wB+fH-D{Hip(U-=c zl!dTnc!{SwOyNX{uY1(|z+?Q(a5N%3umv z6rHWN37#@HYLnS^&|O%fWR#Y=5(FYv0#z8_b@N<}NHbVJfeoJkQLX39QQO(?aW(#H z=fws3PM)#rgGX9*=x}h0#HrKhDWAh#?VNu}+tTCdt?9>KlYvWHh%YF!#d-+E!sF1@u zl(}YWS6}J1;P|R>Qb1z(Jb4fr94_b>#sSwk$@ES4K9(G5o_*A+Z7d1DAl;(3*-poH z=Ezl?iQf0X>*H!^zDmX7`xMU1vUwsR#yz))^PY^_1?DtZi z=v3YT*pF@rXXP21mvnI4Q&u?Z3py`0-ucJq;bi$5gTS|!Qa&pv){NnV-lVDI8Sm8{ zMe(=!Rlct-=}8CEVmgbRe^^{36k8M^qI`F~jbM9#t@2@K zP&BJ_8od_Vd79J0uC{tZ*vHsuR|G>yR!++jl(sOVaGTX&{fK7YwY|0%4kkb3rgVmC zu)acH6hp2FJ)(v%BKie&qPJPH>reZs_pF{S)Hf?}ExwbMRc+wxaXk|E3ftw?M1aXg zL=PBdv<=^0XTqgDg{3WiNn9lMMO*Z0tRm-I4bt}8gHb28&NUh3P+p-P+}}~ho(%Va zmGFh!ko_Z$v?ffRf7|>LPO>vXXD@)&;+Bveu6XX(aM+a48kESrHNVYOz`!OP z?HY|bsrjgvr}FAq|C!Ytzc50SJkR8%st3ff*^#W#Il->sA|%GX>P{C9#rf3=?(1@t zyc9A=Pl0Q?VI@0_^nR?TH5jyjU2y|pp_C50N@aN>AK_Cxoo`akx2MBNfBRi@ka1sI zVr2k-2w|m$udmY7_Z=)kb;$c@FB%C)_$+=9io!XXTUbwCbI{tBzJD} zpy($lwh!Ld`-|nAd~&>$EK2HKFc+615A4e3LL-OO$^Ohv!d>DdX}MTanhJt&0C~$N zy7KlxRFL+;58*U+615>ZSk8IDPq{;?I$R4gqf*i;I7Q5Z{-b}P@zQFj5IDh}J{vP*((h)n zGSEqIIbe+Nm}RAI+S$$pZF`v1oh^}b2^uURoiz3%f209!tmQyM_Lc&w+u$Ieg!)4eJ<9dDBWuXRCN0E>vDgxrGeUA}2SUWR=m+ z+TV?GY$8~Q62(?RKWyULpgG(D3pwfNg|!nbp^wNuah$zUzC#-DE$?u14VY&1M*C+8W#TGq9KHB~2p`lvq)I!)n78VfG+za>nk;rqlA zQtaXU&#G=0$9;?|_z*b`LpUCBH4b0HaWDqvv;in)-e4u^X?6+MVa4%Y>SuXrMy_;S zg2kzu>tD9mQrgYFDL3?rVju084V->F6Yl7@q~EBxSVT?4Bg9f5FTG+nB6G}(AVP9; zeV~z0O2n)!9AnAOK5H27Ckes*xVgyiI5g{#X-g!>5 zIOF)dm|yX;LC^+wjoYZZaT&ek_retXjxpQ|{sT*)W#B%m#_1TB=v3zuSpe#Aw(MNw zLYkUioYdIqF{{icpv>D5JQH$YwR z5~sSPIu}qAc!9RVjahHD2xYcQ;+oDC8WeV$xm`c4FJdz6Ww#erMqj|m)-bkDcn?yQ zc6bc`jtt-)ytVdA`xt9T4&np!wE$olTmntwN_Pgkn6SloFC4ae!zMx(>xBEXR@F7! zTF1_Tve6AfYtBG@14_vgezLulQ5-luG0|I;y`x9_vq*6ZUd;i%01*lnIt_3ZT4BJ+uX{hS}7M zY@U?a`D!Oy3qq5vT2TlKq9N*IPdnFPPZu~0x6t!jEj8}vr5$ar^aEJpbFmD_B!%sV zV1@G+zm0sfAr_z)GEryudADE@+8h|XuSVo~8O=`%KZ=vq zOATQi&b`j-j5Hc)|2oZ#+d>?C$z8kavXr$;gRMMK~YIJPB%Yx7QYCf(R(i`bevt6RzEKlXQvocSh4b#vJ;_ia>)6 z5dTlnSw}~4wPF0dGBdkL2=4Cg?k>gMin~K_ic{PzxCD21cXugP+=@d&vb!_azW4j5 z=k%P?klmSkUwNM2vm3Y5V~s_6>SJONc4iZ-!um6E2xCn(x==1PFVQKyk!C;_+gIzZ z=kTuXXLZ=za|byiywqV`wXrj?o$&v(gR}f?!gSI*P#Ndq$#Hu>Ox;V|m(oPFtVghq zW=wc1PyEj3C6iR|VS*iFudHY|&0=5(x+P2Ll6Dv5ME8`vbezcJcG6yG2HPl`I+66P zRl%7FaXz0cY~>P5R71HXxLpbNtqIWK>;d+v3)m(;QI<2&-ahZ1sfxahtuWvD$S1=K zBu~c52Dr(w%@EX1NVbTrv8u2QY$q*CF5u2@is~Yd$y{zqSmEA54P|1I$I9A(mp z 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 z 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 - } - static void procI2c_(void* p_arg) { - reinterpret_cast(p_arg)->procI2c(); - } - - static OSMessage mI2cAsyncMsgBuf[1]; - static OSMessageQueue mI2cAsyncMsgQueue; - CAMERAResult i2cCommon(u32 type, CAMERASelect sel_cmr); - CAMERAResult i2cSetupOthers(); - CAMERAResult i2cActivate(CAMERASelect sel_cmr); - CAMERAResult i2cFrameRate(CAMERASelect sel_cmr); - CAMERAResult i2cContextSwitch(CAMERASelect sel_cmr); - CAMERAResult i2cLed(BOOL isBlink); - static void i2cCommonAsyncCallback(CAMERAResult result, void *arg); - static void i2cActivateCallback(CAMERAResult result, void *arg); - static void i2cFrameRateCallback(CAMERAResult result, void *arg); - static void i2cContextSwitchCallback(CAMERAResult result, void *arg); - static void i2cLedCallback(CAMERAResult result, void *arg); - - CAMERASelect indexToCameraSelect(u32 i) { return (CAMERASelect)(CAMERA_SELECT_IN << i); } - static BOOL isOutCamera(CAMERASelect sel_cmr) { return (sel_cmr == CAMERA_SELECT_OUT); } - - static vu8 mCurLedBlink; - static volatile CAMERASelect mSelCmr; - static volatile CAMERASelect mNextCmr; - - static volatile cameraState mCmrCurState[cCameraMax]; - static volatile cameraState mCmrNextState[cCameraMax]; - - void prepareBuffer(); - void destroyBuffer(); - void useNextConvBuf(); - void encodeAndSave(); - void setInterrupt(BOOL enable); - - void (*mpGxUserProc)(u8* vramAddr, BOOL shot); - BOOL writeJpegToSD(const u8* src, u32 size); -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#else - BOOL writeJpegToNand(const u8* src, u32 size); -#endif - - // if non-static, CW claims: - // Error: 'pDtcm' could not be assigned to a register - // Error: internal compiler error (report to ...) - // while executing in file 'PCodeAssembly.c' line: 468 - static void Shrink640Yuv422To208Rgb555( const void* src, void* dst, u32 height, void* pDtcm ); - static void Shrink640Yuv422To256Rgb555( const void* src, void* dst, u32 height, void* pDtcm ); - static void Convert8bitYuv422To16bitYuv420( const u32* src, u16* pYCbCrBuf, u32 width, u32 height, void* pDtcm_ ); - -}; - -}}} - -#endif diff --git a/build/tests/yuv2rgb/include/new.h b/build/tests/yuv2rgb/include/new.h deleted file mode 100644 index 822167fc..00000000 --- a/build/tests/yuv2rgb/include/new.h +++ /dev/null @@ -1,45 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NitroSDK - OS - demos - cplusplus-1 - File: new.h - - Copyright 2003-2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Log: new.h,v $ - Revision 1.6 2007/02/20 00:28:10 kitase_hirotake - indent source - - Revision 1.5 2006/01/18 02:11:30 kitase_hirotake - do-indent - - Revision 1.4 2005/02/28 05:26:27 yosizaki - do-indent. - - Revision 1.3 2004/03/08 08:55:47 yada - fix top comment - - Revision 1.2 2004/02/20 00:04:05 yasu - add comments - - Revision 1.1 2004/02/18 04:19:30 yada - C++f - - - $NoKeywords: $ - *---------------------------------------------------------------------------*/ - -#ifndef MY_NEW_H_ -#define MY_NEW_H_ - -void *operator new(std::size_t blocksize); -void *operator new[] (std::size_t blocksize); -void operator delete(void *block) throw(); -void operator delete[] (void *block)throw(); - -/* MY_NEW_H_ */ -#endif diff --git a/build/tests/yuv2rgb/include/snd_data.h b/build/tests/yuv2rgb/include/snd_data.h deleted file mode 100644 index 89a4e28b..00000000 --- a/build/tests/yuv2rgb/include/snd_data.h +++ /dev/null @@ -1,35 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - demos.TWL - snd - extraFunc - File: snd_data.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef SND_DATA_H_ -#define SND_DATA_H_ -#ifdef __cplusplus -extern "C" { -#endif -/*---------------------------------------------------------------------------*/ - -#include - -extern const u8 sound_seq_data[]; -extern const u8 sound_bank_data[]; -extern const u8 sound_wave_data[]; - -/*---------------------------------------------------------------------------*/ -#ifdef __cplusplus -} // extern "C" -#endif -#endif // SND_DATA_H_ diff --git a/build/tests/yuv2rgb/include/yuv2rgb.h b/build/tests/yuv2rgb/include/yuv2rgb.h deleted file mode 100644 index 7f06cbab..00000000 --- a/build/tests/yuv2rgb/include/yuv2rgb.h +++ /dev/null @@ -1,85 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - YUV2RGB - File: cpu_yuv2rgb.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev:$ - $Author:$ - *---------------------------------------------------------------------------*/ -#ifndef YUV2RGB_H_ -#define YUV2RGB_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define DSP_DMA_NOT_USE 0xFFFFFFFFUL - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -typedef struct YUYV -{ - u8 y1; - u8 u; - u8 y2; - u8 v; -} YUYV; - -typedef struct RGBX16 -{ - u16 r:5; - u16 g:5; - u16 b:5; - u16 x:1; -} RGBX16; - -typedef void (*YUV2RGBCallback)(void); - -typedef enum _MessageYuv2Rgb -{ - MESSAGE_YUV2RGB_CONVERT = 1 -} MessageYuv2Rgb; - -/*---------------------------------------------------------------------------* - Name: DSP_Yuv2RgbInit - - Description: ֐ - - Arguments: *** - - Returns: None - *---------------------------------------------------------------------------*/ -BOOL DSP_Yuv2RgbInit(u32 dmaNo); - -/*---------------------------------------------------------------------------* - Name: DSP_Yuv2RgbConvertAsync - - Description: YUV->RGBϊs܂Bi񓯊Łj - - Arguments: *** - - Returns: None - *---------------------------------------------------------------------------*/ -BOOL DSP_Yuv2RgbConvertAsync(void* src, void* dest, u32 size, YUV2RGBCallback callback); - -// CPU -u32 CpuYuv2Rgb( const void* src, void* dest, u32 pixels ); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -/* YUV2RGB_H_ */ -#endif diff --git a/build/tests/yuv2rgb/readme.txt b/build/tests/yuv2rgb/readme.txt deleted file mode 100644 index 26873f1d..00000000 --- a/build/tests/yuv2rgb/readme.txt +++ /dev/null @@ -1,227 +0,0 @@ -̃pbP[Wɂ‚ -====================== - -ARM7R|[lgAracoonjackalɂƁAJ쎞 -ARM9̏Ȃ邱Ƃ𒲂ׂ邽߂̃TvłB - -R|[lg̐؂ւ́AMakefile - -ifdef TWL_IPL_RED_ROOT -#R|[lg؂ւ܂B -#RgAEgracoonALjackalg܂B -#̍sύXmake cleanĂB -TWL_IPL_USE_RED_IPL := TRUE -endif - -L̍sRgAEg邩L邩ōsĂB -ύXmake cleanĂB - -ƁAfobOo͂ - -mConvBusy! 0, nextp empty -mConvBusy! 1, nextp empty - : - -ƕ\܂B͉񐔂łB̕pxAracoonjackalňق -܂B - -ʏ㕔 '*' ̓̃X[YAJɌĎU -ƁAJNJN邱ƂłɂCÂƎv܂B - -ȏłB - - - -ȉ́ÃpbP[WɊ܂܂֐SDKDSP JPEGCuɒ -Ē߂ɒ񋟂Ƃɍ쐬hLgłB - - -====================================================================== - -̃pbP[Wɂ‚ -====================== - -UIG`[̃JBe(J}l[W)̎̂߁A -邽߂̃pbP[WłBڃJJPEGɂ͊֌WȂ -t@C܂܂Ă܂B - -src/menuCameraManager.cpṕA{IɌUIG`[Ɠ -̂łBł̎̐ʂUIG`[֔fĂ܂B - -YUV422->YUV420ϊ֐ȊÓA̕AGɍĂ -܂̂ŁAJȂȂ悤ɂ肢܂B - -SDJ[hANZX́AUIG`[dlł͂܂B -UIG`[ɂ̂܂܎gĂ܂BVb^[܂ -‚܂B - -s@́Aʂmakemain.tlf[hĒƁAʂɃA -EgJ̉摜o܂BA{^ŃVb^[؂܂BSDJ[h -Ă/menu/menu####.jpgAԂŐ܂B(SDK̃f -̂܂ܒĂ܂) - - -YUV422->YUV420ϊ֐̎gp@ -================================ - -menuCameraManager.cppConvert8bitYuv422To16bitYuv420()ŁA -YUV422->YUV420ϊs܂B̊֐ĂяoĂ铯t@C -1074sڂ1102sڂ - - frame_y = mpTestEncodeWork->y; - frame_cb = mpTestEncodeWork->cbcr; - frame_cr = frame_cb + (mShotWdt * mShotHgt / 4); - tick = OS_GetTick(); - Convert8bitYuv422To16bitYuv420(reinterpret_cast(pBuf), - frame_y, - mShotWdt, - mShotHgt, - mpDtcmWork->mYuvBuf); - // store YUV420 and invalidate encode result - // DC_StoreAll(), DC_FlushAll() is NG? - DC_FlushAll(); - - IPL_PRINT("procShot: yuv422to420 time %d usec\n", (u32)OS_TicksToMicroSeconds(OS_GetTick() - tick)); - tick = OS_GetTick(); - - // o̓TCY͂قǕKvH - DSP_SetJpegEncoderBuffer(mpTestEncodeWork->result, sizeof(mpTestEncodeWork->result)); - // explicit initialization - DSP_SetJpegEncoderThumbnailBuffer(NULL, NULL, NULL); - DSP_SetJpegEncoderAllocator( dspAlloc_, dspFree_ ); - u32 size = DSP_StartJpegEncoder( static_cast< s16 > ( mShotWdt ) , - static_cast< s16 > ( mShotHgt ) , - DSP_JPEG_THUMBNAIL , - 4 ); - - // need here too ? sometimes picture breaks... - // DC_StoreAll(), DC_FlushAll() is NG? - DC_InvalidateRange(mpTestEncodeWork->result, size); - -ɂ‚Đ܂B - -- 1078sڂ̕ϊ֐̈pBuf́AJVGAAYUV422ŃLv` -ʂwĂ܂B̃obt@́AOprocConvert()ʂ -ĂĂA917sڂ - DC_FlushAll(); -ŁAf[^LbVInvalidateςł܂B -ϊf[^̓[h(4oCg)[h邽߁A -reinterpret_castĂ܂B - -- frame_ýASDKJPEGGR[_̃O[oϐłB11 -sڂ璼 -extern "C" { -// build/libraries/dsp/ARM9.TWL/src/dsp_jpeg_enc.c -extern u16 *frame_y; -extern u16 *frame_cb; -extern u16 *frame_cr; -} /* extern "C" */ -ŎQƂĂ܂ASDK̃O[oϐƂĂ͓K؂ł͂Ȃ߁A -ϐ𐮂Set֐ljĒǂƎv܂B - -- SDKJPEGGR[_ɂ́Aframe_cbframe_cr^Kv -Bframe_cbframe_cr^Ă̂1074sڂ - frame_y = mpTestEncodeWork->y; - frame_cb = mpTestEncodeWork->cbcr; - frame_cr = frame_cb + (mShotWdt * mShotHgt / 4); -ɂȂ܂B - -ϊ֐́Aframe_yɌԖframe_cbAframe_cro͂܂ -̂ŁAϊ֐̈frame_yłB - -- mShotWdt640AmShotHgt480łB - -- mpDtcmWork->mYuvBufŁApDTCM[N^Ă܂B -menuCameraManager.h43sڂɂA12_u[h(96oCg) - u64 mYuvBuf[12]; -̗̈悪KvłBstrd߂gpĂ̂8oCgACg -ĂB(̏mShrinkBuf́AkpȂ̂ŕϊ֐ɂ͊֌W -܂) - -DTCMgƂɂ‚ẮASDKƂČJꍇɌKvƎv -܂BCVRAM蓖ĂĂ삷͂łA -Ă܂BstaticDTCM[NłȂĂACXbh̃X^b -Nt[ȂʏDTCMɂȂ͂łAƂӎ -ƕ~Ȃ܂B - -- ϊ1085s - DC_FlushAll(); -́AJPEGGR[hɉ摜ǏɔY܂AÔ߃f[^ -LbV̓e֓fo܂B摜ȂȂ΁A -sv܂B - -- 1094sڂ - DSP_SetJpegEncoderAllocator( dspAlloc_, dspFree_ ); -Ŏw肵ĂAP[^łÂmainy.cpp1667sڂɂ -B - -dspAlloc_()́A͉Ă܂BĂȂǂ납AĂ -ꂽAT[gŒ~܂B - -dspFree_()́ASDKĂ΂Ă܂̂ŁA~͂܂񂪃_~[ -ɂĂ܂B - -̃AP[^̎g(SDKdsp_jpeg_enc.c)ɂ‚ẮA낢 -vƂ͂̂łAȒPɌ - -a. őʼnoCgKvɂȂ̂Ał΃RpCɒm肽 -̕@񋟂ĂȂ - -b. pTmp2ŏɊmۂĂ邽߁ApYbufApCBbufApCRbufmۂ - - DSPFree(pTmp2); -̂̓tOg𐶂”\ - -c. extra_bytesɊւ鏈 - Yuv_image_size=(u32)(image_width+32)*(image_height+32); -+32Ӑ}s - -ƂƂŕsɂȂ̂Aϊ֐삵‚ -RłB - -- JPEGGR[h1102s - DC_InvalidateRange(mpTestEncodeWork->result, size); -AJPEGGR[h̉摜΍eXgłB -āASD֏FSCuɖ肪邩ƎvAFS -CupɃf[^LbVInvalidatêłBȂ -΁AsvɂȂł傤B - - -YUV422->YUV420ϊ֐̕⑫ -================================ - -- 793sڂ821sڂ܂ŁA -#if 0 - // even line U - : -#else - // even column ave. uv (V0 U0) - : -#endif - -łAYUV422->YUV420ɔĎUAV2C -ϒlƂ邩AWikipediaLۂ݂ - -| YUV420 : 2~2sNẐA‚̐FMŏ̃CA -| Ԃ̐FM̃CƂBPxM1sNZƂɂ -| B - -̕ɂ邩̂łBϒlɂmCYጸ -Ă悤Ɋ߁A#if 0ƂĂ܂B#if 1ɂƃV -[vȊɂȂ܂B - -AY͂̂܂܂UAVω炨G -ȂȂ̂AƂ͂̃CṼC玝Ă̂ -Șbł́HƂv͂܂B - -JPEGGR[_̓̓f[^dlڂׂĂȂ̂ŁAǂ炪 -ǂ̂Ă܂B - -- ϊ֐̈̐ɂ‚āA714sڂ̃Rg⑫܂B - -// pYCbCrBufŒ4oCgACgłAefoCXƂ̘Ag -// 32oCgACgĂB - -́AϊʂDSP̓̓f[^ɂȂ̂ŁA32oCgAC -gĂ΃LbV܂̐Sz邩łB - diff --git a/build/tests/yuv2rgb/redipl_defs_autogen_by_uig b/build/tests/yuv2rgb/redipl_defs_autogen_by_uig deleted file mode 100644 index 7c5d15da..00000000 --- a/build/tests/yuv2rgb/redipl_defs_autogen_by_uig +++ /dev/null @@ -1,14 +0,0 @@ -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - diff --git a/build/tests/yuv2rgb/src/cpu_yuv2rgb.c b/build/tests/yuv2rgb/src/cpu_yuv2rgb.c deleted file mode 100644 index bdb09f57..00000000 --- a/build/tests/yuv2rgb/src/cpu_yuv2rgb.c +++ /dev/null @@ -1,103 +0,0 @@ - // gĂB -/*---------------------------------------------------------------------------* - Project: TwlSDK - YUV2RGB - File: cpu_yuv2rgb.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev:$ - $Author:$ - *---------------------------------------------------------------------------*/ - -#include -#include "yuv2rgb.h" - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - ֐錾 - *---------------------------------------------------------------------------*/ - -u32 yuv2rgb16( const void* src, void* dest, u32 pixels ); - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -static inline int r_diff( u8 v ) -{ -// return (1402 * ( v - 128 )) / 1000; - return (11760828/*.416*/ * ( v - 128)) >> 23; -} - -static inline int g_diff( u8 u, u8 v ) -{ -// return (-344 * ( u - 128 ) -714 * ( v - 128 )) / 1000; - return (-2885681/*.152*/ * ( u - 128 ) -5989466/*.112*/ * ( v - 128 )) >> 23; -} -static inline int b_diff( u8 u ) -{ -// return (1772 * ( u - 128 )) / 1000; - return (14864613/*.376*/ * ( u - 128 )) >> 23; -} - -static inline int trim( int e ) -{ - return e < 0 ? 0 : ( e > 255 ? 255 : e); -} - -/*---------------------------------------------------------------------------* - Name: CpuYuv2Rgb - - Description: YUV->RGBϊs܂(CPUo[Wj - - Arguments: src : input data adress (YUV) - dest : output data adress (RGB) - pixels : num of pixel - - Returns: None - *---------------------------------------------------------------------------*/ -u32 CpuYuv2Rgb( const void* src, void* dest, u32 pixels ) -{ - OSTick begin; - u8* yuyv = (u8*)src; - u32* rgb = (u32*)dest; - - u32 limit = pixels >> 1; - u32 i; - -begin = OS_GetTick(); - - for (i = 0; i < limit; i++) - { - u8 y1 = *yuyv++; - u8 u = *yuyv++; - u8 y2 = *yuyv++; - u8 v = *yuyv++; - *rgb++ = (u32)( - 0xffffffff - //0x83e083e0 // G only - & ( - 0x80008000 | - ( ( trim( y2 + b_diff( u ) ) & 0xF8 ) << 23) | - ( ( trim( y2 + g_diff( u, v ) ) & 0xF8 ) << 18) | - ( ( trim( y2 + r_diff( v ) ) & 0xF8 ) << 13) | - ( ( trim( y1 + b_diff( u ) ) & 0xF8 ) << 7) | - ( ( trim( y1 + g_diff( u, v ) ) & 0xF8 ) << 2) | - ( ( trim( y1 + r_diff( v ) ) ) >> 3) )); - } - -OS_Printf("total(555) = %d us\n", OS_TicksToMicroSeconds(OS_GetTick() - begin)); - - return pixels * sizeof(RGBX16); -} - diff --git a/build/tests/yuv2rgb/src/dsp_yuv2rgb.c b/build/tests/yuv2rgb/src/dsp_yuv2rgb.c deleted file mode 100644 index ee1ada37..00000000 --- a/build/tests/yuv2rgb/src/dsp_yuv2rgb.c +++ /dev/null @@ -1,308 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - YUV2RGB - File: dsp_yuv2rgb.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev:$ - $Author:$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include "yuv2rgb.h" - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -#define THREAD_YUV2RGB_PRIO 10 // CXbhD -#define STACK_SIZE 1024 -#define DSP_BUFFER_SIZE 0x6000 // 24KB - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -OSThread threadYUV2RGB; // YUV2RGBXbh -u64 stack[STACK_SIZE / sizeof(u64)]; // YUV2RGBXbhpX^bN - -// bZ[W֘A -OSMessage mesgBuffer[10]; -OSMessageQueue mesgQueue; - -static YUV2RGBCallback sCallback; -static u8* sSrc; -static u8* sDst; -static u32 sSize; -static u32 sDmaNo; -static u8 sBusy; - -DSPPipe binout[1]; -DSPPipe binin[1]; - -/*---------------------------------------------------------------------------* - ֐錾 - *---------------------------------------------------------------------------*/ -BOOL YUV2RGB_Init(void); -static void DSPi_Yuv2RgbThread(void *arg); -static void DSPi_Yuv2RgbLoadProgram(); -static void DSPi_Yuv2RgbConvertCore(void); - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: DSP_Yuv2RgbInit - - Description: ֐ - - Arguments: *** - - Returns: None - *---------------------------------------------------------------------------*/ -BOOL DSP_Yuv2RgbInit(u32 dmaNo) -{ - // DSPt@[[h - DSPi_Yuv2RgbLoadProgram(); - - // DSPpCv[hiDSP->ARMj - (void)DSP_LoadPipe( - binout, // pCv̊i[ (DSPłNULLł悢) - DSP_PIPE_BINARY, // pCṽ|[gԍi1j - DSP_PIPE_OUTPUT); // DSP_PIPE_INPUT ܂ DSP_PIPE_OUTPUT - - (void)DSP_LoadPipe( - binin, // pCv̊i[ (DSPłNULLł悢) - DSP_PIPE_BINARY, // pCṽ|[gԍi1j - DSP_PIPE_INPUT); // DSP_PIPE_INPUT ܂ DSP_PIPE_OUTPUT - - // bZ[WL[̏ - OS_InitMessageQueue(&mesgQueue, &mesgBuffer[0], 10); - - // YUV2RGBϊXbhEN - OS_CreateThread(&threadYUV2RGB, DSPi_Yuv2RgbThread, (void *)0, stack + STACK_SIZE / sizeof(u64), STACK_SIZE, THREAD_YUV2RGB_PRIO); - OS_WakeupThreadDirect(&threadYUV2RGB); - - // WRAM-C Slot1 ̊蓖Ă DSP->ARM ֕ύX - if ( MI_SwitchWramSlot_C( 1, MI_WRAM_SIZE_32KB, MI_WRAM_DSP, MI_WRAM_ARM9 ) != 1 ) - { - OS_TPanic("can't allocate WRAM Slot"); - } - - // gpDMAԍۑ - sDmaNo = dmaNo; - - return TRUE; -} - -/*---------------------------------------------------------------------------* - Name: DSPi_Yuv2RgbLoadProgram - - Description: DSPeXgvO[hB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void DSPi_Yuv2RgbLoadProgram(void) -{ - MI_FreeWram_B(MI_WRAM_ARM9); - MI_CancelWram_B(MI_WRAM_ARM9); - MI_FreeWram_C(MI_WRAM_ARM9); - MI_CancelWram_C(MI_WRAM_ARM9); - { - extern const u8 _binary_simple_dat[]; - extern const u8 _binary_simple_dat_end[]; - if (!DSP_LoadFileAuto(_binary_simple_dat)) - { - OS_TPanic("can't allocate WRAM Slot"); - } - // K̃^C~OONȂƂȂ̂ǂ͖mFB - { - static BOOL once = FALSE; - if (!once) - { - DSP_PowerOn(); - once = TRUE; - } - } -// DSP_ResetInterface(); - DSP_ResetOff(); - OS_TPrintf("dsp app run...\n"); - DSP_EnableRecvDataInterrupt(0); - DSP_EnableRecvDataInterrupt(1); - DSP_EnableRecvDataInterrupt(2); - } -} - -/*---------------------------------------------------------------------------* - Name: DSPi_Yuv2RgbThread - - Description: YUV2RGBpXbh - - Arguments: *** - - Returns: None - *---------------------------------------------------------------------------*/ - -static void DSPi_Yuv2RgbThread(void *arg) -{ -#pragma unused( arg ) - OSMessage message; - - while (1) - { - (void)OS_ReceiveMessage(&mesgQueue, &message, OS_MESSAGE_BLOCK); - - switch ((MessageYuv2Rgb)message) - { - case MESSAGE_YUV2RGB_CONVERT: - DSPi_Yuv2RgbConvertCore(); - break; - } - } -} - -/*---------------------------------------------------------------------------* - Name: DSP_Yuv2RgbConvertAsync - - Description: YUV->RGBϊs܂i񓯊Łj - - Arguments: *** - - Returns: ˗ȂTRUE - *---------------------------------------------------------------------------*/ -BOOL DSP_Yuv2RgbConvertAsync(void* src, void* dest, u32 size, YUV2RGBCallback callback) -{ - OSMessage message; - - message = (OSMessage)MESSAGE_YUV2RGB_CONVERT; - - if (!sBusy) - { - sCallback = callback; // Ro[gɌĂяoR[obNۑ - sSrc = src; - sDst = dest; - sSize = size; - return OS_SendMessage(&mesgQueue, message, OS_MESSAGE_NOBLOCK); - } - return FALSE; -} - -/*---------------------------------------------------------------------------* - Name: DSPi_Yuv2RgbConvertCore - - Description: YUV->RGBϊ̂߂DSPƂ̂ - f[^Rs[Ȃǂs܂ - - Arguments: *** - - Returns: None - *---------------------------------------------------------------------------*/ -static void DSPi_Yuv2RgbConvertCore(void) -{ - u16 command; - u16 reply; - u32 adress = MI_GetWramMapStart_C() + MI_WRAM_C_SLOT_SIZE; // bIɃXbg1Œ - OSTick begin, current, tick_copy1, tick_convert, tick_copy2; - u32 offset =0; - - // rW[tOnm - sBusy = TRUE; - - tick_copy1=tick_convert=tick_copy2=0; - - // DSPɃobt@24KBmۂłĂȂ256x192(96KbjȂǂ - // 傫TCY̕ϊ4ɕčsĂB - - while (sSize > 0) - { - u16 size; - - if (sSize > DSP_BUFFER_SIZE) { size = DSP_BUFFER_SIZE; } - else { size = (u16)sSize; } - - sSize -= size; - -begin = OS_GetTick(); - - // src -> WRAM-C ɏ - if (sDmaNo == DSP_DMA_NOT_USE) - { - MI_CpuCopy16(sSrc + offset, (void*)adress, size); - DC_FlushRange((void*)adress, size); - } - else - { - MI_NDmaCopy( 3, sSrc + offset, (void*)adress, size ); - } - - // WRAM-C Slot1 ̊蓖Ă ARM->DSP ֕ύX - if ( MI_SwitchWramSlot_C( 1, MI_WRAM_SIZE_32KB, MI_WRAM_ARM9, MI_WRAM_DSP ) != 1 ) - { - OS_Printf("====== WRAM Allocation Fail ! =======\n"); - } - -current = OS_GetTick(); -tick_copy1 += (current - begin); -begin = current; - - // DSPփR}hM - command = (u16)(size>>1); // sNZƂēn - DSP_WritePipe(binout, &command, sizeof(u16)); - - // DSPR}hMiŃX[vɓADSP_HookPipeNotificationŋNj - DSP_ReadPipe(binin, &reply, sizeof(u16)); - -current = OS_GetTick(); -tick_convert += (current - begin); -begin = current; - - // WRAM-C Slot1 ̊蓖Ă DSP->ARM ֕ύX - if ( MI_SwitchWramSlot_C( 1, MI_WRAM_SIZE_32KB, MI_WRAM_DSP, MI_WRAM_ARM9 ) != 1 ) - { - OS_Printf("====== WRAM Allocation Fail ! =======\n"); - } - - // WRAM-C -> dst ɏ - if (sDmaNo == DSP_DMA_NOT_USE) - { - DC_InvalidateRange((void*)adress, size); - MI_CpuCopy16((void*)adress, sDst + offset, size); - } - else - { - MI_NDmaCopy( 3, (void*)adress, sDst + offset, size); - } - -current = OS_GetTick(); -tick_copy2 += (current - begin); - - // ItZbgXV - offset += size; - } - - OS_Printf("copy to wram = %d us, ", OS_TicksToMicroSeconds(tick_copy1)); - OS_Printf("convert = %d us, ", OS_TicksToMicroSeconds(tick_convert)); - OS_Printf("from wram = %d us, ", OS_TicksToMicroSeconds(tick_copy2)); - OS_Printf("total = %d us\n", OS_TicksToMicroSeconds(tick_copy1+tick_convert+tick_copy2)); - - // rW[tOnee - sBusy = FALSE; - - if (sCallback) - { - sCallback(); - } -} - diff --git a/build/tests/yuv2rgb/src/mainy.cpp b/build/tests/yuv2rgb/src/mainy.cpp deleted file mode 100644 index 181a117b..00000000 --- a/build/tests/yuv2rgb/src/mainy.cpp +++ /dev/null @@ -1,1813 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - YUV2RGB - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -//#include -#include -#include -#include -#include -#include - -#ifdef TWL_IPL_USE_RED_IPL -#include -#include -#endif - -// #include -// #include -#include "DEMOBitmap.h" -#include "yuv2rgb.h" -#include "menuIrqHandler.h" -#include "menuCameraManager.h" - -#include "snd_data.h" - -// eXgO[oANZT -cmn::sys::cmr2::Manager* mpCmrMgr2; - -//extern u16 b_data[]; - -extern const u8 _binary_camera_shutter_dat[], _binary_camera_shutter_dat_end[]; -extern const u8 _binary_camera_shutter_MONO_dat[], _binary_camera_shutter_MONO_dat_end[]; -extern const u8 _binary_wheel_dat[], _binary_wheel_dat_end[]; - - -#include -// ɕKvu32max(208*3, 256*2) -// Ƃ肠256*4ŁB -static cmn::sys::cmr2::dtcmWork sDtcmWork; -#include - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define CAMERA_NEW_DMA_NO 1 // CAMERAŎgpNew DMAԍ -#define WIDTH 640 -#define HEIGHT 480 - -#define LINES_SPLIT 1 -#define LINES_AT_ONCE (CAMERA_GET_MAX_LINES(WIDTH)/LINES_SPLIT) // ̓]C -#define BYTES_PER_LINE CAMERA_GET_LINE_BYTES(WIDTH) // ꃉC̓]oCg - - enum - { - eStt_Deactive = 0 , - eStt_Capture , - eStt_WaitShooting , - eStt_Shoot , - eStt_FinishShooting , - eStt_Stop , - eStt_Max - } mState, mLastState; - -BOOL mError; - - enum - { -#if 1 - cPictureOffsetX = 0, - cPictureOffsetY = 0, -#else - cPictureOffsetX = 24, - cPictureOffsetY = 24, -#endif - cPictureWidth = cScreenWidth - (cPictureOffsetX * 2), - cPictureHeight = cScreenHeight - (cPictureOffsetY * 2), - cShootWidth = 640, - cShootHeight = 480 - }; - -/*---------------------------------------------------------------------------* - ֐錾 - *---------------------------------------------------------------------------*/ - -static void VBlankIntr(void); -static void CameraIntr(void); -//static void CameraIntr2(void); -//static void CameraIntr3(void); -static void NDmaIntr(void); -static void NDmaDummyIntr(void); -static void PutString( char *format, ... ); -static void DrawFPS(void); - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static BOOL startRequest = FALSE; - -// [0],[1]camerainputB[2]͎̂Ăcamera inputpH -static u16 buffer[3][WIDTH*HEIGHT] ATTRIBUTE_ALIGN(32); -//static vu8 we; -//static vu8 re; -//static vu8 reading; -//static vu8 tp; -//static vu8 wp; // Jf[^荞ݒ̃obt@ -//static vu8 rp; // ŌVRAMɃRs[obt@ -//static BOOL wp_pending; // 荞݂𒆒f (Ăѓobt@Ɏ荞) -static CAMERASelect current = CAMERA_SELECT_IN; -static MenuIrqHandlerLogBuffer logBuf[0x10000]; - -static u16 text_buffer[ 32 ] ATTRIBUTE_ALIGN(32); - -static vu8 sNowConvert = FALSE; // YUV->RGBϊtO - -static vu8 sLongDmaFlag; - -static u32 gWords[0x2000]; -static u32 gSum; - -#define GRAD_WIDTH 256 -static u16 grad0[GRAD_WIDTH] ATTRIBUTE_ALIGN(32); -static u16 grad1[GRAD_WIDTH] ATTRIBUTE_ALIGN(32); -static void MakeGrad(void) -{ - static u16 table[] = { - 0, 8, 0, 1, 0, 2, 0, 3, - 0, 4, 0, 5, 0, 6, 0, 7, - 1, 8, 1, 9, 2,10, 3,11, - 4,12, 5,13, 6,14, 7,15, - 8,16, 9,17,10,18,11,19, - 12,20,13,21,14,22,15,23, - 16,24,17,25,18,26,19,27, - 20,28,21,29,22,30,23,31, - }; - u32 i; - u32 color; - u32 shift = GX_RGBA_G_SHIFT; - - for (i = 0; i < GRAD_WIDTH; i++) { - color = i >> 2; // 0-63 - grad0[i] = (u16)((table[color] << shift) | GX_RGBA_A_MASK); - grad1[i] = (u16)(((color >> 1) << shift) | GX_RGBA_A_MASK); - } - - DC_StoreAll(); -} - -static inline int r_diff( u8 v ) -{ -// return (1402 * ( v - 128 )) / 1000; - return (11760828/*.416*/ * ( v - 128)) >> 23; -} - -static inline int g_diff( u8 u, u8 v ) -{ -// return (-344 * ( u - 128 ) -714 * ( v - 128 )) / 1000; - return (-2885681/*.152*/ * ( u - 128 ) -5989466/*.112*/ * ( v - 128 )) >> 23; -} -static inline int b_diff( u8 u ) -{ -// return (1772 * ( u - 128 )) / 1000; - return (14864613/*.376*/ * ( u - 128 )) >> 23; -} - -static inline int trim( int e ) -{ - return e < 0 ? 0 : ( e > 255 ? 255 : e); -} -#if 0 -static u32 CpuYuv2Rgb666( const void* src, void* dest, u32 pixels ) -{ - return CpuYuv2Rgb(src, dest, pixels); -} -#elif 0 -static u32 CpuYuv2Rgb666( const void* src, void* dest, u32 pixels ) -{ - MakeGrad(); - return 0; -} -#elif 0 -// little endian only -static asm u32 CpuYuv2Rgb666( register const void* src, register void* dst, register u32 pixels ) -{ - // x * 6/7 - ldr r0, =0x000003fd - ldr r1, =(6*0x10000)/7 - smulwb r0, r1, r0 -// mov r0, #0x16c << 16 - bx lr -} -#elif 0 -// little endian only -static asm u32 CpuYuv2Rgb666( register const void* src, register void* dst, register u32 pixels ) -{ - // JNAAHB͂ǂꂭ炢Xg[H - - -// 0009 0000 0000 0000 0000 0000 0000 0000 ret=00000001 -// 0002 0000 0000 0000 0000 0000 0000 0000 ret=00000001 -// 0003 0000 0000 0000 0000 0000 0000 0000 ret=00000001 - // 9ƂȁBsysclk/64Ȃ̂...cpuclkɂ4{A - // ^C}[JEgAbvOƂĂ - // ‚܂8*64*4=2048 cpu cycles̊ԁAXg[ĂĂƁH - // ͉H - // J̃Cobt@16MHzœẮH - // ƂƁA256hbg=64 WordsADMAɂ - // sysclkɂ8{A64*8=512 cpu cycles...ȂɑȂH - // - // [ƁIICAMERA_GetBytesAtOnce(WIDTH)=2048I - // ‚܂ 512 WordsȂ̂512*8 = 4096 cycles...ȌvZɂ͂ȂȁB - // J̃Cobt@sysclkȂcpuclkɂ4{A - // 512*4=2048 cpu cycles...‚‚܍H - // oCgƓcpu cyclesɂȂƂƁA2048̓AJ() - // 荞݃[`̒łȂɃXg[郊XNB - // TEhDMAĂ̂ɁB - // ܂łA̗vɂăXg[”\邩 - // J̃Cobt@4CƂĂ̂ȁB - // ܂ȂB[AJ̃Cobt@烁C - // ֓]́ADMAI荞݂gȂ΁ADMAǂ‚Ȃ - // j]Ƃ́A܂SzȂėǂB - // - // 000e 0000 0000 0000 0000 0000 0000 0000 ret=00000001 - // Ȃ񂶂ႱIH荞ݓH - // - // mi_ndma.c - // #define CAMERA_DMA_BLOCK_SIZE MI_NDMA_BWORD_16 - // #define CAMERA_DMA_INTERVAL 2 - // #define CAMERA_DMA_PRESCALER MI_NDMA_INTERVAL_PS_1 - // Ƃ̂ŁA16[hPʂ̕]ɂȂĂ̂ȁB - // AȂĂBvXP[=1{(sysclk)AC^[o=2 - // ɈݒƂ͎vȂACobt@I[o[t[̂ȁc - // Xg[̂́AJNDMÂłȂB - - - -// keep stack frame 8-Bytes aligned -#define SAVE_REGS r3,r4-r11,lr - -#define t0 r6 -#define t1 r7 -#define tm0l_addr r11 -#define vcount_addr lr - -#define tm0 r4 -#define vcount r5 - -#define COUNT_MAX 8 - - // keep 8-Bytes aligned - stmfd sp!, {SAVE_REGS} - - ldr tm0l_addr, =REG_TM0CNT_L_ADDR - ldr vcount_addr, =REG_VCOUNT_ADDR - mov pixels, #COUNT_MAX // ōv - -// VCOUNTl0xc4Ƃ0x60ƂȂ̂ŁAJオ͔ΉB - ldrh vcount, [vcount_addr] - add vcount, vcount, #0x30 - mov vcount, #192 -@10: - ldrsh tm0, [tm0l_addr] -@20: - ldrsh t0, [tm0l_addr] - sub t1, t0, tm0 - movs t0, t1, lsr #1 - beq @50 - - strh t1, [dst], #2 - subs pixels, pixels, #1 - beq @150 - -@50: - ldrh t0, [vcount_addr] - cmp t0, vcount - blt @10 - b @100 - -@100: - mov t1, pixels - mov t0, #0 -@110: - strh t0, [dst], #2 - subs t1, t1, #1 - bne @110 - -@150: - rsb r0, pixels, #COUNT_MAX - - // keep 8-Bytes aligned - ldmfd sp!, {SAVE_REGS} - bx lr -#undef SAVE_REGS -#undef t0 -#undef t1 -#undef tm0l_addr -#undef vcount_addr -#undef tm0 -#undef vcount -#undef COUNT_MAX -} -#elif 1 -// dst_~[tFb` -// dstMAINł͂Ȃ(VRAM)Ƒz肵Ă̂ŁADTCMgpB -// 666ȂĒPȂ555B -// little endian only -static asm u32 CpuYuv2Rgb666( register const void* src, register void* dst, register u32 pixels ) -{ - -// keep stack frame 8-Bytes aligned -#define SAVE_REGS r3,r4-r11,lr -#define t0 r3 -#define t1 r12 -#define y0 r9 -#define y1 r10 -#define uv r11 -#define rgba lr - -#define CONST_REGS r4-r8 -#define const_0x80008000 r4 -#define const_0xff00ff00 r5 -#define const_0x7f800000 r6 -#define const_H1_402_L1_772 r7 -#define const_Hm0_344_Lm0_714 r8 - - // omit odd and zero - eor t0, pixels, #1 - movs t0, t0, lsr #1 - bxls lr // LS: C clear or Z set - - // keep 8-Bytes aligned - stmfd sp!, {SAVE_REGS} - - ldr t0, =@constants - ldmia t0, {CONST_REGS} - - ldr t0, [src], #4 -@10: - and uv, t0, const_0xff00ff00 - eor uv, uv, const_0x80008000 - and y0, const_0x7f800000, t0, lsl #23 // 0x000000ff -> 0x7f800000 - and y1, const_0x7f800000, t0, lsl #23-16 // 0x00ff0000 -> 0x7f800000 - - // Green - // -0.344*(U-128) - smultb t0, const_Hm0_344_Lm0_714, uv - // -0.714*(V-128) - smulbt t1, const_Hm0_344_Lm0_714, uv - mov rgba, const_0x80008000 - add t1, t0, t1 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #21 // 0x7c000000 -> 0x000003e0 - ands t0, t1, #0xfc000000 - - // Red - // 1.402*(V-128) - smultt t1, const_H1_402_L1_772, uv - orrpl rgba, rgba, t0, lsr #21-16 // 0x7c000000 -> 0x03e00000 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #26 // 0x7c000000 -> 0x0000001f - ands t0, t1, #0xfc000000 - - // Blue - // 1.772*(U-128) - smulbb t1, const_H1_402_L1_772, uv - orrpl rgba, rgba, t0, lsr #26-16 // 0x7c000000 -> 0x001f0000 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #16 // 0x7c000000 -> 0x00007c00 - ands t0, t1, #0xfc000000 - orrpl rgba, rgba, t0 // 0x7c000000 - - str rgba, [dst], #4 - subs pixels, pixels, #2 - ldrne t0, [src], #4 - bne @10 - - // keep 8-Bytes aligned - ldmfd sp!, {SAVE_REGS} - bx lr - -@constants: - dcd 0x80008000 - dcd 0xff00ff00 - dcd 0x7f800000 - dcd 0x59ba7168 // ((1.402 * 0x4000) << 16) | ((1.772 * 0x4000) & 0xffff) - dcd 0xe9fcd24e // ((-0.344 * 0x4000) << 16) | ((-0.714 * 0x4000) & 0xffff) - -#undef SAVE_REGS -#undef t0 -#undef t1 -#undef y0 -#undef y1 -#undef uv -#undef rgba -#undef CONST_REGS -#undef const_0x80008000 -#undef const_0xff00ff00 -#undef const_0x7f800000 -#undef const_H1_402_L1_772 -#undef const_Hm0_344_Lm0_714 -} - -#elif 0 -// dst_~[tFb`c߂xȂBcOB -// little endian only -static asm u32 CpuYuv2Rgb666( register const void* src, register void* dst, register u32 pixels ) -{ - -// keep stack frame 8-Bytes aligned -#define SAVE_REGS r3,r4-r11,lr -#define t0 r3 -#define t1 r12 -#define y0 r9 -#define y1 r10 -#define uv r11 -#define rgba lr - -#define CONST_REGS r4-r8 -#define const_0x80008000 r4 -#define const_0xff00ff00 r5 -#define const_0x7f800000 r6 -#define const_H1_402_L1_772 r7 -#define const_Hm0_344_Lm0_714 r8 - - // omit odd and zero - eor t0, pixels, #1 - movs t0, t0, lsr #1 - bxls lr // LS: C clear or Z set - - // keep 8-Bytes aligned - stmfd sp!, {SAVE_REGS} - - ldr t0, =@constants - ldmia t0, {CONST_REGS} - - ldr t0, [src], #4 -@10: - and uv, t0, const_0xff00ff00 - eor uv, uv, const_0x80008000 - and y0, const_0x7f800000, t0, lsl #23 // 0x000000ff -> 0x7f800000 - and y1, const_0x7f800000, t0, lsl #23-16 // 0x00ff0000 -> 0x7f800000 - - // dst dummy-fetch - ldr rgba, [dst] - - // Green - // -0.344*(U-128) - smultb t0, const_Hm0_344_Lm0_714, uv - // -0.714*(V-128) - smulbt t1, const_Hm0_344_Lm0_714, uv - mov rgba, const_0x80008000 - add t1, t0, t1 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #21 // 0x7c000000 -> 0x000003e0 - ands t0, t1, #0xfc000000 - - // Red - // 1.402*(V-128) - smultt t1, const_H1_402_L1_772, uv - orrpl rgba, rgba, t0, lsr #21-16 // 0x7c000000 -> 0x03e00000 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #26 // 0x7c000000 -> 0x0000001f - ands t0, t1, #0xfc000000 - - // Blue - // 1.772*(U-128) - smulbb t1, const_H1_402_L1_772, uv - orrpl rgba, rgba, t0, lsr #26-16 // 0x7c000000 -> 0x001f0000 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #16 // 0x7c000000 -> 0x00007c00 - ands t0, t1, #0xfc000000 - orrpl rgba, rgba, t0 // 0x7c000000 - - str rgba, [dst], #4 - subs pixels, pixels, #2 - ldrne t0, [src], #4 - bne @10 - - // keep 8-Bytes aligned - ldmfd sp!, {SAVE_REGS} - bx lr - -@constants: - dcd 0x80008000 - dcd 0xff00ff00 - dcd 0x7f800000 - dcd 0x59ba7168 // ((1.402 * 0x4000) << 16) | ((1.772 * 0x4000) & 0xffff) - dcd 0xe9fcd24e // ((-0.344 * 0x4000) << 16) | ((-0.714 * 0x4000) & 0xffff) - -#undef SAVE_REGS -#undef t0 -#undef t1 -#undef y0 -#undef y1 -#undef uv -#undef rgba -#undef CONST_REGS -#undef const_0x80008000 -#undef const_0xff00ff00 -#undef const_0x7f800000 -#undef const_H1_402_L1_772 -#undef const_Hm0_344_Lm0_714 -} - -#elif 0 -// little endian only -// ŏlAől𒲂ׂB -static asm u32 CpuYuv2Rgb666( register const void* src, register void* dst, register u32 pixels ) -{ -#define SAVE_REGS0 src,dst,pixels -#define SAVE_REGS1 r4-r11,lr -#define t0 r3 -#define minVal r4 -#define maxVal r5 - - // keep 8-Bytes aligned - stmfd sp!, {SAVE_REGS0, SAVE_REGS1} - - mvn minVal, #0x80000000 - mov maxVal, #0x80000000 - -@10: - ldrb t0, [src], #4 - ldrb t0, [src, #1-4] - cmp minVal, t0 - movgt minVal, t0 - cmp maxVal, t0 - movlt maxVal, t0 - -#if 0 - cmp minVal, t0 - movgt minVal, t0 - cmp maxVal, t0 - movlt maxVal, t0 - ldrb t0, [src, #2-4] - cmp minVal, t0 - movgt minVal, t0 - cmp maxVal, t0 - movlt maxVal, t0 -#endif - - subs pixels, pixels, #2 - bne @10 - - mov minVal, minVal, lsl #16 - mov maxVal, maxVal, lsl #16 - orr t0, maxVal, minVal, lsr #16 - - // keep 8-Bytes aligned - ldmfd sp!, {SAVE_REGS0, SAVE_REGS1} - mov r0, t0 - bx lr - -#undef SAVE_REGS0 -#undef SAVE_REGS1 -#undef t0 -#undef minVal -#undef maxVal -} - -#else -// little endian only -// x^ɍ炱ȂBCƕςB -static asm u32 CpuYuv2Rgb666( register const void* src, register void* dst, register u32 pixels ) -{ -// registers -// keep stack frame 8-Bytes aligned -#define SAVE_REGS0 src,dst,pixels -#define SAVE_REGS1 r4-r11,lr -#define t0 r3 -#define rgba r12 -#define u src -#define v dst -#define y0 r11 -#define y1 lr - -#define tablep r9 -#define data0 r10 -#define data1 pixels - -#define CONST_REGS r4-r8 -#define const_0x80008000 r4 -#define const_minus_0_344 r5 -#define const_minus_0_714 r6 -#define const_1_402 r7 -#define const_1_772 r8 - - cmp pixels, #2 - bxlt lr - - // keep 8-Bytes aligned - stmfd sp!, {SAVE_REGS0, SAVE_REGS1} - - ldr t0, =@constants - ldmia t0, {CONST_REGS} - - ldr tablep, =@table - -@10: - ldrb y0, [src], #4 - ldrb t0, [src, #1-4] - ldrb y1, [src, #2-4] - ldrb rgba, [src, #3-4] - // do not update sp here! keep 8-Bytes aligned - stmia sp, {SAVE_REGS0} - sub u, t0, #0x80 - sub v, rgba, #0x80 - - // Green - // -0.344*(U-128) - mul t0, const_minus_0_344, u - // -0.714*(V-128) - mul rgba, const_minus_0_714, v - mov t0, t0, asr #23 - add t0, t0, rgba, asr #23 - // +Y - adds rgba, t0, y0 - movmi rgba, #0 - cmp rgba, #0xff - movgt rgba, #0xff - ldrb data1, [tablep, rgba, lsr #2] - and rgba, rgba, #0xf8 - mov rgba, rgba, lsl #2 - adds t0, t0, y1 - movmi t0, #0 - cmp t0, #0xff - movgt t0, #0xff - ldrb data0, [tablep, t0, lsr #2] - and t0, t0, #0xf8 - orr rgba, rgba, t0, lsl #16+2 - mov data1, data1, lsl #5 - orr data0, data1, data0, lsl #16+5 - - // Red - // 1.402*(V-128) - mul t0, const_1_402, v - mov t0, t0, asr #23 - // +Y - // now v is free - adds v, t0, y0 - movmi v, #0 - cmp v, #0xff - movgt v, #0xff - ldrb data1, [tablep, v, lsr #2] - orr rgba, rgba, v, lsr #3 - adds t0, t0, y1 - movmi t0, #0 - cmp t0, #0xff - movgt t0, #0xff - ldrb v, [tablep, t0, lsr #2] - and t0, t0, #0xf8 - orr rgba, rgba, t0, lsl #16-3 - orr data0, data0, data1 - orr data0, data0, v, lsl #16 - - // Blue - // 1.772*(U-128) - mul t0, const_1_772, u - mov t0, t0, asr #23 - // +Y - // now u,v is free - adds v, t0, y0 - movmi v, #0 - cmp v, #0xff - movgt v, #0xff - ldrb data1, [tablep, v, lsr #2] - and v, v, #0xf8 - orr rgba, rgba, v, lsl #7 - adds t0, t0, y1 - movmi t0, #0 - cmp t0, #0xff - movgt t0, #0xff - and t0, t0, #0xf8 - ldrb v, [tablep, t0, lsr #2] - orr rgba, rgba, t0, lsl #16+7 - orr data0, data0, data1, lsl #10 - orr data0, data0, v, lsl #16+10 - - // do not update sp here! keep 8-Bytes aligned - ldmia sp, {SAVE_REGS0} - orr data0, data0, const_0x80008000 - str data0, [dst, const_0x80008000, lsl #1] - orr rgba, rgba, const_0x80008000 - str rgba, [dst], #4 - subs pixels, pixels, #2 - bne @10 - - // keep 8-Bytes aligned - ldmfd sp!, {SAVE_REGS0, SAVE_REGS1} - bx lr - -@table: - dcd 0x01000800 - dcd 0x03000200 - dcd 0x05000400 - dcd 0x07000600 - dcd 0x09010801 - dcd 0x0b030a02 - dcd 0x0d050c04 - dcd 0x0f070e06 - dcd 0x11091008 - dcd 0x130b120a - dcd 0x150d140c - dcd 0x170f160e - dcd 0x19111810 - dcd 0x1b131a12 - dcd 0x1d151c14 - dcd 0x1f171e16 - -@constants: -/* const_0x80008000 r4 */ dcd 0x80008000 -/* const_minus_0_344 r5 */ dcd (-2885681) -/* const_minus_0_714 r6 */ dcd (-5989466) -/* const_1_402 r7 */ dcd 11760828 -/* const_1_772 r8 */ dcd 14864613 - - -// OSTick begin; -// u8* yuyv = (u8*)src; -// u32* rgb = (u32*)dest; -// -// u32 limit = pixels >> 1; -// u32 i; -// -// begin = OS_GetTick(); -// -// for (i = 0; i < limit; i++) -// { -// u8 y1 = *yuyv++; -// u8 u = *yuyv++; -// u8 y2 = *yuyv++; -// u8 v = *yuyv++; -// *rgb++ = (u32)( 0x80008000 | -// ( ( trim( y2 + b_diff( u ) ) & 0xF8 ) << 23) | -// ( ( trim( y2 + g_diff( u, v ) ) & 0xF8 ) << 18) | -// ( ( trim( y2 + r_diff( v ) ) & 0xF8 ) << 13) | -// ( ( trim( y1 + b_diff( u ) ) & 0xF8 ) << 7) | -// ( ( trim( y1 + g_diff( u, v ) ) & 0xF8 ) << 2) | -// ( ( trim( y1 + r_diff( v ) ) ) >> 3) ); -// } -// -// OS_Printf("total(666) = %d us\n", (u32)OS_TicksToMicroSeconds(OS_GetTick() - begin)); -// -// return pixels * sizeof(RGBX16); - -#undef SAVE_REGS0 -#undef SAVE_REGS1 -#undef t0 -#undef rgba -#undef u -#undef v -#undef y0 -#undef y1 - -#undef tablep -#undef data0 -#undef data1 - -#undef CONST_REGS -#undef const_0x80008000 -#undef const_minus_0_344 -#undef const_minus_0_714 -#undef const_1_402 -#undef const_1_772 -} -#endif - - -static void drawTexture(u8* vramAddr, BOOL shot) -{ -#pragma unused(vramAddr) -#pragma unused(shot) - s32 x0, y0; - s32 x1, y1; - s32 s0, s1; - s32 t0, t1; - - x0 = cPictureOffsetX; - x1 = cPictureOffsetX + cPictureWidth; - y0 = cPictureOffsetY; - y1 = cPictureOffsetY + cPictureHeight; - - s0 = 0; - s1 = cPictureWidth; - t0 = 0; - t1 = cPictureHeight; - - G3X_Reset(); - - // Ortho matrix - { - G3_Ortho(0, - -GX_LCD_SIZE_Y, - 0, - GX_LCD_SIZE_X, - 0 * FX32_ONE, - 2 * FX32_ONE, - NULL); - G3_StoreMtx(0); - } - - { - G3_MtxMode(GX_MTXMODE_TEXTURE); - G3_Identity(); - // Use an identity matrix for the texture matrix for simplicity - G3_MtxMode(GX_MTXMODE_POSITION_VECTOR); - } - - //--------------------------------------------------------------------------- - // Set up a camera matrix - //--------------------------------------------------------------------------- - { - VecFx32 Eye = { 0, 0, FX32_ONE }; // Eye position - VecFx32 at = { 0, 0, 0 }; // Viewpoint - VecFx32 vUp = { 0, FX32_ONE, 0 }; // Up - - G3_LookAt(&Eye, &vUp, &at, NULL); - } - -#if 0 - GX_BeginLoadTex(); // map the texture image slots onto LCDC address space - { - GX_LoadTex((void *)&grad0[0], - myTexGrad0Addr, - 256 * sizeof(u16) - ); - GX_LoadTex((void *)&grad1[0], - myTexGrad1Addr, - 256 * sizeof(u16) - ); - - } - GX_EndLoadTex(); // restore the texture image slots -#endif - - G3_PolygonAttr(GX_LIGHTMASK_NONE, // Light #0 is on - GX_POLYGONMODE_DECAL, // modulation mode - GX_CULL_BACK, // cull none - 1, // polygon ID(0 - 63) - 30, // alpha(0 - 31) - GX_POLYGON_ATTR_MISC_XLU_DEPTH_UPDATE // OR of GXPolygonAttrMisc's value - ); - G3_TexImageParam(GX_TEXFMT_DIRECT, - GX_TEXGEN_TEXCOORD, // use texcoord - GX_TEXSIZE_S256, - GX_TEXSIZE_T256, - GX_TEXREPEAT_NONE, // no repeat - GX_TEXFLIP_NONE, // no flip - GX_TEXPLTTCOLOR0_USE, // use color 0 of the palette - 0x00000 // the offset of the texture image - ); - G3_Begin(GX_BEGIN_QUADS); - { - G3_TexCoord(s1 << FX32_SHIFT, t1 << FX32_SHIFT); - G3_Vtx((s16)x1, (s16)(-y1), 0); - G3_TexCoord(s1 << FX32_SHIFT, t0 << FX32_SHIFT); - G3_Vtx((s16)x1, (s16)(-y0), 0); - G3_TexCoord(s0 << FX32_SHIFT, t0 << FX32_SHIFT); - G3_Vtx((s16)x0, (s16)(-y0), 0); - G3_TexCoord(s0 << FX32_SHIFT, t1 << FX32_SHIFT); - G3_Vtx((s16)x0, (s16)(-y1), 0); - } - G3_End(); - -// G3_PolygonAttr(GX_LIGHTMASK_NONE, // Light #0 is on -// GX_POLYGONMODE_DECAL, // modulation mode -// GX_CULL_BACK, // cull none -// 2, // polygon ID(0 - 63) -// 1, // alpha(0 - 31) -// GX_POLYGON_ATTR_MISC_DEPTHTEST_DECAL // OR of GXPolygonAttrMisc's value -// ); -// G3_TexImageParam(GX_TEXFMT_DIRECT, -// GX_TEXGEN_TEXCOORD, // use texcoord -// GX_TEXSIZE_S256, -// GX_TEXSIZE_T256, -// GX_TEXREPEAT_NONE, // no repeat -// GX_TEXFLIP_NONE, // no flip -// GX_TEXPLTTCOLOR0_USE, // use color 0 of the palette -// 0x10000 // the offset of the texture image -// ); -// G3_Begin(GX_BEGIN_QUADS); -// { -// G3_TexCoord(256 * FX32_ONE, (HEIGHT/2) * FX32_ONE); -// G3_Vtx((s16)x1, (s16)y1, 0); -// G3_TexCoord(256 * FX32_ONE, 0 * FX32_ONE); -// G3_Vtx((s16)x1, (s16)y0, 0); -// G3_TexCoord(0 * FX32_ONE, 0 * FX32_ONE); -// G3_Vtx((s16)x0, (s16)y0, 0); -// G3_TexCoord(0 * FX32_ONE, (HEIGHT/2) * FX32_ONE); -// G3_Vtx((s16)x0, (s16)y1, 0); -// } -// G3_End(); - - { - OSIntrMode enabled = OS_DisableInterrupts(); - - // swapping the polygon list RAM, the vertex RAM, etc. - G3_SwapBuffers(GX_SORTMODE_MANUAL, GX_BUFFERMODE_Z); - mpCmrMgr2->setTexSwap(); - - OS_RestoreInterrupts(enabled); - } - - DrawFPS(); -} - -static void dumpWramBanks(u32 line) -{ - u32 i; - - OS_TPrintf("line %d: WramB=", line); - for (i = 0; i < 8; i++) { - OS_TPrintf(" %d", MI_GetWramBankEnable_B((s32)i)); - } - OS_TPrintf(", WramC="); - for (i = 0; i < 8; i++) { - OS_TPrintf(" %d", MI_GetWramBankEnable_C((s32)i)); - } - OS_TPrintf("\n"); -} - -#if SDK_VERSION_DATE < 20080624 -static void proc_camera_intr_() { -#else -static void cameraVsyncCallback(CAMERAResult result) { -#pragma unused( result ) -#endif -#if 1 - // Ɛ̂݌ĂԁB - mpCmrMgr2->procCameraIntr(); -#else - MenuSys()->procCameraIntr(); -#endif - - OS_SetIrqCheckFlag( OS_IE_CAMERA ); -} - -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: main - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void TwlMain() -{ -// CAMERAResult result; - -#ifdef TWL_IPL_USE_RED_IPL - HOTSW_Init(); -#endif - - // - // in new.cpp: TwlStartUp() - - MenuIrqHandlerStart(logBuf, sizeof(logBuf)); - - // DEMOInitCommon(), DEMOInitVRAM(), DEMOInitDisplay3D()Ă΂Ȃ - FX_Init(); - G3X_Init(); // initialize the 3D graphics states - G3X_InitMtxStack(); // initialize the matrix stack - - // GXDMAgȂ (DMA̓JDMA̎זɂȂ) - GX_SetDefaultDMA(GX_DMA_NOT_USE); - - // VRAMNA - GX_SetBankForLCDC(GX_VRAM_LCDC_A); - GX_SetBankForLCDC(GX_VRAM_LCDC_B); - MI_CpuClearFast((void*)HW_LCDC_VRAM_A, 128 * 1024); - MI_CpuClearFast((void*)HW_LCDC_VRAM_B, 128 * 1024); - - GX_SetBankForLCDC(GX_VRAM_LCDC_C); - GX_SetBankForLCDC(GX_VRAM_LCDC_D); - MI_CpuClearFast((void*)HW_LCDC_VRAM_C, HW_VRAM_C_SIZE); - MI_CpuClearFast((void*)HW_LCDC_VRAM_D, HW_VRAM_D_SIZE); -// GX_SetBankForTex(GX_VRAM_TEX_0_C); - - - // _CNgrbg}bv\[h\ - GX_SetBankForBG(GX_VRAM_BG_256_AB); // VRAM-A,BoNafɊ蓖 - GX_SetGraphicsMode(GX_DISPMODE_GRAPHICS, GX_BGMODE_4, GX_BG0_AS_3D); - - G2_SetBG0Priority(2); - G3X_AntiAlias(TRUE); // enable antialias(without additional computing costs) - G3X_AlphaBlend(TRUE); // enable alpha blending - //--------------------------------------------------------------------------- - // After you start the geometry engine and the rendering one - // (by GX_SetPower etc.), G3_SwapBuffers must be called once before use - //--------------------------------------------------------------------------- - G3_SwapBuffers(GX_SORTMODE_AUTO, GX_BUFFERMODE_Z); - G3X_SetClearColor(GX_RGB(0, 0, 0), // clear color - 0, // clear alpha - 0x7fff, // clear depth - 63, // clear polygon ID - FALSE); // fog - G3_ViewPort(0, 0, 255, 191); // Viewport - - GX_SetVisiblePlane(GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_BG3); - - G2_SetBG1Control(GX_BG_SCRSIZE_TEXT_256x256, GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0x0000, GX_BG_CHARBASE_0x04000, GX_BG_EXTPLTT_01); - G2_SetBG1Priority(1); - G2_BG1Mosaic(FALSE); - - G2_SetBG3ControlDCBmp(GX_BG_SCRSIZE_DCBMP_256x256, GX_BG_AREAOVER_XLU, GX_BG_BMPSCRBASE_0x20000); - G2_SetBG3Priority(3); - G2_BG3Mosaic(FALSE); - - // ̓ǂݍ - { - static const GXRgb pal[16] = { GX_RGB(0, 0, 0), GX_RGB(31, 31, 31), }; - GX_LoadBG1Char(DEMOAsciiChr, 0x00000, sizeof(DEMOAsciiChr)); - GX_LoadBGPltt(pal, 0x0000, sizeof(pal)); - } -// we = TRUE; -// re = FALSE; -// wp = 0; -// rp = 1; -// tp = 0; -// wp_pending = TRUE; - -// MakeGrad(); - - // VBlank荞݂‚OɃJ}l[W𐶐ĂB -// #if 0 -// pDtcm = OS_AllocFromArenaLo(OS_ARENA_DTCM, 256*4*sizeof(u32), HW_CACHE_LINE_SIZE); -// #else -// pDtcm = (u32 *)myArena; -// #endif - OS_TPrintf("sDtcmWork=0x%x\n", &sDtcmWork); - OS_DumpArenaInfo(OS_ARENA_DTCM, TRUE); - -#if SDK_VERSION_DATE < 20080624 - OS_SetIrqFunction( OS_IE_CAMERA , proc_camera_intr_ ); -#else - // CAMERACũR[obNɕύX܂B -// OS_SetIrqFunction(OS_IE_CAMERA, proc_camera_intr_); - CAMERA_SetVsyncCallback(cameraVsyncCallback); -#endif - - // new()ĎgȂˁcnew.cppljŎgI - mpCmrMgr2 = new cmn::sys::cmr2::Manager(); - -#if 0 - // old - - // 荞݂‚ĂȂƃ_H - mpCmrMgr2->init(cmn::sys::cmr2::eMode_Tex, current, - /*GX_VRAM_A, GX_VRAM_B,*/GX_VRAM_C, GX_VRAM_D, &sDtcmWork, drawTexture); - mpCmrMgr2->activate(); - - mpCmrMgr2->setShutterSnd(_binary_camera_shutter_dat, - (u32)(_binary_camera_shutter_dat_end - _binary_camera_shutter_dat), - TRUE); -#endif - - mpCmrMgr2->preInit(); -// mpCmrMgr2->setCaptureRgbFlag(TRUE); - -// // stereo -// mpCmrMgr2->setShutterSnd(_binary_camera_shutter_dat, -// (u32)(_binary_camera_shutter_dat_end - _binary_camera_shutter_dat), -// TRUE); - -// // mono -// mpCmrMgr2->setShutterSnd(_binary_camera_shutter_MONO_dat, -// (u32)(_binary_camera_shutter_MONO_dat_end - _binary_camera_shutter_MONO_dat), -// FALSE); - - if (1) { -// mpCmrMgr2->setOneShotFlag(TRUE); - } - - - - - // VuN荞ݐݒ - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)OS_EnableIrq(); - (void)GX_VBlankIntr(TRUE); - (void)OS_EnableInterrupts(); - - // SD - FS_Init( FS_DMA_NOT_USE ); - -#if 1 - // demos.TWL/snd/extraFunc - /* TEh */ - SND_Init(); - SND_AssignWaveArc((SNDBankData*)sound_bank_data, 0, (SNDWaveArc*)sound_wave_data); - SND_StartSeq(0, sound_seq_data, 0, (SNDBankData*)sound_bank_data); -#endif - - /* TEhg@\ */ - SNDEX_Init(); - - OS_WaitIrq(TRUE, OS_IE_V_BLANK); - GX_DispOn(); - -// OS_TPrintf("sizeof testEncodeWork=%d\n", sizeof(cmn::sys::cmr2::Manager::testEncodeWork)); -// OS_TPrintf("ticks/1000usec = %lld\n", (u64)OS_MicroSecondsToTicks(1000)); -// -// { -// OSTick tick; -// BOOL flag = FALSE; -// -// tick = OS_GetTick(); -// mpCmrMgr2->preInit(); -// -// // 1bpreInit͏IƂ -// OS_Sleep(1000); -// -// tick = OS_GetTick(); -// // {initɂ鎞Ԃ́H -// mpCmrMgr2->init(cmn::sys::cmr2::eMode_Tex, current, GX_VRAM_C, GX_VRAM_D, &sDtcmWork, drawTexture); -// -// while (1) { -// OS_Sleep(5000); -// if (!flag) { -// flag = TRUE; -// OS_TPrintf("main loop ok, tick before init=%lld\n", (u64)tick); -// } -// } -// } - - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP - MI_FreeWram_B ( MI_WRAM_ARM9 ); - MI_CancelWram_B( MI_WRAM_ARM9 ); - MI_FreeWram_C ( MI_WRAM_ARM9 ); - MI_CancelWram_C( MI_WRAM_ARM9 ); - - // for DSP_PlaySound() ? - // DSP_InitPipe(); - /* vON */ -#if 1 - // JPEG DECƕpłȂI - FSFile file[1]; - DSP_OpenStaticComponentJpegEncoder(file); - if(!DSP_LoadJpegEncoder(file, 0xff, 0xff)) - { - // WramB= 1 1 1 0 0 0 0 0, WramC= 1 1 1 1 0 0 0 0 - OS_TPanic("failed to load JpegEncoder DSP-component! (lack of WRAM-B/C)"); - } -#endif - dumpWramBanks(__LINE__); -#if 0 - // JPEG ENCƕpłȂI - if(!DSP_LoadJpegDecoder()) - { - // WramB= 1 1 0 0 0 0 0 0, WramC= 1 1 1 1 0 0 0 0 - OS_TPanic("failed to load JpegDecoder DSP-component! (lack of WRAM-B/C)"); - } - dumpWramBanks(__LINE__); -#endif -#if 0 - // JPEGƕpłȂI - if (!DSP_LoadShutter()) { - // WramB= 1 0 0 0 0 0 0 0, WramC= 1 0 1 1 0 0 0 0 - OS_TPanic("failed to load Shutter DSP-component! (lack of WRAM-B/C)"); - } -#endif -#else - dumpWramBanks(__LINE__); -#endif - - - - OS_WaitVBlankIntr(); - - while (1) - { - u16 pad; - u16 trg; - static u16 old = 0xffff; - static BOOL refresh = FALSE; - -// static const u32 myTexGrad0Addr = 0x2000; -// static const u32 myTexGrad1Addr = 0x3000; - - - /* TEhC */ - while (SND_RecvCommandReply(SND_COMMAND_NOBLOCK) != NULL) - { - } - (void)SND_FlushCommand(SND_COMMAND_NOBLOCK); - -#if 1 -// // more than 1 frame -// OS_WaitIrq(TRUE, OS_IE_V_BLANK); - OS_WaitVBlankIntr(); -#else - // keep AHB busy - OS_ClearIrqCheckFlag(OS_IE_V_BLANK); - while (!(OS_GetIrqCheckFlag() & OS_IE_V_BLANK)) { - u32 wordIdx; - wordIdx = (wordIdx + 0x11) & 0x1fff; - gWords[wordIdx]++; - } -#endif - GX_LoadBG1Scr(text_buffer, 0, sizeof(text_buffer)); - - - pad = PAD_Read(); - trg = (u16)(pad & ~old); - old = pad; - - { - static BOOL initialized; - static BOOL destroying; - - if (!initialized && (trg || 1)) { - initialized = TRUE; - mpCmrMgr2->init(cmn::sys::cmr2::eMode_Tex, current, GX_VRAM_C, GX_VRAM_D, &sDtcmWork, drawTexture); - - mpCmrMgr2->startCapture(current); - } - - if (!destroying) { - if (trg & PAD_BUTTON_START) { - destroying = TRUE; - } - } else { - if (!mpCmrMgr2->tryDestroy()) { - IPL_PRINT("waiting for destroy...\n"); - } else { - IPL_PRINT("destroy done!\n"); - destroying = FALSE; - initialized = FALSE; - } - } - if (!initialized || destroying) { - // ̌̃{^`FbN(BeJ؂ւ)sȂB - continue; - } - } - - - - if (PAD_DetectFold()) { - // Lv`~āA~mFĂ - // X[v[hֈڍs悤ɂȂƁA - // cameraIntr: status error - // cameraIntr: status error - // ƁA2G[ɂȂ悤B - - if (mpCmrMgr2->tryPrepareToSleep()) { - PM_GoSleepMode(PM_TRIGGER_COVER_OPEN, PM_PAD_LOGIC_AND, 0); - } else { - IPL_PRINT("waiting for ready to sleep...\n"); - } - } - -// if (trg & PAD_BUTTON_B) { -// // test -// OS_TPrintf("force stop dma\n"); -// MI_StopNDma(CAMERA_NEW_DMA_NO); -// } -// if (trg & PAD_BUTTON_Y) { -// // test -// OS_TPrintf("force long dma\n"); -// sLongDmaFlag = TRUE; -// } - - if (!mpCmrMgr2->isCameraChanging()) { - if (trg & PAD_BUTTON_X) { - mpCmrMgr2->changeCamera(); - } else if (pad & PAD_BUTTON_SELECT) { - static u8 r; - - r += 1; - if (!(r & 3)) { - mpCmrMgr2->changeCamera(); - } - } - } - - - if (trg & (PAD_BUTTON_A | PAD_BUTTON_B)) { -#ifndef TWL_IPL_FINAL - mpCmrMgr2->mDebugPort = __LINE__; -#endif -// SNDEX_SetDSPMixRate( 0 ); -// SNDEX_ForceOut( TRUE ); -// -// if (trg & PAD_BUTTON_A) { -// DSP_PlaySound(const_cast(_binary_camera_shutter_dat), -// (u32)(_binary_camera_shutter_dat_end - _binary_camera_shutter_dat) / 2, -// TRUE); -// } else { -// DSP_PlaySound(const_cast(_binary_wheel_dat), -// (u32)(_binary_wheel_dat_end - _binary_wheel_dat) / 2, -// TRUE); -// } - -// #if 0 -// // test -// CAMERA_SetLED(TRUE); -// #endif - - - IPL_PRINT("shoot()=%d\n", mpCmrMgr2->shoot()); - } - - -// if (re) { -// OSTick begin = OS_GetTick(); -// // ẙԈoȂ̂ŁA480 linesȂ156*3 linesƂĂB -// // Ƃ̂ւKB -// rp = (u8)(wp ^ 1); -// Shrink640to208(buffer[rp ? 0 : 1], 156*3/*480*/, pDtcm, (u16*)(rp ? HW_LCDC_VRAM_D : HW_LCDC_VRAM_C) /*buffer[2]*/); -// we = TRUE; -// // CpuYuv2Rgb666(buffer[2], (u16*)(wp ? HW_LCDC_VRAM_D : HW_LCDC_VRAM_C), (u32)(HW_LCD_WIDTH*HW_LCD_HEIGHT) / 1); -// OS_Printf("total(exp) = %d us\n", (u32)OS_TicksToMicroSeconds(OS_GetTick() - begin)); -// DrawFPS(); -// } - -// -// if (refresh) { -// // GX_LoadBG3Scr( buffer[rp], 0, BYTES_PER_LINE * HEIGHT); -// GX_DisableBankForTex(); -// GX_SetBankForTex(rp ? GX_VRAM_TEX_0_D : GX_VRAM_TEX_0_C); -// GX_SetBankForLCDC(rp ? GX_VRAM_LCDC_C : GX_VRAM_LCDC_D); -// refresh = FALSE; -// } -// -// if (!we && !sNowConvert) -// { -// // ςȂƂɂȂ肻Ƃ肠B -// // CPUɂYUV->RGBϊs -// // DC_InvalidateRange( buffer[wp], BYTES_PER_LINE * HEIGHT); -// DC_FlushAll(); -// -// // RGB666͈UB -// // if (mode || 1) { -// // OSTick begin = OS_GetTick(); -// // u32 ret; -// // // eNX`C[WXbg̔A‚܂ʂ̏㔼ȂB -// // GX_SetBankForLCDC((wp) ? GX_VRAM_LCDC_D : GX_VRAM_LCDC_C); -// // #if 1 -// // ret = CpuYuv2Rgb666(buffer[wp], (void *)((wp) ? HW_LCDC_VRAM_D : HW_LCDC_VRAM_C), (u32)(HW_LCD_WIDTH*HW_LCD_HEIGHT) / 2); -// // // OS_Printf("total(666) = %d us, ret=0x%08x\n", (u32)OS_TicksToMicroSeconds(OS_GetTick() - begin), ret); -// // #else -// // ret = CpuYuv2Rgb666(buffer[wp], buffer[wp] + (WIDTH*HEIGHT) / 2, (u32)(HW_LCD_WIDTH*HW_LCD_HEIGHT) / 2); -// // OS_Printf("%04x %04x %04x %04x %04x %04x %04x %04x ret=%08x\n", -// // buffer[wp][(WIDTH*HEIGHT) / 2 + 0], -// // buffer[wp][(WIDTH*HEIGHT) / 2 + 1], -// // buffer[wp][(WIDTH*HEIGHT) / 2 + 2], -// // buffer[wp][(WIDTH*HEIGHT) / 2 + 3], -// // buffer[wp][(WIDTH*HEIGHT) / 2 + 4], -// // buffer[wp][(WIDTH*HEIGHT) / 2 + 5], -// // buffer[wp][(WIDTH*HEIGHT) / 2 + 6], -// // buffer[wp][(WIDTH*HEIGHT) / 2 + 7], -// // ret); -// // #endif -// // } -// /*else*/ -// { -// -// #if 1 -// #if 0 -// // 킹ĉɁB -// CpuYuv2Rgb( buffer[wp], buffer[wp] + (WIDTH*HEIGHT) / 2, (u32)(HW_LCD_WIDTH*HW_LCD_HEIGHT) / 2); -// MI_CpuFillFast((void *)buffer[wp], 0, sizeof(u16) * (u32)(HW_LCD_WIDTH*HW_LCD_HEIGHT) / 2); -// #else -// OSTick begin = OS_GetTick(); -// // CpuYuv2Rgb666(buffer[wp], buffer[wp] + (WIDTH*HEIGHT) / 2, (u32)(HW_LCD_WIDTH*HW_LCD_HEIGHT) / 2); -// -// // Œf[^ -// Shrink640to208(buffer[wp]/* b_dat*/, (u16*)(wp ? HW_LCDC_VRAM_D : HW_LCDC_VRAM_C) /*buffer[wp]*/, 96 * 3, pDtcm); -// // Shrink640to208(buffer[wp]/* b_dat*/, buffer[2], 96 * 3, pDtcm); -// // CpuYuv2Rgb666(buffer[2], (u16*)(wp ? HW_LCDC_VRAM_D : HW_LCDC_VRAM_C), (u32)(HW_LCD_WIDTH*HW_LCD_HEIGHT) / 2); -// -// OS_Printf("total(exp) = %d us\n", (u32)OS_TicksToMicroSeconds(OS_GetTick() - begin)); -// #endif -// #endif -// } -// -// // DC_FlushRange( buffer[wp], BYTES_PER_LINE * HEIGHT); -// // DC_FlushRange((void *)((wp) ? HW_LCDC_VRAM_D : HW_LCDC_VRAM_C), BYTES_PER_LINE * HEIGHT); -// // DC_StoreAll(); -// -// rp = wp; -// refresh = TRUE; -// we = TRUE; -// } -// - - - - if (mpCmrMgr2->isShotDone()) { -// #if 1 -// // test -// CAMERA_SetLED(FALSE); -// #endif - OS_TPrintf("SHOT DONE!\n"); - // check error mShotErr - - // anything to process ? - mpCmrMgr2->clearShotDone(); - - if (!mpCmrMgr2->getOneShotFlag()) { - mpCmrMgr2->startCapture(current); - } - -// SNDEX_SetDSPMixRate( 8 ); -// SNDEX_ForceOut( FALSE ); - - } else { - // (trg)ɂƃJ؂ւƂłȂȂB - if (mpCmrMgr2->getOneShotFlag() && (trg & PAD_BUTTON_Y)) { - mpCmrMgr2->startCapture(current); - } - } - -// { -// -// if (re) { -// re = FALSE; -// tp = rp; -// } -// -// } - - } -} - -/*---------------------------------------------------------------------------* - Name: uuN荞ݏ - - Description: - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void VBlankIntr(void) -{ - mpCmrMgr2->procVBlankIntr(); - - -// if (tp == rp) { -// GX_DisableBankForTex(); -// GX_SetBankForTex( tp ? GX_VRAM_TEX_0_D : GX_VRAM_TEX_0_C); -// GX_SetBankForLCDC(tp ? GX_VRAM_LCDC_C : GX_VRAM_LCDC_D); -// } - - OS_SetIrqCheckFlag(OS_IE_V_BLANK); // checking VBlank interrupt -} - -// static void CameraIntr2(void) -// { -// u32 nwp = wp; -// -// // ƃG[ĂȂǁc -// if (CAMERA_GetErrorStatus()) { -// OS_TPrintf("Error!\n"); -// CAMERA_StopCapture(); -// CAMERA_ClearBuffer(); -// MI_StopNDma(CAMERA_NEW_DMA_NO); -// CAMERA_StartCapture(); -// } else { -// if (MI_IsNDmaBusy(CAMERA_NEW_DMA_NO)) { -// static u32 count; -// OS_TPrintf("DMA was not done until VBlank.%d\n", count++); -// MI_StopNDma(CAMERA_NEW_DMA_NO); -// } else { -// if (reading) { -// re = TRUE; -// if (we) { -// we = FALSE; -// wp ^= 1; -// } -// } -// } -// } -// -// if (sLongDmaFlag) { -// sLongDmaFlag = FALSE; -// CAMERA_DmaRecvAsync(CAMERA_NEW_DMA_NO, buffer[nwp], CAMERA_GetBytesAtOnce(WIDTH), CAMERA_GET_FRAME_BYTES(WIDTH, HEIGHT + 1), /*(MINDmaCallback)NDmaDummyIntr*/NULL, NULL); -// } else { -// CAMERA_DmaRecvAsync(CAMERA_NEW_DMA_NO, buffer[nwp], CAMERA_GetBytesAtOnce(WIDTH), CAMERA_GET_FRAME_BYTES(WIDTH, HEIGHT), /*(MINDmaCallback)NDmaDummyIntr*/NULL, NULL); -// } -// reading = TRUE; -// -// -// // OS_SetIrqCheckFlag(OS_IE_CAMERA); // checking camera interrupt -// // -// // if (mError) { -// // CAMERA_ClearBuffer(); -// // mError = FALSE; -// // } else { -// // if (CAMERA_GetErrorStatus() -// // /*|| -// // (OS_GetIrqMask() & (OS_IE_NDMA0 << CAMERA_NEW_DMA_NO))*/) { -// // // error -// // OS_TPrintf("line %d %x\n", __LINE__, (OS_GetIrqMask() & (OS_IE_NDMA0 << CAMERA_NEW_DMA_NO))); -// // -// // CAMERA_StopCapture(); -// // MI_StopNDma(CAMERA_NEW_DMA_NO); -// // // OS_DisableIrqMask(OS_IE_NDMA0 << CAMERA_NEW_DMA_NO); -// // mError = TRUE; -// // return; -// // } -// // -// // if (mLastState == eStt_Capture) { -// // // OS_EnableIrqMask(OS_IE_NDMA0 << CAMERA_NEW_DMA_NO); -// // return; -// // } -// // } -// // -// // switch (mState) { -// // case eStt_Capture: -// // CAMERA_StartCapture(); -// // // reg_OS_IF = OS_IE_NDMA0 << CAMERA_NEW_DMA_NO; -// // // callbackw肵ȂƁAmi_ndma.c -// // // //---- set interrupt enable -// // // if ( callback ) -// // // { -// // // contData |= MI_NDMA_IF_ENABLE; -// // // } -// // // ƂȂĂ̂Ŋ荞݂ȂB -// // -// // // CAMERA_DmaRecvAsync(CAMERA_NEW_DMA_NO, buffer[0], CAMERA_GetBytesAtOnce(WIDTH), CAMERA_GET_FRAME_BYTES(WIDTH, HEIGHT), (MINDmaCallback)NDmaDummyIntr, NULL); -// // CAMERA_DmaRecvAsync(CAMERA_NEW_DMA_NO, buffer[0], CAMERA_GetBytesAtOnce(WIDTH), CAMERA_GET_FRAME_BYTES(WIDTH, HEIGHT), (MINDmaCallback)NDmaIntr, NULL); -// // break; -// // -// // default: -// // break; -// // } -// // -// // mLastState = mState; -// -// // DrawFPS(); -// } -// -// // static void NDmaIntr(void) -// // { -// // OS_SetIrqCheckFlag(OS_IE_NDMA0 << CAMERA_NEW_DMA_NO); -// // -// // if (mError) { -// // // captured data is broken -// // } else { -// // // ϊXbhɃbZ[W𑗂B -// // -// // mLastState = mState; -// // switch (mState) { -// // case eStt_Capture: -// // // \pLv`pB -// // CAMERA_DmaRecvAsync(CAMERA_NEW_DMA_NO, buffer[0], CAMERA_GetBytesAtOnce(WIDTH), CAMERA_GET_FRAME_BYTES(WIDTH, HEIGHT), (MINDmaCallback)NDmaIntr, NULL); -// // break; -// // -// // default: -// // // Ƃ肠ȊO̓Lv`~B -// // CAMERA_StopCapture(); -// // break; -// // } -// // OS_TPrintf("Send message!\n"); -// // -// // } -// // -// // // OS_DisableIrqMask(OS_IE_NDMA0 << CAMERA_NEW_DMA_NO); -// // } - -static void NDmaDummyIntr(void) -{ -// // camera-2/main.c: CameraDmaIntr()ŁAꂪsĂB -// // 𔲂̂܂Ȃł͂ȂB -// // OS_SetIrqCheckFlag(OS_IE_NDMA0 << CAMERA_NEW_DMA_NO); -// -// // camera-2/main.c: CameraDmaIntr()ŁAꂪsĂB -// // cIŃZbg֐́AHǂȂƂH -// // ACAMERA_DmaRecv*()callbackł͂ȂAʕȂ̂IH -// // callback͖line񂾂ˁH -// OS_SetIrqFunction(OS_IE_NDMA0 << CAMERA_NEW_DMA_NO, NDmaDummyIntr); // for next interrupt - -} - - -// /*---------------------------------------------------------------------------* -// Name: J荞ݏ (G[Vsync̗Ŕ) -// -// Description: -// -// Arguments: None -// -// Returns: None -// *---------------------------------------------------------------------------*/ -// void CameraIntr(void) -// { -// int nwp = 2; -// OS_SetIrqCheckFlag(OS_IE_CAMERA); // checking camera interrupt -// -// if (CAMERA_GetErrorStatus()) -// { -// OS_TPrintf("Error was occurred.\n"); -// // ~ -// CAMERA_StopCapture(); // J~ -// CAMERA_ClearBuffer(); // NA -// MI_StopNDma(CAMERA_NEW_DMA_NO); // DMA~ -// wp_pending = TRUE; // t[gp -// startRequest = TRUE; // JĊJv -// return; // waiting next frame (skip current frame) -// } -// -// // ȍ~Vsync̏ -// -// if (startRequest) -// { -// CAMERA_ClearBuffer(); -// CAMERA_StartCapture(); -// startRequest = FALSE; -// } -// -// if (CAMERA_IsBusy() == FALSE) // done to execute stop command? -// { -// //OS_TPrintf("while stopping the capture or just finished\n"); -// } -// else -// { -// if (MI_IsNDmaBusy(CAMERA_NEW_DMA_NO)) // NOT done to capture last frame? -// { -// OS_TPrintf("DMA was not done until VBlank.\n"); -// MI_StopNDma(CAMERA_NEW_DMA_NO); // DMA~ -// // return; // waiting next frame (skip current frame) -// } -// // start to capture for next frame -// if (wp_pending) -// { -// wp_pending = FALSE; -// } -// else -// { -// // XVobt@ύX -// if (we) { -// nwp = wp; -// wp ^= 1; -// we = FALSE; -// } -// -// // #ifdef CONVERT_WITH_DSP -// // // DSPɂYUV->RGBϊs -// // sNowConvert = TRUE; -// // DSP_Yuv2RgbConvertAsync(buffer[rp ^ 1], buffer[rp ^ 1], (WIDTH*HEIGHT*2), Yuv2rgbCallback); -// // #else -// // // CPUɂYUV->RGBϊs -// // DC_InvalidateRange( buffer[rp ^ 1], BYTES_PER_LINE * HEIGHT); -// // GX_SetBankForLCDC((rp ^ 1) ? GX_VRAM_LCDC_D : GX_VRAM_LCDC_C); -// // CpuYuv2Rgb666(buffer[rp ^ 1], (void *)((rp ^ 1) ? HW_LCDC_VRAM_D : HW_LCDC_VRAM_C), (u32)(WIDTH*HEIGHT) ); -// // CpuYuv2Rgb( buffer[rp ^ 1], buffer[rp ^ 1], (u32)(WIDTH*HEIGHT) ); -// // #endif -// } -// -// // CAMERA_DmaRecvAsync(CAMERA_NEW_DMA_NO, buffer[nwp], CAMERA_GetBytesAtOnce(WIDTH), CAMERA_GET_FRAME_BYTES(WIDTH, HEIGHT), NULL, NULL); -// // Ȃ -// // CAMERA_DmaRecvAsync(CAMERA_NEW_DMA_NO, buffer[nwp], CAMERA_GetBytesAtOnce(WIDTH)/LINES_SPLIT, CAMERA_GET_FRAME_BYTES(WIDTH, HEIGHT), NULL, NULL); -// // Ȃ́H -// // CAMERA_DmaRecvAsync(CAMERA_NEW_DMA_NO, buffer[nwp], CAMERA_GetBytesAtOnce(WIDTH), CAMERA_GET_FRAME_BYTES(WIDTH, HEIGHT), NULL, NULL); -// CAMERA_DmaRecvAsync(CAMERA_NEW_DMA_NO, buffer[nwp], CAMERA_GetBytesAtOnce(WIDTH), CAMERA_GET_FRAME_BYTES(WIDTH, HEIGHT), (MINDmaCallback)CameraIntr, NULL); -// } -// -// // frame rate print -// // 荞݂ł͉悤B -// // DrawFPS(); -// } - -/*---------------------------------------------------------------------------* - Name: PutString - - Description: - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -static void PutString( char *format, ... ) -{ - u16 *dest = text_buffer; - char temp[32+1]; - int i; - va_list va; - - va_start(va, format); - (void)OS_VSNPrintf(temp, sizeof(temp), format, va); - va_end(va); - - MI_CpuClearFast(text_buffer, sizeof(text_buffer)); - for (i = 0; i < 32 && temp[i]; i++) - { - dest[i] = (u16)((u8)temp[i] | (0 << 12)); - } - DC_StoreRange(text_buffer, sizeof(text_buffer)); -} - -/*---------------------------------------------------------------------------* - Name: DrawFPS - - Description: FPS\܂B - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -static void DrawFPS(void) -{ -#define FPS_SAMPLES 4 - static OSTick begin = 0; - static int uspf[FPS_SAMPLES] = { 0 }; - static int count = 0; - // 0123456789abcdef - static u8 star[16 + 1] = " "; - static u8 starIdx; - int i; - int sum = 0; - OSTick end = OS_GetTick(); - if (begin) // - { - uspf[count] = (int)OS_TicksToMicroSeconds(end - begin); - count = (count + 1) % FPS_SAMPLES; - } - begin = end; - // ϒl̎Z - for (i = 0; i < FPS_SAMPLES; i++) - { - if (uspf[i] == 0) break; - sum += uspf[i]; - } - star[starIdx] = ' '; - star[starIdx ^ 8] = ' '; - starIdx = (u8)((starIdx + 1) & 0xf); - star[starIdx] = '*'; - star[starIdx ^ 8] = '*'; - star[16] = '\0'; - if (1 || sum) - { - int mfps = (int)(1000000000LL * i / sum); - PutString("%2d.%03d fps %s", mfps / 1000, mfps % 1000, star); - } -} - -// /*---------------------------------------------------------------------------* -// Name: Yuv2rgbCallback -// -// Description: YUV->RGBϊɌĂяoR[obN -// -// Arguments: None -// -// Returns: None -// *---------------------------------------------------------------------------*/ -// static void Yuv2rgbCallback(void) -// { -// sNowConvert = FALSE; -// } -// -// - -// namespace cmn { namespace sys { namespace cmr2 -// { -// void* Manager::dspAlloc_( u32 size ) { -// #pragma unused(size) -// // this function must not be called by SDK -// OS_TPanic("dspAlloc_\n"); -// return NULL; -// } -// -// void Manager::dspFree_( void* p_ptr ) { -// #pragma unused(p_ptr) -// // this function is always called by SDK -// return; -// } -// -// }}} diff --git a/build/tests/yuv2rgb/src/menuCameraManager.cpp b/build/tests/yuv2rgb/src/menuCameraManager.cpp deleted file mode 100644 index 8db5e723..00000000 --- a/build/tests/yuv2rgb/src/menuCameraManager.cpp +++ /dev/null @@ -1,2453 +0,0 @@ -// TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECTɂ‚ -// `[ł͏ɖ`łB -// ̎茳ōsĂJɓJvWFNg -// \[Xp邽߁A֑gݍ܂鎞̂ݒ`܂B - -// cmnCameraManager.cpp֎ĂB - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#else -#include "menu.h" -//#include "cmnJpegManager.h" -#include "cmnFile.h" -//#include "cmnImageSampling.h" -#include "menuImageSampling.h" -#endif - - -#include -#include -#include "menuCameraManager.h" -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP -#include -#include -#else -#include -#include -#endif - -// #ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -// #else -// #ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP -// #include "menuDspManager.h" -// #endif -// #endif - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP -extern "C" { -// build/libraries/dsp/ARM9.TWL/src/dsp_jpeg_enc.c -extern u16 *DSPFrame_y; -extern u16 *DSPFrame_cb; -extern u16 *DSPFrame_cr; -} /* extern "C" */ -#endif - -#if SDK_VERSION_DATE < 20080630 -#else -/*! - JVsyncR[obN - */ -static void proc_camera_vsync_callback( CAMERAResult result ) -{ -#pragma unused( result ) -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - { - extern cmn::sys::cmr2::Manager* mpCmrMgr2; - mpCmrMgr2->procCameraIntr(); - } -#else - MenuSys()->getCmrMgr2()->procCameraIntr(); -#endif -} -#endif - -namespace cmn { namespace sys { namespace cmr2 -{ - vu8 Manager::mCaptureFlag; - vu8 Manager::mNextCaptureFlag; - vu8 Manager::mShotFlag; - vu8 Manager::mNextShotFlag; - vu8 Manager::mCurLedBlink; - volatile CAMERASelect Manager::mSelCmr; - volatile CAMERASelect Manager::mNextCmr; - volatile cameraState Manager::mCmrCurState[cCameraMax]; - volatile cameraState Manager::mCmrNextState[cCameraMax]; - OSMessage Manager::mI2cAsyncMsgBuf[1]; - OSMessageQueue Manager::mI2cAsyncMsgQueue; - -/*! - RXgN^ - */ -Manager::Manager() : -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - // no Heap -#else - mpHeap( NULL ), -#endif - mShowWdt( cDefaultShowWidth ), - mShowHgt( cDefaultShowHeight ), - mShotWdt( cDefaultShotWidth ), - mShotHgt( cDefaultShotHeight ), - mLedKeepFlag( FALSE ), - mOneShotFlag( FALSE ), - mEncodeBusyFlag( FALSE ), - mPreInitFlag( FALSE ), - mInitFlag( FALSE ), - mpCaptureBuf( NULL ), - mpConvBuf( NULL ), - mpNextConvBuf( NULL ), - mpShotBuf( NULL ), - mI2cBusy( FALSE ), - mTexSwap( FALSE ), - mTexBank( GX_VRAM_TEX_NONE ), - mNextTexBank( GX_VRAM_TEX_NONE ), - mpEncodeWork(NULL) -{ - u32 i; - - // manager default value - for (i = 0; i < cCameraMax; i++) { - mCmrNextState[i].mContext = CAMERA_CONTEXT_B; - // t[[gAJɕێĂB - mCmrNextState[i].mFrameRate = CAMERA_FRAME_RATE_20; - } - - for (i = 0; i < cBufferCount; i++) { - mIsCapBufUsed[i] = FALSE; - mpCapBuf[i] = NULL; - } - - mSelCmr = mNextCmr = CAMERA_SELECT_NONE; - mCaptureFlag = mNextCaptureFlag = mShotFlag = mNextShotFlag = FALSE; - mCurLedBlink = FALSE; - - // ͂̃^C~OŊmɍsĂB - OS_InitEvent(&mLowerEvent); - - setCaptureRgbFlag( FALSE ); - -// TwlSDK/build/libraries/mi/common.TWL/src/mi_ndma.c: -// #define CAMERA_DMA_BLOCK_SIZE MI_NDMA_BWORD_16 -// #define CAMERA_DMA_INTERVAL 2 -// #define CAMERA_DMA_PRESCALER MI_NDMA_INTERVAL_PS_1 - MI_GetNDmaConfig(cDefaultDmaNo, &mDmaConfig); - mDmaConfig.intervalTimer = 2; // CAMERA_DMA_INTERVAL - mDmaConfig.prescaler = MI_NDMA_INTERVAL_PS_1; // CAMERA_DMA_PRESCALER; - // blockWord16jackal (hyena)gp̏A - // yuv2rgbɂāA32Ȃ64Ƃ̍͊ȂB - // `[֑gݍł݂ƁA3264̕ȂB - // 64ɂB - mDmaConfig.blockWord = MI_NDMA_BWORD_16; // MI_NDMA_BWORD_64; // CAMERA_DMA_BLOCK_SIZE; - -} - - -/*! - fXgN^ - */ -Manager::~Manager() -{ - while (!tryDestroy()) { - OS_Sleep(1); - } -} - - -/*! - JsB - ̊IȃJNԂZk邽߁A{̎O - (q[vKvƂȂ)܂ōsB - J̓X^oCɁB - Ă΂ȂĂǂB - */ -void Manager::preInit( u32 show_w, u32 show_h, u32 shot_w, u32 shot_h ) -{ - // preInit()͕ӏĂ΂Ăǂ悤ɂĂB - { - OSIntrMode enabled = OS_DisableInterrupts(); - - if (mPreInitFlag) { - OS_RestoreInterrupts(enabled); - return; - } - mPreInitBusyFlag = TRUE; - mPreInitFlag = TRUE; - OS_RestoreInterrupts(enabled); - } - - mShowWdt = show_w; - mShowHgt = show_h; - mShotWdt = shot_w; - mShotHgt = shot_h; - -// setShutterSnd(NULL, 0, FALSE); - - // ȌIvcĂ邩ȂB - // vȊOACxg̓NAĂB - OS_ClearEvent(&mLowerEvent, (u32)(cEventMaskLower_All & ~cEventMaskLower_EnableIntrAndPrepareBuffer)); - - OS_InitMessageQueue(&mI2cMsgQueue, mI2cMsgBuf, sizeof(mI2cMsgBuf) / sizeof(*mI2cMsgBuf)); - OS_InitMessageQueue(&mI2cAsyncMsgQueue, mI2cAsyncMsgBuf, sizeof(mI2cAsyncMsgBuf) / sizeof(*mI2cAsyncMsgBuf)); - OS_CreateThread(&mLowerThread, procLower_, this, - mLowerThreadStack + (sizeof(mLowerThreadStack) / sizeof(*mLowerThreadStack)), - sizeof(mLowerThreadStack), - menu::sys::Object::cThreadPriority_CameraLowerLo); - OS_CreateThread(&mI2cThread, procI2c_, this, - mI2cThreadStack + (sizeof(mI2cThreadStack) / sizeof(*mI2cThreadStack)), - sizeof(mI2cThreadStack), - menu::sys::Object::cThreadPriority_CameraI2c); - OS_WakeupThreadDirect(&mLowerThread); - OS_WakeupThreadDirect(&mI2cThread); -} - - -/*! - JCȕ - @param p_heap q[v - @param mode \[h - @param sel_cmr IꂽJ - @param vram1 _uobt@VRAM1 - @param vram2 _uobt@VRAM2 - @param show_w \ (Ƃ肠208̂) - @param show_h \ (Ƃ肠156̂) - @param shot_w Be (Ƃ肠640̂) - @param shot_h Be (Ƃ肠480̂) - */ -void Manager::init( -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - // no Heap -#else - sys::Heap* p_heap , -#endif - int mode , CAMERASelect sel_cmr , int vram1 , int vram2 , - cmn::sys::cmr2::dtcmWork* pDtcmWork , - void (*gx_user_proc)(u8* vramAddr, BOOL shot) , - u32 show_w , u32 show_h , u32 shot_w , u32 shot_h ) -{ - if (mInitFlag) { - return; - } - mInitBusyFlag = TRUE; - mInitFlag = TRUE; - - preInit(show_w, show_h, shot_w, shot_h); - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - // no Heap -#else - mpHeap = p_heap; -#endif - - mpDtcmWork = pDtcmWork; - mTarget = 0; - mpCaptureBuf = NULL; - mpConvBuf = NULL; - mpNextConvBuf = NULL; - mpShotBuf = NULL; - // ŏɏ̂vram1ŁAłɏς݂̂̂vram2 - // ƂB - mTexBank = GXVRamTex(vram2); - mNextTexBank = 0; - mCaptureFlag = FALSE; - mShotFlag = FALSE; - mNextCaptureFlag = FALSE; - mNextShotFlag = FALSE; - mShotDone = FALSE; - mShotErr = 0; - mpGxUserProc = gx_user_proc; -#ifndef TWL_IPL_FINAL - mDebugPort = 0; -#endif - - mTexSwap = FALSE; - mFirstPictureReady = FALSE; - - mCaptureSkipCount = 0; - mCaptureRetryCount = 0; - - mVramType[ 0 ] = vram1; - mVramType[ 1 ] = vram2; - - // vram2 == 0 ȂVOobt@ɂ΂̂ł́H - for ( int i = 0 ; i < 2; ++ i ) - { - switch ( mVramType[ i ] ) - { - case GX_VRAM_A: mVramAddr[ i ] = reinterpret_cast< u8* > ( HW_LCDC_VRAM_A ); break; - case GX_VRAM_B: mVramAddr[ i ] = reinterpret_cast< u8* > ( HW_LCDC_VRAM_B ); break; - case GX_VRAM_C: mVramAddr[ i ] = reinterpret_cast< u8* > ( HW_LCDC_VRAM_C ); break; - case GX_VRAM_D: mVramAddr[ i ] = reinterpret_cast< u8* > ( HW_LCDC_VRAM_D ); break; - case GX_VRAM_E: mVramAddr[ i ] = reinterpret_cast< u8* > ( HW_LCDC_VRAM_E ); break; - case GX_VRAM_F: mVramAddr[ i ] = reinterpret_cast< u8* > ( HW_LCDC_VRAM_F ); break; - case GX_VRAM_G: mVramAddr[ i ] = reinterpret_cast< u8* > ( HW_LCDC_VRAM_G ); break; - case GX_VRAM_H: mVramAddr[ i ] = reinterpret_cast< u8* > ( HW_LCDC_VRAM_H ); break; - case GX_VRAM_I: mVramAddr[ i ] = reinterpret_cast< u8* > ( HW_LCDC_VRAM_I ); break; - default: IPL_ASSERT( 0 ); break; - } - } - - mMode = mode; - mNextCmr = sel_cmr; - - mGxDma = GX_GetDefaultDMA(); - // GXDMAgȂ (DMA̓JDMA̎זɂȂ) - // ŁA–߂́H - GX_SetDefaultDMA(GX_DMA_NOT_USE); - - OS_SignalEvent(&mLowerEvent, - cEventMaskLower_EnableIntrAndPrepareBuffer); -} - - -void Manager::procLower() -{ - u32 event; - BOOL initDone = FALSE; - CAMERAResult camResult; - u32 i; - BOOL shot; - - while (TRUE) { - if (!initDone) { -#if SDK_VERSION_DATE < 20080630 - // CAMERACuĂȂƂOȂ̂ŁA - // setInterrupt()͎gȂB - OS_DisableIrqMask(OS_IE_CAMERA); -#else - // OS_IE_CAMERACAMERACunhOB -#endif - // d̂ŒDxŁB - camResult = CAMERA_Init(); - if (camResult != CAMERA_RESULT_SUCCESS) { - // Ƃ肠 - IPL_HALT("CAMERA_Init() error %d\n", camResult); - OS_TPanic(""); - // NEVER REACH HERE - } - initDone = TRUE; - - // SDK default value - mSelCmr = CAMERA_SELECT_NONE; - for (i = 0; i < cCameraMax; i++) { - mCmrCurState[i].mContext = CAMERA_CONTEXT_A; - mCmrCurState[i].mFrameRate = CAMERA_FRAME_RATE_15; - } - mCurLedBlink = FALSE; - // I2Ceݒ胊NGXgMB - // DxXbhAsyncB - OS_SendMessage(&mI2cMsgQueue, (OSMessage)cMsgI2c_AfterInit, OS_MESSAGE_BLOCK); - } - - event = OS_WaitEventEx_Or(&mLowerEvent, cEventMaskLower_All, cEventMaskLower_All); -// IPL_PRINT("event=0x%02x\n", event); - - if (event & cEventMaskLower_Destroy) { - break; - } - if (event & cEventMaskLower_EnableIntrAndPrepareBuffer) { - // J荞݂LɂB - setInterrupt(TRUE); - prepareBuffer(); - // ͏IB - mInitBusyFlag = FALSE; - } - if (event & cEventMaskLower_Activate) { - if (mSelCmr == CAMERA_SELECT_NONE && mNextCmr != CAMERA_SELECT_NONE) { - // CAMERA_SELECT_NONEݒ莞́ACAM_VSYNC͔Ȃ̂ - // kickB - // JNt[̊Ԃ͉摜肵Ȃ̂ŃLv`~B - mCaptureSkipCount = 1; - OS_SendMessage(&mI2cMsgQueue, (OSMessage)cMsgI2c_Activate, OS_MESSAGE_BLOCK); - } - } - shot = FALSE; - if ((event & cEventMaskLower_Convert) || mpNextConvBuf) { - shot = convert((BOOL)(event & cEventMaskLower_Shot)); - } - if (shot) { - // ϊȂŎBê݂ƂA - // BeɃLv`p邱Ƃɂ́A܂ΉĂȂB - mEncodeBusyFlag = TRUE; - encodeAndSave(); - mEncodeBusyFlag = FALSE; - } - if (event & cEventMaskLower_DisableIntrAndDestroyBuffer) { - // ̃Cxg͘A”\B - if (mInitFlag) { - // J荞݂𖳌ɂB - setInterrupt(FALSE); - destroyBuffer(); - MI_StopNDma(cDefaultDmaNo); - // ďKvB - mInitFlag = FALSE; - } - } - } - - // I2CXbhI (BLOCK) - OS_SendMessage(&mI2cMsgQueue, (OSMessage)cMsgI2c_Destroy, OS_MESSAGE_BLOCK); - OS_JoinThread(&mI2cThread); - - CAMERA_End(); - - GX_SetDefaultDMA(mGxDma); -} - - -void Manager::procI2c() -{ - OSMessage msg; - CAMERAResult camResult; - - while (TRUE) { - OS_ReceiveMessage(&mI2cMsgQueue, &msg, OS_MESSAGE_BLOCK); -// IPL_PRINT("I2c msg=%d\n", msg); - if (!msg) { - break; - } - - mI2cBusy = TRUE; - - switch ((u32)msg) { - case cMsgI2c_AfterInit: - CAMERA_SetOutputFormat(mCaptureRgbFlag ? CAMERA_OUTPUT_RGB : CAMERA_OUTPUT_YUV); - CAMERA_SetTrimming(FALSE); - // TrimmingFALSEȂ̂TrimmingParams͖B - mShowTransferLines = (int)CAMERA_GET_MAX_LINES(mShowWdt); - mShotTransferLines = (int)CAMERA_GET_MAX_LINES(mShotWdt); - // ͉𑜓x؂ւłȂ̂ŁAmShowWdtȂmShotWdtŁB - CAMERA_SetTransferLines(mShotTransferLines); - - camResult = i2cSetupOthers(); - // ʂ͂ƂAs͏IB - mPreInitBusyFlag = FALSE; - if (camResult != CAMERA_RESULT_SUCCESS) { - // ܂B - IPL_HALT("not yet %d\n", camResult); - // TWL_IPL_FINALł̓X[[ - OS_TPanic(""); - } - - break; - - case cMsgI2c_Activate: - camResult = i2cActivate(mNextCmr); - if (camResult != CAMERA_RESULT_SUCCESS) { - // ܂B - IPL_HALT("not yet %d\n", camResult); - // TWL_IPL_FINALł̓X[[ - OS_TPanic(""); - } - - break; - - case cMsgI2c_ChangeLedToOn: - case cMsgI2c_ChangeLedToBlink: - camResult = i2cLed( ((u32)msg == cMsgI2c_ChangeLedToBlink) ); - if (camResult != CAMERA_RESULT_SUCCESS) { - // ܂B - IPL_HALT("not yet %d\n", camResult); - // TWL_IPL_FINALł̓X[[ - OS_TPanic(""); - } - - break; - - default: - IPL_HALT("unknown msg %d\n", msg); - // TWL_IPL_FINALł̓X[[ - break; - } - - mI2cBusy = FALSE; - } -} - - -// DxXbĥ݌Ă΂邱Ƃz肵Ă̂Ŕr䂵ȂB -CAMERAResult Manager::i2cCommon(u32 type, CAMERASelect sel_cmr) -{ - union { - CAMERAResult result; - OSMessage msg; - } u = { - (CAMERAResult)(-1) // CAMERAResult͔񕉂Ȃ̂ŁA̒lԂ~XB - }; - const volatile cameraState* pNextState = &mCmrNextState[isOutCamera(sel_cmr)]; - u32 retryCount = 0; - - // cI2cCommon_Activatê݁ACAMERA_SELECT_NONE󂯕tB - // ǂȂƂACAMERA_SELECT_BOTH͎󂯕tȂB - if (sel_cmr == CAMERA_SELECT_NONE && - type != cI2cCommon_Activate) { - IPL_HALT("error: CAMERA_SELECT_NONE for type %d\n", type); - return (CAMERAResult)(-2); - } - - while (TRUE) { - switch (type) { - case cI2cCommon_Activate: - u.result = CAMERA_I2CActivateAsync(sel_cmr, i2cActivateCallback, (void*)sel_cmr); - break; - - case cI2cCommon_FrameRate: - u.result = CAMERA_I2CFrameRateAsync(sel_cmr, pNextState->mFrameRate, i2cFrameRateCallback, (void*)sel_cmr); - break; - - case cI2cCommon_ContextSwitch: - u.result = CAMERA_I2CContextSwitchAsync(sel_cmr, pNextState->mContext, i2cContextSwitchCallback, (void*)sel_cmr); - break; - - // I2CȂ - case cI2cCommon_LedOn: - case cI2cCommon_LedBlink: - u.result = CAMERA_SetLEDAsync( (type == cI2cCommon_LedBlink), i2cLedCallback, (void*)(type == cI2cCommon_LedBlink)); - break; - - default: - IPL_HALT("unknown type(1) %d sel_cmr %d\n", type, sel_cmr); - // TWL_IPL_FINALł̓X[[ - break; - } - - if (u.result == CAMERA_RESULT_BUSY) { - IPL_PRINT("CAMERA_RESULT_BUSY type %d retry %d\n", type, retryCount); - retryCount++; - if (retryCount < cI2cRetryMax) { - OS_Sleep(cI2cRetryIntervalMsec); - continue; - } - } - break; - } - - if (u.result == CAMERA_RESULT_SUCCESS) { - OS_ReceiveMessage(&mI2cAsyncMsgQueue, &u.msg, OS_MESSAGE_BLOCK); - if (u.result != CAMERA_RESULT_SUCCESS) { - IPL_HALT("I2cAsyncCommon error: result %d for type %d sel_cmr %d\n", u.result, type, sel_cmr); - // TWL_IPL_FINALł̓X[[ - } - } else { - IPL_HALT("I2cAsyncCommon error: result %d for type %d sel_cmr %d\n", u.result, type, sel_cmr); - // TWL_IPL_FINALł̓X[[ - } - - return u.result; -} - - -// ̃Jɂ‚āAReLXg؂ւA -// ReLXgŕێȂݒsB -// (mNextCmr == CAMERA_SELECT_NONE)̏ꍇɂ̂݃X^oCɂB -// ȊOł̓J̖IȋN͂ȂB -CAMERAResult Manager::i2cSetupOthers() -{ - CAMERAResult result = CAMERA_RESULT_SUCCESS; - CAMERASelect sel_cmr; - u32 i; - - if (mNextCmr == CAMERA_SELECT_NONE) { - // ɃX^oCɂB - result = i2cActivate(mNextCmr); - // X^oCɂĂA̐ݒ𑱂B - } - - for (i = 0; i < cCameraMax; i++) { - sel_cmr = indexToCameraSelect(i); - - if (result == CAMERA_RESULT_SUCCESS) { - // ǂ̃ReLXg֐؂ւH - if (mCmrNextState[i].mContext == CAMERA_CONTEXT_A) { - // t[[g͌ォύX(オ邩Ȃ) - result = i2cContextSwitch(sel_cmr); - if (result == CAMERA_RESULT_SUCCESS) { - result = i2cFrameRate(sel_cmr); - } - } else { - // t[[g͐ɕύX(邩Ȃ) - result = i2cFrameRate(sel_cmr); - if (result == CAMERA_RESULT_SUCCESS) { - result = i2cContextSwitch(sel_cmr); - } - } - } - } - - return result; -} - - -#if SDK_VERSION_DATE < 20080630 -void Manager::setInterrupt(BOOL enable) -{ - OS_DisableIrqMask(OS_IE_CAMERA); - - CAMERA_SetMasterInterrupt(enable); - if (enable) { - // ŃJ荞݂͋֎~ɂȂĂ̂ - // mIntrPositiveEdgȇ荞݋֎~ɂ͂ȂB - mIntrPositiveEdge = FALSE; - // almost begin of vblank - CAMERA_SetVsyncInterrupt(CAMERA_INTR_VSYNC_NEGATIVE_EDGE); - CAMERA_SetBufferErrorInterrupt(FALSE); - CAMERA_ClearBuffer(); - OS_ResetRequestIrqMask(OS_IE_CAMERA); - OS_EnableIrqMask(OS_IE_CAMERA); - } -} -#else -// OS_IE_CAMERACAMERACunhOB -void Manager::setInterrupt(BOOL enable) -{ - CAMERA_SetVsyncCallback( NULL ); - if (enable) { - CAMERA_ClearBuffer(); - CAMERA_SetVsyncCallback( proc_camera_vsync_callback ); - } -} -#endif - - -CAMERAResult Manager::i2cActivate(CAMERASelect sel_cmr) -{ - return i2cCommon(cI2cCommon_Activate, sel_cmr); -} - -CAMERAResult Manager::i2cFrameRate(CAMERASelect sel_cmr) -{ - return i2cCommon(cI2cCommon_FrameRate, sel_cmr); -} - -CAMERAResult Manager::i2cContextSwitch(CAMERASelect sel_cmr) -{ - return i2cCommon(cI2cCommon_ContextSwitch, sel_cmr); -} - -CAMERAResult Manager::i2cLed(BOOL isBlink) -{ - return i2cCommon(isBlink ? cI2cCommon_LedBlink : cI2cCommon_LedOn, CAMERA_SELECT_OUT); -} - -void Manager::i2cCommonAsyncCallback(CAMERAResult result, void *arg) -{ -#ifdef TWL_IPL_FINAL -#pragma unused(arg) -#endif - // ̃R[obNĂ΂OɃbZ[Wobt@͋ - // ȂĂ͂B - if (!OS_SendMessage(&mI2cAsyncMsgQueue, (OSMessage)result, OS_MESSAGE_NOBLOCK)) { - IPL_HALT("mI2cAsyncMsgQueue full! arg %d\n", arg); - // TWL_IPL_FINALł̓X[[ - } -} - -void Manager::i2cActivateCallback(CAMERAResult result, void *arg) -{ - if (result == CAMERA_RESULT_SUCCESS) { - mSelCmr = (CAMERASelect)arg; - } - i2cCommonAsyncCallback(result, arg); -} - -void Manager::i2cFrameRateCallback(CAMERAResult result, void *arg) -{ - if (result == CAMERA_RESULT_SUCCESS) { - mCmrCurState[isOutCamera((CAMERASelect)arg)].mFrameRate = - mCmrNextState[isOutCamera((CAMERASelect)arg)].mFrameRate; - } - i2cCommonAsyncCallback(result, arg); -} - -void Manager::i2cContextSwitchCallback(CAMERAResult result, void *arg) -{ - if (result == CAMERA_RESULT_SUCCESS) { - mCmrCurState[isOutCamera((CAMERASelect)arg)].mContext = - mCmrNextState[isOutCamera((CAMERASelect)arg)].mContext; - } - i2cCommonAsyncCallback(result, arg); -} - -void Manager::i2cLedCallback(CAMERAResult result, void *arg) -{ - if (result == CAMERA_RESULT_SUCCESS) { - // P(u8)argƂƁA - // Warning: integral type is not large enough to hold pointer - // ƌB - mCurLedBlink = (u8)((BOOL)arg); - } - i2cCommonAsyncCallback(result, arg); -} - - -void Manager::prepareBuffer() -{ -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#else -#ifdef TWL_IPL_USE_RED_IPL - MenuSys()->getRedIplMgr()->UseScratchHeaps(TRUE); -#endif -#endif - - for (u32 i = 0; i < cBufferCount; i++) { - mpCapBuf[i] = -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - new u16 [ cPhotoWidth * cPhotoHeight ]; -#else -#ifdef TWL_IPL_USE_RED_IPL - (u16*)MenuSys()->getRedIplMgr()->allocCameraCaptureScratchBuffer(cPhotoWidth * cPhotoHeight * sizeof(u16)); -#else - new( mpHeap ) u16 [ cPhotoWidth * cPhotoHeight ]; -#endif -#endif - IPL_ASSERT( mpCapBuf[i] ); - IPL_PRINT("mpCapBuf[%d]=%x\n", i, mpCapBuf[i]); - } - - mpEncodeWork = -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP - new encodeWork; -#else - new u8 [ SSP_JpegEncoderGetBufferSize(cPhotoWidth, cPhotoHeight, cEncodeSampling, mEncodeOption) ]; -#endif -#else -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP -#ifdef TWL_IPL_USE_RED_IPL - (encodeWork*)MenuSys()->getRedIplMgr()->allocJpegEncodeScratchBuffer(sizeof(encodeWork)); -#else - new ( mpHeap ) encodeWork; -#endif -#else -#ifdef TWL_IPL_USE_RED_IPL - (u8*)MenuSys()->getRedIplMgr()->allocJpegEncodeScratchBuffer(SSP_JpegEncoderGetBufferSize(cPhotoWidth, cPhotoHeight, cEncodeSampling, mEncodeOption)); -#else - new ( mpHeap ) u8 [ SSP_JpegEncoderGetBufferSize(cPhotoWidth, cPhotoHeight, cEncodeSampling, mEncodeOption) ]; -#endif -#endif -#endif - IPL_ASSERT( mpEncodeWork ); - - IPL_PRINT("mpEncodeWork=%x\n", mpEncodeWork); - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - mpEncodeResult = new u8 [ cEncodeResultSizeMax ]; IPL_ASSERT( mpEncodeResult ); -#endif - - // invalidate capture buffers - DC_FlushAll(); -} - -void Manager::destroyBuffer() -{ - // gpłɔjB - IPL_ASSERT( !mpCaptureBuf ); - IPL_ASSERT( !mpConvBuf ); - IPL_ASSERT( !mpNextConvBuf ); - IPL_ASSERT( !mpShotBuf ); - - mpCaptureBuf = NULL; - mpConvBuf = NULL; - mpNextConvBuf = NULL; - mpShotBuf = NULL; - - { - OSIntrMode enabled = OS_DisableInterrupts(); - - for (u32 i = 0; i < cBufferCount; i++) { - IPL_ASSERT( !mIsCapBufUsed[i] ); - mIsCapBufUsed[i] = FALSE; - if (mpCapBuf[i]) { -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - delete [] mpCapBuf[i]; -#else -#ifdef TWL_IPL_USE_RED_IPL - MenuSys()->getRedIplMgr()->freeCameraCaptureScratchBuffer(mpCapBuf[i]); -#else - delete [] mpCapBuf[i]; -#endif -#endif - mpCapBuf[i] = NULL; - } - } - - if (mpEncodeWork) { -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP - delete mpEncodeWork; -#else - delete [] mpEncodeWork; -#endif -#else -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP -#ifdef TWL_IPL_USE_RED_IPL - MenuSys()->getRedIplMgr()->freeJpegEncodeScratchBuffer(mpEncodeWork); -#else - delete mpEncodeWork; -#endif -#else -#ifdef TWL_IPL_USE_RED_IPL - MenuSys()->getRedIplMgr()->freeJpegEncodeScratchBuffer(mpEncodeWork); -#else - delete [] mpEncodeWork; -#endif -#endif -#endif - mpEncodeWork = NULL; - } - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - if (mpEncodeResult) { - delete [] mpEncodeResult; - mpEncodeResult = NULL; - } -#endif - - OS_RestoreInterrupts(enabled); - } - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#else -#ifdef TWL_IPL_USE_RED_IPL - MenuSys()->getRedIplMgr()->UseScratchHeaps(FALSE); -#endif -#endif - -} - -// (mpNextConvBuf != NULL) ̏ꍇɂ̂݌Ă΂B -void Manager::useNextConvBuf() -{ - OSIntrMode enabled = OS_DisableInterrupts(); - - if (mpConvBuf) { - freeCapBufByPtr((u16*)mpConvBuf); - } - mpConvBuf = mpNextConvBuf; - mpNextConvBuf = NULL; - OS_RestoreInterrupts(enabled); - - // invalidate capture buffers - DC_FlushAll(); - - IPL_PRINT("using NextConvBuf\n"); -} - -BOOL Manager::convert(BOOL shot) -{ - // ϊȂŎBê݂ƂA - // BeɃLv`p邱Ƃɂ́A܂ΉĂȂB - if (!mpConvBuf && !mpNextConvBuf) { - IPL_HALT("(!mpConvBuf && !mpNextConvBuf)\n"); - // TWL_IPL_FINALł̓X[[ - - return FALSE; - } - - while (mTexSwap || - mTexBank == mVramType[mTarget]) { - // ϊʏo͐VRAMLCDC֊蓖ĂȂ̂ŁA - // sleepB - // ܂XbhENDNGXg̃`FbNĂȂ̂ŁA - // Iɂ͂܂Ȃ悤ӁB - OS_Sleep(1); - } - mNextTexBank = mVramType[mTarget]; - GX_SetBankForLCDC( mNextTexBank ); - - if (mpNextConvBuf) { - // Bef[^݁B - // mpConvBuf͔jB - useNextConvBuf(); - shot = TRUE; - } - - // Lv`ς݃f[^invalidate͍ςłB -retry: - Shrink640Yuv422To256Rgb555(const_cast(mpConvBuf), mVramAddr[mTarget], mShotHgt, mpDtcmWork->mShrinkBuf); - - // łmpNextConvBuf`FbNB - if (mpNextConvBuf) { - // Bef[^݁B - // mpConvBuf͔jB - useNextConvBuf(); - shot = TRUE; - goto retry; - } - - // XbhDxʏ荂B - OS_SetThreadPriority(OS_GetCurrentThread(), menu::sys::Object::cThreadPriority_CameraLowerHi); - { - OSIntrMode enabled = OS_DisableInterrupts(); - - procPostConvert(shot); - - OS_RestoreInterrupts(enabled); - } - - if (mMode == eMode_BG) { - mTexSwap = TRUE; - } else { - // eMode_Tex - if (mpGxUserProc) { - mpGxUserProc(mVramAddr[mTarget], shot); - } - } - - mTarget ^= 1; - - OS_SetThreadPriority(OS_GetCurrentThread(), menu::sys::Object::cThreadPriority_CameraLowerLo); - - if (!shot) { - // invalidate capture buffer for next capture - DC_FlushAll(); - } - - return shot; -} - -/*! - J}l[WSI - */ -BOOL Manager::tryDestroy() -{ - // X[v”\ȏ܂ő҂B - if (!tryPrepareToSleep()) { - return FALSE; - } - - if (mInitFlag) { - OS_SignalEvent(&mLowerEvent, - cEventMaskLower_DisableIntrAndDestroyBuffer); - return FALSE; - } else { - if (mPreInitFlag) { - OS_SignalEvent(&mLowerEvent, - cEventMaskLower_Destroy); - - if (OS_IsThreadTerminated(&mLowerThread)) { - // ĐsKvB - mPreInitFlag = FALSE; - return TRUE; - } - return FALSE; - } - } - return TRUE; -} - - -void Manager::activate() -{ - startCapture(mNextCmr); -} - - -void Manager::startCapture(CAMERASelect sel_cmr) -{ - mNextCmr = sel_cmr; - mNextCaptureFlag = TRUE; - // CAMERA_Init()̏ĂȂȂ̂ - // ȂI2Cv̑M͂łȂB - OS_SignalEvent(&mLowerEvent, cEventMaskLower_Activate); -} - - -// TRUEԂ΁ABevB -// FALSEȂAsB(BerŎ̎BeȂ) -BOOL Manager::shoot(BOOL keepCapture) -{ - OSIntrMode enabled; - - // Ƃ肠A˂͖B - // Beɂ͎Ԃ̂ŁABeۑ(!mCaptureFlag)ȂBeȂB - if (mNextShotFlag || mShotFlag || !mCaptureFlag) { - return FALSE; - } - - // OJLED(__)́AȂׂLED - // (cf荞ނ̂h)߁AōsB - // OJɐ؂ւvoĂŕA܂JȂ̂łłȂB - // CAMERA_RESULT_ILLEGAL_STATUS (6) ԂB - // ǂ݂AJ؂ւ̓s{P̂1t[҂ - // ƂɂȂ邵AłLEDsȂB - - enabled = OS_DisableInterrupts(); - - if (!keepCapture) { - mNextCaptureFlag = FALSE; - } - mNextShotFlag = TRUE; - - OS_RestoreInterrupts(enabled); - - return TRUE; -} - -BOOL Manager::tryPrepareToSleep() -{ - stopCapture(); - - if (// sȂ_B - (mPreInitFlag && mPreInitBusyFlag) || - // Ȃ_B - (mInitFlag && mInitBusyFlag) || - // Lv`Ȃ_B - mCaptureFlag || - mNextCaptureFlag || - mpCaptureBuf || - // ϊȂ_B - mpConvBuf || - mpNextConvBuf || - // BeȂ_B - mShotFlag || - mNextShotFlag || - mpShotBuf || - // Vb^[ĐȂ_B -// (!isFinishedShutterSnd()) || - // ۑȂ_B - mEncodeBusyFlag || - // I2CȂ_B - mI2cBusy) { - return FALSE; - } - - if (mSelCmr != CAMERA_SELECT_NONE || - mNextCmr != CAMERA_SELECT_NONE) { - // JNȂ_B - mNextCmr = CAMERA_SELECT_NONE; - return FALSE; - } - - return TRUE; -} - -#include - -// pDtcmɂu32[256*2] (2048 Bytes)̍Ɨ̈悪KvłB -// Ɨ̈DTCMȊÕ蓖Ăꍇɂ -// ptH[}X傫ቺ”\܂B -// little endian only -asm void Manager::Shrink640Yuv422To256Rgb555( register const void* src, register void* dst, register u32 height, register void* pDtcm ) -{ -#define ORIGINAL_WIDTH 640 -#define SHRINK_WIDTH 256 // must be even -#define SHRINK_TMP_BYTES_PER_PIXEL 4 -#define SHRINK_TMP_HEIGHT 2 -// loopCounters bits: -// d31-d25: (64 x 2) loop counter -// (d31-d24: dst loop counter) -// d23-d22: (2 or 3) loop counter -// d09-d00: height loop counter (0-511) << 1 -#define LOOP_COUNTERS_INNER_SHIFT 25 -#define LOOP_COUNTERS_DST_SHIFT 24 -#define LOOP_COUNTERS_ODD_LINE_SHIFT 22 -#define LOOP_COUNTERS_ODD_LINE_MASK_SHIFT 23 -#define LOOP_COUNTERS_HEIGHT_BIT_WIDTH 10 -// registers -// keep stack frame 8-Bytes aligned -#define SAVE_REGS r3-r11,lr -#define loopCounters height - -// keep order for ldm/stm -#define t0 r12 -#define t1 lr -#define yuyv0 r4 -#define yuyv1 r5 -#define yuyv2 r6 -#define yuyv3 r7 -#define uv r8 - -#define CONST_REGS0 r9 -#define const_0x01fe01fe r9 - -// yuv2rgb -#define y0 yuyv0 -#define y1 yuyv1 -#define rgba yuyv2 -#define const_0x80008000 const_0x01fe01fe -#define CONST_REGS1 const_H1_402_L1_772,const_Hm0_344_Lm0_714 -#define const_H1_402_L1_772 r10 -#define const_Hm0_344_Lm0_714 r11 - - // keep 8-Bytes aligned - stmfd sp!, {SAVE_REGS} - - ldr t0, =@constants1 - ldr const_0x01fe01fe, =0x01fe01fe - ldmia t0, {CONST_REGS1} - - // height << 1 and adjust loop counter - mov loopCounters, height, lsl #1 - sub loopCounters, loopCounters, #1 - -@480: - // (480/2.5) = 192 loops - -@640: - // (64 x 2) loops - -@64: - ldmia src!, {yuyv0, yuyv1, yuyv2, yuyv3, uv} - - and t0, const_0x01fe01fe, yuyv0, lsr #7 - and t1, const_0x01fe01fe, yuyv1, lsr #7 - and yuyv0, const_0x01fe01fe, yuyv0, lsl #1 - and yuyv1, const_0x01fe01fe, yuyv1, lsl #1 - add yuyv0, yuyv0, yuyv0, lsl #16 - mov yuyv0, yuyv0, lsr #16 - add yuyv1, yuyv1, yuyv1, lsr #16 - orr yuyv0, yuyv0, yuyv1, lsl #16 // ave. y << 1 - add yuyv1, t0, t1 // ave. uv << 1 - - and t0, const_0x01fe01fe, yuyv2, lsr #7 - and t1, const_0x01fe01fe, yuyv3, lsr #7 - add t1, t1, t0, lsr #1 - and t0, const_0x01fe01fe, uv, lsr #7 - - and yuyv2, const_0x01fe01fe, yuyv2, lsr #16-1 - and yuyv3, const_0x01fe01fe, yuyv3, lsl #1 - add yuyv2, yuyv2, yuyv3 - and uv, const_0x01fe01fe, uv, lsl #16+1 - add yuyv2, yuyv2, uv // ave. y << 1 - - add yuyv3, t1, t0, lsr #1 // ave. uv << 1 - - stmia pDtcm!, {yuyv0, yuyv1, yuyv2, yuyv3} - - adds loopCounters, loopCounters, #1 << LOOP_COUNTERS_INNER_SHIFT - bcc @64 - - sub pDtcm, pDtcm, #SHRINK_TMP_BYTES_PER_PIXEL * SHRINK_WIDTH * SHRINK_TMP_HEIGHT - ldr const_0x80008000, =0x80008000 -@yuv2rgb_loop: - ldmia pDtcm!, {y1, uv} - ldr t0, [pDtcm, #SHRINK_WIDTH * SHRINK_TMP_BYTES_PER_PIXEL * 1 - SHRINK_TMP_BYTES_PER_PIXEL * 2] - ldr t1, [pDtcm, #SHRINK_WIDTH * SHRINK_TMP_BYTES_PER_PIXEL * 1 - SHRINK_TMP_BYTES_PER_PIXEL * 2 + SHRINK_TMP_BYTES_PER_PIXEL] - add y1, y1, t0 - add uv, uv, t1 - - // original formula: - // R = Y + 1.402*(V-128) - // G = Y - 0.344*(U-128) - 0.714*(V-128) - // B = Y + 1.772*(U-128) - // - // y1: (sum y0y1 of 4 pixels) << 1 - // uv: (sum uv of 4 pixels) << 1 - // - // then, - // R = (sumY/2 + (1.402/2)*(sumV-128*2*4)) / 4 - // G = (sumY/2 - (0.344/2)*(sumU-128*2*4) - (0.714/2)*(sumV-128*2*4)) / 4 - // B = (sumY/2 + (1.772/2)*(sumU-128*2*4)) / 4 - // - // or - // R = sumY/8 + (1.402/8)*(sumV-128*2*4) - // G = sumY/8 - (0.344/8)*(sumU-128*2*4) - (0.714/8)*(sumV-128*2*4) - // B = sumY/8 + (1.772/8)*(sumU-128*2*4) - // - // sumY max is 0xff*2*4 = 0x07f8 - // sumU, sumV max is 0xff*2*4 = 0x07f8 - // 0x07f8 << 20 =0x7f800000 - - // sumY /= 8; and normalize to 0x7f800000 - mov y0, y1, lsl #20 - mov y1, y1, lsr #16 - mov y1, y1, lsl #20 - - // normalize sumU, sumV and -= 128*2*4 - mov uv, uv, lsl #5 - eor uv, uv, const_0x80008000 - - // Green - // -(0.714/8)*sumV - smulbt t0, const_Hm0_344_Lm0_714, uv - // -(0.344/8)*sumU - smultb t1, const_Hm0_344_Lm0_714, uv - mov rgba, const_0x80008000 - add t1, t0, t1 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #21 // 0x7c000000 -> 0x000003e0 - ands t0, t1, #0xfc000000 - - // Red - // (1.402/8)*sumV - smultt t1, const_H1_402_L1_772, uv - orrpl rgba, rgba, t0, lsr #21-16 // 0x7c000000 -> 0x03e00000 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #26 // 0x7c000000 -> 0x0000001f - ands t0, t1, #0xfc000000 - - // Blue - // (1.772/8)*sumU - smulbb t1, const_H1_402_L1_772, uv - orrpl rgba, rgba, t0, lsr #26-16 // 0x7c000000 -> 0x001f0000 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #16 // 0x7c000000 -> 0x00007c00 - ands t0, t1, #0xfc000000 - orrpl rgba, rgba, t0 // 0x7c000000 - - str rgba, [dst], #4 - adds loopCounters, loopCounters, #2 << LOOP_COUNTERS_DST_SHIFT // 2 pixels at once - bcc @yuv2rgb_loop - - add loopCounters, loopCounters, #1 << LOOP_COUNTERS_ODD_LINE_SHIFT - tst loopCounters, #1 << LOOP_COUNTERS_ODD_LINE_MASK_SHIFT - // skip 1 line - addne src, src, #ORIGINAL_WIDTH * sizeof(u16) - bicne loopCounters, loopCounters, #1 << LOOP_COUNTERS_ODD_LINE_MASK_SHIFT - - sub pDtcm, pDtcm, #SHRINK_TMP_BYTES_PER_PIXEL * SHRINK_WIDTH - ldr const_0x01fe01fe, =0x01fe01fe - -@yuv2rgb_done: - // (-2.5) << 1 - subs loopCounters, loopCounters, #5 - bcs @480 - - // keep 8-Bytes aligned - ldmfd sp!, {SAVE_REGS} - bx lr - -@constants1: - dcd 0x59ba7168 // ((1.402 * 0x4000) << 16) | ((1.772 * 0x4000) & 0xffff) - dcd 0xe9fcd24e // ((-0.344 * 0x4000) << 16) | ((-0.714 * 0x4000) & 0xffff) - -#undef ORIGINAL_WIDTH -#undef SHRINK_WIDTH -#undef SHRINK_TMP_BYTES_PER_PIXEL -#undef SHRINK_TMP_HEIGHT -#undef LOOP_COUNTERS_INNER_SHIFT -#undef LOOP_COUNTERS_DST_SHIFT -#undef LOOP_COUNTERS_ODD_LINE_SHIFT -#undef LOOP_COUNTERS_ODD_LINE_MASK_SHIFT -#undef LOOP_COUNTERS_HEIGHT_BIT_WIDTH - -#undef SAVE_REGS -#undef loopCounters -#undef t0 -#undef t1 - -#undef yuyv0 -#undef yuyv1 -#undef yuyv2 -#undef yuyv3 -#undef uv - -#undef CONST_REGS0 -#undef const_0x01fe01fe - -#undef y0 -#undef y1 -#undef rgba -#undef const_0x80008000 -#undef CONST_REGS1 -#undef const_H1_402_L1_772 -#undef const_Hm0_344_Lm0_714 -} - - -// ܂480 linesł͂ȂA156*3 linesłĂȂB -// ؂̂ĂŖȂ̂A؂グ̂H -// pDtcmɂu32[208*3] (2496 Bytes)̍Ɨ̈悪KvłB -// Ɨ̈DTCMȊÕ蓖Ăꍇɂ -// ptH[}X傫ቺ”\܂B -// little endian only -asm void Manager::Shrink640Yuv422To208Rgb555( register const void* src, register void* dst, register u32 height, register void* pDtcm ) -{ -#define ORIGINAL_WIDTH 640 -#define SHRINK_WIDTH 208 // must be even -#define SHRINK_TMP_BYTES_PER_PIXEL 4 -#define SHRINK_TMP_HEIGHT 3 -// loopCounters bits: -// d31-d28: (6 + 7) loop counter -// d27-d24: (6 + 7) x 8 loop counter -// (d31-d24: dst loop counter) -// d23-d22: dtcm line loop counter -// d21-d09: unused -// d08-d00: height loop counter (0-511) -#define LOOP_COUNTERS_INNER_SHIFT 28 -#define LOOP_COUNTERS_LINE_SHIFT 24 -#define LOOP_COUNTERS_DST_SHIFT 24 -#define LOOP_COUNTERS_DTCM_LINE_SHIFT 22 -#define LOOP_COUNTERS_DTCM_LINE_MASK 0x3 -#define LOOP_COUNTERS_HEIGHT_BIT_WIDTH 9 -// registers -// keep stack frame 8-Bytes aligned -#define SAVE_REGS r3-r11,lr -#define loopCounters height - -// keep order for ldm/stm -#define t0 r12 -#define t1 lr -#define yuyv0 r4 -#define yuyv1 r5 -#define yuyv2 r6 -#define yuyv3 r7 -#define uv r8 - -#define CONST_REGS0 r9,r10,r11 -#define const_0x01fe01fe r9 -#define const_0x00001c73 r10 -#define const_0x00000e39 r11 - -// register pair (be careful about order) -#define YYUV_REGS0 yuyv1,uv -#define YYUV_REGS1 yuyv1,t1 - -// yuv2rgb -#define y0 yuyv0 -#define y1 yuyv1 -#define rgba yuyv2 -#define CONST_REGS1 const_0x000717c2,const_0x80008000,const_H1_402_L1_772,const_Hm0_344_Lm0_714 -#define const_0x000717c2 yuyv3 -#define const_0x80008000 const_0x01fe01fe -#define const_H1_402_L1_772 const_0x00001c73 -#define const_Hm0_344_Lm0_714 const_0x00000e39 - - ldr t0, =@constants0 - - // keep 8-Bytes aligned - stmfd sp!, {SAVE_REGS} - - ldmia t0, {CONST_REGS0} - - // dtcm line loop - // loopCounters and height may differ - add loopCounters, height, #SHRINK_TMP_HEIGHT << LOOP_COUNTERS_DTCM_LINE_SHIFT - -@480: - // (6 + 7) x 8 loops = 8,9,a,b,c,d,e,f - // adjust (6 + 7) loop counter, from minus - add loopCounters, loopCounters, #(8 << LOOP_COUNTERS_LINE_SHIFT) - (1 << LOOP_COUNTERS_INNER_SHIFT) - -@640: - // 6 loops - add loopCounters, loopCounters, #6 << LOOP_COUNTERS_INNER_SHIFT -@6: - ldmia src!, {yuyv0, yuyv1, yuyv2} - - and t0, const_0x01fe01fe, yuyv0, lsr #7 - and t1, const_0x01fe01fe, yuyv1, lsr #7 - add t0, t0, t1 - and t1, const_0x01fe01fe, yuyv2, lsr #7 - add uv, t0, t1 // sum uv << 1 - - and yuyv0, const_0x01fe01fe, yuyv0, lsl #1 - and yuyv1, const_0x01fe01fe, yuyv1, lsl #1 - add yuyv0, yuyv0, yuyv0, lsl #16 - add yuyv1, yuyv1, yuyv0, lsr #16 // sum y0 << 1 - - and yuyv2, const_0x01fe01fe, yuyv2, lsl #1 - add yuyv2, yuyv2, yuyv2, lsr #16 - add yuyv1, yuyv1, yuyv2, lsl #16 // sum y1 << 1 - stmia pDtcm!, {YYUV_REGS0} - - subs loopCounters, loopCounters, #1 << LOOP_COUNTERS_INNER_SHIFT - bpl @6 - - // 7 loops - add loopCounters, loopCounters, #7 << LOOP_COUNTERS_INNER_SHIFT - ldmia src!, {yuyv0, yuyv1, yuyv2, yuyv3} - and uv, const_0x01fe01fe, yuyv0, lsr #7 - and yuyv0, const_0x01fe01fe, yuyv0, lsl #1 -@7: - and t0, const_0x01fe01fe, yuyv1, lsr #7 - add t0, t0, uv, lsr #1 - and t1, const_0x01fe01fe, yuyv2, lsr #7 - add t0, t0, t1 - and uv, const_0x01fe01fe, yuyv3, lsr #7 - add t1, t0, uv, lsr #1 // sum uv << 1 - - and yuyv1, const_0x01fe01fe, yuyv1, lsl #1 - add yuyv1, yuyv1, yuyv0, lsr #16 - add yuyv1, yuyv1, yuyv1, lsl #16 - mov yuyv1, yuyv1, lsr #16 // sum y0 << 1 - - and yuyv2, const_0x01fe01fe, yuyv2, lsl #1 - and yuyv0, const_0x01fe01fe, yuyv3, lsl #1 - add yuyv2, yuyv2, yuyv0, lsl #16 - add yuyv2, yuyv2, yuyv2, lsr #16 - orr yuyv1, yuyv1, yuyv2, lsl #16 // sum y1 << 1 - - stmia pDtcm!, {YYUV_REGS1} - subs loopCounters, loopCounters, #1 << LOOP_COUNTERS_INNER_SHIFT - ldmplia src!, {yuyv1, yuyv2, yuyv3} - bpl @7 - - adds loopCounters, loopCounters, #1 << LOOP_COUNTERS_LINE_SHIFT - bmi @640 - - sub loopCounters, loopCounters, #1 << LOOP_COUNTERS_DTCM_LINE_SHIFT - tst loopCounters, #LOOP_COUNTERS_DTCM_LINE_MASK << LOOP_COUNTERS_DTCM_LINE_SHIFT - bne @yuv2rgb_done - - ldr t0, =@constants1 - add loopCounters, loopCounters, #SHRINK_TMP_HEIGHT << LOOP_COUNTERS_DTCM_LINE_SHIFT - ldmia t0, {CONST_REGS1} - - add loopCounters, loopCounters, #(0x100 - SHRINK_WIDTH) << LOOP_COUNTERS_DST_SHIFT - sub pDtcm, pDtcm, #SHRINK_TMP_BYTES_PER_PIXEL * SHRINK_WIDTH * SHRINK_TMP_HEIGHT -@yuv2rgb_loop: - ldmia pDtcm!, {y0, uv} - ldr t0, [pDtcm, #SHRINK_WIDTH * SHRINK_TMP_BYTES_PER_PIXEL * 1 - SHRINK_TMP_BYTES_PER_PIXEL * 2] - ldr t1, [pDtcm, #SHRINK_WIDTH * SHRINK_TMP_BYTES_PER_PIXEL * 1 - SHRINK_TMP_BYTES_PER_PIXEL * 2 + SHRINK_TMP_BYTES_PER_PIXEL] - add y0, y0, t0 - ldr t0, [pDtcm, #SHRINK_WIDTH * SHRINK_TMP_BYTES_PER_PIXEL * 2 - SHRINK_TMP_BYTES_PER_PIXEL * 2] - add uv, uv, t1 - ldr t1, [pDtcm, #SHRINK_WIDTH * SHRINK_TMP_BYTES_PER_PIXEL * 2 - SHRINK_TMP_BYTES_PER_PIXEL * 2 + SHRINK_TMP_BYTES_PER_PIXEL] - add y0, y0, t0 - add uv, uv, t1 - - // original formula: - // R = Y + 1.402*(V-128) - // G = Y - 0.344*(U-128) - 0.714*(V-128) - // B = Y + 1.772*(U-128) - // - // y0: (sum y0y1 of 9 pixels) << 1 - // uv: (sum uv of 9 pixels) << 1 - // - // then, - // R = (sumY/2 + (1.402/2)*(sumV-128*2*9)) / 9 - // G = (sumY/2 - (0.344/2)*(sumU-128*2*9) - (0.714/2)*(sumV-128*2*9)) / 9 - // B = (sumY/2 + (1.772/2)*(sumU-128*2*9)) / 9 - // - // or - // R = sumY/18 + (1.402/18)*(sumV-128*2*9) - // G = sumY/18 - (0.344/18)*(sumU-128*2*9) - (0.714/18)*(sumV-128*2*9) - // B = sumY/18 + (1.772/18)*(sumU-128*2*9) - // - // sumY max is 0xff*2*9 = 0x11ee - // sumU, sumV max is 0xff*2*9 = 0x11ee - // 0x11ee*0x717c2=0x7f8003fc - - // sumY /= 2*9; and normalize to 0x7f800000 - mov t0, y0, lsr #16 - mul y1, const_0x000717c2, t0 - eor t0, y0, t0, lsl #16 - mul y0, const_0x000717c2, t0 - - // sumV -= 128*2*9 - sub uv, uv, #0x900 << 16 - - // Red - // (1.402/18)*sumV - smultt t1, const_H1_402_L1_772, uv - mov rgba, const_0x80008000 - // normalize - mov t1, t1, lsl #8 - - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #26 // 0x7c000000 -> 0x0000001f - ands t0, t1, #0xfc000000 - orrpl rgba, rgba, t0, lsr #26-16 // 0x7c000000 -> 0x001f0000 - - // Green - // -(0.714/18)*sumV - smulbt t0, const_Hm0_344_Lm0_714, uv - // sumU -= 128*2*9 - sub uv, uv, #0x900 - // -(0.344/18)*sumU - smultb t1, const_Hm0_344_Lm0_714, uv - // normalize - mov t0, t0, lsl #8 - add t1, t0, t1, lsl #8 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #21 // 0x7c000000 -> 0x000003e0 - ands t0, t1, #0xfc000000 - - // Blue - // (1.772/18)*sumU - smulbb t1, const_H1_402_L1_772, uv - orrpl rgba, rgba, t0, lsr #21-16 // 0x7c000000 -> 0x03e00000 - // normalize - mov t1, t1, lsl #8 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #16 // 0x7c000000 -> 0x00007c00 - ands t0, t1, #0xfc000000 - orrpl rgba, rgba, t0 // 0x7c000000 -> 0x7c000000 - - str rgba, [dst], #4 - adds loopCounters, loopCounters, #2 << LOOP_COUNTERS_DST_SHIFT // 2 pixels at once - bcc @yuv2rgb_loop - - ldr t0, =@constants0 - add dst, dst, #(HW_LCD_WIDTH - SHRINK_WIDTH) * sizeof(u16) - sub pDtcm, pDtcm, #SHRINK_TMP_BYTES_PER_PIXEL * SHRINK_WIDTH - ldmia t0, {CONST_REGS0} - -@yuv2rgb_done: - sub loopCounters, loopCounters, #1 - movs t0, loopCounters, lsl #32 - LOOP_COUNTERS_HEIGHT_BIT_WIDTH - bne @480 - - // keep 8-Bytes aligned - ldmfd sp!, {SAVE_REGS} - bx lr - -@constants0: - dcd 0x01fe01fe - dcd 0x00001c73 - dcd 0x00000e39 - -@constants1: - dcd 0x000717c2 - dcd 0x80008000 - dcd 0x04fc064c // (((1.402/18) * 0x4000) << 16) | (((1.772/18) * 0x4000) & 0xffff) - dcd 0xfec7fd77 // (((-0.344/18) * 0x4000) << 16) | (((-0.714/18) * 0x4000) & 0xffff) - - -#undef ORIGINAL_WIDTH -#undef SHRINK_WIDTH -#undef SHRINK_TMP_BYTES_PER_PIXEL -#undef SHRINK_TMP_HEIGHT -#undef LOOP_COUNTERS_INNER_SHIFT -#undef LOOP_COUNTERS_LINE_SHIFT -#undef LOOP_COUNTERS_DST_SHIFT -#undef LOOP_COUNTERS_DTCM_LINE_MASK -#undef LOOP_COUNTERS_DTCM_LINE_SHIFT -#undef LOOP_COUNTERS_HEIGHT_BIT_WIDTH - -#undef SAVE_REGS -#undef loopCounters -#undef t0 -#undef t1 - -#undef yuyv0 -#undef yuyv1 -#undef yuyv2 -#undef yuyv3 -#undef uv - -#undef CONST_REGS0 -#undef const_0x01fe01fe -#undef const_0x00001c73 -#undef const_0x00000e39 - -#undef YYUV_REGS0 -#undef YYUV_REGS1 - -#undef y0 -#undef y1 -#undef rgba -#undef CONST_REGS1 -#undef const_0x000717c2 -#undef const_0x80008000 -#undef const_H1_402_L1_772 -#undef const_Hm0_344_Lm0_714 -} - -// width16̔{(16..640)Aheight2̔{(2..480)łKv܂B -// src͍Œ4oCgACgłB -// pYCbCrBufŒ4oCgACgłAefoCXƂ̘Ag -// 32oCgACgĂB -// pYCbCrBuf́AYACbACrꊇŊmۂĂBTCY -// Y: width*height*sizeof(u16) Bytes -// Cb: ((width*height)/4)*sizeof(u16)) Bytes -// Cr: ((width*height)/4)*sizeof(u16)) Bytes -// ȏ̍v (width*height*3/2)*sizeof(u16) BytesłB -// (‚܂茳摜f[^TCY1.5{) -// pDtcm_ɂu32[16+4+4] (96 Bytes)̍Ɨ̈悪KvłB -// Ɨ̈DTCMȊÕ蓖Ăꍇɂ -// ptH[}X傫ቺ”\܂B -// srcCAMERAfoCXYUVŃLv`` -// (Y 8bit,U 8bit,Y 8bit,V 8bit)łB -// opYCbCrBufDSP JPEGGR[_ւ̓͌` -// (Y,Y,Y,Y,..., U,..., V,..., e16bit)łB -// Ńf[^LbV͍̐sĂȂ߁Aʂ -// DSP֓nOFlush邢StoreKv܂B -asm void Manager::Convert8bitYuv422To16bitYuv420( register const u32* src, register u16* pYCbCrBuf, register u32 width, register u32 height, void* pDtcm_ ) -{ -#define BLOCK_WIDTH 16 -// registers -// keep stack frame 8-Bytes aligned -#define SAVE_REGS r3-r11,lr // 10 registers = 40 Bytes -#define STACK_OFFSET_PYCBCRBUF 0 // initial value is r3 -#define STACK_OFFSET_PDTCM 40 -#define pCbBuf pYCbCrBuf -#define widthHeight width -#define pDtcm height -#define pDstY pDtcm -#define pDstCr pDtcm - -// keep order for ldm/stm/ldrd/strd -#define FLUSH_REGS r4-r11 -#define FLUSH_REGS_CB r4,r6,r8,r10 -#define FLUSH_REGS_CR r5,r7,r9,r11 -#define yuyv0 r4 -#define yuyv1 r5 -#define yuyv2 r6 -#define yuyv3 r7 -#define t0 r8 -#define t1 r9 -#define const_0x00ff00ff r11 - -#define loopHeightWidth r12 -#define pDtcmStop lr - - // keep 8-Bytes aligned - stmfd sp!, {SAVE_REGS} - // pDstY initial value is pYCbCrBuf - str pYCbCrBuf, [sp, #STACK_OFFSET_PYCBCRBUF] - - mul t0, width, height - // setup widthHeight before breaking pDtcm - orr widthHeight, height, width, lsl #16 - add pCbBuf, pYCbCrBuf, t0, lsl #1 - - ldr pDtcm, [sp, #STACK_OFFSET_PDTCM] - add pDtcmStop, pDtcm, #BLOCK_WIDTH * sizeof(u16) - - mov loopHeightWidth, widthHeight, lsl #16 - -@480: - add loopHeightWidth, loopHeightWidth, widthHeight, lsr #16 - -@640: - ldr const_0x00ff00ff, =0x00ff00ff - -@blockLoop: - add t0, src, widthHeight, lsr #16-1 // +1(odd) line - ldmia t0, {yuyv2, yuyv3} - ldmia src!, {yuyv0, yuyv1} - - // even line Y - and t0, yuyv0, const_0x00ff00ff - and t1, yuyv1, const_0x00ff00ff - strd t0, [pDtcm, #BLOCK_WIDTH * sizeof(u16)] - -#if 0 - // even line U - and yuyv0, const_0x00ff00ff, yuyv0, lsl #8 - and t0, const_0x00ff00ff, yuyv1, lsl #8 - orr yuyv0, t0, yuyv0, lsr #16 - - // odd line V - and yuyv1, const_0x00ff00ff, yuyv2, lsr #24 - and t0, const_0x00ff00ff, yuyv3, lsr #24 - orr yuyv1, yuyv1, t0, lsl #16 -#else - // even column ave. uv (V0 U0) - and yuyv0, const_0x00ff00ff, yuyv0, lsr #8 - and t0, const_0x00ff00ff, yuyv2, lsr #8 - add yuyv0, yuyv0, t0 - and yuyv0, const_0x00ff00ff, yuyv0, lsr #1 - - // odd column ave. uv (V1 U1) - and yuyv1, const_0x00ff00ff, yuyv1, lsr #8 - and t0, const_0x00ff00ff, yuyv3, lsr #8 - add yuyv1, yuyv1, t0 - and yuyv1, const_0x00ff00ff, yuyv1, lsr #1 - - // V0 U0 => U1 U0 - // V1 U1 V1 V0 - eor t0, yuyv0, yuyv1, ror #16 // V0^U1 U0^V1 - eor yuyv1, yuyv1, t0, lsr #16 // V1 V0 - eor yuyv0, t0, yuyv1, ror #16 // U1 U0 -#endif - - strd yuyv0, [pDtcm, #BLOCK_WIDTH * 2 * sizeof(u16)] - - // odd line Y - and yuyv2, yuyv2, const_0x00ff00ff - and yuyv3, yuyv3, const_0x00ff00ff - - stmia pDtcm!, {yuyv2, yuyv3} - cmp pDtcm, pDtcmStop - bne @blockLoop - -// ǂł邩 - ldr pDstY, [sp, #STACK_OFFSET_PYCBCRBUF] - ldmdb pDtcmStop, {FLUSH_REGS} - add pDstY, pDstY, widthHeight, lsr #16-1 // +1(odd) line - stmia pDstY, {FLUSH_REGS} - sub pDstY, pDstY, widthHeight, lsr #16-1 // -1(even) line - - ldmia pDtcmStop!, {FLUSH_REGS} - stmia pDstY!, {FLUSH_REGS} - smultb t0, widthHeight, widthHeight - str pDstY, [sp, #STACK_OFFSET_PYCBCRBUF] - - add pDstCr, pCbBuf, t0, lsr #1 - ldmia pDtcmStop, {FLUSH_REGS} - stmia pDstCr, {FLUSH_REGS_CR} - stmia pCbBuf!, {FLUSH_REGS_CB} - - sub pDtcmStop, pDtcmStop, #8 * sizeof(u32) - sub pDtcm, pDtcmStop, #BLOCK_WIDTH * sizeof(u16) - - sub loopHeightWidth, loopHeightWidth, #BLOCK_WIDTH - movs t0, loopHeightWidth, lsl #16 - bne @640 - - ldr t0, [sp, #STACK_OFFSET_PYCBCRBUF] - subs loopHeightWidth, loopHeightWidth, #2 << 16 // 2 lines/loop - addne t0, t0, widthHeight, lsr #16-1 // 2 lines/loop - strne t0, [sp, #STACK_OFFSET_PYCBCRBUF] - addne src, src, widthHeight, lsr #16-1 // 2 lines/loop - bne @480 - - // keep 8-Bytes aligned - ldmfd sp!, {SAVE_REGS} - bx lr - -#undef BLOCK_WIDTH -#undef SAVE_REGS -#undef STACK_OFFSET_PYCBCRBUF -#undef STACK_OFFSET_PDTCM -#undef pCbBuf -#undef widthHeight -#undef pDtcm -#undef pDstY -#undef pDstCr - -#undef FLUSH_REGS -#undef FLUSH_REGS_CB -#undef FLUSH_REGS_CR -#undef yuyv0 -#undef yuyv1 -#undef yuyv2 -#undef yuyv3 -#undef t0 -#undef t1 -#undef const_0x00ff00ff - -#undef loopHeightWidth -#undef pDtcmStop -} - -#include - - -void Manager::procVBlankIntr() -{ - if (mMode == eMode_BG) { - - } else { - // eMode_Tex - if (mTexSwap) { - GX_DisableBankForTex(); - GX_SetBankForTex( GXVRamTex( mNextTexBank ) ); - mTexBank = mNextTexBank; - mTexSwap = FALSE; - mFirstPictureReady = TRUE; - } else { - // cmnŏ㏑”\̂Ŗt[ĐݒB - // GX_DisableBankForTex(); - GX_SetBankForTex( GXVRamTex( mTexBank ) ); - } - } -} - - -void Manager::procCameraIntr() -{ - u32 err = 0; - u32 msg = cMsgI2c_Destroy; // ̂܂܂̒lMꂽvO~XB - -#if SDK_VERSION_DATE < 20080630 - if (mIntrPositiveEdge) { - CAMERA_StopCapture(); - mIntrPositiveEdge = FALSE; - CAMERA_SetVsyncInterrupt(CAMERA_INTR_VSYNC_NEGATIVE_EDGE); - } -#else - // intr edgeCAMERACunhOB -#endif - - if (CAMERA_GetErrorStatus()) { - // error - CAMERA_StopCapture(); - CAMERA_ClearBuffer(); - MI_StopNDma(cDefaultDmaNo); - err = 1; - IPL_PRINT("cameraIntr: status error\n"); - } else { - if (MI_IsNDmaBusy(cDefaultDmaNo)) { - // error - // Ƃ͌؂ȂHŌNDMA]ȂH - MI_StopNDma(cDefaultDmaNo); - err = 2; - IPL_PRINT("cameraIntr: NDMA busy\n"); - } - } - - if (err) { - // Lv`ŝŁAgCB - if (mpCaptureBuf) { - freeCapBufByPtr((u16*)mpCaptureBuf); - mpCaptureBuf = NULL; - } - mCaptureRetryCount++; - if (mCaptureRetryCount < cCaptureRetryMax) { - // retry - } else { - // fatal error - IPL_HALT("capture error too much!\n"); - // TWL_IPL_FINALł̓X[[ - } - } else { - mCaptureRetryCount = 0; - procPostCapture(); - } - - // I2C͉ȂB - if (mI2cBusy) { - return; - } - - // Lv`<=>Beʼn𑜓xύXɂKvH - if (mCaptureSkipCount) { - mCaptureSkipCount--; - return; - } - - if (mSelCmr != mNextCmr) { - // J؂ւ邽I2CvoB - // OJLEDɍsB - msg = cMsgI2c_Activate; - // J؂ւt[̊Ԃ͉摜肵Ȃ̂ŃLv`~B - // mSelCmrNONȄꍇɂ͂֗ȂB(J荞݂Ȃ) - mCaptureSkipCount = 1; - goto sendI2cRequest; - } - - // Lv`ƎBeʼn𑜓xtH[}bgقȂꍇA - // I2CvoB - // ܂B - - // OJLEDB - if (!mLedKeepFlag && (mSelCmr == CAMERA_SELECT_OUT)) { - if (mNextShotFlag) { - if (!mCurLedBlink) { - // BeȂ̂œ__łɂB - // Vb^[Xs[h𑬂邽ߊ荞ݘ_؂ւB - // NDMA busyG[ɂȂĂ܂̂ŁA荞ݘ_͐؂ւȂB - // cOȂLEDf荞ނƂH(}CRÂH) - - // VBlank Time Intr Line Lines Ticks - // 272 4.5640 CAMERA 13 0 26 // negative edge - // 273 4.5754 V 192 0 17 - // 274 4.5921 V 192 0 6 - // 275 4.6089 V 192 1 33 - // 275 4.6140 CAMERA 10 1 20 // negative edge (+50.0ms from negative edge) - // 275 4.6144 PXI_NE 16 1 19 // SetLED֌W ( +0.4ms from negative edge) - // 275 4.6178 CAMERA 70 1 20 // positive edge ( +3.8ms from negative edge) - // 276 4.6256 V 192 0 11 - // 277 4.6423 V 192 0 20 - // 277 4.6474 TM0 9 0 9 - // 278 4.6590 V 192 0 5 - // 278 4.6640 CAMERA 8 9 282 // negative edge (+50.0ms from negative edge) - // *Warning: taking over 100 ticks (over 3 lines) - msg = cMsgI2c_ChangeLedToBlink; - goto sendI2cRequest; -// goto toPositiveEdgeAndSendI2cRequest; - } - } else if (!mShotFlag /* mCaptureFlag */ ) { - // Beł͂Ȃ̂œ_Ł_ɂB - // uLv`Ȃ̂(mCaptureFlag)vɂƁA - // GR[hAZ[uɂmCaptureFlagȂ̂ŁA - // _ŎԂȂB - if (mCurLedBlink) { - // ʍXVXs[h𑬂邽ߊ荞ݘ_؂ւB - // VBlank Time Intr Line Lines Ticks - // 281 4.7140 CAMERA 6 0 10 // negative edge - // 282 4.7259 V 192 0 7 - // 283 4.7426 V 192 0 15 - // 284 4.7593 V 192 0 5 - // 284 4.7641 CAMERA 4 0 18 // negative edge (+50.1ms from negative edge) - // 284 4.7645 PXI_NE 11 0 19 // SetLED֌W ( +0.4ms from negative edge) - // 284 4.7678 CAMERA 63 1 7 // positive edge ( +3.7ms from negative edge) - // 284 4.7725 TM0 137 0 8 - // 285 4.7760 V 192 0 12 - // 286 4.7927 V 192 0 15 - // 287 4.8094 V 192 0 10 - // 287 4.8140 CAMERA 1 1 14 // negative edge (+49.9ms from negative edge) - msg = cMsgI2c_ChangeLedToOn; - goto sendI2cRequest; -// goto toPositiveEdgeAndSendI2cRequest; - } - } - } - - if (!err) { - mCaptureFlag = mNextCaptureFlag; - mShotFlag = mNextShotFlag; - // Ƃ肠Pۑ̂݁B - mNextShotFlag = FALSE; - } - - // gC񐔏ɒBꍇ̋stop͕KvH - // ܂B - - if (mSelCmr != CAMERA_SELECT_NONE && - (mCaptureFlag || mShotFlag)) { - IPL_ASSERT( !mpCaptureBuf ); - mpCaptureBuf = procPreCapture(); - if (mpCaptureBuf) { - // A^CmShot{Wdt,Hgt}<=>mShow{Wdt,Hgt}̕ϊĂȂˁH - // transferlinesĐݒ肵ȂƁB - // CAMERA_GetBytesAtOnce()́Areg_CAM_CNT𒼐ړǂłB - // CAM_CNT́AJCl[ȕ݂͖邩A - // ҂lmɓۏ؂͂ȂƎvB - // ꉞCAMERA VuN荞݃nhA҂l - // ĂȂΓ삻̂̂Ȃ邪Ȁꍇł - // DMAŔ͈͊Õj󂵂Ȃ悤AvZŋ߂l - // CAMERA_GET_LINE_BYTES(mShotWdt) * mTransferLines wB -#if 0 -// : -// static inline void CAMERA_DmaRecvAsync(u32 dmaNo, void *dest, u32 unit, u32 length, MINDmaCallback callback, void* arg) -// { -// MI_Camera_NDmaRecvAsync( dmaNo, dest, unit/4, length, FALSE, callback, arg ); -// } - - // SDK default NDMA parameter - CAMERA_DmaRecvAsync(cDefaultDmaNo, (u16*)mpCaptureBuf, - CAMERA_GET_LINE_BYTES(mShotWdt) * mShotTransferLines, - CAMERA_GET_FRAME_BYTES(mShotWdt, mShotHgt), - NULL, NULL); -#else -// : -// void MI_Camera_NDmaRecvAsync(u32 ndmaNo, void *dest, u32 unit, u32 size, BOOL contSw, MINDmaCallback callback, void* arg ); -// void MI_Camera_NDmaRecvAsyncEx(u32 ndmaNo, void *dest, u32 size, BOOL contSw, MINDmaCallback callback, void* arg, const MINDmaConfig *config ); - - mDmaConfig.wordCount = (CAMERA_GET_LINE_BYTES(mShotWdt) * mShotTransferLines) / sizeof(u32); - MI_Camera_NDmaRecvAsyncEx(cDefaultDmaNo, (u16*)mpCaptureBuf, - CAMERA_GET_FRAME_BYTES(mShotWdt, mShotHgt), - FALSE, - NULL, NULL, - &mDmaConfig); -#endif - - CAMERA_StartCapture(); - } else { - IPL_PRINT("no memory for mpCaptureBuf\n"); - CAMERA_StopCapture(); - - // G[gCJEg𑝂₷H - // PprepareBuffer()łĂȂȂB - } - } else { - CAMERA_StopCapture(); - if (mOneShotFlag) { - // J~B - // I2CvoB - // mNextCmr͏㏑B - mNextCmr = CAMERA_SELECT_NONE; - msg = cMsgI2c_Activate; - goto sendI2cRequest; - } - } - - return; - -#if SDK_VERSION_DATE < 20080630 -toPositiveEdgeAndSendI2cRequest: - CAMERA_StopCapture(); - mIntrPositiveEdge = TRUE; - CAMERA_SetVsyncInterrupt(CAMERA_INTR_VSYNC_POSITIVE_EDGE); -#else - // intr edgeCAMERACunhOB -#endif -// thru -sendI2cRequest: - CAMERA_StopCapture(); - if (!OS_SendMessage(&mI2cMsgQueue, (OSMessage)msg, OS_MESSAGE_NOBLOCK)) { - // gCKvB - } else { - // Ô߁AI2CtOĂĂB - mI2cBusy = TRUE; - - // G[gCJE^𑝂₷Kv肻B - } -} - - -u16* Manager::procPreCapture() -{ - return allocCapBuf(); -} - - -void Manager::procPostCapture() -{ - if (mpCaptureBuf) { - if (mpConvBuf) { - // OYUV2RGBϊĂȂB -#ifndef TWL_IPL_FINAL - static u32 count; - IPL_PRINT("mConvBusy! %d, nextp %s\n", count++, mpNextConvBuf ? "exist" : "empty"); -#endif - // Bef[^ŁAŽϊ\̃obt@݂Ȃ - // ϊ\ƂB - if (mShotFlag && !mpNextConvBuf) { - mpNextConvBuf = mpCaptureBuf; - // LowerXbhOS_WaitEvent()ŃubNȂ悤AϊBevZbgĂB - OS_SignalEvent(&mLowerEvent, cEventMaskLower_NextConvertAndShot); - } else { - // ̃Lv`ς݃f[^͔jB - freeCapBufByPtr((u16*)mpCaptureBuf); - } - } else { - // YUV2RGBϊvZbgB - mpConvBuf = mpCaptureBuf; - OS_SignalEvent(&mLowerEvent, - (u32)(cEventMaskLower_Convert | (mShotFlag ? cEventMaskLower_Shot : 0))); - } - mpCaptureBuf = NULL; - } -} - - -void Manager::procPostConvert(BOOL shot) -{ - if (shot) { - // Lv`ς݃f[^͎BepɎgB - mpShotBuf = mpConvBuf; - } else { - // Lv`ς݃f[^͕svȂ̂Ŏ̂ĂB - freeCapBufByPtr((u16*)mpConvBuf); - } - mpConvBuf = NULL; -} - - -// (mpShotBuf != NULL) ̂Ƃ̂݌Ă΂B -void Manager::procPostShot() -{ -// #ifndef TWL_IPL_FINAL -// mDebugPort = __LINE__; -// #endif - // "check only urgent errors here" ă}WH荞݋֎~ŌĂ΂Ă邩B - - freeCapBufByPtr((u16*)mpShotBuf); -} - - -// 荞݃[`̂݌Ă΂̂Ŋ荞݋֎~ɂĂȂB -// Lv`ABeŃTCYςꍇłĂA傫 -// TCYz肵ăobt@mۂB -u16* Manager::allocCapBuf() -{ - for (u32 i = 0; i < cBufferCount; i++) { - if (!mIsCapBufUsed[i] && mpCapBuf[i]) { - mIsCapBufUsed[i] = TRUE; -// OS_TPrintf("allocCapBuf[%d]=%x\n", i, mpCapBuf[i]); - return mpCapBuf[i]; - } - } - IPL_PRINT("allocCapBuf: no memory! %d %d\n", mCaptureFlag, mShotFlag); - - return NULL; -} - - -void Manager::freeCapBufByPtr(const u16* pBuf) -{ - if (pBuf) { - for (u32 i = 0; i < cBufferCount; i++) { - if (mpCapBuf[i] == const_cast(pBuf)) { - mIsCapBufUsed[i] = FALSE; - return; - } - } - } -} - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#else -BOOL Manager::writeJpegToNand(const u8* src, u32 size) -{ - BOOL ret = FALSE; - -// const u8* path; -// -// path = MenuSys()->getUpPicMgr()->getSavePath(); -// if (path) { -// cmn::sys::File file( (const char*)path ); -// ret = file.write(src, size); -// IPL_PRINT("writeJpegToNand(%s)=%d\n", path, ret); -// if (ret) { -// MenuSys()->getUpPicMgr()->calcNextSavePath(); -// } -// } - - ret = MenuSys()->getUpPicMgr()->writeTclPictureFile(src, size); - - return ret; -} -#endif - - -// t@C͒̐lɂȂB -BOOL Manager::writeJpegToSD(const u8* src, u32 size) -{ - FSFile file; - FSFile* pFile = &file; - u32 i; - - // DC_StoreAll(), DC_FlushAll() is NG? - DC_StoreAll(); - -/* - SDJ[h/menu/MENU####.jpg Ƃt@C𐶐 -*/ -#define JPEG_DIRNAME "sdmc:/menu" -#define JPEG_FILENAME "menu%04d.jpg" - - if ( !pFile ) - { - return FALSE; - } - - /* - fBNg݂̑mƂ - {́A܂SDJ[h݂邩mFǍfBNgł - ݂邩Ė΍Ƃŗǂ̂Ał́A - I[vȂ΂ȂȂI - */ - { - FSFile dir; - if ( !FS_OpenDirectory( &dir, JPEG_DIRNAME, FS_FILEMODE_R | FS_FILEMODE_W ) ) - { - if ( !FS_CreateDirectory( JPEG_DIRNAME, FS_PERMIT_R | FS_PERMIT_W ) ) - { - IPL_PRINT("Cannot create directory %s.\n", JPEG_DIRNAME); - return FALSE; - } - } - else - { - FS_CloseDirectory( &dir ); - } - } - - FS_InitFile( pFile ); - - for (i = -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP - 0 -#else - 1000 -#endif - ; i < 10000; i++) - { - char buffer[32]; - STD_TSPrintf(buffer, JPEG_DIRNAME "/" JPEG_FILENAME, i); - if ( FS_CreateFile( buffer, FS_PERMIT_W ) ) // łɂꍇs - { - if ( FS_OpenFileEx( pFile, buffer, FS_FILEMODE_W ) ) // 쐬Ẵt@CI[v - { - // OK - break; -// if (filename) // Ƀw肳Ă΂Ƀt@Ci[ -// { -// STD_CopyLString( filename, buffer, 256 ); -// } -// return TRUE; - } else { - IPL_PRINT("Create %s, but cannot open it.\n", buffer); // vIȃG[ - return FALSE; - } - } - } - if (i == 10000) { - IPL_PRINT("Too many files in %s.\n", JPEG_DIRNAME); - return FALSE; - } - - if ( FS_WriteFile( pFile, src, static_cast(size) ) != size ) - { - FS_CloseFile( pFile ); - return FALSE; - } - FS_CloseFile( pFile ); - return TRUE; -} - - -// /*! -// Vb^[TEht@CZbg p\ -// @param p_wav WAṼwb_̂Ȃt@C -// @param size TCY -// */ -// void Manager::setShutterSnd( const u8* p_wav , u32 size , BOOL stereo ) -// { -// #ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP -// OSIntrMode enabled = OS_DisableInterrupts(); -// -// mpShutterSnd = p_wav; -// mShutterSndSize = size; -// mShutterStereo = stereo; -// -// OS_RestoreInterrupts(enabled); -// #endif -// } - - -// #ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP -// /*! -// Vb^[TEhJn -// */ -// void Manager::startShutterSnd() -// { -// if ( mpShutterSnd ) -// { -// #ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -// SNDEX_SetDSPMixRate( 0 ); -// SNDEX_ForceOut( TRUE ); -// DSP_PlaySound( (void*)mpShutterSnd, (u32)(mShutterSndSize / 2), mShutterStereo ); -// #else -// MenuSys()->getDspMgr()->playSound(mpShutterSnd, (u32)(mShutterSndSize / sizeof(u16)), mShutterStereo); -// #endif -// } -// } -// -// /*! -// Vb^[TEhI -// */ -// void Manager::finishShutterSnd() -// { -// if ( mpShutterSnd ) -// { -// #ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -// SNDEX_SetDSPMixRate( 8 ); -// SNDEX_ForceOut( FALSE ); -// #else -// MenuSys()->getDspMgr()->stopSound(); -// #endif -// } -// } -// -// /*! -// Vb^[TEhIĂ邩 -// @retval TRUE IĂ -// @retval FALSE ĂȂ -// */ -// BOOL Manager::isFinishedShutterSnd() const -// { -// #ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -// return TRUE; -// #else -// return !(MenuSys()->getDspMgr()->isSoundPlaying()); -// #endif -// } -// #endif - -void Manager::setCaptureRgbFlag(BOOL useRgb) -{ - mCaptureRgbFlag = (u8)useRgb; - mEncodeOption = (u32)(SSP_JPEG_THUMBNAIL | (useRgb ? SSP_JPEG_RGB555 : SSP_JPEG_YUV422)); -} - -void Manager::encodeAndSave() -{ - u32 err = 0; - OSTick tick; - - if (!mpShotBuf) { - IPL_HALT("!mpShotBuf\n"); - // TWL_IPL_FINALł̓X[[ - return; - } - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#else - // W[[hɁAVb^[~܂H - // Vb^[ĐOJPEGGR[_W[ - // [hĂKv悤B - // Vb^[‚I܂DSPLB - MenuSys()->getDspMgr()->lock(); - MenuSys()->getDspMgr()->loadJpegEncoder(); -#endif - -// // DSPgꍇ̂݁AVb^[̍ĐwoB -// startShutterSnd(); - - DSPFrame_y = mpEncodeWork->y; - DSPFrame_cb = mpEncodeWork->cbcr; - DSPFrame_cr = DSPFrame_cb + (mShotWdt * mShotHgt / 4); -#endif - - tick = OS_GetTick(); - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP - Convert8bitYuv422To16bitYuv420((const u32*)mpShotBuf, - DSPFrame_y, - mShotWdt, - mShotHgt, - mpDtcmWork->mYuvBuf); - // store YUV420 and invalidate encode result - DC_FlushAll(); -#endif - - IPL_PRINT("procShot: yuv422to420 time %d usec\n", (u32)OS_TicksToMicroSeconds(OS_GetTick() - tick)); - tick = OS_GetTick(); - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#else - // SDJ[hANZX̃`‚΍ - // VuN荞݂x̂ŁAAtBp^WX^֏܂ȂB - // writeJpegToSD()ĂԒO̐ݒł͊ԂɍȂ悤B -// MenuSys()->getUpPicMgr()->setSkipAffineFlag(TRUE); -#endif - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - // o̓TCY͂قǕKvH - DSP_SetJpegEncoderBuffer(mpEncodeResult, cEncodeResultSizeMax); - // explicit initialization - DSP_SetJpegEncoderThumbnailBuffer(NULL, NULL, NULL); - u32 size = DSP_StartJpegEncoder( static_cast< s16 > ( mShotWdt ) , - static_cast< s16 > ( mShotHgt ) , - DSP_JPEG_THUMBNAIL , - 4 ); -#else - // o̓TCY͂قǕKvH - // unlockupPicMgr if (event & cEventMask_WipeReplace) ōsB - MenuSys()->getUpPicMgr()->lockTcl(); - MenuSys()->getUpPicMgr()->lockJpegBuf(); - u32 size = MenuSys()->getDspMgr()->encodeJpegFrom16bitYuv420(DSPFrame_y, - mShotWdt, - mShotHgt, - MenuSys()->getUpPicMgr()->getJpegBufPtr(), - MenuSys()->getUpPicMgr()->getJpegBufSize(), - NULL, - 0, - DSP_JPEG_THUMBNAIL); -#endif -#else -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#else - // unlockupPicMgr if (event & cEventMask_WipeReplace) ōsB - MenuSys()->getUpPicMgr()->lockTcl(); - MenuSys()->getUpPicMgr()->lockJpegBuf(); - - SSP_SetJpegEncoderMakerNote(MenuSys()->getUpPicMgr()->getMakerNote(), - MenuSys()->getUpPicMgr()->getMakerNoteSize()); -#endif - - if (!SSP_SetJpegEncoderDateTimeNow()) { - // ̖ߍ݂ɎŝŃ[Ŗ߂B - // ́uYYYY:MM:DD HH:MM:DDv+0x00 20 ƂĂB - static const u8 zeroes[20] = {}; - IPL_PRINT("SSP_SetJpegEncoderDateTimeNow() failed!\n"); - SSP_SetJpegEncoderDateTime((u8*)zeroes); - } - SSP_SetJpegEncoderSignMode(TRUE); - u32 size = SSP_StartJpegEncoder((const void*)mpShotBuf, -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - mpEncodeResult, - cEncodeResultSizeMax, -#else - MenuSys()->getUpPicMgr()->getJpegBufPtr(), - MenuSys()->getUpPicMgr()->getJpegBufSize(), -#endif - mpEncodeWork, - mShotWdt, mShotHgt, - cEncodeQuality, cEncodeSampling, mEncodeOption); -#endif - - IPL_PRINT("procShot: encode size %d, time %d usec\n", size, (u32)OS_TicksToMicroSeconds(OS_GetTick() - tick)); - - tick = OS_GetTick(); - - // save to SD or NAND - if (size) { -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#else - if (!writeJpegToNand(MenuSys()->getUpPicMgr()->getJpegBufPtr(), - size)) { - err = 3; - } -#endif - - - if (!writeJpegToSD( -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - mpEncodeResult, -#else - MenuSys()->getUpPicMgr()->getJpegBufPtr(), -#endif - size)) { - // SDJ[hւ̕ۑ̓eXgȂ̂ŁAG[ɂ͂ȂB - // do nothing - } - } else { - err = 4; - } - - IPL_PRINT("procShot: save err %d, time %d usec\n", err, (u32)OS_TicksToMicroSeconds(OS_GetTick() - tick)); - -// #ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP -// while (!isFinishedShutterSnd()) { -// IPL_PRINT("procShot: waiting ShutterSnd finish\n"); -// OS_Sleep(1); -// } -// finishShutterSnd(); -// #endif - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#else -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP - // Vb^[‚IDSP̐LłB - MenuSys()->getDspMgr()->unlock(); -#endif - - MenuSys()->getUpPicMgr()->setJpegDataSize(size); - - if (MenuSys()->getUpPicMgr()->isEffectTypeNormal()) { - // JPEGfR[hsB - // ‚܂AJV[Î߂̃tF[hAEgJnxB - MenuSys()->getUpPicMgr()->decodeJpeg(); - } else { - // ɌÂʐ^̃CvAEgJnB - // JV[Î߂̃tF[hAEgJnȂ邪 - // `[Cʂ֖߂Ă΂炭ʂȂB - // ̏ԂŃ`[Cʂ̑͂ł邪AdB - MenuSys()->getUpPicMgr()->wipeOut(); - } - -// MenuSys()->getUpPicMgr()->setSkipAffineFlag(FALSE); -#endif - - if (!mShotErr) { - mShotErr = err; - } - - { - OSIntrMode enabled = OS_DisableInterrupts(); - - procPostShot(); - mpShotBuf = NULL; - mShotDone = TRUE; - - OS_RestoreInterrupts(enabled); - } - - // invalidate capture buffer for next capture - DC_FlushAll(); - - IPL_PRINT("encodeAndSave done err=%d\n", mShotErr); -} - - - -}}} diff --git a/build/tests/yuv2rgb/src/menuIrqHandler.c b/build/tests/yuv2rgb/src/menuIrqHandler.c deleted file mode 100644 index 13c8e04e..00000000 --- a/build/tests/yuv2rgb/src/menuIrqHandler.c +++ /dev/null @@ -1,169 +0,0 @@ -// This IRQ Handler is for ARM9 only. -#include "menuIrqHandler.h" -// not supplied -#include - -typedef struct MenuIrqHandlerLogControl { - // keep order! {End, Cur, VBlankCount, Top} for ldmia/stmia - MenuIrqHandlerLogBuffer* mpBufferEnd; - MenuIrqHandlerLogBuffer* mpBufferCur; - u32 mVBlankCount; - MenuIrqHandlerLogBuffer* mpBufferTop; -} MenuIrqHandlerLogControl; - -extern void MenuIrqHandler( void ); - -#include -#ifndef TWL_IPL_FINAL -static MenuIrqHandlerLogControl MenuIrqHandlerLogCtrl; -#endif -#include - -#include -#include -#include - -#ifndef TWL_IPL_FINAL -// derived from OS_IrqHandler -/*---------------------------------------------------------------------------* - Name: MenuIrqHandler - - Description: IRQ handler. call handler according to OS_InterruptTable - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -asm void MenuIrqHandler( void ) -{ - stmfd sp!, { lr } // save LR - - // get IE address - mov r12, #HW_REG_BASE - add r12, r12, #(REG_IE_OFFSET - 4) // r12: REG_IE address - 4 - - // get IME - ldrh r0, [ r12, #REG_IME_ADDR - (REG_IE_ADDR - 4) ] // r0: IME - - // get IE&IF - ldmib r12!, { r1-r2 } // r1: IE, r2: IF - - tst r0, #0x01 - andnes r1, r1, r2 // r1: IE & IF - - // if (IME==0) || (IE&IF==0) then return (without changing IF) - ldmeqfd sp!, { pc } - - //-------------------------------------------------- - // IRQ HANDLING CODE for ARCHITECTURE VERSION 5 - //-------------------------------------------------- - - ldr lr, =MenuIrqHandlerLogCtrl - - // get lowest 1 bit - rsb r3, r1, #0 - and r3, r1, r3 - - // clear IF - str r3, [ r12 ], #-REG_IF_OFFSET - - ldmia lr!, {r0, r1, r2} // mpBufferEnd, mpBufferCur, mVBlankCount - cmp r1, r0 - bcs @logSkip // log full or no buffer - -@logWrap: - ldrh r0, [r12, #REG_VCOUNT_ADDR - HW_REG_BASE] - add r1, r1, #sizeof(MenuIrqHandlerLogBuffer) - tst r3, #OS_IE_V_BLANK - addne r2, r2, #1 - bic r2, r2, #1 << 18 // lower 18bits only - stmdb lr, {r1, r2} // update mpBufferCur, mVBlankCount - - orr r2, r2, r0, lsl #23 // mInVLineCount | mInVBlankCount - // get jump vector - ldr r0, =OS_IRQTable + ((OS_IRQ_TABLE_MAX - 1) << 2) - clz r3, r3 - ldr r0, [r0, -r3, lsl #2] - orr r2, r2, r3, lsl #18 // mIntr - ldr r3, [r12, #REG_TM0CNT_L_ADDR - HW_REG_BASE] - stmfd sp!, {r1, r2, r3} // mpBufferCur, word0, tick - - blx r0 - - mov r12, #HW_REG_BASE - ldr lr, [r12, #REG_TM0CNT_L_ADDR - HW_REG_BASE] - ldrh r0, [r12, #REG_VCOUNT_ADDR - HW_REG_BASE] - ldmfd sp!, {r1, r2, r3} - subs r12, r0, r2, lsr #23 // mVLineCounts - addmi r12, r12, #HW_LCD_HEIGHT - addmi r12, r12, #HW_LCD_VBLANK - sub r3, lr, r3 // mTicks - orr r3, r12, r3, lsl #16 - stmdb r1, {r2, r3} // word0, word1 - b OS_IrqHandler_ThreadSwitch - -@logSkip: - cmp r1, #0 - ldrne r1, [lr] // mpBufferTop - bne @logWrap - - // get jump vector - ldr r0, =OS_IRQTable + ((OS_IRQ_TABLE_MAX - 1) << 2) - clz r3, r3 - ldr r0, [r0, -r3, lsl #2] - ldr lr, =OS_IrqHandler_ThreadSwitch - bx r0 // set return address for thread rescheduling -} -#endif - -#include -#include - - -void MenuIrqHandlerStart( MenuIrqHandlerLogBuffer* pBuffer, u32 size ) -{ -#ifndef TWL_IPL_FINAL - u32 count = size / sizeof(MenuIrqHandlerLogBuffer); - MenuIrqHandlerLogControl* pCtrl = &MenuIrqHandlerLogCtrl; - BOOL enabled = OS_DisableIrq(); - - *(u32 *)(HW_DTCM + HW_DTCM_SIZE - HW_DTCM_SYSRV_SIZE + HW_DTCM_SYSRV_OFS_INTR_VECTOR) - = (u32)MenuIrqHandler; - - if ( pBuffer && count ) { - pCtrl->mpBufferTop = - pCtrl->mpBufferCur = pBuffer; - pCtrl->mpBufferEnd = pBuffer + count; - } else { - pCtrl->mpBufferTop = - pCtrl->mpBufferCur = - pCtrl->mpBufferEnd = NULL; - } - pCtrl->mVBlankCount = 0; - - OS_RestoreIrq(enabled); -#else -#pragma unused(pBuffer) -#pragma unused(size) -#endif -} - -void MenuIrqHandlerEnd( void ) -{ -#ifndef TWL_IPL_FINAL - *(u32 *)(HW_DTCM + HW_DTCM_SIZE - HW_DTCM_SYSRV_SIZE + HW_DTCM_SYSRV_OFS_INTR_VECTOR) - = (u32)OS_IrqHandler; - // keep buffer -#endif -} - -BOOL MenuIrqHandlerIsUsed( void ) -{ -#ifndef TWL_IPL_FINAL - return (*(u32 *)(HW_DTCM + HW_DTCM_SIZE - HW_DTCM_SYSRV_SIZE + HW_DTCM_SYSRV_OFS_INTR_VECTOR) - == (u32)MenuIrqHandler); -#else - return FALSE; -#endif -} - diff --git a/build/tests/yuv2rgb/src/menuIrqHandler.h b/build/tests/yuv2rgb/src/menuIrqHandler.h deleted file mode 100644 index 1e9d4e0c..00000000 --- a/build/tests/yuv2rgb/src/menuIrqHandler.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef MENU_IRQ_HANDLER_H_ -#define MENU_IRQ_HANDLER_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -typedef struct MenuIrqHandlerLogBuffer { - union { - u32 word0; - struct { - u32 mInVLineCount : 9; // d31-d23 - u32 mIntr : 5; // d22-d18 - u32 mInVBlankCount : 18; // d17-d0 - }; - }; - union { - u32 word1; - struct { - u32 mTicks : 16; // d31-d16 - u32 mVLineCounts : 16; // d15-d0 - }; - }; -} MenuIrqHandlerLogBuffer; - -extern void MenuIrqHandlerStart( MenuIrqHandlerLogBuffer* pBuffer, u32 size ); -extern void MenuIrqHandlerEnd( void ); -extern BOOL MenuIrqHandlerIsUsed( void ); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/build/tests/yuv2rgb/src/new.cpp b/build/tests/yuv2rgb/src/new.cpp deleted file mode 100644 index 6ebd0e1a..00000000 --- a/build/tests/yuv2rgb/src/new.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NitroSDK - OS - demos - cplusplus-1 - File: new.cpp - - Copyright 2003,2004 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Log: new.cpp,v $ - Revision 1.4 2004/04/06 11:35:38 yada - fix header comment - - Revision 1.3 2004/02/20 03:32:18 yasu - add comments - - Revision 1.2 2004/02/20 00:04:05 yasu - add comments - - $NoKeywords: $ - *---------------------------------------------------------------------------*/ -#include -#ifdef TWL_IPL_USE_RED_IPL -#include -#endif - -#define HEAP_ID ((OSHeapHandle)0) -#define ARENA_ID ((OSArenaId)OS_ARENA_MAIN) -#define ROUND(n, a) (((u32) (n) + (a) - 1) & ~((a) - 1)) - -//---------------------------------------------------------------- -// -void* operator new ( std::size_t blocksize ) -{ - void* p = OS_AllocFromHeap( ARENA_ID, HEAP_ID, blocksize ); - if (p) { -// MI_CpuClearFast(p, blocksize); - } - return p; -} - -//---------------------------------------------------------------- -// -void* operator new[] ( std::size_t blocksize ) -{ - void* p = OS_AllocFromHeap( ARENA_ID, HEAP_ID, blocksize ); - if (p) { -// MI_CpuClearFast(p, blocksize); - } - return p; -} - -//---------------------------------------------------------------- -// -void operator delete ( void* block ) throw() -{ - OS_FreeToHeap( ARENA_ID, HEAP_ID, block ); -} - -//---------------------------------------------------------------- -// -void operator delete[] ( void* block ) throw() -{ - OS_FreeToHeap( ARENA_ID, HEAP_ID, block ); -} - -/*---------------------------------------------------------------------------* - Name: NitroStartUp - - Description: startup before NitroMain() - - Initialize memory control system for new() - - FYI: - - Startup fuctions called in following order - 1) NitroStartUp(); - 2) Global/Static Constructors - 3) NitroMain(); - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void TwlStartUp(void) -{ - void* arenaLo; - void* arenaHi; - -#ifdef TWL_IPL_USE_RED_IPL - SYSM_Init(NULL, NULL); -#endif - OS_Init(); - OS_InitThread(); - GX_Init(); - OS_InitTick(); - OS_InitAlarm(); - TP_Init(); - FX_Init(); - GX_Init(); - RTC_Init(); - SNDEX_Init(); - OS_EnableIrq(); - OS_EnableInterrupts(); - FS_Init( FS_DMA_NOT_USE ); - MI_InitNDmaConfig(); - -#ifdef TWL_IPL_USE_RED_IPL - SYSM_SetArena(); // OS_IniťŃR[KvB - SYSM_InitPXI(); // 荞݋ŒɃR[KvB -#endif - - arenaLo = OS_GetArenaLo( ARENA_ID ); - arenaHi = OS_GetArenaHi( ARENA_ID ); - - // Create a heap - arenaLo = OS_InitAlloc( ARENA_ID, arenaLo, arenaHi, 1 ); - OS_SetArenaLo( ARENA_ID, arenaLo ); - - // Ensure boundaries are 32B aligned - arenaLo = (void*)ROUND( arenaLo, 32 ); - arenaHi = (void*)ROUND( arenaHi, 32 ); - - // The boundaries given to OSCreateHeap should be 32B aligned - (void)OS_SetCurrentHeap( ARENA_ID, OS_CreateHeap( ARENA_ID, arenaLo, arenaHi ) ); - - // From here on out, OS_Alloc and OS_Free behave like malloc and free respectively - OS_SetArenaLo( ARENA_ID, arenaLo = arenaHi ); -} diff --git a/build/tests/yuv2rgb/src/snd_data.c b/build/tests/yuv2rgb/src/snd_data.c deleted file mode 100644 index 65b46440..00000000 --- a/build/tests/yuv2rgb/src/snd_data.c +++ /dev/null @@ -1,10771 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - demos.TWL - snd - extraFunc - File: snd_data.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include - - -const u8 sound_seq_data[] ATTRIBUTE_ALIGN(HW_CACHE_LINE_SIZE) = -{ - 0xfe, 0xff, 0x0e, 0x93, 0x01, 0x02, 0x05, 0x00, 0x93, 0x02, 0xba, 0x05, 0x00, 0x93, 0x03, 0x72, - 0x06, 0x00, 0x93, 0x04, 0x04, 0x09, 0x00, 0x93, 0x05, 0x79, 0x0b, 0x00, 0x93, 0x06, 0xb9, 0x0b, - 0x00, 0x93, 0x07, 0x0e, 0x0d, 0x00, 0x93, 0x09, 0x44, 0x0d, 0x00, 0x93, 0x0a, 0xe9, 0x10, 0x00, - 0x93, 0x0b, 0xac, 0x18, 0x00, 0xc7, 0x00, 0xe1, 0x8c, 0x00, 0x81, 0x00, 0xc1, 0x7f, 0xc0, 0x40, - 0xc5, 0x02, 0xc4, 0x00, 0xcb, 0x10, 0xca, 0x00, 0x24, 0x7f, 0x82, 0x7f, 0x80, 0x83, 0x00, 0x30, - 0x5a, 0x82, 0x1f, 0x80, 0x82, 0x20, 0x24, 0x76, 0x04, 0x80, 0x0c, 0x24, 0x52, 0x02, 0x80, 0x0c, - 0x48, 0x6f, 0x0d, 0x80, 0x18, 0x24, 0x6e, 0x01, 0x80, 0x0c, 0x48, 0x71, 0x0b, 0x80, 0x0c, 0x24, - 0x4c, 0x01, 0x80, 0x0c, 0x24, 0x6f, 0x01, 0x80, 0x0b, 0x24, 0x7d, 0x85, 0x49, 0x80, 0x83, 0x01, - 0xca, 0x1e, 0x80, 0x82, 0x50, 0xca, 0x00, 0x24, 0x7f, 0x01, 0x80, 0x30, 0x24, 0x7f, 0x2f, 0x80, - 0x30, 0x2b, 0x6f, 0x1a, 0x80, 0x27, 0x2b, 0x3c, 0x06, 0x80, 0x09, 0x30, 0x62, 0x0a, 0x80, 0x18, - 0xc4, 0x80, 0x32, 0x67, 0x2f, 0x80, 0x03, 0xc4, 0x00, 0x80, 0x2d, 0x2b, 0x62, 0x08, 0x80, 0x0c, - 0x24, 0x52, 0x01, 0x80, 0x0c, 0x24, 0x7f, 0x2f, 0x80, 0x30, 0x2b, 0x67, 0x19, 0x80, 0x24, 0x2b, - 0x65, 0x0b, 0x80, 0x0c, 0x30, 0x53, 0x05, 0x80, 0x18, 0x30, 0x72, 0x17, 0x80, 0x18, 0x2b, 0x78, - 0x03, 0x80, 0x0c, 0x43, 0x74, 0x02, 0x80, 0x0c, 0x2b, 0x74, 0x0b, 0x80, 0x0c, 0x2b, 0x5e, 0x01, - 0x80, 0x0c, 0x95, 0xd8, 0x04, 0x00, 0x26, 0x74, 0x30, 0x80, 0x30, 0x2d, 0x68, 0x18, 0x80, 0x24, - 0x2d, 0x59, 0x0b, 0x80, 0x0c, 0x32, 0x59, 0x05, 0x80, 0x0c, 0x43, 0x4a, 0x02, 0x80, 0x0c, 0x32, - 0x6f, 0x23, 0x80, 0x24, 0x2c, 0x7f, 0x21, 0x80, 0x24, 0x2b, 0x7f, 0x2e, 0x80, 0x2f, 0x32, 0x62, - 0x18, 0x80, 0x24, 0x32, 0x4e, 0x0c, 0x80, 0x0d, 0x37, 0x59, 0x05, 0x80, 0x18, 0xc4, 0xac, 0x37, - 0x67, 0x2f, 0x80, 0x03, 0xc4, 0x00, 0x80, 0x2d, 0x32, 0x6b, 0x0c, 0x80, 0x18, 0x2b, 0x6a, 0x2e, - 0x80, 0x30, 0x32, 0x62, 0x18, 0x80, 0x24, 0x32, 0x56, 0x0b, 0x80, 0x0c, 0x37, 0x59, 0x07, 0x80, - 0x18, 0xc4, 0xbd, 0x37, 0x6a, 0x2e, 0x80, 0x03, 0xc4, 0x00, 0x80, 0x2d, 0x32, 0x59, 0x06, 0x80, - 0x18, 0x24, 0x7c, 0x2f, 0x80, 0x30, 0x2b, 0x65, 0x1b, 0x80, 0x24, 0x2b, 0x62, 0x0b, 0x80, 0x0c, - 0x30, 0x5c, 0x08, 0x80, 0x18, 0xc4, 0xa4, 0x30, 0x65, 0x2e, 0x80, 0x03, 0xc4, 0x00, 0x80, 0x2d, - 0x2b, 0x65, 0x09, 0x80, 0x18, 0x24, 0x71, 0x2f, 0x80, 0x30, 0x2b, 0x6a, 0x17, 0x80, 0x18, 0x2b, - 0x62, 0x0c, 0x80, 0x0c, 0x24, 0x62, 0x0a, 0x80, 0x0c, 0x30, 0x73, 0x08, 0x80, 0x0c, 0x48, 0x5d, - 0x03, 0x80, 0x0c, 0x4a, 0x77, 0x23, 0x2e, 0x79, 0x23, 0x80, 0x24, 0x4b, 0x79, 0x23, 0x2f, 0x79, - 0x23, 0x80, 0x24, 0x24, 0x7f, 0x2f, 0x80, 0x30, 0x2b, 0x6f, 0x1a, 0x80, 0x27, 0x2b, 0x3c, 0x06, - 0x80, 0x09, 0x30, 0x62, 0x0a, 0x80, 0x18, 0xc4, 0x80, 0x32, 0x67, 0x17, 0x80, 0x03, 0xc4, 0x00, - 0x80, 0x15, 0x32, 0x67, 0x05, 0x80, 0x06, 0x32, 0x67, 0x05, 0x80, 0x06, 0x43, 0x57, 0x03, 0x80, - 0x0c, 0x2b, 0x6a, 0x08, 0x80, 0x0c, 0x2b, 0x64, 0x01, 0x80, 0x0c, 0x24, 0x7f, 0x2f, 0x80, 0x30, - 0x2b, 0x67, 0x19, 0x80, 0x24, 0x2b, 0x65, 0x0b, 0x80, 0x0c, 0x30, 0x53, 0x05, 0x80, 0x0c, 0x30, - 0x53, 0x01, 0x80, 0x0c, 0x24, 0x7a, 0x17, 0x80, 0x18, 0x2b, 0x78, 0x03, 0x80, 0x0c, 0x43, 0x74, - 0x02, 0x80, 0x0c, 0x2b, 0x74, 0x0b, 0x80, 0x0c, 0x48, 0x5e, 0x01, 0x80, 0x0c, 0x95, 0xd8, 0x04, - 0x00, 0x26, 0x74, 0x30, 0x80, 0x30, 0x2d, 0x68, 0x18, 0x80, 0x24, 0x2d, 0x59, 0x0b, 0x80, 0x0c, - 0x32, 0x59, 0x05, 0x80, 0x0c, 0x43, 0x4a, 0x02, 0x80, 0x0c, 0x26, 0x6f, 0x23, 0x80, 0x24, 0xc4, - 0xb0, 0x2c, 0x7f, 0x21, 0x80, 0x03, 0xc4, 0x00, 0x80, 0x21, 0x2b, 0x7f, 0x2f, 0x80, 0x30, 0x32, - 0x62, 0x18, 0x80, 0x24, 0x32, 0x51, 0x0b, 0x80, 0x0c, 0x37, 0x65, 0x07, 0x80, 0x18, 0xc4, 0x98, - 0x39, 0x62, 0x2f, 0x80, 0x03, 0xc4, 0x00, 0x80, 0x2d, 0x32, 0x53, 0x05, 0x80, 0x18, 0x2b, 0x71, - 0x2f, 0x80, 0x30, 0x32, 0x62, 0x17, 0x80, 0x24, 0x32, 0x49, 0x0b, 0x80, 0x0c, 0x37, 0x5c, 0x09, - 0x80, 0x0c, 0x37, 0x5c, 0x02, 0x80, 0x0c, 0xc4, 0xb4, 0x35, 0x65, 0x2f, 0x80, 0x03, 0xc4, 0x00, - 0x80, 0x2d, 0x32, 0x56, 0x06, 0x80, 0x18, 0x24, 0x7f, 0x2f, 0x80, 0x30, 0x46, 0x5b, 0x0b, 0x80, - 0x18, 0x2e, 0x7f, 0x45, 0x80, 0x48, 0x2c, 0x7f, 0x53, 0x80, 0x54, 0x44, 0x7a, 0x0b, 0x80, 0x0c, - 0x2c, 0x7d, 0x0a, 0x80, 0x0c, 0x3c, 0x33, 0x05, 0x80, 0x0c, 0x42, 0x73, 0x14, 0x80, 0x0c, 0xc4, - 0x15, 0x80, 0x0c, 0xc4, 0x00, 0x2c, 0x7c, 0x09, 0x80, 0x0c, 0x44, 0x7a, 0x09, 0x80, 0x0c, 0x2c, - 0x68, 0x09, 0x80, 0x0c, 0x3c, 0x54, 0x05, 0x80, 0x0c, 0x2c, 0x7c, 0x09, 0x80, 0x0c, 0x44, 0x38, - 0x06, 0x80, 0x0c, 0x2c, 0x73, 0x09, 0x80, 0x0c, 0x2c, 0x7a, 0x09, 0x80, 0x0c, 0x2c, 0x7c, 0x09, - 0x80, 0x0c, 0x44, 0x6d, 0x09, 0x80, 0x0c, 0x2c, 0x7a, 0x17, 0x80, 0x18, 0x2c, 0x7d, 0x09, 0x80, - 0x0c, 0x3f, 0x5c, 0x06, 0x80, 0x0c, 0x2c, 0x7d, 0x0b, 0x80, 0x0c, 0x44, 0x35, 0x05, 0x80, 0x0c, - 0x2c, 0x7e, 0x09, 0x80, 0x0c, 0x2c, 0x7a, 0x09, 0x80, 0x0c, 0x2c, 0x7c, 0x0a, 0x80, 0x0c, 0x44, - 0x7c, 0x09, 0x80, 0x0c, 0x2c, 0x7e, 0x0b, 0x80, 0x0c, 0x3c, 0x3c, 0x08, 0x80, 0x0c, 0x42, 0x70, - 0x11, 0x80, 0x0c, 0xc4, 0x15, 0x80, 0x0c, 0xc4, 0x00, 0x2c, 0x7a, 0x09, 0x80, 0x0c, 0x44, 0x7a, - 0x09, 0x80, 0x0c, 0x2c, 0x78, 0x17, 0x80, 0x18, 0x2c, 0x7d, 0x0b, 0x80, 0x0c, 0x3e, 0x44, 0x06, - 0x80, 0x0c, 0x44, 0x7d, 0x0a, 0x80, 0x0c, 0x2c, 0x62, 0x0b, 0x80, 0x0c, 0x2c, 0x7a, 0x09, 0x80, - 0x0c, 0x44, 0x7a, 0x0a, 0x80, 0x0c, 0x2a, 0x78, 0x17, 0x80, 0x18, 0x2c, 0x7d, 0x16, 0x80, 0x18, - 0x44, 0x62, 0x05, 0x80, 0x0c, 0x2c, 0x62, 0x05, 0x80, 0x0c, 0x2c, 0x7c, 0x17, 0x80, 0x18, 0x2c, - 0x7a, 0x08, 0x80, 0x0c, 0x44, 0x7a, 0x07, 0x80, 0x0c, 0x2c, 0x7d, 0x17, 0x80, 0x18, 0x2c, 0x7c, - 0x07, 0x80, 0x0c, 0x44, 0x7c, 0x07, 0x80, 0x0c, 0x2c, 0x7a, 0x09, 0x80, 0x0c, 0x44, 0x76, 0x05, - 0x80, 0x0c, 0x29, 0x78, 0x17, 0x80, 0x18, 0x2a, 0x71, 0x16, 0x80, 0x18, 0x2b, 0x79, 0x17, 0x80, - 0x18, 0x2c, 0x7f, 0x17, 0x80, 0x24, 0x44, 0x7a, 0x0b, 0x80, 0x0c, 0x2c, 0x7d, 0x0a, 0x80, 0x0c, - 0x3c, 0x33, 0x05, 0x80, 0x0c, 0x42, 0x61, 0x14, 0x80, 0x18, 0x2c, 0x7c, 0x09, 0x80, 0x0c, 0x44, - 0x7a, 0x09, 0x80, 0x0c, 0x2c, 0x68, 0x09, 0x80, 0x0c, 0x3c, 0x54, 0x05, 0x80, 0x0c, 0x2c, 0x7c, - 0x09, 0x80, 0x0c, 0x44, 0x38, 0x06, 0x80, 0x0c, 0x2c, 0x73, 0x09, 0x80, 0x0c, 0x2c, 0x7a, 0x09, - 0x80, 0x0c, 0x2c, 0x7d, 0x0b, 0x80, 0x0c, 0x3e, 0x44, 0x06, 0x80, 0x0c, 0x44, 0x7d, 0x0a, 0x80, - 0x0c, 0x2c, 0x62, 0x0b, 0x80, 0x0c, 0x2c, 0x7d, 0x0b, 0x80, 0x0c, 0x44, 0x7d, 0x0a, 0x80, 0x0c, - 0x3e, 0x44, 0x06, 0x80, 0x0c, 0x2c, 0x62, 0x0b, 0x80, 0x0c, 0x2c, 0x7a, 0x07, 0x80, 0x0c, 0x44, - 0x5d, 0x04, 0x80, 0x0c, 0x27, 0x7d, 0x59, 0x80, 0x60, 0x3f, 0x72, 0x05, 0x80, 0x0c, 0x27, 0x62, - 0x05, 0x80, 0x0c, 0x27, 0x72, 0x05, 0x80, 0x18, 0x3f, 0x70, 0x05, 0x80, 0x0c, 0x27, 0x62, 0x05, - 0x80, 0x0c, 0x27, 0x72, 0x05, 0x80, 0x0c, 0x3f, 0x62, 0x05, 0x80, 0x0c, 0x27, 0x62, 0x05, 0x80, - 0x18, 0x3f, 0x76, 0x11, 0x80, 0x18, 0x27, 0x67, 0x05, 0x80, 0x0c, 0x27, 0x65, 0x05, 0x80, 0x81, - 0x4c, 0x27, 0x7d, 0x16, 0x80, 0x18, 0x3f, 0x72, 0x05, 0x80, 0x0c, 0x27, 0x62, 0x05, 0x80, 0x0c, - 0x27, 0x72, 0x05, 0x80, 0x18, 0x3f, 0x70, 0x05, 0x80, 0x0c, 0x27, 0x62, 0x05, 0x80, 0x0c, 0x27, - 0x72, 0x05, 0x80, 0x0c, 0x3f, 0x62, 0x05, 0x80, 0x0c, 0x27, 0x62, 0x05, 0x80, 0x18, 0x3f, 0x76, - 0x11, 0x80, 0x18, 0x27, 0x67, 0x05, 0x80, 0x0c, 0x27, 0x65, 0x05, 0x80, 0x81, 0x4b, 0x27, 0x60, - 0x34, 0x80, 0x01, 0xc4, 0x00, 0x80, 0x03, 0xc4, 0xff, 0x80, 0x04, 0xc4, 0xfc, 0x80, 0x03, 0xc4, - 0xf9, 0x80, 0x04, 0xc4, 0xf3, 0x80, 0x03, 0xc4, 0xec, 0x80, 0x04, 0xc4, 0xe3, 0x80, 0x03, 0xc4, - 0xda, 0x80, 0x04, 0xc4, 0xce, 0x80, 0x03, 0xc4, 0xc1, 0x80, 0x04, 0xc4, 0xb2, 0x80, 0x04, 0xc4, - 0xa2, 0x80, 0x03, 0xc4, 0x90, 0x80, 0x04, 0xc4, 0x80, 0x80, 0x02, 0xc4, 0x00, 0x80, 0x84, 0x10, - 0x94, 0x3a, 0x00, 0x00, 0x80, 0x81, 0x40, 0xff, 0x26, 0x7f, 0x2f, 0x80, 0x30, 0x2d, 0x73, 0x17, - 0x80, 0x24, 0x2d, 0x42, 0x0b, 0x80, 0x0c, 0x32, 0x5e, 0x05, 0x80, 0x18, 0xc4, 0x80, 0x34, 0x6f, - 0x30, 0x80, 0x03, 0xc4, 0x00, 0x80, 0x2d, 0x2d, 0x66, 0x0b, 0x80, 0x0c, 0x26, 0x50, 0x01, 0x80, - 0x0c, 0xfd, 0xc7, 0x00, 0x81, 0x01, 0xc1, 0x4a, 0xc0, 0x7f, 0xc4, 0x00, 0xca, 0x00, 0x4a, 0x53, - 0x82, 0x7f, 0x47, 0x4a, 0x82, 0x7f, 0x80, 0x83, 0x00, 0x4c, 0x49, 0x82, 0x74, 0x48, 0x40, 0x82, - 0x73, 0x80, 0x83, 0x00, 0x48, 0x43, 0x82, 0x7d, 0x4c, 0x48, 0x82, 0x7c, 0x80, 0x83, 0x00, 0x47, - 0x35, 0x82, 0x68, 0x4a, 0x43, 0x82, 0x68, 0x80, 0x83, 0x00, 0x47, 0x67, 0x82, 0x79, 0x4a, 0x70, - 0x82, 0x79, 0x80, 0x83, 0x00, 0x48, 0x5a, 0x82, 0x68, 0x4c, 0x63, 0x82, 0x68, 0x80, 0x83, 0x00, - 0x4c, 0x63, 0x82, 0x79, 0x48, 0x66, 0x82, 0x79, 0x80, 0x83, 0x00, 0x4a, 0x6b, 0x82, 0x2d, 0x47, - 0x55, 0x82, 0x2d, 0x80, 0x82, 0x38, 0x48, 0x73, 0x22, 0x45, 0x66, 0x22, 0x80, 0x24, 0x49, 0x6b, - 0x23, 0x46, 0x66, 0x23, 0x80, 0x24, 0x4a, 0x6e, 0x82, 0x79, 0x47, 0x69, 0x82, 0x79, 0x80, 0x83, - 0x00, 0x4c, 0x60, 0x82, 0x6d, 0x48, 0x5d, 0x82, 0x6d, 0x80, 0x83, 0x00, 0x4c, 0x66, 0x82, 0x7a, - 0x48, 0x63, 0x82, 0x79, 0x80, 0x83, 0x00, 0x4a, 0x60, 0x45, 0x47, 0x4f, 0x45, 0x80, 0x48, 0x4b, - 0x66, 0x47, 0x48, 0x55, 0x47, 0x80, 0x48, 0x49, 0x4f, 0x83, 0x2f, 0x4d, 0x69, 0x83, 0x2f, 0x80, - 0x93, 0x70, 0x94, 0x04, 0x05, 0x00, 0x80, 0x81, 0x40, 0xff, 0xc7, 0x00, 0x81, 0x02, 0xc1, 0x4a, - 0xc0, 0x00, 0xc4, 0x00, 0xca, 0x00, 0x40, 0x47, 0x82, 0x7f, 0x43, 0x58, 0x82, 0x7f, 0x80, 0x83, - 0x00, 0x42, 0x40, 0x82, 0x79, 0x45, 0x57, 0x82, 0x79, 0x80, 0x83, 0x00, 0x45, 0x56, 0x82, 0x7f, - 0x41, 0x49, 0x82, 0x7f, 0x80, 0x83, 0x00, 0x40, 0x5c, 0x82, 0x67, 0x43, 0x57, 0x82, 0x67, 0x80, - 0x83, 0x00, 0x43, 0x66, 0x82, 0x7a, 0x40, 0x6c, 0x82, 0x7a, 0x80, 0x83, 0x00, 0x45, 0x66, 0x82, - 0x6e, 0x42, 0x6c, 0x82, 0x6e, 0x80, 0x83, 0x00, 0x45, 0x69, 0x82, 0x79, 0x41, 0x5b, 0x82, 0x7a, - 0x80, 0x83, 0x00, 0x40, 0x6f, 0x82, 0x2d, 0x43, 0x61, 0x82, 0x2d, 0x80, 0x82, 0x38, 0x3e, 0x67, - 0x22, 0x41, 0x60, 0x22, 0x80, 0x24, 0x3f, 0x6a, 0x23, 0x42, 0x62, 0x23, 0x80, 0x24, 0x40, 0x73, - 0x82, 0x7a, 0x43, 0x61, 0x82, 0x7a, 0x80, 0x83, 0x00, 0x45, 0x61, 0x82, 0x6d, 0x42, 0x60, 0x82, - 0x6d, 0x80, 0x83, 0x00, 0x41, 0x67, 0x82, 0x7a, 0x45, 0x5e, 0x82, 0x79, 0x80, 0x83, 0x00, 0x40, - 0x6c, 0x45, 0x43, 0x5b, 0x45, 0x80, 0x48, 0x44, 0x5e, 0x47, 0x41, 0x69, 0x47, 0x80, 0x48, 0x42, - 0x6c, 0x83, 0x2f, 0x46, 0x61, 0x83, 0x2f, 0x80, 0x93, 0x70, 0x94, 0xbc, 0x05, 0x00, 0x80, 0x81, - 0x40, 0xff, 0xc7, 0x00, 0x81, 0x03, 0xc1, 0x5a, 0xc0, 0x7f, 0xc4, 0x00, 0xcb, 0x17, 0xca, 0x00, - 0x3b, 0x3a, 0x82, 0x79, 0x3e, 0x43, 0x82, 0x79, 0x80, 0x60, 0x4f, 0x5c, 0x06, 0x80, 0x18, 0x4f, - 0x26, 0x06, 0x80, 0x0c, 0x43, 0x5c, 0x06, 0x80, 0x0c, 0x4f, 0x14, 0x06, 0x80, 0x0c, 0x43, 0x26, - 0x06, 0x80, 0x18, 0x43, 0x14, 0x06, 0x80, 0x6c, 0x4f, 0x5c, 0x06, 0x80, 0x18, 0x4f, 0x26, 0x06, - 0x80, 0x0c, 0x43, 0x5c, 0x06, 0x80, 0x0c, 0x4f, 0x14, 0x06, 0x80, 0x0c, 0x43, 0x26, 0x06, 0x80, - 0x18, 0x43, 0x14, 0x06, 0x80, 0x0c, 0x40, 0x4f, 0x82, 0x79, 0x3c, 0x46, 0x82, 0x79, 0x80, 0x60, - 0x4f, 0x5c, 0x05, 0x80, 0x18, 0x4f, 0x26, 0x05, 0x80, 0x0c, 0x43, 0x5c, 0x05, 0x80, 0x0c, 0x4f, - 0x14, 0x05, 0x80, 0x0c, 0x43, 0x26, 0x05, 0x80, 0x18, 0x43, 0x14, 0x05, 0x80, 0x6c, 0x4f, 0x5c, - 0x04, 0x80, 0x18, 0x4f, 0x26, 0x04, 0x80, 0x0c, 0x43, 0x5c, 0x04, 0x80, 0x0c, 0x4f, 0x14, 0x04, - 0x80, 0x0c, 0x43, 0x26, 0x04, 0x80, 0x18, 0x43, 0x14, 0x04, 0x80, 0x0c, 0x3c, 0x3f, 0x82, 0x77, - 0x40, 0x44, 0x82, 0x76, 0x80, 0x60, 0x4f, 0x5c, 0x05, 0x80, 0x18, 0x4f, 0x26, 0x05, 0x80, 0x0c, - 0x43, 0x5c, 0x04, 0x80, 0x0c, 0x4f, 0x14, 0x05, 0x80, 0x0c, 0x43, 0x26, 0x04, 0x80, 0x18, 0x43, - 0x14, 0x04, 0x80, 0x6c, 0x4f, 0x5c, 0x07, 0x80, 0x18, 0x4f, 0x26, 0x07, 0x80, 0x0c, 0x43, 0x5c, - 0x05, 0x80, 0x0c, 0x4f, 0x14, 0x07, 0x80, 0x0c, 0x43, 0x26, 0x05, 0x80, 0x18, 0x43, 0x14, 0x05, - 0x80, 0x0c, 0x3e, 0x3a, 0x82, 0x7a, 0x3b, 0x2c, 0x82, 0x7b, 0x80, 0x60, 0x4f, 0x5c, 0x05, 0x80, - 0x18, 0x4f, 0x26, 0x05, 0x80, 0x0c, 0x43, 0x5c, 0x05, 0x80, 0x0c, 0x4f, 0x14, 0x05, 0x80, 0x0c, - 0x43, 0x26, 0x05, 0x80, 0x18, 0x43, 0x14, 0x05, 0x80, 0x81, 0x48, 0x4e, 0x4c, 0x0d, 0x80, 0x05, - 0xc0, 0x4f, 0x4f, 0x59, 0x82, 0x0e, 0x80, 0x81, 0x10, 0xca, 0x00, 0x80, 0x08, 0xca, 0x04, 0x80, - 0x08, 0xca, 0x0a, 0x80, 0x07, 0xca, 0x12, 0x80, 0x6d, 0xca, 0x00, 0x80, 0x05, 0x4f, 0x35, 0x05, - 0x80, 0x06, 0x51, 0x5b, 0x4a, 0x80, 0x48, 0x4f, 0x46, 0x07, 0x80, 0x17, 0x4e, 0x50, 0x42, 0x80, - 0x48, 0x56, 0x61, 0x81, 0x6e, 0x80, 0x62, 0xca, 0x02, 0x80, 0x08, 0xca, 0x07, 0x80, 0x08, 0xca, - 0x0b, 0x80, 0x07, 0xca, 0x12, 0x80, 0x79, 0xca, 0x00, 0x51, 0x5c, 0x44, 0x80, 0x40, 0x53, 0x55, - 0x09, 0x80, 0x08, 0x54, 0x55, 0x78, 0x80, 0x54, 0xca, 0x01, 0x80, 0x09, 0xca, 0x0a, 0x80, 0x08, - 0xca, 0x17, 0x80, 0x12, 0x53, 0x58, 0x49, 0x80, 0x01, 0xca, 0x00, 0x80, 0x47, 0x51, 0x53, 0x79, - 0x80, 0x49, 0xca, 0x01, 0x80, 0x08, 0xca, 0x09, 0x80, 0x08, 0xca, 0x0f, 0x80, 0x07, 0xca, 0x17, - 0x80, 0x19, 0xca, 0x00, 0x53, 0x5d, 0x48, 0x80, 0x47, 0x54, 0x56, 0x81, 0x40, 0x80, 0x4f, 0xca, - 0x00, 0x80, 0x07, 0xca, 0x04, 0x80, 0x08, 0xca, 0x09, 0x80, 0x07, 0xca, 0x0d, 0x80, 0x07, 0xca, - 0x12, 0x80, 0x54, 0x4f, 0x56, 0x77, 0x80, 0x01, 0xca, 0x00, 0x80, 0x4e, 0xca, 0x00, 0x80, 0x09, - 0xca, 0x09, 0x80, 0x08, 0xca, 0x12, 0x80, 0x13, 0xca, 0x00, 0x80, 0x02, 0x4d, 0x55, 0x2b, 0x80, - 0x28, 0x4e, 0x50, 0x25, 0x80, 0x23, 0x4f, 0x58, 0x82, 0x08, 0x80, 0x81, 0x11, 0xca, 0x00, 0x80, - 0x08, 0xca, 0x04, 0x80, 0x08, 0xca, 0x0a, 0x80, 0x07, 0xca, 0x12, 0x80, 0x61, 0xca, 0x00, 0x80, - 0x12, 0x4f, 0x41, 0x0b, 0x80, 0x06, 0x51, 0x53, 0x4a, 0x80, 0x48, 0x4f, 0x44, 0x0a, 0x80, 0x17, - 0x4e, 0x46, 0x44, 0x80, 0x47, 0x56, 0x5e, 0x81, 0x6f, 0x80, 0x62, 0xca, 0x00, 0x80, 0x08, 0xca, - 0x04, 0x80, 0x08, 0xca, 0x0a, 0x80, 0x07, 0xca, 0x12, 0x80, 0x78, 0x54, 0x5e, 0x4a, 0x80, 0x01, - 0xca, 0x00, 0x80, 0x47, 0x58, 0x59, 0x49, 0x80, 0x48, 0x54, 0x60, 0x7a, 0x80, 0x49, 0xca, 0x00, - 0x80, 0x08, 0xca, 0x04, 0x80, 0x08, 0xca, 0x0a, 0x80, 0x07, 0xca, 0x12, 0x80, 0x19, 0xca, 0x00, - 0x53, 0x5d, 0x76, 0x80, 0x48, 0xca, 0x00, 0x80, 0x08, 0xca, 0x04, 0x80, 0x08, 0xca, 0x0a, 0x80, - 0x07, 0xca, 0x12, 0x80, 0x13, 0x54, 0x26, 0x0e, 0x80, 0x05, 0x56, 0x57, 0x4a, 0x80, 0x01, 0xca, - 0x00, 0x80, 0x47, 0x54, 0x5f, 0x82, 0x7f, 0x80, 0x81, 0x11, 0xca, 0x01, 0x80, 0x08, 0xca, 0x04, - 0x80, 0x08, 0xca, 0x09, 0x80, 0x08, 0xca, 0x0a, 0x80, 0x08, 0xca, 0x0f, 0x80, 0x08, 0xca, 0x12, - 0x80, 0x07, 0xca, 0x17, 0x80, 0x81, 0x41, 0xca, 0x00, 0x80, 0x91, 0x7f, 0x94, 0x74, 0x06, 0x00, - 0x80, 0x81, 0x40, 0xff, 0xc7, 0x00, 0x81, 0x04, 0xc1, 0x5a, 0xc0, 0x00, 0xc4, 0x00, 0xcb, 0x17, - 0xca, 0x00, 0x37, 0x53, 0x82, 0x7c, 0x34, 0x3f, 0x82, 0x7a, 0x80, 0x6c, 0x43, 0x5f, 0x06, 0x80, - 0x18, 0x43, 0x28, 0x06, 0x80, 0x18, 0x4f, 0x5f, 0x09, 0x43, 0x11, 0x06, 0x80, 0x18, 0x4f, 0x28, - 0x09, 0x80, 0x0c, 0x95, 0x5a, 0x0b, 0x00, 0x39, 0x46, 0x82, 0x79, 0x36, 0x2f, 0x82, 0x79, 0x80, - 0x0c, 0x4f, 0x11, 0x08, 0x80, 0x60, 0x43, 0x5f, 0x05, 0x80, 0x18, 0x43, 0x28, 0x05, 0x80, 0x18, - 0x4f, 0x5f, 0x08, 0x43, 0x11, 0x05, 0x80, 0x18, 0x4f, 0x28, 0x08, 0x80, 0x18, 0x4f, 0x11, 0x08, - 0x80, 0x60, 0x43, 0x5f, 0x07, 0x80, 0x18, 0x43, 0x28, 0x07, 0x80, 0x18, 0x4f, 0x5f, 0x09, 0x43, - 0x11, 0x07, 0x80, 0x18, 0x4f, 0x28, 0x09, 0x80, 0x0c, 0x35, 0x34, 0x82, 0x7a, 0x39, 0x3e, 0x82, - 0x79, 0x80, 0x0c, 0x4f, 0x11, 0x09, 0x80, 0x60, 0x43, 0x5f, 0x04, 0x80, 0x18, 0x43, 0x28, 0x04, - 0x80, 0x18, 0x4f, 0x5f, 0x09, 0x43, 0x11, 0x04, 0x80, 0x18, 0x4f, 0x28, 0x09, 0x80, 0x0c, 0x95, - 0x5a, 0x0b, 0x00, 0x34, 0x41, 0x82, 0x7c, 0x37, 0x34, 0x82, 0x7c, 0x80, 0x0c, 0x4f, 0x11, 0x08, - 0x80, 0x60, 0x43, 0x5f, 0x05, 0x80, 0x18, 0x43, 0x28, 0x05, 0x80, 0x18, 0x4f, 0x5f, 0x08, 0x43, - 0x11, 0x05, 0x80, 0x18, 0x4f, 0x28, 0x08, 0x80, 0x18, 0x4f, 0x11, 0x08, 0x80, 0x81, 0x2f, 0x42, - 0x56, 0x0d, 0x80, 0x05, 0x43, 0x63, 0x82, 0x0e, 0x80, 0x02, 0xc0, 0x4f, 0x80, 0x81, 0x0e, 0xca, - 0x00, 0x80, 0x08, 0xca, 0x04, 0x80, 0x08, 0xca, 0x0a, 0x80, 0x07, 0xca, 0x12, 0x80, 0x6d, 0xca, - 0x00, 0x80, 0x05, 0x43, 0x3f, 0x05, 0x80, 0x06, 0x45, 0x65, 0x4a, 0x80, 0x48, 0x43, 0x50, 0x07, - 0x80, 0x17, 0x42, 0x5a, 0x42, 0x80, 0x48, 0x4a, 0x6b, 0x81, 0x6e, 0x80, 0x62, 0xca, 0x02, 0x80, - 0x08, 0xca, 0x07, 0x80, 0x08, 0xca, 0x0b, 0x80, 0x07, 0xca, 0x12, 0x80, 0x79, 0xca, 0x00, 0x45, - 0x66, 0x44, 0x80, 0x40, 0x47, 0x5f, 0x09, 0x80, 0x08, 0x48, 0x5f, 0x78, 0x80, 0x54, 0xca, 0x01, - 0x80, 0x09, 0xca, 0x0a, 0x80, 0x08, 0xca, 0x17, 0x80, 0x12, 0x47, 0x62, 0x49, 0x80, 0x01, 0xca, - 0x00, 0x80, 0x47, 0x45, 0x5d, 0x79, 0x80, 0x49, 0xca, 0x01, 0x80, 0x08, 0xca, 0x09, 0x80, 0x08, - 0xca, 0x0f, 0x80, 0x07, 0xca, 0x17, 0x80, 0x19, 0xca, 0x00, 0x47, 0x67, 0x48, 0x80, 0x47, 0x48, - 0x60, 0x81, 0x40, 0x80, 0x4f, 0xca, 0x00, 0x80, 0x07, 0xca, 0x04, 0x80, 0x08, 0xca, 0x09, 0x80, - 0x07, 0xca, 0x0d, 0x80, 0x07, 0xca, 0x12, 0x80, 0x54, 0x43, 0x60, 0x77, 0x80, 0x01, 0xca, 0x00, - 0x80, 0x4e, 0xca, 0x00, 0x80, 0x09, 0xca, 0x09, 0x80, 0x08, 0xca, 0x12, 0x80, 0x13, 0xca, 0x00, - 0x80, 0x02, 0x41, 0x5f, 0x2b, 0x80, 0x28, 0x42, 0x5a, 0x25, 0x80, 0x23, 0x43, 0x62, 0x82, 0x08, - 0x80, 0x81, 0x11, 0xca, 0x00, 0x80, 0x08, 0xca, 0x04, 0x80, 0x08, 0xca, 0x0a, 0x80, 0x07, 0xca, - 0x12, 0x80, 0x61, 0xca, 0x00, 0x80, 0x12, 0x43, 0x4b, 0x0b, 0x80, 0x06, 0x45, 0x5d, 0x4a, 0x80, - 0x48, 0x43, 0x4e, 0x0a, 0x80, 0x17, 0x42, 0x50, 0x44, 0x80, 0x47, 0x4a, 0x68, 0x81, 0x6f, 0x80, - 0x62, 0xca, 0x00, 0x80, 0x08, 0xca, 0x04, 0x80, 0x08, 0xca, 0x0a, 0x80, 0x07, 0xca, 0x12, 0x80, - 0x78, 0x48, 0x68, 0x4a, 0x80, 0x01, 0xca, 0x00, 0x80, 0x47, 0x4c, 0x63, 0x49, 0x80, 0x48, 0x48, - 0x6a, 0x7a, 0x80, 0x49, 0xca, 0x00, 0x80, 0x08, 0xca, 0x04, 0x80, 0x08, 0xca, 0x0a, 0x80, 0x07, - 0xca, 0x12, 0x80, 0x19, 0xca, 0x00, 0x47, 0x67, 0x76, 0x80, 0x48, 0xca, 0x00, 0x80, 0x08, 0xca, - 0x04, 0x80, 0x08, 0xca, 0x0a, 0x80, 0x07, 0xca, 0x12, 0x80, 0x13, 0x48, 0x30, 0x0e, 0x80, 0x05, - 0x4a, 0x61, 0x4a, 0x80, 0x01, 0xca, 0x00, 0x80, 0x47, 0x48, 0x69, 0x82, 0x7f, 0x80, 0x81, 0x11, - 0xca, 0x01, 0x80, 0x08, 0xca, 0x04, 0x80, 0x08, 0xca, 0x09, 0x80, 0x08, 0xca, 0x0a, 0x80, 0x08, - 0xca, 0x0f, 0x80, 0x08, 0xca, 0x12, 0x80, 0x07, 0xca, 0x17, 0x80, 0x81, 0x41, 0xca, 0x00, 0x80, - 0x92, 0x00, 0x94, 0x06, 0x09, 0x00, 0x80, 0x81, 0x40, 0xff, 0x80, 0x0c, 0x4f, 0x11, 0x09, 0x80, - 0x60, 0x43, 0x5f, 0x05, 0x80, 0x18, 0x43, 0x28, 0x05, 0x80, 0x18, 0x4f, 0x5f, 0x08, 0x43, 0x11, - 0x05, 0x80, 0x18, 0x4f, 0x28, 0x08, 0x80, 0x0c, 0xfd, 0xc7, 0x00, 0x81, 0x05, 0xc1, 0x5d, 0xc0, - 0x40, 0xc4, 0x00, 0xca, 0x00, 0x4f, 0x4e, 0x8b, 0x4b, 0x80, 0xa0, 0x7e, 0x4a, 0x4a, 0x45, 0x47, - 0x39, 0x45, 0x43, 0x47, 0x45, 0x80, 0x48, 0x4b, 0x51, 0x47, 0x48, 0x40, 0x47, 0x44, 0x4b, 0x47, - 0x80, 0x48, 0x49, 0x37, 0x83, 0x31, 0x4d, 0x51, 0x83, 0x31, 0x46, 0x4b, 0x83, 0x31, 0x80, 0x93, - 0x72, 0x94, 0x7b, 0x0b, 0x00, 0x80, 0x81, 0x40, 0xff, 0xc7, 0x00, 0x81, 0x06, 0xc1, 0x7f, 0xc0, - 0x40, 0xc4, 0x00, 0xca, 0x00, 0x4f, 0x48, 0x0b, 0x80, 0x18, 0x54, 0x3a, 0x0b, 0x80, 0x18, 0x5b, - 0x37, 0x0b, 0x80, 0x18, 0x4f, 0x42, 0x0b, 0x80, 0x18, 0x54, 0x3b, 0x0b, 0x80, 0x18, 0x5b, 0x2e, - 0x0b, 0x80, 0x18, 0x4f, 0x3e, 0x0b, 0x80, 0x18, 0x54, 0x38, 0x0b, 0x80, 0x18, 0x5b, 0x33, 0x0b, - 0x80, 0x18, 0x4f, 0x3a, 0x0b, 0x80, 0x18, 0x54, 0x3a, 0x0b, 0x80, 0x18, 0x5b, 0x30, 0x0b, 0x80, - 0x18, 0x4f, 0x45, 0x0b, 0x80, 0x18, 0x54, 0x3b, 0x0b, 0x80, 0x18, 0x5b, 0x34, 0x0b, 0x80, 0x18, - 0x4f, 0x3d, 0x0b, 0x80, 0x18, 0x54, 0x34, 0x0b, 0x80, 0x18, 0x5b, 0x32, 0x0b, 0x80, 0x18, 0x4f, - 0x3d, 0x0b, 0x80, 0x18, 0x54, 0x37, 0x0b, 0x80, 0x18, 0x5b, 0x2b, 0x0b, 0x80, 0x18, 0x4f, 0x40, - 0x0b, 0x80, 0x18, 0x54, 0x38, 0x0b, 0x80, 0x18, 0x5b, 0x2e, 0x0b, 0x80, 0x18, 0x4f, 0x3d, 0x0b, - 0x80, 0x18, 0x54, 0x34, 0x0b, 0x80, 0x18, 0x5b, 0x2e, 0x0b, 0x80, 0x18, 0x4f, 0x35, 0x0b, 0x80, - 0x18, 0x54, 0x34, 0x0b, 0x80, 0x18, 0x5b, 0x30, 0x0b, 0x80, 0x18, 0x4f, 0x3b, 0x0b, 0x80, 0x18, - 0x54, 0x36, 0x0b, 0x80, 0x18, 0x5b, 0x36, 0x0b, 0x80, 0x18, 0x4f, 0x40, 0x0b, 0x80, 0x18, 0x54, - 0x39, 0x0b, 0x80, 0x18, 0x5b, 0x2d, 0x0b, 0x80, 0x18, 0x4f, 0x40, 0x0b, 0x80, 0x18, 0x54, 0x31, - 0x0b, 0x80, 0x18, 0x5b, 0x30, 0x0b, 0x80, 0x18, 0x4f, 0x40, 0x0b, 0x80, 0x18, 0x54, 0x35, 0x0b, - 0x80, 0x18, 0x5b, 0x30, 0x0b, 0x80, 0x18, 0x4f, 0x3b, 0x0b, 0x80, 0x18, 0x54, 0x32, 0x0b, 0x80, - 0x18, 0x5b, 0x32, 0x0b, 0x80, 0x18, 0x4f, 0x3a, 0x0b, 0x80, 0x18, 0x54, 0x36, 0x0b, 0x80, 0x18, - 0x5b, 0x2e, 0x0b, 0x80, 0x18, 0x4f, 0x3a, 0x0b, 0x80, 0x18, 0x54, 0x39, 0x0b, 0x80, 0x18, 0x5b, - 0x2e, 0x0b, 0x80, 0x18, 0x4f, 0x3d, 0x0b, 0x80, 0x18, 0x54, 0x37, 0x0b, 0x80, 0x18, 0x5b, 0x2e, - 0x0b, 0x80, 0x18, 0x4f, 0x42, 0x0b, 0x80, 0x18, 0x54, 0x37, 0x0b, 0x80, 0x18, 0x5b, 0x2e, 0x0b, - 0x80, 0x18, 0x4f, 0x38, 0x0b, 0x80, 0x18, 0x54, 0x2d, 0x0b, 0x80, 0x18, 0x5b, 0x29, 0x0b, 0x80, - 0x18, 0x4f, 0x35, 0x0b, 0x80, 0x18, 0x54, 0x2d, 0x0b, 0x80, 0x18, 0x5b, 0x32, 0x0b, 0x80, 0x18, - 0x4f, 0x31, 0x0b, 0x80, 0xaa, 0x18, 0x94, 0xbb, 0x0b, 0x00, 0x80, 0x81, 0x40, 0xff, 0xc7, 0x00, - 0x81, 0x07, 0xc1, 0x7f, 0xc0, 0x40, 0xc4, 0x00, 0xca, 0x00, 0x80, 0xa5, 0x0f, 0x50, 0x5a, 0x24, - 0x80, 0x08, 0x57, 0x4e, 0x20, 0x80, 0x0c, 0x5a, 0x53, 0x0f, 0x80, 0x07, 0x5c, 0x43, 0x14, 0x80, - 0x0a, 0x5e, 0x64, 0x2a, 0x80, 0x0c, 0x63, 0x5e, 0x3a, 0x80, 0x90, 0x40, 0x94, 0x10, 0x0d, 0x00, - 0x80, 0x81, 0x40, 0xff, 0xc7, 0x00, 0x81, 0x7f, 0xc1, 0x7f, 0xc0, 0x40, 0xc4, 0x00, 0xca, 0x00, - 0x24, 0x7e, 0x47, 0x31, 0x60, 0x81, 0x0f, 0x80, 0x84, 0x38, 0x41, 0x17, 0x03, 0x80, 0x04, 0x41, - 0x30, 0x03, 0x80, 0x04, 0x41, 0x74, 0x0b, 0x80, 0x0c, 0x41, 0x56, 0x0b, 0x80, 0x0c, 0x41, 0x7f, - 0x47, 0x80, 0x60, 0x24, 0x71, 0x23, 0x31, 0x5b, 0x46, 0x80, 0x24, 0x24, 0x74, 0x23, 0x34, 0x54, - 0x81, 0x03, 0x80, 0x24, 0x24, 0x78, 0x2f, 0x31, 0x60, 0x81, 0x0f, 0x80, 0x84, 0x38, 0x41, 0x17, - 0x03, 0x80, 0x04, 0x41, 0x30, 0x03, 0x80, 0x04, 0x29, 0x4c, 0x0b, 0x41, 0x5a, 0x0b, 0x80, 0x0c, - 0x29, 0x28, 0x0b, 0x41, 0x3e, 0x0b, 0x80, 0x0c, 0x29, 0x3a, 0x0b, 0x41, 0x40, 0x0b, 0x80, 0x0c, - 0x29, 0x28, 0x0b, 0x41, 0x38, 0x0b, 0x80, 0x0c, 0x29, 0x36, 0x0b, 0x41, 0x42, 0x0b, 0x80, 0x0c, - 0x29, 0x38, 0x0b, 0x41, 0x38, 0x0b, 0x80, 0x0c, 0x29, 0x44, 0x0b, 0x41, 0x4c, 0x0b, 0x80, 0x0c, - 0x29, 0x42, 0x0b, 0x41, 0x54, 0x0b, 0x80, 0x0c, 0x29, 0x4e, 0x0b, 0x41, 0x5e, 0x0b, 0x80, 0x0c, - 0x29, 0x54, 0x0b, 0x41, 0x54, 0x0b, 0x80, 0x0c, 0x29, 0x5e, 0x0b, 0x41, 0x62, 0x0b, 0x80, 0x0c, - 0x29, 0x62, 0x0b, 0x41, 0x6a, 0x0b, 0x80, 0x0c, 0x29, 0x6e, 0x0b, 0x41, 0x73, 0x0b, 0x80, 0x0c, - 0x29, 0x6c, 0x0b, 0x41, 0x73, 0x0b, 0x80, 0x0c, 0x29, 0x73, 0x0b, 0x41, 0x73, 0x0b, 0x80, 0x0c, - 0x29, 0x70, 0x0b, 0x41, 0x73, 0x0b, 0x80, 0x0c, 0x31, 0x60, 0x81, 0x3e, 0x24, 0x79, 0x2f, 0x80, - 0x30, 0x29, 0x7c, 0x23, 0x80, 0x24, 0x24, 0x6c, 0x0b, 0x80, 0x0c, 0x24, 0x7e, 0x17, 0x80, 0x18, - 0x24, 0x79, 0x17, 0x80, 0x18, 0x29, 0x7c, 0x2e, 0x80, 0x30, 0x95, 0x5f, 0x10, 0x00, 0x95, 0x83, - 0x10, 0x00, 0x24, 0x79, 0x2f, 0x80, 0x30, 0x29, 0x7c, 0x23, 0x80, 0x24, 0x24, 0x6e, 0x0b, 0x80, - 0x0c, 0x24, 0x7c, 0x17, 0x80, 0x18, 0x31, 0x5b, 0x47, 0x24, 0x79, 0x23, 0x80, 0x24, 0x34, 0x54, - 0x81, 0x4b, 0x24, 0x79, 0x23, 0x80, 0x24, 0x95, 0xa2, 0x10, 0x00, 0x95, 0x5f, 0x10, 0x00, 0x95, - 0x83, 0x10, 0x00, 0x24, 0x79, 0x2f, 0x80, 0x30, 0x29, 0x7c, 0x23, 0x80, 0x24, 0x24, 0x6e, 0x0b, - 0x80, 0x0c, 0x24, 0x7c, 0x17, 0x80, 0x18, 0x37, 0x7f, 0x47, 0x24, 0x79, 0x23, 0x80, 0x24, 0x34, - 0x60, 0x81, 0x4b, 0x24, 0x79, 0x23, 0x80, 0x24, 0x95, 0xa2, 0x10, 0x00, 0x95, 0x5f, 0x10, 0x00, - 0x95, 0x83, 0x10, 0x00, 0x24, 0x79, 0x2f, 0x80, 0x30, 0x29, 0x7c, 0x23, 0x80, 0x24, 0x24, 0x6e, - 0x0b, 0x80, 0x0c, 0x24, 0x7c, 0x17, 0x80, 0x18, 0x31, 0x5b, 0x47, 0x24, 0x79, 0x23, 0x80, 0x24, - 0x34, 0x5b, 0x81, 0x4b, 0x24, 0x79, 0x23, 0x80, 0x24, 0x95, 0xa2, 0x10, 0x00, 0x95, 0xc5, 0x10, - 0x00, 0x31, 0x5b, 0x81, 0x0f, 0x24, 0x79, 0x23, 0x80, 0x24, 0x24, 0x79, 0x0b, 0x80, 0x0c, 0x29, - 0x7c, 0x17, 0x80, 0x18, 0x34, 0x5b, 0x77, 0x24, 0x79, 0x2f, 0x80, 0x30, 0x24, 0x79, 0x17, 0x80, - 0x18, 0x31, 0x60, 0x81, 0x10, 0x29, 0x7c, 0x2f, 0x80, 0x30, 0x95, 0xc5, 0x10, 0x00, 0x24, 0x79, - 0x23, 0x80, 0x24, 0x24, 0x79, 0x0b, 0x80, 0x0c, 0x29, 0x7c, 0x17, 0x80, 0x18, 0x24, 0x79, 0x2f, - 0x80, 0x30, 0x24, 0x79, 0x17, 0x80, 0x18, 0x29, 0x7c, 0x2f, 0x80, 0x30, 0x37, 0x79, 0x81, 0x0f, - 0x24, 0x79, 0x23, 0x80, 0x24, 0x24, 0x79, 0x0b, 0x80, 0x0c, 0x29, 0x7c, 0x2f, 0x80, 0x18, 0x24, - 0x79, 0x2f, 0x80, 0x30, 0x24, 0x79, 0x2f, 0x80, 0x18, 0x29, 0x7c, 0x2f, 0x80, 0x18, 0x24, 0x7c, - 0x17, 0x80, 0x18, 0x24, 0x79, 0x23, 0x80, 0x24, 0x24, 0x79, 0x23, 0x80, 0x0c, 0x29, 0x7c, 0x2f, - 0x80, 0x18, 0x24, 0x79, 0x2f, 0x80, 0x30, 0x24, 0x79, 0x17, 0x80, 0x18, 0x24, 0x7c, 0x2f, 0x80, - 0x18, 0x29, 0x7c, 0x0b, 0x80, 0x0c, 0x29, 0x7c, 0x2f, 0x80, 0x0c, 0x24, 0x79, 0x23, 0x80, 0x24, - 0x24, 0x79, 0x0b, 0x80, 0x0c, 0x29, 0x7c, 0x2f, 0x80, 0x18, 0x24, 0x79, 0x2f, 0x80, 0x30, 0x24, - 0x79, 0x2f, 0x80, 0x18, 0x29, 0x7c, 0x2f, 0x80, 0x18, 0x24, 0x7c, 0x17, 0x80, 0x18, 0x24, 0x79, - 0x23, 0x80, 0x24, 0x24, 0x79, 0x23, 0x80, 0x0c, 0x29, 0x7c, 0x2f, 0x80, 0x18, 0x24, 0x79, 0x17, - 0x80, 0x18, 0x24, 0x79, 0x17, 0x80, 0x18, 0x31, 0x60, 0x81, 0x6f, 0x24, 0x79, 0x47, 0x80, 0x18, - 0x29, 0x7c, 0x2f, 0x80, 0x30, 0x37, 0x79, 0x5f, 0x24, 0x79, 0x23, 0x80, 0x24, 0x24, 0x79, 0x23, - 0x80, 0x0c, 0x29, 0x7c, 0x2f, 0x80, 0x18, 0x24, 0x79, 0x17, 0x80, 0x18, 0x24, 0x79, 0x17, 0x80, - 0x18, 0x24, 0x79, 0x47, 0x80, 0x18, 0x29, 0x7c, 0x2f, 0x80, 0x30, 0x24, 0x79, 0x23, 0x80, 0x24, - 0x24, 0x79, 0x23, 0x80, 0x0c, 0x29, 0x7c, 0x2f, 0x80, 0x18, 0x34, 0x60, 0x81, 0x57, 0x24, 0x79, - 0x2f, 0x80, 0x30, 0x24, 0x79, 0x3b, 0x80, 0x18, 0x29, 0x7c, 0x2f, 0x80, 0x30, 0x37, 0x79, 0x5f, - 0x24, 0x79, 0x23, 0x80, 0x24, 0x24, 0x79, 0x23, 0x80, 0x0c, 0x29, 0x7c, 0x2f, 0x80, 0x18, 0x24, - 0x79, 0x2f, 0x80, 0x30, 0x24, 0x79, 0x47, 0x80, 0x18, 0x29, 0x79, 0x0b, 0x80, 0x0c, 0x29, 0x7c, - 0x30, 0x80, 0x24, 0x24, 0x79, 0x23, 0x80, 0x24, 0x24, 0x79, 0x23, 0x80, 0x0c, 0x29, 0x7c, 0x3b, - 0x80, 0x18, 0x24, 0x79, 0x2f, 0x80, 0x30, 0x24, 0x79, 0x47, 0x80, 0x18, 0x29, 0x7f, 0x17, 0x80, - 0x18, 0x29, 0x7f, 0x0b, 0x80, 0x0c, 0x29, 0x7f, 0x81, 0x4b, 0x80, 0x0c, 0x37, 0x79, 0x81, 0x3f, - 0x24, 0x79, 0x81, 0x3f, 0x80, 0x84, 0x40, 0x94, 0x46, 0x0d, 0x00, 0x80, 0x81, 0x40, 0xff, 0x24, - 0x79, 0x2f, 0x80, 0x30, 0x29, 0x7c, 0x23, 0x80, 0x24, 0x24, 0x6e, 0x0b, 0x80, 0x0c, 0x24, 0x7c, - 0x17, 0x80, 0x18, 0x24, 0x79, 0x17, 0x80, 0x18, 0x29, 0x6e, 0x0b, 0x80, 0x0c, 0x29, 0x7c, 0x23, - 0x80, 0x24, 0xfd, 0x24, 0x79, 0x2f, 0x80, 0x30, 0x29, 0x7c, 0x23, 0x80, 0x24, 0x24, 0x6c, 0x0b, - 0x80, 0x0c, 0x24, 0x7e, 0x17, 0x80, 0x18, 0x24, 0x79, 0x17, 0x80, 0x18, 0x29, 0x7c, 0x2e, 0x80, - 0x30, 0xfd, 0x31, 0x60, 0x81, 0x3f, 0x24, 0x79, 0x2f, 0x80, 0x30, 0x29, 0x7c, 0x23, 0x80, 0x24, - 0x24, 0x6c, 0x0b, 0x80, 0x0c, 0x24, 0x7e, 0x17, 0x80, 0x18, 0x24, 0x79, 0x17, 0x80, 0x18, 0x29, - 0x7c, 0x2e, 0x80, 0x30, 0xfd, 0x24, 0x79, 0x23, 0x80, 0x24, 0x24, 0x79, 0x0b, 0x80, 0x0c, 0x29, - 0x7c, 0x17, 0x80, 0x18, 0x24, 0x79, 0x2f, 0x80, 0x30, 0x24, 0x79, 0x17, 0x80, 0x18, 0x29, 0x7c, - 0x2f, 0x80, 0x0c, 0x24, 0x79, 0x23, 0x80, 0x24, 0xfd, 0xc7, 0x00, 0x81, 0x0b, 0xc1, 0x60, 0xc0, - 0x4d, 0xc4, 0x00, 0xca, 0x00, 0x2e, 0x45, 0x17, 0x80, 0x18, 0x2a, 0x2d, 0x0b, 0x80, 0x0c, 0x2a, - 0x57, 0x0b, 0x80, 0x0c, 0x2a, 0x61, 0x0b, 0x80, 0x0c, 0x2e, 0x76, 0x0b, 0x80, 0x0c, 0x2c, 0x4e, - 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x0c, 0x2a, 0x6d, 0x0b, 0x80, 0x0c, 0x2a, 0x30, 0x0b, - 0x80, 0x0c, 0x2a, 0x38, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x65, 0x0b, 0x80, - 0x0c, 0x2a, 0x34, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x36, 0x0b, 0x80, 0x0c, - 0x2a, 0x6d, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x42, 0x0b, 0x80, 0x0c, 0x2a, - 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x5a, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x42, - 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x32, 0x0b, - 0x80, 0x0c, 0x2a, 0x1e, 0x0b, 0x80, 0x0c, 0x2a, 0x42, 0x0b, 0x80, 0x0c, 0x2a, 0x69, 0x0b, 0x80, - 0x0c, 0x2a, 0x36, 0x0b, 0x80, 0x0c, 0x2a, 0x36, 0x0b, 0x80, 0x0c, 0x2e, 0x75, 0x0b, 0x80, 0x0c, - 0x2c, 0x52, 0x0b, 0x80, 0x0c, 0x2a, 0x29, 0x0b, 0x80, 0x0c, 0x2a, 0x38, 0x0b, 0x80, 0x0c, 0x2a, - 0x31, 0x0b, 0x80, 0x0c, 0x2a, 0x61, 0x0b, 0x80, 0x0c, 0x2a, 0x1d, 0x0b, 0x80, 0x0c, 0x2a, 0x3b, - 0x0b, 0x80, 0x0c, 0x2a, 0x5a, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x3e, 0x0b, - 0x80, 0x0c, 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, 0x3b, 0x0b, 0x80, 0x0c, 0x2a, 0x69, 0x0b, 0x80, - 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x57, 0x0b, 0x80, 0x0c, - 0x2a, 0x77, 0x0b, 0x80, 0x0c, 0x2a, 0x47, 0x0b, 0x80, 0x0c, 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, - 0x51, 0x0b, 0x80, 0x0c, 0x2a, 0x65, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x40, - 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x77, 0x0b, 0x80, 0x0c, 0x2a, 0x54, 0x0b, - 0x80, 0x0c, 0x2e, 0x6d, 0x23, 0x80, 0x18, 0x2c, 0x4d, 0x0b, 0x80, 0x0c, 0x2e, 0x69, 0x23, 0x80, - 0x24, 0x2c, 0x69, 0x05, 0x80, 0x06, 0x2a, 0x33, 0x05, 0x80, 0x06, 0x2a, 0x52, 0x05, 0x80, 0x06, - 0x2a, 0x25, 0x05, 0x80, 0x06, 0x2a, 0x69, 0x05, 0x80, 0x06, 0x2a, 0x48, 0x05, 0x80, 0x06, 0x2a, - 0x5c, 0x05, 0x80, 0x06, 0x2a, 0x38, 0x05, 0x80, 0x06, 0x2a, 0x67, 0x0b, 0x80, 0x0c, 0x2a, 0x1e, - 0x0b, 0x80, 0x0c, 0x2a, 0x49, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x0c, 0x2a, 0x6d, 0x0b, - 0x80, 0x0c, 0x2a, 0x30, 0x0b, 0x80, 0x0c, 0x2a, 0x38, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, - 0x0c, 0x2a, 0x65, 0x0b, 0x80, 0x0c, 0x2a, 0x34, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, - 0x2a, 0x36, 0x0b, 0x80, 0x0c, 0x2a, 0x6d, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, - 0x42, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x5a, 0x0b, 0x80, 0x0c, 0x2a, 0x39, - 0x0b, 0x80, 0x0c, 0x2a, 0x42, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, - 0x80, 0x0c, 0x2a, 0x32, 0x0b, 0x80, 0x0c, 0x2a, 0x1e, 0x0b, 0x80, 0x0c, 0x2a, 0x42, 0x0b, 0x80, - 0x0c, 0x2a, 0x69, 0x0b, 0x80, 0x0c, 0x2e, 0x7e, 0x0b, 0x80, 0x0c, 0x2c, 0x58, 0x0b, 0x80, 0x0c, - 0x2a, 0x4a, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x29, 0x0b, 0x80, 0x0c, 0x2a, - 0x38, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x0c, 0x2a, 0x61, 0x0b, 0x80, 0x0c, 0x2a, 0x1d, - 0x0b, 0x80, 0x0c, 0x2a, 0x3b, 0x0b, 0x80, 0x0c, 0x2a, 0x5a, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, - 0x80, 0x0c, 0x2a, 0x3e, 0x0b, 0x80, 0x0c, 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, 0x3b, 0x0b, 0x80, - 0x0c, 0x2a, 0x69, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2e, 0x78, 0x77, 0x80, 0x30, - 0x2c, 0x1a, 0x17, 0x80, 0x18, 0x2c, 0x30, 0x17, 0x80, 0x18, 0x2c, 0x1c, 0x17, 0x80, 0x18, 0x2c, - 0x32, 0x17, 0x80, 0x18, 0x2c, 0x20, 0x17, 0x80, 0x18, 0x2c, 0x3e, 0x17, 0x80, 0x18, 0x2c, 0x2e, - 0x17, 0x80, 0x24, 0x2a, 0x31, 0x0b, 0x80, 0x0c, 0x2a, 0x2d, 0x0b, 0x80, 0x0c, 0x2a, 0x57, 0x0b, - 0x80, 0x18, 0x2a, 0x1e, 0x0b, 0x80, 0x0c, 0x2a, 0x49, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, - 0x0c, 0x2a, 0x6d, 0x0b, 0x80, 0x0c, 0x2a, 0x3f, 0x0b, 0x80, 0x0c, 0x2e, 0x7d, 0x17, 0x80, 0x18, - 0x2c, 0x65, 0x0b, 0x80, 0x0c, 0x2a, 0x34, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, - 0x36, 0x0b, 0x80, 0x0c, 0x95, 0x95, 0x17, 0x00, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x29, 0x0b, - 0x80, 0x0c, 0x2a, 0x38, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x18, 0x2a, 0x1d, 0x0b, 0x80, - 0x0c, 0x2a, 0x3b, 0x0b, 0x80, 0x0c, 0x2a, 0x5a, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, 0x80, 0x0c, - 0x2a, 0x3e, 0x0b, 0x80, 0x0c, 0x2e, 0x73, 0x17, 0x80, 0x18, 0x2c, 0x69, 0x0b, 0x80, 0x0c, 0x2a, - 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x57, 0x0b, 0x80, 0x0c, 0x2a, 0x77, - 0x0b, 0x80, 0x0c, 0x2a, 0x47, 0x0b, 0x80, 0x0c, 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, 0x51, 0x0b, - 0x80, 0x18, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, - 0x0c, 0x2a, 0x77, 0x0b, 0x80, 0x0c, 0x2a, 0x54, 0x0b, 0x80, 0x0c, 0x2e, 0x7a, 0x23, 0x80, 0x24, - 0x2e, 0x7c, 0x23, 0x80, 0x24, 0x95, 0xd7, 0x17, 0x00, 0x95, 0x1e, 0x18, 0x00, 0x2a, 0x74, 0x0b, - 0x80, 0x0c, 0x2a, 0x29, 0x0b, 0x80, 0x0c, 0x2a, 0x38, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, - 0x18, 0x2a, 0x1d, 0x0b, 0x80, 0x0c, 0x2a, 0x3b, 0x0b, 0x80, 0x0c, 0x2a, 0x5a, 0x0b, 0x80, 0x0c, - 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x3e, 0x0b, 0x80, 0x0c, 0x2e, 0x78, 0x17, 0x80, 0x18, 0x2c, - 0x69, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x57, - 0x0b, 0x80, 0x0c, 0x2a, 0x77, 0x0b, 0x80, 0x0c, 0x2a, 0x47, 0x0b, 0x80, 0x0c, 0x2a, 0x3c, 0x0b, - 0x80, 0x0c, 0x2a, 0x51, 0x0b, 0x80, 0x18, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, - 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x77, 0x0b, 0x80, 0x0c, 0x2a, 0x54, 0x0b, 0x80, 0x0c, - 0x2e, 0x7e, 0x17, 0x80, 0x18, 0x2c, 0x5a, 0x0b, 0x80, 0x0c, 0x2e, 0x7b, 0x23, 0x80, 0x24, 0x2a, - 0x61, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x0c, 0x2a, 0x2d, 0x0b, 0x80, 0x0c, 0x2a, 0x57, - 0x0b, 0x80, 0x18, 0x2a, 0x1e, 0x0b, 0x80, 0x0c, 0x2a, 0x49, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, - 0x80, 0x0c, 0x2a, 0x6d, 0x0b, 0x80, 0x0c, 0x2a, 0x30, 0x0b, 0x80, 0x0c, 0x2e, 0x74, 0x17, 0x80, - 0x18, 0x2c, 0x65, 0x0b, 0x80, 0x0c, 0x2a, 0x34, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, - 0x2a, 0x36, 0x0b, 0x80, 0x0c, 0x95, 0x95, 0x17, 0x00, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x29, - 0x0b, 0x80, 0x0c, 0x2a, 0x38, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x18, 0x2a, 0x1d, 0x0b, - 0x80, 0x0c, 0x2a, 0x3b, 0x0b, 0x80, 0x0c, 0x2a, 0x5a, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, 0x80, - 0x0c, 0x2a, 0x3e, 0x0b, 0x80, 0x0c, 0x2e, 0x7a, 0x17, 0x80, 0x18, 0x2c, 0x69, 0x0b, 0x80, 0x0c, - 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x57, 0x0b, 0x80, 0x0c, 0x2a, - 0x77, 0x0b, 0x80, 0x0c, 0x2a, 0x47, 0x0b, 0x80, 0x0c, 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, 0x51, - 0x0b, 0x80, 0x18, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, - 0x80, 0x0c, 0x2a, 0x77, 0x0b, 0x80, 0x0c, 0x2a, 0x54, 0x0b, 0x80, 0x0c, 0x2e, 0x76, 0x17, 0x80, - 0x18, 0x2c, 0x4b, 0x0b, 0x80, 0x0c, 0x2e, 0x7c, 0x23, 0x80, 0x24, 0x2a, 0x69, 0x0b, 0x80, 0x0c, - 0x2a, 0x31, 0x0b, 0x80, 0x0c, 0x2a, 0x2d, 0x0b, 0x80, 0x0c, 0x2a, 0x57, 0x0b, 0x80, 0x18, 0x2a, - 0x1e, 0x0b, 0x80, 0x0c, 0x2a, 0x49, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x0c, 0x2a, 0x6d, - 0x0b, 0x80, 0x0c, 0x2a, 0x30, 0x0b, 0x80, 0x0c, 0x2e, 0x72, 0x17, 0x80, 0x18, 0x2c, 0x65, 0x0b, - 0x80, 0x0c, 0x2a, 0x34, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x36, 0x0b, 0x80, - 0x0c, 0x95, 0x1e, 0x18, 0x00, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x29, 0x0b, 0x80, 0x0c, 0x2a, - 0x38, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x18, 0x2a, 0x1d, 0x0b, 0x80, 0x0c, 0x2e, 0x78, - 0x17, 0x80, 0x18, 0x2c, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x3e, 0x0b, 0x80, 0x0c, 0x2e, 0x78, 0x17, - 0x80, 0x18, 0x2c, 0x69, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, - 0x0c, 0x2a, 0x57, 0x0b, 0x80, 0x0c, 0x2a, 0x77, 0x0b, 0x80, 0x0c, 0x2a, 0x47, 0x0b, 0x80, 0x0c, - 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, 0x51, 0x0b, 0x80, 0x18, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, - 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x77, 0x0b, 0x80, 0x0c, 0x2a, 0x54, - 0x0b, 0x80, 0x0c, 0x2e, 0x6e, 0x17, 0x80, 0x18, 0x2c, 0x3f, 0x0b, 0x80, 0x0c, 0x2e, 0x65, 0x0b, - 0x80, 0x0c, 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, 0x51, 0x0b, 0x80, 0x0c, 0x95, 0xd7, 0x17, 0x00, - 0x95, 0x65, 0x18, 0x00, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x29, 0x0b, 0x80, 0x0c, 0x2a, 0x38, - 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x18, 0x2a, 0x1d, 0x0b, 0x80, 0x0c, 0x2a, 0x3b, 0x0b, - 0x80, 0x0c, 0x2a, 0x5a, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x3e, 0x0b, 0x80, - 0x0c, 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, 0x3b, 0x0b, 0x80, 0x0c, 0x2a, 0x69, 0x0b, 0x80, 0x0c, - 0x2a, 0x45, 0x0b, 0x80, 0x24, 0x95, 0x65, 0x18, 0x00, 0x2a, 0x77, 0x0b, 0x80, 0x0c, 0x2a, 0x47, - 0x0b, 0x80, 0x0c, 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, 0x51, 0x0b, 0x80, 0x18, 0x2a, 0x40, 0x0b, - 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x77, 0x0b, 0x80, - 0x0c, 0x2a, 0x54, 0x0b, 0x80, 0x0c, 0x2a, 0x3b, 0x0b, 0x80, 0x0c, 0x2a, 0x47, 0x0b, 0x80, 0x18, - 0x2a, 0x47, 0x0b, 0x80, 0x0c, 0x2a, 0x2a, 0x0b, 0x80, 0x0c, 0x2a, 0x34, 0x0b, 0x80, 0x0c, 0x2a, - 0x69, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x0c, 0x2a, 0x2d, 0x0b, 0x80, 0x0c, 0x2a, 0x57, - 0x0b, 0x80, 0x18, 0x2a, 0x1e, 0x0b, 0x80, 0x0c, 0x2a, 0x49, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, - 0x80, 0x0c, 0x2a, 0x6d, 0x0b, 0x80, 0x0c, 0x2a, 0x30, 0x0b, 0x80, 0x0c, 0x2e, 0x65, 0x17, 0x80, - 0x18, 0x2c, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x34, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, - 0x2a, 0x36, 0x0b, 0x80, 0x0c, 0x95, 0x1e, 0x18, 0x00, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x29, - 0x0b, 0x80, 0x0c, 0x2a, 0x38, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x18, 0x2a, 0x1d, 0x0b, - 0x80, 0x0c, 0x2a, 0x3b, 0x0b, 0x80, 0x0c, 0x2a, 0x5a, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, 0x80, - 0x0c, 0x2a, 0x3e, 0x0b, 0x80, 0x0c, 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, 0x3b, 0x0b, 0x80, 0x24, - 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x57, 0x0b, 0x80, 0x0c, 0x2a, 0x77, 0x0b, 0x80, 0x0c, 0x2a, - 0x47, 0x0b, 0x80, 0x0c, 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, 0x51, 0x0b, 0x80, 0x18, 0x2a, 0x40, - 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x77, 0x0b, - 0x80, 0x0c, 0x2a, 0x54, 0x0b, 0x80, 0x0c, 0x2e, 0x6a, 0x17, 0x80, 0x18, 0x2c, 0x5a, 0x0b, 0x80, - 0x0c, 0x2a, 0x47, 0x0b, 0x80, 0x24, 0x2c, 0x6a, 0x81, 0x0f, 0x80, 0x84, 0x40, 0x94, 0xeb, 0x10, - 0x00, 0x80, 0x81, 0x40, 0xff, 0x2a, 0x6d, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, - 0x42, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, 0x18, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x42, - 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x32, 0x0b, - 0x80, 0x0c, 0x2a, 0x1e, 0x0b, 0x80, 0x0c, 0x2a, 0x42, 0x0b, 0x80, 0x24, 0x2a, 0x2a, 0x0b, 0x80, - 0x0c, 0x2a, 0x4b, 0x0b, 0x80, 0x0c, 0xfd, 0x2a, 0x69, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, - 0x0c, 0x2a, 0x2d, 0x0b, 0x80, 0x0c, 0x2a, 0x57, 0x0b, 0x80, 0x18, 0x2a, 0x1e, 0x0b, 0x80, 0x0c, - 0x2a, 0x49, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x0c, 0x2a, 0x6d, 0x0b, 0x80, 0x0c, 0x2a, - 0x30, 0x0b, 0x80, 0x0c, 0x2a, 0x38, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, 0x18, 0x2a, 0x34, - 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x36, 0x0b, 0x80, 0x0c, 0xfd, 0x2a, 0x6d, - 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x42, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, - 0x80, 0x18, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x42, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, - 0x0c, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x32, 0x0b, 0x80, 0x0c, 0x2a, 0x1e, 0x0b, 0x80, 0x0c, - 0x2a, 0x42, 0x0b, 0x80, 0x18, 0x2a, 0x36, 0x0b, 0x80, 0x0c, 0x2a, 0x2a, 0x0b, 0x80, 0x0c, 0x2a, - 0x4b, 0x0b, 0x80, 0x0c, 0xfd, 0x2a, 0x6d, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, - 0x42, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, 0x18, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x42, - 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x32, 0x0b, - 0x80, 0x0c, 0x2e, 0x66, 0x17, 0x80, 0x18, 0x2c, 0x42, 0x0b, 0x80, 0x0c, 0x2a, 0x36, 0x0b, 0x80, - 0x0c, 0x2a, 0x2a, 0x0b, 0x80, 0x0c, 0x2a, 0x4b, 0x0b, 0x80, 0x0c, 0xfd, 0xc7, 0x00, 0x81, 0x0c, - 0xc1, 0x52, 0xc0, 0x27, 0xc4, 0x00, 0xca, 0x00, 0x80, 0x18, 0x46, 0x4c, 0x2f, 0x80, 0x30, 0x46, - 0x44, 0x2f, 0x80, 0x30, 0x46, 0x44, 0x2f, 0x80, 0x30, 0x46, 0x41, 0x2f, 0x80, 0x30, 0x46, 0x46, - 0x2f, 0x80, 0x30, 0x46, 0x46, 0x2f, 0x80, 0x30, 0x46, 0x45, 0x2f, 0x80, 0x30, 0x46, 0x44, 0x2f, - 0x80, 0x30, 0x46, 0x45, 0x2f, 0x80, 0x30, 0x46, 0x43, 0x2f, 0x80, 0x30, 0x46, 0x41, 0x2f, 0x80, - 0x30, 0x46, 0x43, 0x2f, 0x80, 0x30, 0x46, 0x44, 0x2f, 0x80, 0x30, 0x46, 0x44, 0x2f, 0x80, 0x30, - 0x46, 0x49, 0x2f, 0x80, 0x30, 0x46, 0x48, 0x2f, 0x80, 0x30, 0x46, 0x49, 0x2f, 0x80, 0x30, 0x46, - 0x46, 0x2f, 0x80, 0x30, 0x46, 0x42, 0x2f, 0x80, 0x30, 0x46, 0x47, 0x2f, 0x80, 0x30, 0x46, 0x48, - 0x2f, 0x80, 0x30, 0x46, 0x48, 0x2f, 0x80, 0x30, 0x46, 0x4e, 0x2f, 0x80, 0x30, 0x46, 0x47, 0x2f, - 0x80, 0x30, 0x46, 0x46, 0x2f, 0x80, 0x30, 0x46, 0x4a, 0x2f, 0x80, 0x30, 0x46, 0x44, 0x2f, 0x80, - 0x30, 0x46, 0x49, 0x2f, 0x80, 0x30, 0x46, 0x48, 0x2f, 0x80, 0x30, 0x46, 0x48, 0x2f, 0x80, 0x30, - 0x46, 0x4a, 0x2f, 0x80, 0x30, 0x46, 0x49, 0x17, 0x80, 0x18, 0x95, 0xcd, 0x19, 0x00, 0x95, 0x1e, - 0x1a, 0x00, 0x95, 0x6f, 0x1a, 0x00, 0x95, 0xc0, 0x1a, 0x00, 0x95, 0xcd, 0x19, 0x00, 0x95, 0x1e, - 0x1a, 0x00, 0x95, 0x6f, 0x1a, 0x00, 0x95, 0xc0, 0x1a, 0x00, 0x95, 0xcd, 0x19, 0x00, 0x95, 0x1e, - 0x1a, 0x00, 0x95, 0x6f, 0x1a, 0x00, 0x95, 0xc0, 0x1a, 0x00, 0x95, 0xcd, 0x19, 0x00, 0x95, 0x1e, - 0x1a, 0x00, 0x95, 0x6f, 0x1a, 0x00, 0x95, 0xc0, 0x1a, 0x00, 0x95, 0x1e, 0x1a, 0x00, 0x95, 0x6f, - 0x1a, 0x00, 0x95, 0xc0, 0x1a, 0x00, 0x95, 0x6f, 0x1a, 0x00, 0x95, 0xcd, 0x19, 0x00, 0x95, 0x1e, - 0x1a, 0x00, 0x95, 0x6f, 0x1a, 0x00, 0x95, 0xc0, 0x1a, 0x00, 0x95, 0xc0, 0x1a, 0x00, 0x46, 0x7d, - 0x81, 0x0f, 0x80, 0x84, 0x40, 0x94, 0xae, 0x18, 0x00, 0x80, 0x81, 0x40, 0xff, 0x46, 0x28, 0x0b, - 0x80, 0x0c, 0x46, 0x1f, 0x0b, 0x80, 0x0c, 0x46, 0x4a, 0x0b, 0x80, 0x0c, 0x46, 0x26, 0x0b, 0x80, - 0x0c, 0x46, 0x1d, 0x0b, 0x80, 0x0c, 0x46, 0x24, 0x0b, 0x80, 0x0c, 0x46, 0x50, 0x0b, 0x80, 0x0c, - 0x46, 0x23, 0x0b, 0x80, 0x0c, 0x46, 0x28, 0x0b, 0x80, 0x0c, 0x46, 0x21, 0x0b, 0x80, 0x0c, 0x46, - 0x50, 0x0b, 0x80, 0x0c, 0x46, 0x26, 0x0b, 0x80, 0x0c, 0x46, 0x2d, 0x0b, 0x80, 0x0c, 0x46, 0x2f, - 0x0b, 0x80, 0x0c, 0x46, 0x59, 0x0b, 0x80, 0x0c, 0x46, 0x27, 0x0b, 0x80, 0x0c, 0xfd, 0x46, 0x1f, - 0x0b, 0x80, 0x0c, 0x46, 0x22, 0x0b, 0x80, 0x0c, 0x46, 0x64, 0x0b, 0x80, 0x0c, 0x46, 0x26, 0x0b, - 0x80, 0x0c, 0x46, 0x25, 0x0b, 0x80, 0x0c, 0x46, 0x26, 0x0b, 0x80, 0x0c, 0x46, 0x54, 0x0b, 0x80, - 0x0c, 0x46, 0x30, 0x0b, 0x80, 0x0c, 0x46, 0x2d, 0x0b, 0x80, 0x0c, 0x46, 0x21, 0x0b, 0x80, 0x0c, - 0x46, 0x5e, 0x0b, 0x80, 0x0c, 0x46, 0x2e, 0x0b, 0x80, 0x0c, 0x46, 0x27, 0x0b, 0x80, 0x0c, 0x46, - 0x20, 0x0b, 0x80, 0x0c, 0x46, 0x5b, 0x0b, 0x80, 0x0c, 0x46, 0x34, 0x0b, 0x80, 0x0c, 0xfd, 0x46, - 0x29, 0x0b, 0x80, 0x0c, 0x46, 0x1b, 0x0b, 0x80, 0x0c, 0x46, 0x56, 0x0b, 0x80, 0x0c, 0x46, 0x1a, - 0x0b, 0x80, 0x0c, 0x46, 0x2f, 0x0b, 0x80, 0x0c, 0x46, 0x2b, 0x0b, 0x80, 0x0c, 0x46, 0x54, 0x0b, - 0x80, 0x0c, 0x46, 0x22, 0x0b, 0x80, 0x0c, 0x46, 0x32, 0x0b, 0x80, 0x0c, 0x46, 0x24, 0x0b, 0x80, - 0x0c, 0x46, 0x56, 0x0b, 0x80, 0x0c, 0x46, 0x2f, 0x0b, 0x80, 0x0c, 0x46, 0x2b, 0x0b, 0x80, 0x0c, - 0x46, 0x22, 0x0b, 0x80, 0x0c, 0x46, 0x5b, 0x0b, 0x80, 0x0c, 0x46, 0x21, 0x0b, 0x80, 0x0c, 0xfd, - 0x46, 0x37, 0x0b, 0x80, 0x0c, 0x46, 0x37, 0x0b, 0x80, 0x0c, 0x46, 0x5e, 0x0b, 0x80, 0x0c, 0x46, - 0x12, 0x0b, 0x80, 0x0c, 0x46, 0x35, 0x0b, 0x80, 0x0c, 0x46, 0x24, 0x0b, 0x80, 0x0c, 0x46, 0x48, - 0x0b, 0x80, 0x0c, 0x46, 0x26, 0x0b, 0x80, 0x0c, 0x46, 0x2b, 0x0b, 0x80, 0x0c, 0x46, 0x1d, 0x0b, - 0x80, 0x0c, 0x46, 0x50, 0x0b, 0x80, 0x0c, 0x46, 0x1b, 0x0b, 0x80, 0x0c, 0x46, 0x37, 0x0b, 0x80, - 0x0c, 0x46, 0x2e, 0x0b, 0x80, 0x0c, 0x46, 0x59, 0x0b, 0x80, 0x0c, 0x46, 0x19, 0x0b, 0x80, 0x0c, - 0xfd, 0xff, 0x00, 0x00, -}; - -const u8 sound_bank_data[] ATTRIBUTE_ALIGN(32) = -{ - 0x53, 0x42, 0x4e, 0x4b, 0xff, 0xfe, 0x02, 0x00, 0x84, 0x04, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, - 0x44, 0x41, 0x54, 0x41, 0x74, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x11, 0x64, 0x04, 0x00, - 0x01, 0x3c, 0x02, 0x00, 0x01, 0x46, 0x02, 0x00, 0x11, 0x04, 0x04, 0x00, 0x11, 0x24, 0x04, 0x00, - 0x01, 0x50, 0x02, 0x00, 0x01, 0x5a, 0x02, 0x00, 0x11, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xd8, 0x03, 0x00, 0x01, 0x64, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x6e, 0x02, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x47, 0x7f, 0x7f, 0x7f, 0x7b, 0x40, 0x09, 0x00, 0x00, 0x00, 0x47, 0x7f, 0x7f, 0x7f, 0x7b, 0x40, - 0x10, 0x00, 0x00, 0x00, 0x4b, 0x7f, 0x7f, 0x7f, 0x64, 0x40, 0x0f, 0x00, 0x00, 0x00, 0x58, 0x7f, - 0x7f, 0x7f, 0x64, 0x40, 0x03, 0x00, 0x00, 0x00, 0x42, 0x7f, 0x7f, 0x7f, 0x78, 0x40, 0x24, 0x41, - 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x7f, 0x7f, 0x7f, 0x78, 0x40, 0x01, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x24, 0x7f, 0x7f, 0x7f, 0x78, 0x40, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x7f, - 0x7f, 0x7f, 0x78, 0x40, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x7f, 0x7f, 0x7f, 0x78, 0x40, - 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x28, 0x7f, 0x7f, 0x7f, 0x78, 0x40, 0x01, 0x00, 0x0e, 0x00, - 0x00, 0x00, 0x28, 0x7f, 0x7f, 0x7f, 0x78, 0x40, 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x28, 0x7f, - 0x7f, 0x7f, 0x78, 0x40, 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x28, 0x7f, 0x7f, 0x7f, 0x78, 0x40, - 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x28, 0x7f, 0x7f, 0x7f, 0x78, 0x40, 0x01, 0x00, 0x0e, 0x00, - 0x00, 0x00, 0x28, 0x7f, 0x7f, 0x7f, 0x78, 0x40, 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x28, 0x7f, - 0x7f, 0x7f, 0x78, 0x40, 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x28, 0x7f, 0x7f, 0x7f, 0x78, 0x40, - 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x28, 0x7f, 0x7f, 0x7f, 0x78, 0x40, 0x01, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x30, 0x7f, 0x7f, 0x7f, 0x78, 0x22, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x30, 0x7f, - 0x7f, 0x7f, 0x78, 0x22, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x30, 0x7f, 0x7f, 0x7f, 0x78, 0x22, - 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x7f, 0x7f, 0x7f, 0x78, 0x5e, 0x01, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x34, 0x7f, 0x7f, 0x7f, 0x78, 0x5e, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x7f, - 0x7f, 0x7f, 0x78, 0x5e, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x37, 0x7f, 0x7f, 0x7f, 0x78, 0x36, - 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x37, 0x7f, 0x7f, 0x7f, 0x78, 0x36, 0x01, 0x00, 0x05, 0x00, - 0x00, 0x00, 0x37, 0x7f, 0x7f, 0x7f, 0x78, 0x36, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x37, 0x7f, - 0x7f, 0x7f, 0x78, 0x36, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x37, 0x7f, 0x7f, 0x7f, 0x78, 0x36, - 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x37, 0x7f, 0x7f, 0x7f, 0x78, 0x36, 0x01, 0x00, 0x05, 0x00, - 0x00, 0x00, 0x37, 0x7f, 0x7f, 0x7f, 0x78, 0x36, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x37, 0x7f, - 0x7f, 0x7f, 0x78, 0x36, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x37, 0x7f, 0x7f, 0x7f, 0x78, 0x36, - 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x37, 0x7f, 0x7f, 0x7f, 0x78, 0x36, 0x01, 0x00, 0x11, 0x00, - 0x00, 0x00, 0x41, 0x7f, 0x7f, 0x7f, 0x78, 0x37, 0x2b, 0x2d, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2a, 0x7f, 0x7f, 0x7f, 0x7b, 0x40, 0x01, 0x00, 0x08, 0x00, - 0x00, 0x00, 0x2c, 0x7f, 0x7f, 0x7f, 0x7b, 0x40, 0x01, 0x00, 0x07, 0x00, 0x00, 0x00, 0x2e, 0x7f, - 0x7f, 0x7f, 0x7b, 0x40, 0x3f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x00, - 0x00, 0x00, 0x37, 0x7f, 0x7f, 0x7f, 0x7d, 0x40, 0x01, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x43, 0x7f, - 0x7f, 0x7f, 0x7d, 0x40, 0x3f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x00, - 0x00, 0x00, 0x37, 0x7f, 0x7f, 0x7f, 0x7d, 0x40, 0x01, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x43, 0x7f, - 0x7f, 0x7f, 0x7d, 0x40, 0x53, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0c, 0x00, - 0x00, 0x00, 0x4f, 0x7f, 0x7f, 0x7f, 0x64, 0x40, 0x01, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5b, 0x7f, - 0x7f, 0x7f, 0x64, 0x40, 0x3b, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x28, 0x7f, 0x7f, 0x7f, 0x7b, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x7f, - 0x7f, 0x7f, 0x7b, 0x40, -}; - -const u8 sound_wave_data[] ATTRIBUTE_ALIGN(32) = -{ - 0x53, 0x57, 0x41, 0x52, 0xff, 0xfe, 0x01, 0x00, 0x64, 0x7f, 0x02, 0x00, 0x10, 0x00, 0x01, 0x00, - 0x44, 0x41, 0x54, 0x41, 0x54, 0x7f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, - 0x30, 0x0f, 0x00, 0x00, 0x0c, 0x23, 0x00, 0x00, 0xc0, 0x2e, 0x00, 0x00, 0x78, 0x38, 0x00, 0x00, - 0x08, 0x8a, 0x00, 0x00, 0x18, 0xac, 0x00, 0x00, 0xf8, 0xc4, 0x00, 0x00, 0x48, 0x04, 0x01, 0x00, - 0xd8, 0x23, 0x01, 0x00, 0x34, 0x5c, 0x01, 0x00, 0xc8, 0x92, 0x01, 0x00, 0xe4, 0xad, 0x01, 0x00, - 0x84, 0xd7, 0x01, 0x00, 0x40, 0xf7, 0x01, 0x00, 0x90, 0x1a, 0x02, 0x00, 0xe0, 0x3b, 0x02, 0x00, - 0xb4, 0x5e, 0x02, 0x00, 0x02, 0x01, 0x52, 0x7d, 0x0a, 0x02, 0x47, 0x03, 0x61, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0xcf, 0x89, 0xa8, 0x80, 0x9b, 0x09, 0x98, 0x19, 0xaa, 0x99, 0xaa, 0x99, - 0xaa, 0x90, 0x90, 0x0b, 0xbc, 0x00, 0x19, 0xc9, 0x98, 0xba, 0xa9, 0xbb, 0xa1, 0x8c, 0x2c, 0xb3, - 0x0b, 0xac, 0xac, 0xb2, 0x0b, 0x19, 0xb9, 0xb9, 0x8c, 0xc9, 0xbb, 0xb9, 0x09, 0xba, 0xd9, 0xa9, - 0xab, 0xdb, 0xc9, 0x9a, 0x9a, 0xb9, 0xbb, 0x9d, 0xc9, 0x99, 0xdc, 0x9b, 0xeb, 0xbb, 0x9d, 0xba, - 0xab, 0xa9, 0xbe, 0xcb, 0xdb, 0xcb, 0xba, 0xaa, 0xa8, 0xcf, 0xaa, 0xba, 0xdb, 0xcc, 0xaa, 0x99, - 0xcb, 0xbd, 0xcb, 0xcb, 0xba, 0xdb, 0xbd, 0xaa, 0x9a, 0xcc, 0xcc, 0xba, 0xcc, 0xbb, 0xaa, 0xbb, - 0xbc, 0xcd, 0xcb, 0xba, 0xbd, 0xca, 0xab, 0xab, 0xbc, 0xbc, 0xcb, 0xdb, 0xbc, 0xba, 0xbb, 0xbc, - 0xbd, 0xbc, 0xbb, 0x9c, 0xdb, 0xcb, 0xbb, 0xaa, 0xbb, 0xba, 0xcc, 0xbb, 0xbc, 0xbb, 0xaa, 0xbb, - 0xbc, 0xfa, 0x8b, 0xca, 0xad, 0x82, 0xbf, 0x1b, 0x15, 0x89, 0xb9, 0xfa, 0x6a, 0xa3, 0x8f, 0x17, - 0x89, 0x00, 0x03, 0x2a, 0x96, 0x9f, 0x02, 0x19, 0x26, 0xa8, 0x0b, 0x92, 0x01, 0x9f, 0x23, 0x29, - 0xe9, 0x20, 0x80, 0x23, 0x88, 0x14, 0xbf, 0x11, 0x11, 0x09, 0x04, 0x9a, 0x81, 0x68, 0xb1, 0x58, - 0xa1, 0x1b, 0x92, 0xaa, 0x32, 0xc8, 0x62, 0x24, 0xc9, 0x19, 0x24, 0xb0, 0x9a, 0x41, 0x22, 0x12, - 0xcd, 0x28, 0x18, 0x32, 0x91, 0x0a, 0x02, 0xdd, 0x09, 0x42, 0x24, 0xc8, 0xbd, 0x30, 0x25, 0xa0, - 0xaa, 0x09, 0x42, 0xa1, 0x8c, 0x12, 0x89, 0x98, 0x10, 0x90, 0x23, 0xed, 0x9a, 0x52, 0x02, 0xc9, - 0x19, 0xd8, 0xab, 0x61, 0x14, 0xa9, 0xad, 0x29, 0x01, 0x21, 0x98, 0xdc, 0x2a, 0x83, 0xa9, 0x9a, - 0x54, 0xb8, 0xbc, 0x48, 0x14, 0x01, 0xba, 0xdb, 0x78, 0x83, 0xbc, 0x19, 0x15, 0x80, 0xbb, 0x58, - 0x92, 0xba, 0x29, 0x91, 0x21, 0x01, 0x64, 0xa1, 0x09, 0xb9, 0xbe, 0x40, 0x16, 0x91, 0xaa, 0x20, - 0x12, 0xba, 0x0a, 0x23, 0xd1, 0xad, 0x21, 0x54, 0x92, 0xbc, 0x8a, 0x08, 0x30, 0x93, 0x28, 0x83, - 0xda, 0x0a, 0xca, 0x9c, 0x73, 0x14, 0x98, 0x8a, 0x98, 0xda, 0xac, 0x43, 0x22, 0x90, 0xa9, 0x8f, - 0x88, 0x18, 0x88, 0xc9, 0x8e, 0x32, 0x31, 0x13, 0x99, 0xa9, 0xff, 0x29, 0x12, 0x18, 0x20, 0xc0, - 0x8c, 0x00, 0x31, 0xc9, 0x99, 0x46, 0xb8, 0x49, 0x13, 0xab, 0x71, 0xc1, 0x1b, 0x24, 0x91, 0xcb, - 0x1a, 0x27, 0xb8, 0x1b, 0x25, 0x98, 0x09, 0x11, 0xa8, 0x48, 0x92, 0xce, 0x0a, 0x44, 0x91, 0x0a, - 0x11, 0xb8, 0x0c, 0x21, 0x02, 0x88, 0x22, 0xd1, 0x9f, 0x52, 0x91, 0xaa, 0x18, 0xb0, 0x8e, 0x52, - 0x02, 0xa9, 0x9c, 0x18, 0x80, 0x32, 0xa2, 0xbd, 0x41, 0xb1, 0xaf, 0x19, 0x43, 0x82, 0xbb, 0x49, - 0x14, 0xa9, 0xcd, 0x1b, 0x16, 0x18, 0xd9, 0x09, 0x01, 0x21, 0xa2, 0x8b, 0x91, 0xbf, 0x29, 0x46, - 0x01, 0xb9, 0xac, 0x10, 0x33, 0x88, 0x89, 0x21, 0xd0, 0xbc, 0x0a, 0x57, 0x01, 0xab, 0x80, 0x3a, - 0x06, 0x9a, 0x99, 0x88, 0x31, 0x04, 0xdc, 0x39, 0x12, 0x08, 0xca, 0x29, 0x15, 0xca, 0x8b, 0x32, - 0x33, 0xb2, 0x9f, 0x51, 0x91, 0x0a, 0xa0, 0x08, 0x99, 0x18, 0x55, 0x81, 0x09, 0xd2, 0x2c, 0xa0, - 0x46, 0x98, 0xaa, 0x30, 0x12, 0xb9, 0x08, 0x08, 0x02, 0xcb, 0x48, 0x34, 0x01, 0xb0, 0xaf, 0x48, - 0x04, 0x9a, 0x22, 0x98, 0x9b, 0x24, 0xda, 0x9a, 0x28, 0x34, 0x11, 0x40, 0x96, 0xcf, 0x10, 0x13, - 0xa9, 0x30, 0x03, 0xbe, 0x18, 0x31, 0xb3, 0xaf, 0x00, 0x18, 0x32, 0x35, 0xdb, 0x28, 0x23, 0xfc, - 0x19, 0x31, 0xb1, 0x8d, 0x21, 0x01, 0xba, 0x38, 0xb3, 0xaf, 0x53, 0x92, 0xba, 0x50, 0x04, 0xb9, - 0x28, 0x82, 0xbe, 0x00, 0x43, 0x91, 0x88, 0x9b, 0x89, 0x12, 0x32, 0xc8, 0x72, 0x05, 0xcd, 0x1a, - 0x32, 0xa0, 0xbb, 0x18, 0x31, 0x12, 0x22, 0xf9, 0x1a, 0x14, 0xdd, 0x1a, 0x34, 0x82, 0xad, 0x09, - 0x21, 0xa1, 0xbe, 0x40, 0x82, 0x10, 0xa0, 0xac, 0x11, 0x80, 0x09, 0x44, 0x83, 0xfb, 0x9d, 0x38, - 0x05, 0xa8, 0xaa, 0x20, 0x14, 0xa8, 0x0b, 0x34, 0xb8, 0xbb, 0xac, 0x60, 0x25, 0x80, 0xda, 0x1a, - 0x33, 0x91, 0xbd, 0x19, 0x34, 0x81, 0xdb, 0x19, 0x22, 0xa0, 0x0b, 0x31, 0xa1, 0xaf, 0x12, 0x11, - 0x21, 0x02, 0xcd, 0x18, 0x10, 0x14, 0xdc, 0x1a, 0x26, 0xa9, 0x08, 0x29, 0x83, 0xd9, 0x0c, 0x53, - 0x81, 0xba, 0x99, 0x18, 0x25, 0x90, 0x09, 0xc9, 0x0a, 0x73, 0x14, 0xa0, 0xbe, 0x0a, 0x12, 0x30, - 0x27, 0xa9, 0x09, 0x88, 0xa1, 0xab, 0x75, 0x92, 0xac, 0x30, 0x24, 0xa9, 0xab, 0x99, 0x18, 0x35, - 0x90, 0x19, 0x21, 0x83, 0xfd, 0x48, 0x14, 0xdc, 0x38, 0x32, 0xa8, 0x0b, 0xa0, 0xab, 0x64, 0x02, - 0x98, 0xb9, 0x20, 0xb3, 0x8f, 0x34, 0xb0, 0x9c, 0x22, 0x88, 0x18, 0x12, 0xdb, 0x9a, 0x60, 0x14, - 0xaa, 0x31, 0xe2, 0x9d, 0x53, 0xa1, 0x8b, 0x13, 0x89, 0x01, 0x9a, 0x22, 0xdd, 0x38, 0x06, 0xa8, - 0x18, 0x81, 0xcc, 0x28, 0x02, 0x80, 0x08, 0x12, 0xd8, 0x1a, 0x14, 0xca, 0x28, 0x83, 0xba, 0x61, - 0x13, 0x98, 0xdb, 0x9a, 0x10, 0x81, 0xba, 0x49, 0x15, 0x90, 0xdd, 0x8b, 0x21, 0x01, 0x20, 0x25, - 0xd9, 0xab, 0xda, 0x8c, 0x63, 0x12, 0x01, 0xbb, 0x29, 0x13, 0xed, 0x8a, 0x32, 0x82, 0xdb, 0x18, - 0x44, 0xa0, 0xac, 0xa9, 0x08, 0x29, 0x23, 0x22, 0x83, 0x20, 0xe1, 0xbf, 0x38, 0x12, 0x90, 0xaa, - 0x52, 0xd9, 0x8b, 0x42, 0x13, 0xa8, 0xbd, 0x8b, 0x44, 0x98, 0x98, 0x38, 0x84, 0xbd, 0x50, 0x03, - 0x88, 0xab, 0x12, 0xc9, 0x6a, 0x04, 0xab, 0x0a, 0x26, 0xa9, 0x18, 0x82, 0xbf, 0x19, 0x43, 0x16, - 0xcb, 0x19, 0x81, 0x19, 0x16, 0xb9, 0x1a, 0x11, 0xa9, 0x11, 0x72, 0x93, 0xcf, 0x19, 0x34, 0xa8, - 0x28, 0xb0, 0x8c, 0x12, 0xba, 0x61, 0x81, 0x09, 0xa1, 0x3c, 0x37, 0xdc, 0x09, 0x21, 0x00, 0x20, - 0xb2, 0x8d, 0x22, 0x80, 0x9b, 0x89, 0x42, 0xc9, 0x69, 0x34, 0xb8, 0xac, 0x99, 0x21, 0x01, 0x32, - 0x04, 0xcd, 0x28, 0x93, 0x39, 0x34, 0xf0, 0x8d, 0x31, 0x32, 0xa8, 0xbc, 0x09, 0x32, 0x32, 0x81, - 0xab, 0x00, 0x91, 0xaf, 0x31, 0x22, 0xd1, 0xbd, 0x49, 0x27, 0xb0, 0xaa, 0x10, 0x88, 0x20, 0x88, - 0x47, 0xa0, 0x9c, 0x30, 0x01, 0x20, 0xf9, 0x8e, 0x32, 0x01, 0x99, 0xa9, 0x00, 0x02, 0x8a, 0x00, - 0x10, 0x52, 0xf0, 0xae, 0x41, 0x13, 0xbb, 0x0b, 0x43, 0x91, 0xaa, 0x10, 0x92, 0xbc, 0x51, 0x82, - 0xac, 0x31, 0xda, 0x9a, 0x73, 0x84, 0xac, 0x0a, 0x11, 0x00, 0x98, 0x20, 0x90, 0x99, 0xaa, 0x8c, - 0x57, 0xb0, 0xbb, 0x10, 0x43, 0x81, 0x09, 0x22, 0xfb, 0x1a, 0x82, 0xbe, 0x58, 0x02, 0xa9, 0x20, - 0xb0, 0x8b, 0x81, 0x70, 0xa3, 0x9f, 0x22, 0xc9, 0x39, 0x15, 0xaa, 0x10, 0xb1, 0x9c, 0x31, 0x23, - 0xb8, 0xef, 0x30, 0x05, 0xaa, 0x18, 0x90, 0x19, 0x13, 0xbc, 0x10, 0x01, 0xeb, 0x1a, 0x47, 0x91, - 0xac, 0x18, 0x81, 0x21, 0x82, 0xab, 0x01, 0x8a, 0x23, 0x11, 0x62, 0xb4, 0xff, 0x29, 0x24, 0xa8, - 0x8a, 0x81, 0x18, 0x08, 0x81, 0x09, 0x01, 0x21, 0x11, 0xcb, 0x80, 0xdf, 0x08, 0x63, 0x24, 0xb9, - 0xac, 0x30, 0x91, 0x8d, 0x33, 0xa8, 0x9b, 0x10, 0x76, 0x81, 0xbb, 0x9a, 0xba, 0x73, 0x16, 0xa8, - 0x09, 0x81, 0x98, 0x88, 0x18, 0x14, 0xda, 0x2a, 0x35, 0x80, 0xb0, 0xbf, 0x38, 0x15, 0x98, 0x0a, - 0x11, 0x01, 0xca, 0x29, 0x34, 0xba, 0x38, 0xa1, 0x59, 0x37, 0xd8, 0x9d, 0x21, 0x12, 0xa0, 0x0a, - 0x33, 0xd8, 0x8c, 0x22, 0xa0, 0x1a, 0xa1, 0x8b, 0x56, 0x02, 0xb9, 0x9c, 0x38, 0x82, 0x99, 0x48, - 0x06, 0xaa, 0x18, 0x88, 0x41, 0xa3, 0xaf, 0x18, 0x21, 0x11, 0xc9, 0x9c, 0x11, 0x8a, 0x52, 0xa0, - 0x9b, 0x43, 0xc9, 0x29, 0x15, 0xcb, 0x8a, 0x00, 0x52, 0x83, 0x19, 0xa0, 0xdf, 0x19, 0x12, 0x98, - 0x88, 0x80, 0x88, 0x51, 0x83, 0xcf, 0x29, 0x01, 0xa9, 0x09, 0x13, 0xab, 0x32, 0xc0, 0x49, 0x03, - 0xfb, 0xaf, 0x20, 0x24, 0xa1, 0xbc, 0x30, 0x04, 0x99, 0x08, 0xa1, 0x9d, 0x11, 0xaa, 0x41, 0x34, - 0xd8, 0x9e, 0x51, 0x02, 0xcb, 0x8a, 0x10, 0x23, 0xa9, 0x38, 0x03, 0xcf, 0x20, 0x00, 0x31, 0x83, - 0xef, 0x09, 0x22, 0x22, 0xb8, 0xac, 0x32, 0xc0, 0x1a, 0x25, 0xc0, 0x9c, 0x18, 0x32, 0x92, 0x9a, - 0x90, 0xad, 0x63, 0x92, 0xac, 0x21, 0x12, 0x88, 0x10, 0x11, 0xf8, 0xae, 0x40, 0x34, 0x90, 0xd9, - 0xac, 0x40, 0x14, 0xaa, 0x18, 0x02, 0xa9, 0x19, 0x25, 0xa2, 0xce, 0x89, 0x21, 0x53, 0x14, 0xda, - 0x8b, 0x22, 0x91, 0xab, 0x38, 0x35, 0xc8, 0x0b, 0x26, 0xb8, 0x9a, 0xaa, 0x38, 0x46, 0x91, 0x9a, - 0x09, 0x43, 0xb1, 0x9c, 0x42, 0x90, 0xaa, 0x30, 0x43, 0x14, 0xfc, 0x9b, 0x33, 0x23, 0xb8, 0x9d, - 0x21, 0x91, 0x08, 0x20, 0x01, 0x41, 0xa0, 0x9b, 0x65, 0x02, 0xda, 0x9d, 0x21, 0x23, 0x80, 0x18, - 0xa0, 0x9b, 0x11, 0xa9, 0x42, 0xfb, 0x8a, 0x50, 0x15, 0x88, 0xa9, 0x9b, 0x10, 0x81, 0x51, 0x14, - 0xa9, 0x9a, 0x00, 0x51, 0x05, 0xda, 0x9a, 0x30, 0x25, 0xc9, 0x9b, 0x00, 0xb9, 0x10, 0x11, 0x36, - 0xc1, 0xac, 0x30, 0x83, 0x98, 0xfc, 0x8b, 0x45, 0x92, 0xab, 0x10, 0x00, 0x90, 0xab, 0x40, 0xa3, - 0xbf, 0x89, 0x51, 0x23, 0xa0, 0xbe, 0x08, 0x22, 0xa2, 0xbf, 0x18, 0x25, 0xc9, 0x29, 0x23, 0xd8, - 0x9a, 0x89, 0x42, 0xa1, 0xba, 0x9a, 0x18, 0x57, 0x83, 0xcb, 0x89, 0x99, 0x18, 0x53, 0x02, 0xda, - 0xac, 0x31, 0x34, 0x80, 0xda, 0x9d, 0x32, 0x91, 0x9c, 0x52, 0xa1, 0xbb, 0x29, 0x55, 0x91, 0xad, - 0x18, 0x01, 0x20, 0x81, 0xbd, 0x39, 0x36, 0xa8, 0xab, 0x30, 0xb1, 0xbf, 0x61, 0x23, 0xa9, 0xbc, - 0x0a, 0x52, 0x12, 0xb9, 0x9a, 0x18, 0x34, 0xb8, 0x18, 0x11, 0xda, 0x9c, 0x62, 0x44, 0x91, 0xbd, - 0x0a, 0x21, 0x02, 0xb9, 0x30, 0x25, 0xa8, 0xab, 0x21, 0xc0, 0xcc, 0x19, 0x73, 0x33, 0xa1, 0xbe, - 0x18, 0x11, 0x00, 0xaa, 0x09, 0x34, 0x13, 0x89, 0x00, 0xd8, 0xcc, 0x8a, 0x32, 0x34, 0x82, 0xcd, - 0x19, 0x01, 0x42, 0x15, 0xb9, 0x8a, 0x01, 0x40, 0x35, 0xc8, 0xac, 0x08, 0x21, 0x25, 0xa0, 0xcb, - 0x99, 0x89, 0x31, 0x37, 0x83, 0xaa, 0x00, 0x44, 0x23, 0xc0, 0xae, 0x09, 0x22, 0x00, 0x31, 0x22, - 0x02, 0xdd, 0x0a, 0x45, 0xb0, 0xad, 0x31, 0x02, 0x11, 0xa8, 0xbd, 0x29, 0x23, 0xa0, 0x8a, 0x71, - 0x04, 0xbc, 0x50, 0x23, 0xd9, 0x8b, 0x31, 0x14, 0xa8, 0x9c, 0xa8, 0x8a, 0x34, 0xc9, 0x1a, 0x15, - 0xb8, 0x0b, 0x25, 0x01, 0xc9, 0xad, 0x20, 0x11, 0x11, 0xf9, 0x0b, 0x44, 0x81, 0xab, 0x10, 0xd8, - 0xac, 0x48, 0x27, 0xb8, 0x9c, 0x11, 0x11, 0x08, 0xa0, 0xbc, 0x0a, 0x11, 0x13, 0x21, 0x36, 0xf9, - 0x9e, 0x30, 0x12, 0xb9, 0xbb, 0x28, 0x43, 0x81, 0x9a, 0x08, 0x01, 0xda, 0x0b, 0x52, 0x04, 0xec, - 0x0b, 0x44, 0x02, 0xb9, 0xad, 0x20, 0x34, 0xb0, 0xac, 0x09, 0x00, 0x01, 0x42, 0x14, 0xd8, 0xad, - 0x1a, 0x53, 0x01, 0xa9, 0x9a, 0x18, 0x34, 0xa0, 0x0c, 0x11, 0xca, 0x1a, 0x53, 0x14, 0xa0, 0xbf, - 0x0a, 0x32, 0x23, 0xa9, 0xac, 0x30, 0x23, 0xd9, 0xac, 0x8a, 0x42, 0x53, 0x24, 0x88, 0xa9, 0xdb, - 0xab, 0x41, 0x14, 0x80, 0x01, 0xa9, 0x48, 0x03, 0xda, 0xbc, 0xaa, 0x68, 0x36, 0x81, 0x99, 0xb9, - 0x0b, 0x43, 0xa1, 0x0a, 0x03, 0x9b, 0x41, 0x24, 0x46, 0xd0, 0x9e, 0x11, 0x01, 0x00, 0x91, 0xdb, - 0x09, 0x10, 0x34, 0xb0, 0x58, 0x04, 0xbd, 0x30, 0x04, 0xaa, 0x28, 0x12, 0x80, 0x0a, 0x43, 0xf8, - 0x9d, 0x20, 0x90, 0x18, 0x03, 0x18, 0x55, 0x02, 0x98, 0xdb, 0x09, 0x11, 0x21, 0x34, 0xfa, 0x1a, - 0x33, 0xc9, 0x19, 0x24, 0x98, 0xab, 0x62, 0x82, 0xba, 0x19, 0x02, 0xba, 0x2a, 0x15, 0xa8, 0x9a, - 0x00, 0x41, 0x46, 0x92, 0xcc, 0x29, 0x37, 0x92, 0xdb, 0x8b, 0x31, 0x12, 0xca, 0x9a, 0x00, 0xa8, - 0x0b, 0x65, 0x24, 0xc8, 0xbc, 0x18, 0x43, 0x82, 0xdb, 0x8b, 0x41, 0x11, 0x98, 0x08, 0x11, 0xfa, - 0x9d, 0x31, 0x14, 0xb8, 0xab, 0x28, 0x35, 0xa1, 0xbd, 0x8b, 0x31, 0x01, 0x89, 0x10, 0xa8, 0x9c, - 0x41, 0x24, 0x91, 0xff, 0x8a, 0x20, 0x24, 0xa0, 0xbb, 0x8b, 0x42, 0x03, 0x09, 0x91, 0xcd, 0xab, - 0x10, 0x63, 0x25, 0xc8, 0x9b, 0x18, 0x21, 0x12, 0xfb, 0x8b, 0x20, 0x21, 0x24, 0xda, 0x8a, 0x88, - 0x19, 0x33, 0xca, 0x30, 0xc2, 0x0c, 0x13, 0xca, 0x08, 0xc9, 0x48, 0x36, 0x01, 0x83, 0xff, 0x8a, - 0x32, 0x01, 0x08, 0x80, 0x99, 0xa9, 0x20, 0xd1, 0xad, 0x30, 0x92, 0x3b, 0x77, 0x81, 0xab, 0x9b, - 0x21, 0x03, 0x18, 0x22, 0xb8, 0x8c, 0x32, 0x03, 0xb9, 0xdf, 0x8a, 0x42, 0x14, 0x88, 0x10, 0xb9, - 0x9d, 0x30, 0x13, 0x90, 0x88, 0xc9, 0x9c, 0x72, 0x25, 0xb8, 0x8d, 0x62, 0x92, 0xaa, 0x9a, 0x00, - 0x01, 0x11, 0x90, 0x8a, 0x18, 0x65, 0xa1, 0x8a, 0x02, 0xdc, 0x38, 0x36, 0x02, 0x00, 0xa9, 0xab, - 0xeb, 0x09, 0x23, 0xa0, 0xaa, 0x0c, 0x67, 0x03, 0xb9, 0x8b, 0x32, 0x24, 0xb0, 0xac, 0x20, 0x33, - 0x91, 0xcd, 0x41, 0x84, 0xcb, 0x38, 0x25, 0x81, 0xba, 0x9c, 0x50, 0x23, 0xa0, 0xbd, 0x09, 0x11, - 0x00, 0x10, 0x24, 0xd9, 0xac, 0x40, 0x35, 0x81, 0x99, 0xab, 0x38, 0x15, 0xbb, 0x8a, 0xc9, 0x8b, - 0x22, 0x53, 0x13, 0xc9, 0x9b, 0x89, 0x72, 0x83, 0xbf, 0x1a, 0x33, 0x03, 0xa8, 0xbe, 0x18, 0x01, - 0x20, 0xa1, 0xbb, 0xaa, 0x9a, 0x74, 0x17, 0xa8, 0xba, 0xdb, 0x18, 0x24, 0x82, 0xe9, 0xaa, 0x21, - 0x12, 0x33, 0xd2, 0xbe, 0x08, 0x12, 0xa9, 0x09, 0x01, 0xb8, 0x09, 0x36, 0xa0, 0xbc, 0xbb, 0xbb, - 0x58, 0x37, 0xa2, 0xae, 0x28, 0x33, 0xa9, 0x9b, 0xba, 0x18, 0x33, 0x53, 0x24, 0xfb, 0xbd, 0x19, - 0x43, 0x12, 0xa0, 0x99, 0xca, 0x9c, 0x52, 0x82, 0xac, 0x19, 0x33, 0x32, 0x04, 0xda, 0xdd, 0x0b, - 0x63, 0x82, 0x88, 0x10, 0x98, 0xaa, 0x8a, 0x20, 0xa1, 0xaf, 0x10, 0x31, 0x55, 0x91, 0xbc, 0x9a, - 0x20, 0x43, 0x91, 0x89, 0x32, 0x11, 0x81, 0xce, 0x18, 0xa0, 0x3a, 0x37, 0xc8, 0x9b, 0x22, 0x11, - 0x21, 0x91, 0x89, 0x00, 0xfb, 0xcc, 0x58, 0x26, 0xc8, 0xab, 0x51, 0x34, 0x81, 0xbc, 0x99, 0x00, - 0x22, 0xb0, 0x0c, 0x44, 0x91, 0xbb, 0x08, 0x02, 0xc9, 0xac, 0x60, 0x35, 0x11, 0xa9, 0x0b, 0x25, - 0xa1, 0xbb, 0x08, 0xca, 0x1a, 0x43, 0x21, 0x83, 0xbe, 0x89, 0x73, 0x25, 0x90, 0xcb, 0x09, 0x33, - 0x12, 0x00, 0xba, 0xa9, 0x9a, 0x50, 0x55, 0x13, 0xdb, 0x0a, 0x53, 0x02, 0xa9, 0x8a, 0xb9, 0x39, - 0x17, 0xa8, 0xbb, 0x10, 0x81, 0x08, 0x44, 0x02, 0xa8, 0x71, 0x25, 0x98, 0x8a, 0xdb, 0xbb, 0x58, - 0x24, 0xa8, 0xaa, 0x89, 0x38, 0x45, 0x91, 0xcc, 0x8a, 0x38, 0x33, 0x88, 0x18, 0xd8, 0xbc, 0x88, - 0x41, 0x33, 0xd9, 0xae, 0x20, 0x42, 0x82, 0xac, 0x19, 0x92, 0x9b, 0x41, 0xd8, 0xbc, 0x08, 0x31, - 0x14, 0x00, 0x81, 0xfd, 0x0a, 0x33, 0xa8, 0xab, 0x9a, 0x28, 0x33, 0x44, 0x91, 0xef, 0x9a, 0x18, - 0x42, 0x03, 0xda, 0x8a, 0x00, 0x10, 0x10, 0xa8, 0x89, 0x10, 0x24, 0xd9, 0x38, 0xf2, 0xbe, 0x10, - 0x43, 0x13, 0x98, 0xbd, 0x99, 0x08, 0x32, 0xa8, 0x0c, 0x23, 0x88, 0x64, 0xa2, 0xce, 0x8a, 0x21, - 0x12, 0x98, 0x20, 0x26, 0x80, 0xb9, 0xbd, 0x29, 0x84, 0xca, 0x2a, 0x45, 0x82, 0xcc, 0xab, 0x41, - 0x15, 0xa8, 0xbb, 0x48, 0x14, 0x90, 0x08, 0x10, 0xb8, 0x8c, 0x31, 0x33, 0xb1, 0xbf, 0x8a, 0x42, - 0x15, 0x80, 0x88, 0x20, 0xc8, 0x9b, 0x88, 0xbc, 0x28, 0x23, 0x74, 0x27, 0xa0, 0xad, 0x18, 0x22, - 0x01, 0x9a, 0x09, 0x01, 0x31, 0x26, 0xc9, 0xbd, 0x8a, 0x99, 0x60, 0x25, 0x90, 0x9b, 0x20, 0x54, - 0x02, 0x98, 0xa9, 0xbc, 0x38, 0x24, 0xa8, 0x9b, 0x08, 0x20, 0x12, 0x32, 0x85, 0xcc, 0x51, 0x13, - 0x31, 0x14, 0xec, 0x89, 0x10, 0x33, 0x82, 0xcc, 0x0a, 0x55, 0x23, 0xc9, 0x9b, 0x31, 0x11, 0x20, - 0x23, 0xc0, 0xbf, 0x9b, 0x21, 0x01, 0x21, 0xc0, 0x8d, 0x72, 0x23, 0x00, 0xaa, 0x9a, 0x89, 0x20, - 0x02, 0x88, 0xa9, 0xce, 0x29, 0x27, 0xb9, 0x8a, 0x88, 0x08, 0x32, 0x13, 0xda, 0xbc, 0x29, 0x25, - 0x88, 0x81, 0xfd, 0x9c, 0x21, 0x14, 0x81, 0xaa, 0x9a, 0x41, 0x23, 0xc0, 0xbd, 0x9a, 0xa9, 0x1a, - 0x57, 0x01, 0xa9, 0xab, 0x89, 0x21, 0x02, 0xa9, 0xcb, 0x0a, 0x53, 0x23, 0xd9, 0xcf, 0x8a, 0x41, - 0x23, 0xa8, 0xbc, 0x9b, 0x31, 0xa1, 0x9d, 0x50, 0x33, 0xc1, 0xbc, 0x38, 0x03, 0xdd, 0x8a, 0x41, - 0x33, 0xa1, 0xbc, 0x09, 0x12, 0xc9, 0xbb, 0x1a, 0x41, 0x54, 0x02, 0x98, 0xdb, 0xbc, 0x0a, 0x31, - 0x36, 0xa0, 0xad, 0x31, 0x14, 0x99, 0x19, 0x90, 0xcb, 0x09, 0x63, 0x83, 0xba, 0xba, 0xad, 0x51, - 0x14, 0xca, 0xab, 0x30, 0x25, 0xa0, 0x09, 0x90, 0x0a, 0x67, 0x01, 0xa9, 0xbb, 0xab, 0x38, 0x37, - 0x22, 0xa8, 0x8b, 0x00, 0x21, 0x16, 0xfa, 0xbb, 0x18, 0x34, 0x33, 0x00, 0xdb, 0xab, 0x30, 0x15, - 0x98, 0x30, 0x01, 0xa9, 0x69, 0x37, 0xa0, 0xbd, 0x89, 0x01, 0x11, 0xb8, 0xaf, 0x30, 0x24, 0x22, - 0x81, 0xaa, 0x29, 0x15, 0x00, 0x08, 0x00, 0xea, 0xac, 0x61, 0x03, 0xbb, 0xab, 0x10, 0x64, 0x33, - 0x01, 0xcb, 0xab, 0x31, 0x14, 0x32, 0x91, 0xbd, 0x29, 0x33, 0x22, 0x91, 0xac, 0x40, 0x47, 0x23, - 0x80, 0x11, 0xd9, 0xbc, 0x0a, 0x22, 0xc8, 0xcc, 0x18, 0x54, 0x22, 0xa0, 0xaa, 0x18, 0x43, 0x13, - 0x98, 0xbb, 0xcb, 0x0a, 0x44, 0x02, 0x98, 0xfb, 0xab, 0x20, 0x24, 0x80, 0x88, 0xfa, 0x8b, 0x63, - 0x24, 0xb8, 0xbf, 0x0a, 0x32, 0x82, 0xba, 0x29, 0x43, 0x14, 0xba, 0x8c, 0x00, 0xdb, 0x8b, 0x31, - 0x26, 0x98, 0xbb, 0xbc, 0x2a, 0x36, 0xb8, 0x9b, 0x32, 0x93, 0xbd, 0x8a, 0x98, 0xba, 0x59, 0x37, - 0xb0, 0xcb, 0xba, 0x8a, 0x20, 0x92, 0xcf, 0x19, 0x35, 0x82, 0xa9, 0xa8, 0xde, 0x8a, 0x22, 0x43, - 0x12, 0xa8, 0xcc, 0x0a, 0x21, 0x90, 0xac, 0x99, 0x20, 0x37, 0x12, 0xca, 0xbb, 0x0a, 0x11, 0xa8, - 0x10, 0xf8, 0x8f, 0x43, 0x02, 0xaa, 0x98, 0xba, 0x51, 0x35, 0x01, 0xda, 0xad, 0x28, 0x43, 0x02, - 0xca, 0x9a, 0x98, 0x8a, 0x21, 0x22, 0xa8, 0xac, 0x62, 0x35, 0x23, 0xc0, 0xcf, 0x8a, 0x42, 0x02, - 0x98, 0x09, 0x20, 0x23, 0x91, 0xbc, 0x9b, 0x08, 0x21, 0x32, 0x15, 0xb0, 0xad, 0x38, 0x13, 0x08, - 0xc0, 0xff, 0x18, 0x34, 0x23, 0x82, 0xa9, 0xaa, 0x89, 0x34, 0xa1, 0xef, 0x8b, 0x20, 0x33, 0x82, - 0xaa, 0x89, 0x32, 0x12, 0x72, 0x36, 0x81, 0xcb, 0x99, 0x20, 0x21, 0xd8, 0xbc, 0x10, 0x44, 0x14, - 0xb9, 0x8b, 0x20, 0x21, 0x42, 0x15, 0xb8, 0x9b, 0x52, 0x15, 0xb9, 0xab, 0x0b, 0x53, 0x23, 0x53, - 0x36, 0x91, 0xad, 0x29, 0x24, 0x81, 0xbd, 0xab, 0x10, 0x43, 0x12, 0xca, 0x0a, 0x43, 0x01, 0x09, - 0x42, 0xa2, 0xbd, 0x28, 0x34, 0x01, 0x98, 0xdc, 0x8a, 0x22, 0x92, 0xdc, 0x09, 0x11, 0x21, 0x35, - 0x82, 0xeb, 0xcb, 0x89, 0x18, 0x81, 0x88, 0x08, 0x52, 0x15, 0xe9, 0x8b, 0x18, 0x10, 0x33, 0xa1, - 0xdd, 0x99, 0x98, 0x88, 0x30, 0x04, 0xfa, 0x8a, 0x41, 0x02, 0xc9, 0xbd, 0x8a, 0x20, 0x35, 0x33, - 0xc8, 0xbd, 0x8b, 0x08, 0x88, 0xaa, 0x30, 0x82, 0x0a, 0x55, 0xb1, 0xef, 0x8a, 0x11, 0x22, 0x02, - 0xca, 0x9a, 0x30, 0x16, 0xc8, 0xbb, 0x8a, 0x18, 0x34, 0x23, 0x81, 0xea, 0xbd, 0x19, 0x44, 0x13, - 0xdb, 0xac, 0x18, 0x32, 0x01, 0xa9, 0xad, 0x38, 0x44, 0x91, 0xbb, 0x08, 0xa9, 0x40, 0x36, 0x11, - 0xa8, 0xcc, 0x99, 0x88, 0xb9, 0x9b, 0x9a, 0x74, 0x22, 0x33, 0x92, 0xde, 0x8b, 0x30, 0x33, 0xb8, - 0xad, 0x10, 0x41, 0x45, 0x90, 0xab, 0x09, 0x98, 0x18, 0x33, 0x24, 0xa2, 0xbe, 0x38, 0x25, 0x91, - 0xdd, 0xab, 0x28, 0x32, 0x44, 0x24, 0xa8, 0x8b, 0x52, 0x14, 0xca, 0x9b, 0x20, 0x01, 0x98, 0xba, - 0xad, 0x09, 0x11, 0x10, 0x76, 0x24, 0xb8, 0x9c, 0x42, 0x23, 0xa0, 0xcc, 0x8b, 0x42, 0x23, 0x90, - 0xbb, 0x9a, 0x00, 0x28, 0x56, 0x12, 0x99, 0x1a, 0x22, 0x43, 0x83, 0xde, 0x9b, 0x20, 0x23, 0x21, - 0x34, 0x01, 0x30, 0x36, 0x23, 0xa0, 0xbc, 0xbc, 0x28, 0x13, 0xa0, 0xce, 0x1a, 0x54, 0x01, 0x90, - 0x98, 0x88, 0x10, 0x10, 0x55, 0x13, 0xb9, 0x28, 0x13, 0xfb, 0x9e, 0x89, 0x80, 0x32, 0x26, 0x91, - 0xbb, 0x9b, 0x20, 0x12, 0x90, 0xec, 0xab, 0x30, 0x04, 0x10, 0xc8, 0xbc, 0x0b, 0x73, 0x34, 0x90, - 0xbc, 0xac, 0x0a, 0x63, 0x91, 0xbb, 0x38, 0x33, 0x80, 0xfb, 0xcb, 0x9a, 0x20, 0x34, 0x12, 0x10, - 0xea, 0xbc, 0x08, 0x23, 0x92, 0xde, 0x9b, 0x41, 0x24, 0x80, 0xeb, 0x9b, 0x08, 0x10, 0x31, 0x82, - 0xca, 0x9b, 0x31, 0x23, 0xb9, 0xcd, 0xab, 0x18, 0x44, 0x80, 0xa9, 0xac, 0x8a, 0x62, 0x34, 0x90, - 0xcd, 0x9b, 0x20, 0x23, 0xb8, 0xbf, 0x28, 0x35, 0x90, 0xbb, 0x9a, 0xcb, 0x0a, 0x57, 0x13, 0xa8, - 0x18, 0xa8, 0x9a, 0x20, 0xc1, 0xcd, 0x9b, 0x00, 0x73, 0x23, 0xa0, 0xcc, 0x0a, 0x43, 0x81, 0xbc, - 0x89, 0x21, 0x42, 0x13, 0x99, 0x28, 0xb0, 0xdf, 0x18, 0x33, 0x82, 0x9a, 0x10, 0x55, 0x14, 0xd9, - 0xad, 0x09, 0x31, 0x02, 0x98, 0x89, 0x98, 0x40, 0x36, 0x13, 0x98, 0xaa, 0x0a, 0x44, 0x13, 0xdb, - 0xcc, 0xaa, 0x18, 0x32, 0x04, 0x80, 0x80, 0x08, 0x72, 0x34, 0x90, 0xbc, 0x39, 0x27, 0x90, 0x88, - 0xa8, 0xaa, 0x08, 0x21, 0x01, 0xa9, 0x71, 0x35, 0x12, 0x24, 0xc8, 0x9c, 0x08, 0x88, 0x11, 0x98, - 0x9b, 0x61, 0x46, 0x23, 0x10, 0x11, 0x08, 0x51, 0x82, 0xdc, 0x9a, 0x18, 0x43, 0x12, 0x88, 0xa0, - 0xcf, 0x8a, 0x42, 0x33, 0x03, 0xba, 0x29, 0x55, 0x02, 0xc9, 0xac, 0x0a, 0x32, 0x23, 0x80, 0xab, - 0x00, 0xc9, 0x19, 0x73, 0x83, 0xeb, 0x9a, 0x21, 0x02, 0xea, 0xcc, 0x89, 0x63, 0x23, 0x91, 0xda, - 0xab, 0x09, 0x22, 0x14, 0xa0, 0xac, 0x89, 0x42, 0x33, 0xe8, 0xbe, 0x0a, 0x11, 0x01, 0x42, 0x03, - 0xec, 0x8a, 0x20, 0x01, 0xba, 0x9a, 0x18, 0x32, 0x33, 0xfa, 0xae, 0x89, 0x80, 0x00, 0x80, 0xd9, - 0x9c, 0x41, 0x02, 0x9a, 0x8a, 0x99, 0x88, 0x00, 0xb9, 0x98, 0xfe, 0xbc, 0x28, 0x47, 0x12, 0xda, - 0x9b, 0x19, 0x32, 0x81, 0xba, 0x8b, 0x42, 0x02, 0xbb, 0xa9, 0xfa, 0xdb, 0x8a, 0x61, 0x33, 0x91, - 0xa9, 0x28, 0x36, 0x91, 0xcc, 0xab, 0x99, 0x40, 0x14, 0xa9, 0x89, 0x80, 0x11, 0x32, 0xb8, 0xff, - 0x9c, 0x40, 0x33, 0x01, 0x89, 0xba, 0xcb, 0x18, 0x44, 0x80, 0x9a, 0x0a, 0x51, 0x45, 0x02, 0xaa, - 0xba, 0xab, 0x41, 0x03, 0xb8, 0xcd, 0x8a, 0x32, 0x23, 0x00, 0x35, 0x12, 0x54, 0x24, 0x91, 0xca, - 0x9b, 0xa9, 0x09, 0x11, 0xc9, 0xae, 0x28, 0x35, 0x13, 0xca, 0x9c, 0x42, 0x35, 0x12, 0x98, 0x20, - 0xa8, 0x9b, 0x01, 0xc0, 0xaf, 0x28, 0x88, 0x73, 0x26, 0x91, 0xba, 0x39, 0x25, 0x02, 0xcb, 0xbb, - 0x9b, 0x72, 0x22, 0x01, 0x10, 0x10, 0x21, 0x45, 0x91, 0x0a, 0x11, 0x00, 0x30, 0x47, 0xb0, 0xbd, - 0x08, 0x11, 0x00, 0x31, 0xb1, 0xaf, 0x61, 0x34, 0x90, 0xbb, 0x89, 0x20, 0x43, 0x13, 0xd9, 0xcb, - 0x89, 0x30, 0x44, 0x02, 0xdb, 0x9a, 0x21, 0x11, 0x90, 0xbc, 0xbc, 0x0a, 0x32, 0x45, 0x13, 0xd8, - 0xbc, 0x09, 0x02, 0xa8, 0xbc, 0x30, 0x36, 0x01, 0xc9, 0xcb, 0x99, 0x90, 0xaa, 0x60, 0x12, 0xc9, - 0xba, 0x1a, 0x34, 0xc0, 0xce, 0x8a, 0x53, 0x03, 0xa8, 0xbc, 0xa9, 0x89, 0x32, 0x81, 0xd9, 0xcd, - 0x9a, 0x89, 0x41, 0x14, 0xca, 0x9b, 0x31, 0x82, 0xb8, 0xce, 0x9a, 0x00, 0x20, 0x32, 0xa2, 0xdd, - 0x9b, 0x20, 0x33, 0xb0, 0xce, 0x09, 0x52, 0x33, 0xa8, 0xdd, 0xcb, 0x18, 0x01, 0x88, 0xa8, 0x9a, - 0x38, 0x67, 0x12, 0x91, 0xcb, 0x9c, 0x18, 0x31, 0x23, 0xc8, 0xab, 0x09, 0x11, 0x00, 0xfc, 0x9b, - 0x18, 0x43, 0x22, 0x11, 0xb0, 0xaf, 0x19, 0x11, 0xb8, 0xab, 0x08, 0x62, 0x45, 0x02, 0xb9, 0x9b, - 0x54, 0x13, 0x80, 0xa8, 0xbc, 0x8a, 0x80, 0xba, 0x8a, 0xec, 0x9b, 0x73, 0x27, 0x12, 0x88, 0x98, - 0x08, 0x42, 0x03, 0xdc, 0x9b, 0x20, 0x11, 0x98, 0xb8, 0xcd, 0x9b, 0x73, 0x24, 0x01, 0x98, 0x09, - 0x21, 0x24, 0x81, 0xbb, 0xcb, 0x9b, 0x30, 0x45, 0x92, 0xa9, 0x18, 0x75, 0x32, 0x81, 0xcb, 0x9a, - 0x31, 0x14, 0x81, 0xca, 0xac, 0x48, 0x36, 0x02, 0x88, 0x89, 0x31, 0x45, 0x34, 0x80, 0xaa, 0x9a, - 0x89, 0x31, 0x33, 0xb9, 0xbf, 0x8b, 0x55, 0x23, 0x90, 0xba, 0x8b, 0x64, 0x02, 0x08, 0x80, 0x00, - 0x99, 0x90, 0xcc, 0x29, 0x12, 0x31, 0x43, 0x15, 0xfb, 0xad, 0x09, 0x41, 0x03, 0xa8, 0x9b, 0x18, - 0x98, 0x08, 0xd8, 0xac, 0xaa, 0x40, 0x57, 0x01, 0xca, 0xab, 0x9b, 0x31, 0x15, 0x90, 0x98, 0x89, - 0x88, 0xaa, 0xbb, 0xbb, 0xce, 0x09, 0x54, 0x12, 0xc8, 0xac, 0x09, 0x41, 0x13, 0xfb, 0xac, 0x89, - 0x10, 0x12, 0xb0, 0xae, 0x89, 0x20, 0x11, 0x80, 0xca, 0xcf, 0x8a, 0x52, 0x12, 0x89, 0xba, 0xac, - 0x19, 0x24, 0xa0, 0xae, 0x0a, 0x20, 0x24, 0x24, 0xa0, 0xab, 0xcb, 0xbb, 0x9a, 0xa8, 0xdb, 0x1a, - 0x46, 0x02, 0x99, 0xaa, 0xa9, 0x48, 0x37, 0xa0, 0x9a, 0x10, 0x14, 0x98, 0x08, 0xfb, 0xcd, 0x8a, - 0x31, 0x25, 0x81, 0xcb, 0x8a, 0x32, 0x04, 0xa9, 0xbb, 0x9b, 0x39, 0x47, 0x02, 0xa8, 0xdb, 0x8a, - 0x61, 0x34, 0x80, 0x9a, 0x20, 0x24, 0x90, 0xca, 0xce, 0x8a, 0x18, 0x33, 0x12, 0x81, 0xba, 0x29, - 0x57, 0x34, 0x80, 0xab, 0x88, 0x32, 0x24, 0xc9, 0xdd, 0x9a, 0x00, 0x32, 0x82, 0xaa, 0x8a, 0x64, - 0x24, 0x12, 0x80, 0xbb, 0x0b, 0x43, 0x12, 0x00, 0xfa, 0xab, 0x10, 0x73, 0x23, 0xa0, 0x9b, 0x31, - 0x37, 0x12, 0xb8, 0xac, 0x08, 0x88, 0x11, 0x12, 0x98, 0x28, 0x77, 0x33, 0x11, 0x21, 0x11, 0x53, - 0x82, 0xaa, 0xdb, 0x9a, 0x53, 0x14, 0x00, 0x88, 0xdd, 0x8a, 0x32, 0x44, 0x02, 0xa9, 0x9a, 0x42, - 0x25, 0x98, 0xbc, 0x0a, 0x11, 0x43, 0x23, 0xc9, 0xbc, 0x8a, 0x00, 0x30, 0x47, 0xa0, 0xbc, 0x29, - 0x03, 0xda, 0xaa, 0xaa, 0x52, 0x35, 0x02, 0xea, 0xab, 0x89, 0x10, 0x22, 0x90, 0xbc, 0x09, 0x33, - 0x35, 0x83, 0xef, 0xbb, 0x08, 0x32, 0x11, 0x81, 0xeb, 0x9a, 0x21, 0x24, 0xc9, 0xaa, 0xa9, 0x89, - 0x10, 0x02, 0xfc, 0x9b, 0x9a, 0x20, 0x12, 0xfa, 0xbc, 0x29, 0x02, 0xaa, 0x09, 0x21, 0x90, 0x28, - 0xe8, 0xbd, 0xcc, 0xbd, 0x19, 0x55, 0x03, 0xb8, 0x9c, 0x08, 0x13, 0x81, 0xca, 0xac, 0x0a, 0x21, - 0x11, 0x90, 0xdc, 0xbd, 0x8a, 0x53, 0x14, 0x90, 0x99, 0x20, 0x36, 0x81, 0xcb, 0xab, 0xbb, 0x29, - 0x25, 0x80, 0x99, 0xaa, 0x19, 0x44, 0x01, 0xfd, 0xbb, 0x48, 0x26, 0x02, 0xb8, 0xbb, 0xab, 0x38, - 0x35, 0x01, 0xa9, 0x08, 0x63, 0x36, 0x81, 0xbb, 0xaa, 0x9b, 0x32, 0x04, 0xb9, 0xbf, 0x9b, 0x42, - 0x25, 0x01, 0x00, 0x00, 0x63, 0x34, 0x82, 0xc9, 0xab, 0x99, 0x08, 0x80, 0xdb, 0xbc, 0x20, 0x44, - 0x23, 0x98, 0x9a, 0x52, 0x44, 0x23, 0xa0, 0x18, 0x91, 0xbb, 0x18, 0xb1, 0xcf, 0x18, 0x22, 0x66, - 0x02, 0x01, 0x44, 0x7d, 0x0a, 0x02, 0xd0, 0x03, 0x24, 0x01, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, - 0x9f, 0x35, 0x90, 0xbc, 0xa9, 0x8a, 0x10, 0x62, 0x55, 0x33, 0x31, 0x54, 0x33, 0x22, 0x63, 0x44, - 0x23, 0x32, 0x43, 0x34, 0x35, 0x34, 0x34, 0x24, 0x23, 0x43, 0x43, 0x24, 0x33, 0x35, 0x34, 0x24, - 0x43, 0x33, 0x35, 0x33, 0x34, 0x34, 0x43, 0x43, 0x43, 0x24, 0x33, 0x53, 0x33, 0x34, 0x33, 0x44, - 0x43, 0x24, 0x32, 0x33, 0x33, 0x33, 0x34, 0x33, 0x34, 0x24, 0x24, 0x33, 0x43, 0x33, 0x43, 0x33, - 0x15, 0x94, 0xff, 0x1f, 0x81, 0x08, 0x00, 0x90, 0xb8, 0x8b, 0x90, 0x38, 0xf9, 0x8d, 0x00, 0xbc, - 0x9b, 0x41, 0x92, 0xbb, 0xbc, 0xdc, 0xab, 0xa9, 0x99, 0x9a, 0xaa, 0xba, 0xba, 0xcb, 0xbb, 0xac, - 0x2d, 0x77, 0x12, 0xc8, 0xac, 0x20, 0x84, 0x0c, 0x12, 0x00, 0x08, 0x88, 0x80, 0xef, 0x89, 0x89, - 0x88, 0x88, 0x89, 0x89, 0x89, 0x99, 0x99, 0x9a, 0xaa, 0xaa, 0xab, 0xac, 0xbb, 0xbc, 0xbb, 0xbc, - 0xcb, 0xbb, 0xcb, 0x1b, 0x24, 0x33, 0x22, 0x54, 0x33, 0x81, 0x73, 0x25, 0x13, 0x34, 0x12, 0x20, - 0x26, 0x41, 0x33, 0x12, 0x73, 0x43, 0x02, 0x10, 0x34, 0x20, 0x34, 0x22, 0x34, 0x12, 0x11, 0x46, - 0x22, 0x22, 0x32, 0x32, 0x33, 0x34, 0x43, 0x33, 0x24, 0x24, 0x33, 0x24, 0x43, 0x32, 0x24, 0x33, - 0x34, 0x33, 0x34, 0x24, 0x33, 0x34, 0x43, 0x33, 0x43, 0x33, 0x84, 0x9b, 0x47, 0x90, 0xba, 0x1b, - 0x66, 0x23, 0xea, 0x39, 0x93, 0x8b, 0x80, 0x9a, 0x90, 0xbf, 0x19, 0x00, 0xa9, 0x30, 0xc2, 0xef, - 0x88, 0x80, 0x18, 0x98, 0xdb, 0x8c, 0xa8, 0x8c, 0x02, 0xbb, 0x08, 0x11, 0xe9, 0xbe, 0x0a, 0x12, - 0x00, 0xb8, 0xbf, 0x9a, 0xa8, 0xbb, 0x30, 0x04, 0xcb, 0x30, 0x84, 0xbf, 0x9b, 0x21, 0x34, 0xa1, - 0xce, 0x8a, 0x88, 0x09, 0x31, 0x02, 0xca, 0x29, 0x23, 0xc8, 0xad, 0x18, 0x34, 0x82, 0xcd, 0x9a, - 0x10, 0x22, 0x42, 0x13, 0xa0, 0x9a, 0x31, 0x24, 0xb8, 0x0c, 0x62, 0x02, 0xda, 0x9a, 0x41, 0x34, - 0x44, 0x12, 0x00, 0xa8, 0x89, 0x43, 0x23, 0x80, 0x88, 0x88, 0xdb, 0xab, 0x08, 0x66, 0x33, 0x24, - 0x11, 0x88, 0xaa, 0x30, 0x34, 0x22, 0x91, 0x88, 0x80, 0xbc, 0x8a, 0x62, 0x13, 0x51, 0x24, 0x22, - 0x82, 0x2a, 0x24, 0x22, 0xd9, 0x28, 0x82, 0x89, 0xb8, 0xef, 0x08, 0x89, 0x08, 0x31, 0x03, 0x1b, - 0x34, 0x82, 0xdb, 0x3b, 0x37, 0x21, 0x22, 0x34, 0x90, 0x61, 0x25, 0x80, 0x11, 0x98, 0x41, 0xa1, - 0x0c, 0x45, 0x22, 0x20, 0x37, 0x91, 0x29, 0x44, 0x12, 0x10, 0xa1, 0x9c, 0x98, 0x08, 0x43, 0x92, - 0x08, 0x01, 0xec, 0xac, 0x28, 0x45, 0x90, 0x08, 0xc9, 0xab, 0x98, 0x2a, 0x27, 0xaa, 0xa1, 0xbf, - 0xc8, 0xbe, 0x20, 0x02, 0xeb, 0x9a, 0xb9, 0x8a, 0xa9, 0x9d, 0x10, 0xca, 0xbc, 0x0a, 0xd0, 0xbd, - 0x88, 0x99, 0xa9, 0xce, 0x0b, 0x81, 0xcb, 0x9b, 0x9a, 0x88, 0xfb, 0x9f, 0x08, 0x98, 0x9a, 0x09, - 0xa8, 0xcc, 0x09, 0x12, 0xb8, 0xad, 0xaa, 0x9a, 0xaa, 0xca, 0xad, 0x08, 0x08, 0x32, 0xd2, 0xbf, - 0x19, 0xa8, 0xbc, 0x20, 0xa0, 0x8d, 0x34, 0x82, 0xbb, 0x09, 0x80, 0x21, 0xf8, 0x9e, 0x52, 0x03, - 0xaa, 0x19, 0x23, 0x12, 0x42, 0x34, 0x01, 0xde, 0x8a, 0x73, 0x12, 0x88, 0x40, 0x04, 0xea, 0x9b, - 0x20, 0x12, 0xca, 0x1a, 0x33, 0x91, 0xbb, 0x50, 0x04, 0xa9, 0x0a, 0xa0, 0xdf, 0xab, 0x42, 0x24, - 0xa8, 0xbb, 0x89, 0x01, 0x98, 0xbb, 0xce, 0x9b, 0x08, 0x00, 0xc9, 0xbe, 0x1a, 0x12, 0xe9, 0xbd, - 0x8b, 0x10, 0x81, 0xcc, 0xac, 0x99, 0x18, 0x01, 0xe9, 0xac, 0x8a, 0x30, 0x13, 0xa8, 0xab, 0x11, - 0x12, 0xeb, 0xce, 0xaa, 0x31, 0x22, 0xa0, 0xcc, 0xab, 0x30, 0x35, 0x02, 0xb8, 0xcb, 0xbb, 0xab, - 0x31, 0x37, 0x63, 0x33, 0x02, 0xca, 0x9a, 0x31, 0x47, 0x23, 0x80, 0x88, 0x89, 0x40, 0x55, 0x22, - 0x33, 0x14, 0x80, 0x00, 0x90, 0x61, 0x44, 0x32, 0x31, 0x02, 0xba, 0x40, 0x36, 0x43, 0x12, 0x11, - 0x11, 0x88, 0x40, 0x36, 0x24, 0x00, 0x10, 0x34, 0x01, 0x72, 0x34, 0x13, 0x11, 0x11, 0x80, 0x88, - 0x10, 0x66, 0x14, 0x90, 0x19, 0x01, 0x18, 0x63, 0x32, 0x22, 0xea, 0xab, 0x89, 0x89, 0x00, 0x62, - 0x13, 0x98, 0xa9, 0x18, 0xd0, 0x1a, 0x23, 0xc9, 0x9d, 0x99, 0xbb, 0xfb, 0xcc, 0x89, 0x90, 0x09, - 0x01, 0x99, 0xa9, 0x8a, 0x90, 0xef, 0xcb, 0x99, 0x89, 0xca, 0xba, 0xac, 0x99, 0x00, 0x20, 0x01, - 0xfb, 0xac, 0xaa, 0xbc, 0xab, 0x9a, 0x08, 0x00, 0x18, 0x81, 0xb9, 0x30, 0x04, 0xea, 0xac, 0x8a, - 0xca, 0xcc, 0x19, 0x34, 0x81, 0x8a, 0x20, 0x33, 0x41, 0x56, 0x34, 0x02, 0x88, 0x31, 0x03, 0x98, - 0x61, 0x44, 0x01, 0xa9, 0x1a, 0x45, 0x33, 0x34, 0x44, 0x23, 0x11, 0x41, 0x44, 0x02, 0x20, 0x53, - 0x23, 0xa0, 0x9a, 0x52, 0x44, 0x12, 0x43, 0x23, 0x90, 0x30, 0x35, 0x23, 0x08, 0x31, 0x36, 0x11, - 0x10, 0x62, 0x24, 0x22, 0x11, 0x11, 0x81, 0x99, 0x51, 0x44, 0x32, 0x33, 0x44, 0x34, 0x12, 0x11, - 0x23, 0x82, 0xaa, 0x48, 0x34, 0x01, 0x99, 0x31, 0x01, 0x03, 0x9a, 0x42, 0x67, 0x35, 0x21, 0x01, - 0x80, 0x28, 0x54, 0x13, 0xb9, 0x9c, 0x18, 0x54, 0x23, 0x88, 0x30, 0x45, 0x43, 0x12, 0x98, 0x39, - 0x37, 0x21, 0x00, 0x98, 0x40, 0x47, 0x23, 0x91, 0xca, 0x8a, 0x21, 0x02, 0xa8, 0x19, 0x64, 0x24, - 0x98, 0x99, 0x98, 0x73, 0x24, 0xa8, 0xdb, 0x9b, 0x41, 0x25, 0x81, 0x99, 0xa9, 0xa9, 0x00, 0xd8, - 0xce, 0x8a, 0x18, 0x02, 0xc9, 0x8a, 0x00, 0xa8, 0xdc, 0xbc, 0xa9, 0xcb, 0x18, 0x02, 0xdc, 0xac, - 0x89, 0x80, 0xc9, 0xbd, 0xbb, 0xca, 0xac, 0x09, 0x80, 0xa9, 0xa9, 0xdb, 0xce, 0xac, 0x8a, 0x10, - 0x80, 0xb9, 0xdb, 0xbb, 0xab, 0x30, 0x13, 0xfb, 0xbd, 0xbc, 0xab, 0x09, 0x21, 0x22, 0x82, 0xcb, - 0xcc, 0xac, 0x8b, 0x20, 0x33, 0x91, 0xde, 0xac, 0x9b, 0x20, 0x44, 0x13, 0xa8, 0xbc, 0x9c, 0x19, - 0x52, 0x34, 0x13, 0x80, 0xaa, 0xb9, 0xab, 0x71, 0x35, 0x24, 0x01, 0x99, 0xab, 0x18, 0x54, 0x22, - 0xb8, 0xbb, 0xab, 0x9a, 0x19, 0x77, 0x34, 0x01, 0x99, 0xbb, 0xbc, 0x0a, 0x43, 0x02, 0xfb, 0xac, - 0x18, 0x43, 0x11, 0x01, 0x90, 0xca, 0xcc, 0xab, 0x8a, 0x08, 0x11, 0x82, 0xfc, 0xbd, 0x9b, 0x88, - 0xa0, 0xba, 0xab, 0xdc, 0xbc, 0xaa, 0x88, 0xa9, 0xaa, 0x09, 0xa8, 0xcc, 0x9b, 0x88, 0xfb, 0xcb, - 0x9a, 0x89, 0xaa, 0xbc, 0xba, 0xbb, 0xba, 0xab, 0x31, 0x36, 0xa1, 0xdd, 0xcb, 0xbc, 0xad, 0x10, - 0x22, 0x22, 0x12, 0x12, 0x23, 0xc8, 0x8a, 0x71, 0x24, 0x11, 0x80, 0x1a, 0x64, 0x24, 0x54, 0x22, - 0x11, 0x22, 0x33, 0x13, 0x53, 0x34, 0x31, 0x34, 0x32, 0x23, 0x32, 0x63, 0x56, 0x02, 0x01, 0x21, - 0x53, 0x23, 0x43, 0x12, 0x98, 0x31, 0x53, 0x23, 0x33, 0x63, 0x54, 0x34, 0x12, 0x32, 0x33, 0x12, - 0x22, 0xa0, 0xbc, 0x8a, 0x72, 0x45, 0x23, 0x81, 0x20, 0x33, 0x12, 0x00, 0xba, 0xdc, 0x9b, 0x08, - 0xa9, 0x19, 0x10, 0x56, 0x22, 0xb0, 0xbf, 0x8a, 0x80, 0x90, 0xdc, 0xbc, 0x19, 0x01, 0xaa, 0x88, - 0xc9, 0xae, 0xab, 0x88, 0xda, 0xbc, 0x89, 0x11, 0xfa, 0xbf, 0x99, 0x89, 0x98, 0x88, 0x98, 0xcb, - 0x9b, 0x88, 0x80, 0xa9, 0xbc, 0xaa, 0xcb, 0xbf, 0xab, 0xaa, 0xaa, 0x9a, 0x80, 0x99, 0xcb, 0x9a, - 0x50, 0x33, 0xd9, 0x9b, 0x08, 0x90, 0x09, 0x53, 0x24, 0x81, 0x89, 0x88, 0x08, 0x90, 0x51, 0x47, - 0x24, 0x01, 0x00, 0x10, 0x73, 0x44, 0x43, 0x32, 0x23, 0x31, 0x33, 0x13, 0x22, 0x64, 0x35, 0x33, - 0x02, 0x00, 0x31, 0x54, 0x34, 0x25, 0x23, 0x31, 0x43, 0x22, 0x01, 0x31, 0x45, 0x33, 0x11, 0x98, - 0xb9, 0x0a, 0x56, 0x35, 0x14, 0x01, 0x10, 0x22, 0x32, 0x32, 0x44, 0x33, 0x12, 0x80, 0x20, 0x32, - 0x65, 0x44, 0x22, 0xb8, 0xac, 0x09, 0x43, 0x24, 0x42, 0x22, 0x90, 0xba, 0x9a, 0x89, 0x20, 0x46, - 0x43, 0x80, 0xab, 0x2a, 0x65, 0x23, 0x01, 0x88, 0xaa, 0xaa, 0x1b, 0x47, 0x24, 0x33, 0x33, 0x01, - 0xa9, 0x0a, 0x73, 0x36, 0x02, 0x90, 0x99, 0x08, 0x20, 0x64, 0x33, 0x81, 0xba, 0xcb, 0x9a, 0x21, - 0x55, 0x35, 0x13, 0xa8, 0xab, 0x88, 0x89, 0x61, 0x33, 0x81, 0x99, 0x88, 0x00, 0x41, 0x34, 0x81, - 0xfe, 0xbc, 0x9b, 0x00, 0x80, 0x08, 0x98, 0xba, 0xbe, 0xab, 0x89, 0x99, 0xda, 0xcc, 0xeb, 0xbc, - 0x9a, 0x88, 0xc9, 0xcb, 0xcb, 0xba, 0xaa, 0xab, 0xab, 0xb9, 0xcd, 0xab, 0xeb, 0xdc, 0xaa, 0x9a, - 0x9a, 0xab, 0xac, 0x8a, 0x10, 0xb8, 0xdd, 0xcb, 0xac, 0xab, 0x89, 0x89, 0x99, 0xaa, 0x8a, 0x99, - 0xde, 0xac, 0x18, 0x02, 0xe9, 0xbc, 0xbb, 0xbb, 0x09, 0x34, 0x04, 0xb9, 0xab, 0x52, 0x02, 0xda, - 0x09, 0x43, 0x33, 0x80, 0xaa, 0xab, 0x18, 0x64, 0x35, 0x03, 0x80, 0x62, 0x35, 0x02, 0xb9, 0xaa, - 0x08, 0x32, 0x13, 0x00, 0x31, 0x65, 0x44, 0x11, 0xba, 0xad, 0x88, 0xb9, 0xbe, 0xab, 0x30, 0x37, - 0x23, 0x11, 0x00, 0x98, 0x18, 0x90, 0xfc, 0xcc, 0xbb, 0x8a, 0x88, 0xa9, 0xba, 0x9a, 0xcb, 0xde, - 0xbc, 0xbc, 0xbb, 0xaa, 0x99, 0xbb, 0xbe, 0xbb, 0x9a, 0xa9, 0xcb, 0xba, 0xdc, 0xcb, 0x9a, 0x89, - 0x99, 0xcb, 0xcd, 0xdb, 0xba, 0x9b, 0x89, 0x18, 0x21, 0x12, 0xc9, 0xcd, 0xac, 0x99, 0xa9, 0xcb, - 0xcc, 0xaa, 0x99, 0x08, 0x42, 0x44, 0x12, 0x11, 0x91, 0xca, 0xcb, 0x9a, 0x30, 0x34, 0x33, 0x54, - 0x44, 0x32, 0x33, 0x43, 0x33, 0x22, 0x43, 0x13, 0x81, 0x42, 0x55, 0x34, 0x12, 0x21, 0x42, 0x43, - 0x43, 0x43, 0x33, 0x12, 0x31, 0x44, 0x33, 0x24, 0x53, 0x44, 0x23, 0x11, 0x31, 0x34, 0x34, 0x53, - 0x43, 0x22, 0x11, 0x10, 0x21, 0x11, 0x53, 0x45, 0x24, 0x11, 0x00, 0x11, 0x11, 0x33, 0x35, 0x12, - 0xa0, 0xcb, 0xbb, 0xdb, 0x8a, 0x42, 0x34, 0x80, 0xba, 0x9a, 0x20, 0x55, 0x34, 0x91, 0xec, 0xac, - 0x9b, 0x99, 0x9a, 0x99, 0xa8, 0xdd, 0xbc, 0xaa, 0x8a, 0x88, 0x99, 0xca, 0xcd, 0xbc, 0xba, 0x99, - 0x80, 0x98, 0xda, 0xcd, 0xcb, 0xab, 0x89, 0x08, 0x98, 0xba, 0xbe, 0xcb, 0xaa, 0x88, 0x10, 0x00, - 0xa8, 0xbb, 0xba, 0xaa, 0x40, 0x36, 0xb0, 0xdf, 0xab, 0x99, 0x08, 0x21, 0x43, 0x23, 0x00, 0x89, - 0x00, 0x22, 0x54, 0x45, 0x23, 0x80, 0x89, 0x42, 0x35, 0x14, 0x11, 0x10, 0x21, 0x52, 0x54, 0x34, - 0x33, 0x33, 0x34, 0x24, 0x12, 0x11, 0x34, 0x33, 0x12, 0x21, 0x54, 0x44, 0x24, 0x23, 0x02, 0x88, - 0x10, 0x53, 0x43, 0x22, 0x53, 0x43, 0x23, 0x11, 0x21, 0x32, 0x36, 0x25, 0x12, 0x10, 0x10, 0x44, - 0x34, 0x13, 0x81, 0x10, 0x32, 0x33, 0x33, 0x42, 0x63, 0x34, 0x24, 0x01, 0x88, 0x20, 0x43, 0x02, - 0xda, 0xaa, 0x08, 0x54, 0x44, 0x12, 0x00, 0x08, 0x20, 0x31, 0x22, 0x54, 0x44, 0x24, 0x11, 0x01, - 0x21, 0x31, 0x44, 0x34, 0x23, 0x21, 0x32, 0x25, 0x13, 0x88, 0x99, 0x21, 0x33, 0x43, 0x55, 0x43, - 0x22, 0x63, 0x44, 0x23, 0x01, 0x88, 0x80, 0xa8, 0xbb, 0x08, 0x22, 0x33, 0x56, 0x24, 0x91, 0xba, - 0x19, 0x81, 0xed, 0xbd, 0xaa, 0x88, 0x00, 0x00, 0xb8, 0xde, 0xbc, 0xaa, 0x99, 0xcb, 0xbc, 0xaa, - 0xeb, 0xcd, 0xab, 0xa9, 0xa8, 0xa9, 0xab, 0xdb, 0xbc, 0xac, 0xa9, 0xda, 0xbc, 0xbc, 0xbc, 0xcb, - 0xac, 0x9a, 0x09, 0x88, 0x99, 0xdb, 0xbc, 0xac, 0xaa, 0xa9, 0xcb, 0xbc, 0xbb, 0xbb, 0xab, 0x9b, - 0x99, 0xca, 0xdd, 0xbc, 0xbe, 0xbb, 0x9a, 0x08, 0x11, 0x01, 0x88, 0xb9, 0xcd, 0xbb, 0x89, 0x98, - 0xb9, 0xbb, 0xdb, 0xbb, 0x1a, 0x46, 0x34, 0x22, 0x01, 0x10, 0x42, 0x33, 0x53, 0x54, 0x24, 0x12, - 0x98, 0xba, 0xab, 0x89, 0x30, 0x35, 0x22, 0x62, 0x35, 0x33, 0x11, 0x80, 0xfa, 0xcd, 0xac, 0x88, - 0x31, 0x44, 0x44, 0x43, 0x11, 0x98, 0xaa, 0xbb, 0xbc, 0xab, 0x99, 0xeb, 0xcc, 0xaa, 0x10, 0x32, - 0x22, 0x90, 0xec, 0xbd, 0xbd, 0xab, 0xaa, 0x99, 0x89, 0xa9, 0xcb, 0xcc, 0x8a, 0x18, 0x80, 0xca, - 0xcc, 0xcb, 0xbb, 0xab, 0x9a, 0xa9, 0xbb, 0xbd, 0xbc, 0xac, 0x9a, 0x18, 0x02, 0xc9, 0xcf, 0xbc, - 0xaa, 0x8a, 0x80, 0x90, 0xc9, 0xba, 0x9a, 0x89, 0x20, 0x44, 0x25, 0x01, 0xb9, 0xab, 0x39, 0x65, - 0x34, 0x14, 0x01, 0x00, 0x31, 0x45, 0x34, 0x33, 0x23, 0x33, 0x22, 0x22, 0x43, 0x55, 0x43, 0x23, - 0x11, 0x21, 0x64, 0x44, 0x33, 0x23, 0x12, 0x11, 0x23, 0x34, 0x34, 0x34, 0x43, 0x34, 0x33, 0x43, - 0x33, 0x46, 0x33, 0x33, 0x33, 0x33, 0x44, 0x43, 0x33, 0x13, 0x91, 0x88, 0x32, 0x35, 0x34, 0x34, - 0x33, 0x12, 0x88, 0x88, 0x52, 0x43, 0x33, 0x01, 0xa8, 0x09, 0x65, 0x35, 0x22, 0x98, 0xda, 0xcc, - 0xac, 0x9b, 0x09, 0x88, 0x99, 0x99, 0xba, 0xbd, 0xac, 0xaa, 0xbb, 0xbf, 0xad, 0xaa, 0xaa, 0xaa, - 0xdb, 0xcc, 0xbd, 0xac, 0x9b, 0x99, 0xa9, 0x99, 0x9a, 0xaa, 0xbc, 0xcb, 0xbb, 0xbb, 0xcb, 0xcb, - 0xbd, 0xac, 0xab, 0xa9, 0x98, 0x99, 0xaa, 0xcb, 0xcb, 0xac, 0xa9, 0x89, 0x30, 0x44, 0x22, 0x98, - 0xbb, 0xdb, 0xab, 0x89, 0x31, 0x44, 0x34, 0x25, 0x23, 0x22, 0x44, 0x45, 0x33, 0x23, 0x33, 0x44, - 0x44, 0x24, 0x33, 0x33, 0x24, 0x33, 0x33, 0x34, 0x34, 0x34, 0x24, 0x23, 0x22, 0x33, 0x45, 0x34, - 0x33, 0x43, 0x32, 0x43, 0x42, 0x42, 0x33, 0x24, 0x12, 0x22, 0x22, 0x33, 0x64, 0x53, 0x33, 0x24, - 0x23, 0x23, 0x23, 0x11, 0x33, 0x44, 0x33, 0x33, 0x44, 0x24, 0x33, 0x53, 0x33, 0x12, 0xa8, 0xaa, - 0x9a, 0x8a, 0x20, 0x45, 0x14, 0x01, 0x28, 0x53, 0x44, 0x43, 0x34, 0x14, 0x11, 0x00, 0x20, 0x42, - 0x33, 0x44, 0x43, 0x22, 0x10, 0x20, 0x43, 0x45, 0x43, 0x32, 0x01, 0x88, 0x88, 0x10, 0x42, 0x54, - 0x35, 0x44, 0x32, 0x21, 0x01, 0x01, 0x01, 0x80, 0xca, 0xbb, 0x18, 0x65, 0x34, 0x34, 0x23, 0x12, - 0xa0, 0xca, 0xbb, 0x9b, 0x42, 0x24, 0xd8, 0xcc, 0x9b, 0x18, 0x12, 0x90, 0xec, 0xcc, 0xbc, 0xaa, - 0x8a, 0x10, 0x31, 0x23, 0xc8, 0xef, 0xcb, 0x9b, 0x8a, 0x98, 0xa9, 0xca, 0xbc, 0xdb, 0xba, 0xba, - 0xbb, 0xab, 0xbb, 0xcd, 0xcb, 0xab, 0x08, 0x80, 0xda, 0xce, 0xcb, 0xab, 0xab, 0xa9, 0x89, 0x9a, - 0xaa, 0xa9, 0xca, 0xdb, 0xba, 0xba, 0xde, 0xbc, 0xad, 0x9a, 0x08, 0x20, 0x11, 0x90, 0xcb, 0xab, - 0x99, 0xaa, 0xbd, 0xac, 0xbb, 0xab, 0x19, 0x54, 0x35, 0x34, 0x33, 0x12, 0x80, 0x88, 0x32, 0x35, - 0x81, 0xcc, 0xbc, 0xaa, 0x18, 0x44, 0x35, 0x23, 0x12, 0x00, 0x10, 0x31, 0x63, 0x23, 0x90, 0xcd, - 0xac, 0x08, 0x54, 0x44, 0x23, 0x11, 0x80, 0x88, 0x00, 0x80, 0xba, 0xcd, 0xdb, 0xbb, 0xbb, 0x99, - 0x80, 0xb8, 0xed, 0xbc, 0xbd, 0x9b, 0x8a, 0x98, 0xeb, 0xcd, 0xbb, 0xac, 0xa9, 0x89, 0x88, 0x99, - 0xca, 0xba, 0xcb, 0xcb, 0xba, 0xbb, 0xbd, 0xcd, 0xba, 0xaa, 0x99, 0xa9, 0xbb, 0xcd, 0xba, 0xbb, - 0xac, 0xcb, 0xbb, 0xbc, 0xbb, 0xbd, 0xac, 0x9a, 0x99, 0x99, 0x99, 0x09, 0x20, 0x63, 0x34, 0x24, - 0x02, 0x80, 0x98, 0xa9, 0xaa, 0x51, 0x57, 0x53, 0x33, 0x33, 0x33, 0x32, 0x22, 0x53, 0x53, 0x43, - 0x43, 0x33, 0x24, 0x23, 0x43, 0x53, 0x33, 0x33, 0x43, 0x32, 0x34, 0x44, 0x34, 0x35, 0x43, 0x33, - 0x33, 0x33, 0x43, 0x34, 0x44, 0x33, 0x43, 0x22, 0x23, 0x33, 0x34, 0x33, 0x22, 0x22, 0x43, 0x44, - 0x34, 0x35, 0x24, 0x23, 0x23, 0x11, 0x11, 0x22, 0x22, 0x23, 0x11, 0xa8, 0xcb, 0xcb, 0x8a, 0x41, - 0x34, 0x12, 0x99, 0xba, 0xbc, 0x9c, 0x20, 0x81, 0xff, 0xbc, 0xbd, 0xdb, 0xbb, 0xac, 0xa9, 0xba, - 0xcc, 0xbb, 0xac, 0xab, 0xab, 0xbb, 0xdc, 0xcb, 0xcb, 0xaa, 0xbb, 0xbc, 0xab, 0xbb, 0xcc, 0xbc, - 0xbb, 0xaa, 0x9b, 0xba, 0xcb, 0xbc, 0xad, 0xbb, 0xaa, 0xba, 0x99, 0x11, 0x02, 0xc9, 0xce, 0xbb, - 0xab, 0xab, 0xab, 0xaa, 0xbc, 0xab, 0x28, 0x44, 0x53, 0x44, 0x43, 0x23, 0x00, 0x00, 0x42, 0x34, - 0x35, 0x43, 0x23, 0x34, 0x44, 0x43, 0x33, 0x33, 0x32, 0x43, 0x43, 0x42, 0x43, 0x34, 0x33, 0x33, - 0x23, 0x32, 0x45, 0x44, 0x34, 0x33, 0x22, 0x11, 0x11, 0x22, 0x42, 0x34, 0x44, 0x43, 0x33, 0x43, - 0x34, 0x34, 0x34, 0x33, 0x13, 0x11, 0x00, 0x32, 0x45, 0x34, 0x43, 0x32, 0x22, 0x32, 0x22, 0x81, - 0x88, 0xaa, 0xaa, 0x89, 0x65, 0x45, 0x34, 0x24, 0x01, 0x88, 0x89, 0x28, 0x43, 0x34, 0x33, 0x23, - 0x22, 0x33, 0x44, 0x34, 0x24, 0x32, 0x21, 0x21, 0x53, 0x54, 0x44, 0x33, 0x22, 0x01, 0x08, 0x11, - 0x42, 0x43, 0x33, 0x22, 0x34, 0x45, 0x33, 0x34, 0x32, 0x21, 0x88, 0x09, 0x73, 0x45, 0x44, 0x22, - 0x01, 0x80, 0x99, 0x89, 0x99, 0xba, 0xbd, 0xac, 0x9b, 0x20, 0x46, 0x44, 0x23, 0x01, 0xda, 0xbc, - 0xbb, 0x9a, 0xaa, 0xcb, 0xcc, 0xab, 0x9b, 0x98, 0x80, 0x99, 0xdd, 0xcd, 0xbc, 0xbc, 0xba, 0xa9, - 0x99, 0xcb, 0xbc, 0xbb, 0xab, 0x9a, 0xaa, 0xeb, 0xcc, 0xdb, 0xbc, 0xbb, 0xbb, 0xbb, 0xba, 0x9a, - 0xba, 0xaa, 0xab, 0xdb, 0xdc, 0xcc, 0xcb, 0xbb, 0xac, 0xab, 0xbb, 0xbc, 0xab, 0xbb, 0xca, 0xba, - 0x9b, 0x8a, 0x99, 0xbb, 0xbc, 0xdb, 0xcb, 0x9b, 0x89, 0x88, 0x08, 0x53, 0x45, 0x22, 0x22, 0x42, - 0x23, 0x11, 0x00, 0xca, 0xde, 0xbb, 0x8b, 0x51, 0x45, 0x33, 0x23, 0x01, 0xa9, 0xa9, 0x30, 0x55, - 0x33, 0x14, 0x12, 0x00, 0x98, 0x28, 0x54, 0x34, 0x43, 0x32, 0x43, 0x43, 0x43, 0x12, 0xd9, 0xcd, - 0xbc, 0xab, 0xab, 0xab, 0x9a, 0x89, 0xaa, 0xbc, 0xbd, 0xcc, 0xcc, 0xcb, 0xdb, 0xcb, 0xbb, 0x9a, - 0x09, 0x88, 0x98, 0xa9, 0xcc, 0xdb, 0xbb, 0xbb, 0xbb, 0xba, 0xcc, 0xcc, 0xac, 0xbb, 0xcb, 0xba, - 0xcb, 0xcb, 0xba, 0xab, 0xbb, 0xcb, 0xaa, 0xbb, 0xdb, 0xcb, 0xcb, 0xaa, 0xaa, 0x99, 0x98, 0x98, - 0x98, 0x88, 0x08, 0x10, 0x20, 0x63, 0x55, 0x44, 0x33, 0x33, 0x53, 0x63, 0x33, 0x35, 0x32, 0x22, - 0x12, 0x22, 0x43, 0x43, 0x44, 0x33, 0x34, 0x42, 0x42, 0x43, 0x34, 0x35, 0x34, 0x43, 0x22, 0x32, - 0x43, 0x43, 0x33, 0x34, 0x33, 0x43, 0x43, 0x33, 0x34, 0x34, 0x43, 0x33, 0x43, 0x33, 0x35, 0x34, - 0x34, 0x22, 0x12, 0x12, 0x21, 0x33, 0x44, 0x33, 0x32, 0x12, 0x22, 0x44, 0x34, 0x45, 0x22, 0x02, - 0x98, 0xab, 0x09, 0x42, 0x25, 0x23, 0x01, 0x99, 0xbb, 0xcd, 0xbc, 0xbc, 0xac, 0xcb, 0xcb, 0xba, - 0xa9, 0x98, 0xba, 0xdd, 0xbc, 0xac, 0xab, 0xba, 0xcc, 0xdb, 0xcb, 0xba, 0xbb, 0xab, 0xaa, 0xbb, - 0xcc, 0xcb, 0xbb, 0xbb, 0x89, 0x89, 0xda, 0xdc, 0xbc, 0xab, 0x9b, 0x9a, 0x88, 0x98, 0xa8, 0xca, - 0xcb, 0xcb, 0xba, 0xcb, 0xcc, 0xcb, 0xab, 0x19, 0x52, 0x33, 0x33, 0x11, 0x98, 0x9a, 0x08, 0x43, - 0x43, 0x34, 0x33, 0x44, 0x63, 0x34, 0x35, 0x33, 0x23, 0x11, 0x20, 0x42, 0x45, 0x44, 0x32, 0x23, - 0x13, 0x32, 0x32, 0x44, 0x33, 0x43, 0x23, 0x22, 0x53, 0x34, 0x35, 0x33, 0x22, 0x22, 0x31, 0x45, - 0x44, 0x43, 0x43, 0x32, 0x32, 0x22, 0x33, 0x43, 0x33, 0x23, 0x22, 0x32, 0x63, 0x34, 0x44, 0x23, - 0x22, 0x10, 0x00, 0x11, 0x21, 0x52, 0x53, 0x33, 0x34, 0x24, 0x23, 0x13, 0x80, 0xa9, 0xa9, 0x18, - 0x54, 0x44, 0x44, 0x43, 0x33, 0x34, 0x33, 0x33, 0x22, 0x32, 0x12, 0x22, 0x21, 0x33, 0x32, 0x43, - 0x73, 0x46, 0x44, 0x34, 0x43, 0x12, 0x01, 0x00, 0x00, 0x31, 0x43, 0x33, 0x43, 0x23, 0x34, 0x45, - 0x43, 0x24, 0x12, 0x80, 0xb9, 0xbc, 0x9a, 0x10, 0x44, 0x43, 0x33, 0x22, 0x12, 0x11, 0x11, 0x01, - 0xc9, 0xde, 0xcc, 0xcb, 0xbb, 0xac, 0xac, 0xbb, 0xba, 0x9a, 0x80, 0x01, 0xa8, 0xcf, 0xcd, 0xbd, - 0xbc, 0xbb, 0xbb, 0xbb, 0xcb, 0xbb, 0xcb, 0xcb, 0xba, 0xbb, 0xbc, 0xcc, 0xcb, 0xac, 0xbb, 0xab, - 0xcb, 0xba, 0xbd, 0xbb, 0xbc, 0xbb, 0xbc, 0xbc, 0xbc, 0xbb, 0xbc, 0xcb, 0xcb, 0xbc, 0xcb, 0xbb, - 0xbb, 0xab, 0x89, 0x00, 0x01, 0x98, 0xca, 0xbc, 0xbc, 0xcb, 0xbc, 0xbc, 0xaa, 0x18, 0x42, 0x34, - 0x34, 0x32, 0x11, 0x98, 0xbb, 0xbb, 0x9a, 0x00, 0xc8, 0xbe, 0xab, 0x61, 0x45, 0x33, 0x24, 0x23, - 0x23, 0x11, 0x11, 0x73, 0x63, 0x32, 0x22, 0x80, 0x89, 0x41, 0x46, 0x33, 0x22, 0x11, 0x21, 0x32, - 0x33, 0x03, 0xfa, 0xdc, 0xcc, 0xcb, 0xab, 0xaa, 0x89, 0xba, 0xce, 0xbc, 0xbb, 0xab, 0x89, 0x99, - 0xdb, 0xbc, 0xbd, 0xbb, 0xbb, 0xaa, 0x99, 0xbb, 0xce, 0xbc, 0xbc, 0xac, 0xba, 0xdb, 0xbb, 0xcb, - 0xab, 0xab, 0xba, 0xcb, 0xdb, 0xba, 0xbc, 0xbb, 0xbc, 0xbb, 0xbc, 0xcc, 0xcb, 0xab, 0xaa, 0x08, - 0x80, 0xa9, 0xcb, 0xbb, 0x9a, 0x42, 0x45, 0x34, 0x33, 0x22, 0x00, 0x00, 0x21, 0x53, 0x33, 0x11, - 0x00, 0x10, 0x75, 0x54, 0x43, 0x24, 0x23, 0x22, 0x23, 0x53, 0x43, 0x43, 0x43, 0x32, 0x33, 0x34, - 0x35, 0x44, 0x32, 0x23, 0x32, 0x32, 0x44, 0x53, 0x34, 0x43, 0x32, 0x23, 0x33, 0x53, 0x43, 0x43, - 0x33, 0x33, 0x33, 0x43, 0x32, 0x43, 0x32, 0x33, 0x24, 0x33, 0x35, 0x36, 0x34, 0x34, 0x23, 0x11, - 0x00, 0x88, 0x88, 0x88, 0x08, 0x20, 0x44, 0x44, 0x43, 0x23, 0x12, 0xa8, 0xdc, 0xbc, 0xbc, 0x9a, - 0x99, 0x98, 0xa9, 0xba, 0xbc, 0xbe, 0xbd, 0xbd, 0xbc, 0xcb, 0xbb, 0xba, 0xac, 0xbb, 0xcb, 0xcb, - 0xbb, 0xcb, 0xbb, 0xbb, 0xbd, 0xbb, 0xcb, 0xba, 0xbb, 0xdc, 0xcb, 0xbb, 0xbc, 0xba, 0xaa, 0xaa, - 0xba, 0xac, 0xac, 0xcb, 0xba, 0xcb, 0xbb, 0xad, 0xac, 0x9a, 0x88, 0x22, 0x33, 0x12, 0xa8, 0xcc, - 0xac, 0x9b, 0x09, 0x43, 0x35, 0x35, 0x43, 0x43, 0x34, 0x34, 0x33, 0x43, 0x22, 0x32, 0x34, 0x34, - 0x44, 0x32, 0x43, 0x32, 0x23, 0x33, 0x44, 0x33, 0x33, 0x33, 0x43, 0x44, 0x63, 0x43, 0x43, 0x33, - 0x43, 0x33, 0x34, 0x33, 0x43, 0x32, 0x22, 0x11, 0x21, 0x53, 0x54, 0x34, 0x34, 0x33, 0x32, 0x33, - 0x23, 0x12, 0x02, 0x21, 0x31, 0x44, 0x32, 0x33, 0x53, 0x42, 0x32, 0x34, 0x34, 0x35, 0x32, 0x23, - 0x02, 0x10, 0x41, 0x44, 0x44, 0x32, 0x24, 0x33, 0x33, 0x43, 0x24, 0x24, 0x12, 0x81, 0x88, 0x0a, - 0x61, 0x54, 0x53, 0x32, 0x43, 0x32, 0x33, 0x33, 0x33, 0x33, 0x22, 0x00, 0x88, 0x30, 0x57, 0x35, - 0x34, 0x32, 0x21, 0x22, 0x53, 0x43, 0x24, 0x23, 0x23, 0x11, 0x98, 0xba, 0xac, 0x8a, 0x21, 0x43, - 0x34, 0x35, 0x45, 0x22, 0x81, 0xda, 0xcc, 0xbb, 0xbb, 0xcb, 0xba, 0xac, 0xab, 0xba, 0xaa, 0xcb, - 0xcd, 0xcd, 0xcc, 0xdb, 0xbb, 0xac, 0x9a, 0x9a, 0xa9, 0xba, 0xbb, 0xbc, 0xbb, 0xbc, 0xdb, 0xdb, - 0xcb, 0xcb, 0xcb, 0xba, 0xba, 0xbc, 0xcb, 0xac, 0xbb, 0xba, 0xba, 0xbc, 0xcc, 0xdb, 0xbb, 0xcb, - 0xaa, 0xaa, 0xaa, 0xcb, 0xbc, 0xbc, 0xaa, 0x99, 0x00, 0x00, 0x98, 0xdb, 0xbc, 0xbc, 0x9a, 0x08, - 0x01, 0x98, 0xeb, 0xba, 0x09, 0x51, 0x43, 0x22, 0x80, 0xa9, 0xaa, 0xaa, 0x09, 0x31, 0x23, 0x91, - 0x9a, 0x73, 0x77, 0x34, 0x24, 0x02, 0x80, 0x09, 0x52, 0x45, 0x34, 0x33, 0x23, 0x12, 0x21, 0x31, - 0x53, 0x23, 0x02, 0xfb, 0xcc, 0xbb, 0x9b, 0x89, 0x90, 0xb9, 0xdd, 0xcb, 0xac, 0xbb, 0xaa, 0x99, - 0xaa, 0xcb, 0xbc, 0xbc, 0xbc, 0xbc, 0xcd, 0xcc, 0xba, 0xba, 0xa9, 0xa9, 0xa9, 0xba, 0xca, 0xcb, - 0xcb, 0xbc, 0xbc, 0xbc, 0xbc, 0xdb, 0xba, 0xcb, 0xbb, 0xcc, 0xba, 0xab, 0xbb, 0xaa, 0xba, 0xaa, - 0xbb, 0xbb, 0xaa, 0xbb, 0xcd, 0xcb, 0xab, 0x9a, 0x08, 0x42, 0x34, 0x24, 0x01, 0xa9, 0xcc, 0xab, - 0x08, 0x31, 0x54, 0x63, 0x44, 0x53, 0x43, 0x23, 0x32, 0x21, 0x01, 0x11, 0x31, 0x44, 0x45, 0x53, - 0x33, 0x43, 0x43, 0x33, 0x34, 0x34, 0x32, 0x43, 0x33, 0x53, 0x33, 0x35, 0x43, 0x33, 0x24, 0x23, - 0x43, 0x42, 0x33, 0x53, 0x32, 0x24, 0x33, 0x24, 0x33, 0x33, 0x33, 0x34, 0x34, 0x34, 0x35, 0x43, - 0x33, 0x22, 0x00, 0x08, 0x10, 0x32, 0x34, 0x34, 0x43, 0x43, 0x34, 0x33, 0x33, 0x12, 0x98, 0xdc, - 0xcc, 0xab, 0x9a, 0x08, 0x88, 0xb8, 0xbd, 0xbd, 0xcc, 0xcb, 0xcc, 0xbb, 0xbb, 0xac, 0xbb, 0xba, - 0xbb, 0xcb, 0xcb, 0xbc, 0xbc, 0xbb, 0xbb, 0xcd, 0xcb, 0xbc, 0xbb, 0xbb, 0xaa, 0xaa, 0xba, 0xba, - 0xcc, 0xdb, 0xbb, 0xbc, 0xac, 0xbb, 0xbc, 0xbb, 0xaa, 0x8a, 0x88, 0xa8, 0xdb, 0xcc, 0xac, 0xab, - 0xab, 0xaa, 0x99, 0x08, 0x31, 0x64, 0x53, 0x34, 0x43, 0x32, 0x23, 0x23, 0x33, 0x43, 0x33, 0x32, - 0x43, 0x43, 0x53, 0x44, 0x43, 0x34, 0x24, 0x33, 0x33, 0x34, 0x33, 0x43, 0x22, 0x22, 0x43, 0x44, - 0x44, 0x53, 0x33, 0x33, 0x33, 0x33, 0x43, 0x42, 0x33, 0x35, 0x43, 0x33, 0x43, 0x43, 0x34, 0x32, - 0x24, 0x22, 0x12, 0x12, 0x22, 0x32, 0x24, 0x33, 0x23, 0x32, 0x44, 0x45, 0x34, 0x34, 0x22, 0x23, - 0x22, 0x33, 0x34, 0x23, 0x12, 0x98, 0xaa, 0x8a, 0x73, 0x47, 0x53, 0x33, 0x23, 0x11, 0x11, 0x21, - 0x33, 0x35, 0x33, 0x22, 0x12, 0x31, 0x64, 0x54, 0x43, 0x33, 0x22, 0x12, 0x11, 0x22, 0x43, 0x24, - 0x23, 0x34, 0x43, 0x44, 0x43, 0x34, 0x43, 0x22, 0x11, 0x00, 0x10, 0x31, 0x43, 0x23, 0x80, 0x9a, - 0x18, 0x54, 0x36, 0x24, 0x23, 0x01, 0x80, 0x80, 0x88, 0x88, 0xca, 0xde, 0xbd, 0xbd, 0xcb, 0xaa, - 0xba, 0xba, 0xcb, 0xcb, 0xbb, 0xbc, 0xbd, 0xcc, 0xcb, 0xbb, 0xcb, 0xba, 0xbb, 0xbc, 0xcb, 0xbb, - 0xcc, 0xbb, 0xbc, 0xcb, 0xdb, 0xbb, 0xbc, 0xbb, 0xac, 0xbb, 0xbc, 0xcb, 0xcb, 0xbb, 0xbc, 0xbc, - 0xbc, 0xbb, 0xcb, 0xba, 0xaa, 0xba, 0xbb, 0xbd, 0xcb, 0xcb, 0xab, 0xbb, 0xbb, 0xbb, 0xac, 0xaa, - 0x9a, 0x89, 0x89, 0xb9, 0xce, 0xcc, 0xab, 0x9b, 0x09, 0x10, 0x11, 0x81, 0xa9, 0xcb, 0xbb, 0xab, - 0x8b, 0x63, 0x35, 0x34, 0x45, 0x44, 0x44, 0x43, 0x23, 0x23, 0x32, 0x34, 0x44, 0x32, 0x23, 0x11, - 0x80, 0xa9, 0xdb, 0xbb, 0x8a, 0x18, 0x41, 0x44, 0x44, 0x33, 0x03, 0xda, 0xcf, 0xcb, 0xcb, 0xaa, - 0x9a, 0xaa, 0xa9, 0xaa, 0xbb, 0xbb, 0xcd, 0xdb, 0xbc, 0xbd, 0xbc, 0xbb, 0xaa, 0x88, 0x08, 0xa8, - 0xeb, 0xcc, 0xcb, 0xbc, 0xbc, 0xbb, 0xbc, 0xac, 0xab, 0xbb, 0xba, 0xba, 0xbb, 0xcc, 0xcb, 0xab, - 0xbb, 0xab, 0xbc, 0xdb, 0xbb, 0xad, 0xbb, 0xaa, 0x99, 0x99, 0x98, 0x08, 0x10, 0x31, 0x34, 0x33, - 0x80, 0xdb, 0xbc, 0x8a, 0x31, 0x57, 0x34, 0x35, 0x43, 0x32, 0x43, 0x32, 0x43, 0x33, 0x34, 0x35, - 0x34, 0x44, 0x33, 0x44, 0x32, 0x24, 0x24, 0x23, 0x24, 0x33, 0x24, 0x43, 0x33, 0x53, 0x33, 0x35, - 0x43, 0x33, 0x43, 0x43, 0x42, 0x32, 0x32, 0x33, 0x33, 0x44, 0x42, 0x33, 0x34, 0x34, 0x33, 0x24, - 0x32, 0x32, 0x43, 0x43, 0x33, 0x24, 0x33, 0x43, 0x43, 0x33, 0x34, 0x33, 0x12, 0x01, 0x80, 0x88, - 0x11, 0x12, 0x02, 0xb9, 0xce, 0xac, 0xac, 0xbb, 0xbd, 0xcc, 0xbc, 0xbc, 0xcb, 0xbb, 0xcb, 0xcb, - 0xbb, 0xbc, 0xcb, 0xab, 0xab, 0xcb, 0xcc, 0xcc, 0xcb, 0xbb, 0xac, 0xaa, 0xa9, 0xaa, 0xbb, 0xbc, - 0xcb, 0xcb, 0xba, 0xcb, 0xcb, 0xdb, 0xbb, 0xbc, 0xba, 0xaa, 0xa9, 0xaa, 0xcb, 0xcb, 0xba, 0xbb, - 0xab, 0x9a, 0xa9, 0xa9, 0xab, 0x9a, 0x18, 0x31, 0x43, 0x54, 0x43, 0x35, 0x45, 0x33, 0x33, 0x23, - 0x22, 0x33, 0x53, 0x44, 0x44, 0x43, 0x43, 0x42, 0x32, 0x24, 0x24, 0x33, 0x33, 0x23, 0x43, 0x32, - 0x44, 0x43, 0x34, 0x35, 0x43, 0x24, 0x33, 0x24, 0x33, 0x32, 0x43, 0x32, 0x33, 0x34, 0x43, 0x33, - 0x35, 0x43, 0x34, 0x33, 0x43, 0x32, 0x22, 0x21, 0x22, 0x43, 0x34, 0x24, 0x24, 0x32, 0x24, 0x43, - 0x32, 0x22, 0x33, 0x32, 0x24, 0x32, 0x43, 0x43, 0x43, 0x34, 0x24, 0x43, 0x43, 0x34, 0x33, 0x34, - 0x33, 0x24, 0x33, 0x33, 0x32, 0x33, 0x43, 0x53, 0x53, 0x43, 0x43, 0x34, 0x43, 0x33, 0x24, 0x33, - 0x24, 0x33, 0x33, 0x24, 0x43, 0x43, 0x34, 0x34, 0x23, 0x33, 0x32, 0x43, 0x24, 0x24, 0x33, 0x53, - 0x33, 0x43, 0x24, 0x24, 0x33, 0x23, 0x80, 0xba, 0xbe, 0xac, 0xaa, 0x99, 0x99, 0xaa, 0xaa, 0xcb, - 0xba, 0xcc, 0xcd, 0xbd, 0xcc, 0xbb, 0xac, 0xab, 0xbb, 0xcb, 0xbd, 0xcc, 0xcb, 0xbb, 0xac, 0xbb, - 0xdb, 0xca, 0xba, 0xbc, 0xbb, 0xcb, 0xbb, 0xbd, 0xcb, 0xcb, 0xcb, 0xca, 0xba, 0xbb, 0xbc, 0xbc, - 0xcb, 0xbb, 0xba, 0xbb, 0xcb, 0xbb, 0xcb, 0xbb, 0xbd, 0xcb, 0xbc, 0xac, 0xbb, 0xab, 0xba, 0x99, - 0x99, 0x88, 0xa9, 0xcc, 0xcc, 0xbc, 0xbc, 0xcb, 0xab, 0x9b, 0x99, 0x00, 0x22, 0x32, 0x32, 0x22, - 0x21, 0x11, 0x11, 0x43, 0x35, 0x45, 0x45, 0x53, 0x34, 0x33, 0x24, 0x13, 0x12, 0x22, 0x42, 0x24, - 0x23, 0x12, 0x01, 0x00, 0x18, 0x52, 0x55, 0x53, 0x33, 0x23, 0x80, 0xb9, 0xcc, 0xcc, 0xbc, 0xcd, - 0xbb, 0xcb, 0x9a, 0x89, 0x10, 0x10, 0x80, 0xb9, 0xce, 0xcc, 0xbb, 0xbc, 0xbc, 0xbc, 0xbc, 0xcb, - 0xba, 0xaa, 0xba, 0xcb, 0xbc, 0xbd, 0xbc, 0xcb, 0xcb, 0xba, 0xcb, 0xbb, 0xac, 0xbb, 0xbb, 0xbb, - 0xcb, 0xcb, 0xbc, 0xbc, 0xcb, 0xab, 0xab, 0xba, 0xaa, 0xbb, 0xbb, 0xbb, 0xaa, 0x99, 0xa9, 0xdc, - 0xcc, 0xbc, 0xab, 0x8a, 0x10, 0x33, 0x34, 0x33, 0x33, 0x54, 0x63, 0x53, 0x43, 0x33, 0x24, 0x43, - 0x32, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x43, 0x33, 0x25, 0x24, 0x33, 0x43, 0x43, 0x43, 0x43, - 0x32, 0x34, 0x33, 0x44, 0x32, 0x33, 0x34, 0x33, 0x43, 0x33, 0x44, 0x33, 0x35, 0x43, 0x32, 0x33, - 0x24, 0x23, 0x33, 0x34, 0x43, 0x43, 0x43, 0x43, 0x32, 0x43, 0x32, 0x33, 0x43, 0x32, 0x22, 0x12, - 0x12, 0x11, 0x00, 0x00, 0x22, 0x33, 0x13, 0x80, 0xca, 0xbc, 0xcc, 0xcc, 0xbd, 0xcc, 0xbc, 0xbc, - 0xcc, 0xba, 0xac, 0xba, 0xab, 0xbc, 0xbb, 0xbc, 0xbc, 0xdb, 0xbb, 0xbd, 0xbb, 0xbc, 0xbb, 0xdb, - 0xba, 0xbb, 0xbc, 0xba, 0xbc, 0xcb, 0xbc, 0xbc, 0xdb, 0xbb, 0xcb, 0xba, 0xaa, 0xab, 0xaa, 0xaa, - 0xa9, 0xba, 0xca, 0xbc, 0xbd, 0xac, 0xbb, 0xab, 0x9a, 0x08, 0x00, 0x20, 0x32, 0x36, 0x44, 0x43, - 0x23, 0x13, 0x22, 0x22, 0x53, 0x43, 0x34, 0x34, 0x33, 0x43, 0x53, 0x53, 0x43, 0x43, 0x23, 0x33, - 0x24, 0x43, 0x43, 0x34, 0x43, 0x43, 0x32, 0x43, 0x43, 0x34, 0x43, 0x33, 0x23, 0x33, 0x43, 0x33, - 0x34, 0x34, 0x43, 0x43, 0x32, 0x34, 0x34, 0x43, 0x24, 0x23, 0x22, 0x21, 0x11, 0x22, 0x33, 0x34, - 0x44, 0x33, 0x34, 0x43, 0x22, 0x33, 0x33, 0x44, 0x33, 0x43, 0x34, 0x53, 0x32, 0x33, 0x22, 0x23, - 0x33, 0x34, 0x34, 0x53, 0x33, 0x35, 0x25, 0x43, 0x32, 0x32, 0x43, 0x33, 0x34, 0x43, 0x43, 0x43, - 0x42, 0x22, 0x33, 0x33, 0x34, 0x33, 0x33, 0x34, 0x44, 0x44, 0x34, 0x43, 0x23, 0x23, 0x22, 0x22, - 0x32, 0x44, 0x44, 0x33, 0x24, 0x13, 0x12, 0x22, 0x22, 0x12, 0x11, 0x88, 0x88, 0x42, 0x46, 0x44, - 0x23, 0x80, 0xfb, 0xcc, 0xbc, 0xbb, 0xac, 0x9a, 0x9a, 0x99, 0x98, 0x98, 0x99, 0xcc, 0xcd, 0xcd, - 0xcb, 0xac, 0xbb, 0xaa, 0x9a, 0xaa, 0xbb, 0xbd, 0xcc, 0xbb, 0xcb, 0xac, 0xac, 0xbc, 0xcb, 0xcb, - 0xbb, 0xac, 0xbb, 0xbc, 0xcb, 0xbb, 0xbb, 0xac, 0xba, 0xca, 0xca, 0xbb, 0xad, 0xbb, 0xbb, 0x9a, - 0xaa, 0xca, 0xcb, 0xbc, 0xac, 0xba, 0xba, 0xbc, 0xcc, 0xcb, 0xbb, 0xbb, 0x9b, 0x88, 0x21, 0x23, - 0x11, 0x98, 0x89, 0x88, 0x99, 0xea, 0xdc, 0xcb, 0xab, 0x99, 0x10, 0x54, 0x36, 0x45, 0x43, 0x33, - 0x33, 0x33, 0x13, 0x11, 0x00, 0x21, 0x45, 0x44, 0x33, 0x22, 0x01, 0x88, 0xbb, 0xbe, 0xbd, 0xbc, - 0xab, 0xbb, 0xaa, 0x89, 0x00, 0x22, 0x13, 0xc9, 0xcf, 0xbd, 0xbd, 0xac, 0xac, 0xab, 0xba, 0xa9, - 0xaa, 0xdb, 0xdb, 0xbc, 0xcb, 0xac, 0xcb, 0xbb, 0xbc, 0xbd, 0xcb, 0xbb, 0xac, 0xbb, 0xba, 0xcb, - 0xcb, 0xbb, 0xbd, 0xbb, 0xbc, 0xac, 0xbb, 0xab, 0xbb, 0xba, 0xaa, 0xab, 0xbc, 0xbc, 0xbc, 0xbc, - 0xcb, 0xcb, 0xcb, 0xaa, 0xaa, 0x08, 0x20, 0x32, 0x24, 0x11, 0x80, 0x88, 0x10, 0x31, 0x44, 0x34, - 0x63, 0x44, 0x44, 0x34, 0x34, 0x43, 0x23, 0x43, 0x32, 0x43, 0x43, 0x43, 0x24, 0x24, 0x43, 0x43, - 0x43, 0x34, 0x33, 0x34, 0x33, 0x43, 0x43, 0x33, 0x34, 0x33, 0x24, 0x33, 0x33, 0x35, 0x44, 0x43, - 0x33, 0x34, 0x33, 0x34, 0x43, 0x32, 0x33, 0x33, 0x33, 0x33, 0x45, 0x43, 0x34, 0x24, 0x33, 0x23, - 0x22, 0x23, 0x43, 0x43, 0x22, 0x22, 0x22, 0x42, 0x34, 0x44, 0x32, 0x11, 0x90, 0xca, 0xcc, 0xdb, - 0xba, 0xbc, 0xbb, 0xcc, 0xbb, 0xab, 0xab, 0xaa, 0xb9, 0xca, 0xcb, 0xdb, 0xbb, 0xbd, 0xbd, 0xbc, - 0xdb, 0xba, 0xbb, 0xbb, 0xac, 0xbb, 0xcb, 0xbb, 0xbc, 0xbb, 0xbd, 0xcb, 0xdb, 0xbb, 0xbc, 0xac, - 0xbb, 0xbb, 0xba, 0xbb, 0xba, 0xba, 0xcb, 0xcb, 0xdb, 0xbb, 0xbb, 0xab, 0x88, 0x21, 0x33, 0x34, - 0x33, 0x23, 0x33, 0x44, 0x43, 0x12, 0x90, 0xa9, 0x09, 0x65, 0x45, 0x43, 0x33, 0x23, 0x23, 0x34, - 0x44, 0x44, 0x43, 0x43, 0x32, 0x23, 0x23, 0x34, 0x43, 0x43, 0x43, 0x42, 0x42, 0x43, 0x43, 0x43, - 0x33, 0x33, 0x32, 0x33, 0x24, 0x34, 0x53, 0x43, 0x33, 0x43, 0x22, 0x33, 0x33, 0x24, 0x23, 0x33, - 0x53, 0x33, 0x35, 0x44, 0x33, 0x34, 0x22, 0x12, 0x00, 0x00, 0x31, 0x44, 0x43, 0x24, 0x24, 0x23, - 0x33, 0x22, 0x12, 0x11, 0x11, 0x42, 0x46, 0x44, 0x53, 0x33, 0x33, 0x22, 0x12, 0x10, 0x21, 0x43, - 0x34, 0x34, 0x44, 0x42, 0x42, 0x32, 0x43, 0x32, 0x24, 0x22, 0x11, 0x11, 0x22, 0x34, 0x44, 0x43, - 0x34, 0x53, 0x33, 0x44, 0x32, 0x43, 0x32, 0x33, 0x22, 0x22, 0x11, 0x01, 0x21, 0x32, 0x25, 0x43, - 0x33, 0x34, 0x33, 0x11, 0xa8, 0xdc, 0xbd, 0xcb, 0xcb, 0xba, 0xdb, 0xbc, 0xbd, 0xbd, 0xbb, 0xba, - 0xab, 0xaa, 0xcb, 0xdc, 0xcb, 0xcb, 0xcb, 0xba, 0xba, 0xbb, 0xbc, 0xbd, 0xcc, 0xcb, 0xcb, 0xcb, - 0xdb, 0xca, 0xba, 0xbb, 0xbb, 0xbb, 0xab, 0xbb, 0xbb, 0xcc, 0xcb, 0xcc, 0xcb, 0xcb, 0xbb, 0xcb, - 0xba, 0xaa, 0xba, 0xba, 0xcb, 0xcb, 0xcb, 0xbb, 0xbb, 0xcb, 0xcb, 0xbb, 0xbb, 0xba, 0x9a, 0x9a, - 0xba, 0xdc, 0xcc, 0xcb, 0xbb, 0xbc, 0xba, 0xa9, 0xaa, 0x99, 0x11, 0x45, 0x35, 0x34, 0x33, 0x33, - 0x33, 0x43, 0x34, 0x44, 0x32, 0x33, 0x33, 0x34, 0x44, 0x44, 0x34, 0x32, 0x11, 0x88, 0xba, 0xab, - 0xaa, 0xa9, 0xaa, 0xac, 0x9b, 0x09, 0x42, 0x36, 0x33, 0xc0, 0xde, 0xcd, 0xcb, 0xba, 0xab, 0xa9, - 0x99, 0x9a, 0xba, 0xbb, 0xcd, 0xbc, 0xce, 0xdb, 0xcb, 0xbb, 0xac, 0xbb, 0xaa, 0xba, 0xca, 0xcb, - 0xdb, 0xbb, 0xbc, 0xbc, 0xac, 0xcb, 0xbb, 0xbb, 0xbc, 0xca, 0xaa, 0xab, 0xbb, 0xbb, 0xcb, 0xcb, - 0xbb, 0xdb, 0xbb, 0xbc, 0xbc, 0xbb, 0xac, 0xaa, 0x99, 0x88, 0x10, 0x22, 0x33, 0x23, 0x11, 0xb9, - 0xdb, 0xab, 0x9b, 0x28, 0x65, 0x45, 0x44, 0x43, 0x34, 0x33, 0x34, 0x34, 0x42, 0x33, 0x53, 0x43, - 0x43, 0x33, 0x53, 0x33, 0x44, 0x33, 0x43, 0x24, 0x32, 0x33, 0x34, 0x43, 0x43, 0x43, 0x43, 0x33, - 0x34, 0x33, 0x25, 0x24, 0x33, 0x24, 0x33, 0x32, 0x24, 0x33, 0x24, 0x24, 0x33, 0x34, 0x24, 0x24, - 0x43, 0x42, 0x33, 0x43, 0x32, 0x23, 0x23, 0x23, 0x33, 0x23, 0x33, 0x24, 0x23, 0x33, 0x32, 0x33, - 0x33, 0xb0, 0xde, 0xcc, 0xbc, 0xab, 0xbb, 0xbb, 0xbd, 0xbd, 0xbc, 0xbc, 0xcb, 0xcb, 0xcb, 0xbb, - 0xbc, 0xcb, 0xbb, 0xbb, 0xcb, 0xcb, 0xbc, 0xbd, 0xcb, 0xac, 0xba, 0xba, 0xba, 0xbc, 0xbc, 0xcb, - 0xbc, 0xca, 0xba, 0xbb, 0xcb, 0xcb, 0xba, 0xbb, 0xbb, 0xba, 0xca, 0xba, 0xcc, 0xba, 0xac, 0xaa, - 0xa9, 0x88, 0x88, 0x88, 0xa9, 0xaa, 0xab, 0x99, 0x30, 0x55, 0x44, 0x34, 0x35, 0x33, 0x24, 0x22, - 0x21, 0x22, 0x43, 0x44, 0x53, 0x34, 0x53, 0x33, 0x34, 0x43, 0x33, 0x43, 0x33, 0x43, 0x32, 0x34, - 0x53, 0x43, 0x43, 0x34, 0x33, 0x25, 0x33, 0x33, 0x43, 0x33, 0x33, 0x34, 0x43, 0x33, 0x34, 0x34, - 0x34, 0x34, 0x43, 0x23, 0x33, 0x33, 0x22, 0x22, 0x33, 0x34, 0x45, 0x33, 0x24, 0x24, 0x33, 0x24, - 0x23, 0x32, 0x32, 0x33, 0x43, 0x32, 0x43, 0x34, 0x44, 0x43, 0x43, 0x33, 0x34, 0x34, 0x43, 0x33, - 0x43, 0x32, 0x24, 0x32, 0x12, 0x32, 0x32, 0x35, 0x35, 0x34, 0x34, 0x34, 0x34, 0x33, 0x34, 0x33, - 0x24, 0x33, 0x24, 0x43, 0x33, 0x35, 0x34, 0x43, 0x32, 0x22, 0x22, 0x33, 0x35, 0x33, 0x34, 0x34, - 0x34, 0x43, 0x34, 0x33, 0x33, 0x13, 0x98, 0xcc, 0xbd, 0xba, 0xaa, 0x9a, 0xaa, 0xa9, 0xab, 0xab, - 0xbb, 0xdd, 0xdc, 0xbd, 0xbc, 0xbc, 0xac, 0xab, 0xbb, 0xbc, 0xbd, 0xcc, 0xcb, 0xbb, 0xcb, 0xbb, - 0xbc, 0xcb, 0xbc, 0xbb, 0xcb, 0xcb, 0xca, 0xba, 0xbc, 0xbc, 0xac, 0xcb, 0xbb, 0xcb, 0xcb, 0xbb, - 0xbc, 0xbb, 0xbb, 0xbb, 0xcb, 0xcb, 0xab, 0xbc, 0xcb, 0xcb, 0xbc, 0x7c, 0x02, 0x00, 0x22, 0x56, - 0xf7, 0x02, 0x01, 0x00, 0xe9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0xa8, 0x9a, 0xa0, 0x2d, - 0xfc, 0xf4, 0x9f, 0x16, 0x80, 0xa0, 0xaa, 0x19, 0x35, 0x80, 0xab, 0x10, 0x12, 0xcc, 0x71, 0x84, - 0x9c, 0x10, 0x00, 0x93, 0x29, 0xfd, 0x41, 0xbb, 0x47, 0x9a, 0x98, 0x40, 0xa0, 0x0a, 0x43, 0xa0, - 0x9e, 0x32, 0x98, 0xa4, 0x1f, 0xa3, 0x28, 0xc1, 0x1b, 0x14, 0x90, 0x9a, 0x11, 0xb0, 0x2a, 0x14, - 0xaa, 0x10, 0xa8, 0xad, 0x20, 0x13, 0xa9, 0x9a, 0x39, 0xa4, 0x9d, 0x52, 0xd8, 0x9a, 0x10, 0x14, - 0xdc, 0x08, 0x80, 0x80, 0x88, 0x08, 0x88, 0x88, 0x89, 0x88, 0x88, 0x89, 0x88, 0x08, 0x08, 0x00, - 0x11, 0x11, 0x31, 0x32, 0x21, 0x32, 0x52, 0xd3, 0x77, 0x77, 0xf2, 0x1a, 0x33, 0x82, 0xbc, 0x21, - 0x42, 0xa1, 0x19, 0x12, 0xa8, 0x51, 0x92, 0x62, 0x92, 0x88, 0x00, 0x08, 0x32, 0x45, 0x04, 0xbd, - 0x52, 0x01, 0x88, 0x0b, 0x24, 0x08, 0x88, 0x18, 0x11, 0x80, 0x88, 0x10, 0x80, 0x88, 0x89, 0x99, - 0xa9, 0xbb, 0xbc, 0xcb, 0xbc, 0xbc, 0xdb, 0x8b, 0xff, 0x2b, 0x10, 0xf8, 0x0f, 0x92, 0x2a, 0xb1, - 0xab, 0x8c, 0x02, 0xac, 0x01, 0x9a, 0xfb, 0x0a, 0x02, 0xab, 0x19, 0xf0, 0x8d, 0x20, 0xb1, 0x9d, - 0x08, 0x02, 0xcc, 0x10, 0x9a, 0x11, 0xcd, 0x42, 0xa0, 0xbb, 0x1a, 0x15, 0x89, 0xaa, 0x18, 0x10, - 0x81, 0x9d, 0x91, 0x0a, 0x11, 0x10, 0x10, 0x11, 0x11, 0x12, 0x22, 0x33, 0x44, 0x33, 0x34, 0x35, - 0x43, 0x34, 0x43, 0x43, 0x33, 0x34, 0x43, 0x43, 0x43, 0x21, 0x23, 0x77, 0xa0, 0x51, 0x02, 0x08, - 0x12, 0x31, 0x18, 0x37, 0x0b, 0x35, 0x00, 0x1a, 0x15, 0x1a, 0x37, 0x98, 0x9b, 0x54, 0x82, 0x89, - 0x31, 0x13, 0xcb, 0x21, 0x22, 0x83, 0x29, 0xd2, 0x71, 0xb3, 0x19, 0x82, 0x31, 0xcb, 0x62, 0x01, - 0xc9, 0x2c, 0x06, 0x99, 0x9a, 0x36, 0xaa, 0x09, 0x08, 0x90, 0x29, 0x80, 0x90, 0xbf, 0x42, 0x89, - 0xa2, 0x8f, 0xb2, 0x2a, 0xa2, 0x0c, 0x00, 0xa0, 0x8e, 0x02, 0x9d, 0x92, 0x1b, 0xb3, 0xac, 0x8c, - 0x05, 0x9b, 0xb0, 0x8a, 0x00, 0xba, 0xd9, 0x2c, 0xb2, 0x0d, 0xc9, 0x1a, 0x04, 0xbc, 0x88, 0x19, - 0xf8, 0x1b, 0x81, 0x99, 0xbe, 0x10, 0x11, 0xdb, 0x21, 0xba, 0xda, 0x61, 0xd8, 0x8a, 0x00, 0x10, - 0xb1, 0x8b, 0x90, 0xba, 0x4b, 0xf1, 0x39, 0xd8, 0x98, 0x5a, 0x93, 0xcb, 0x19, 0x92, 0x90, 0x1c, - 0xb3, 0x1c, 0xbc, 0x05, 0x0d, 0x13, 0xb8, 0x8e, 0x23, 0x81, 0xdb, 0x09, 0x11, 0x88, 0x91, 0x1e, - 0x03, 0x8b, 0xb0, 0x68, 0xc9, 0x41, 0x00, 0xa8, 0xaa, 0x0d, 0x33, 0x12, 0x89, 0xdf, 0x50, 0xa1, - 0x98, 0x2a, 0x16, 0x8a, 0xa8, 0x19, 0x31, 0x84, 0xcb, 0x1a, 0x35, 0x98, 0x19, 0x11, 0xca, 0x40, - 0x12, 0x15, 0xaa, 0xd9, 0x79, 0x04, 0x98, 0x8a, 0x43, 0x81, 0x90, 0x1a, 0x24, 0x82, 0x89, 0x41, - 0x03, 0x72, 0xa0, 0x09, 0x73, 0x83, 0x0b, 0x23, 0x18, 0x22, 0x44, 0xc0, 0x39, 0x34, 0x33, 0xa9, - 0x42, 0x81, 0x34, 0x28, 0x17, 0x3b, 0x94, 0x51, 0x90, 0x12, 0x19, 0x04, 0x30, 0x17, 0x9a, 0x82, - 0x5b, 0x07, 0xa8, 0x1a, 0x26, 0x89, 0x9a, 0x33, 0x80, 0x88, 0x09, 0x43, 0x81, 0xb9, 0x2b, 0x37, - 0x82, 0xbc, 0x32, 0x08, 0x83, 0x31, 0xdf, 0x51, 0x91, 0x89, 0x18, 0x81, 0x9a, 0x28, 0xb1, 0x72, - 0xc3, 0xac, 0x30, 0x13, 0xca, 0x28, 0xc0, 0x11, 0x0a, 0xf0, 0x2e, 0x04, 0xca, 0x2b, 0x15, 0xca, - 0x19, 0x12, 0xba, 0x0a, 0x92, 0x8b, 0x10, 0xb1, 0x9f, 0x88, 0xac, 0xa9, 0x28, 0xa4, 0xaf, 0x90, - 0x0a, 0xc1, 0x9c, 0x29, 0xb1, 0x9c, 0xd8, 0x8d, 0x22, 0xc9, 0xcc, 0x38, 0xc2, 0x0a, 0xb0, 0xbb, - 0x08, 0x04, 0xcd, 0x99, 0x00, 0xc8, 0x2a, 0xe2, 0x8c, 0x90, 0x30, 0xea, 0x89, 0x09, 0x11, 0xb8, - 0xbc, 0x89, 0x09, 0x21, 0xd2, 0x9e, 0x09, 0x12, 0xac, 0x01, 0xa8, 0x9c, 0x91, 0x09, 0x88, 0x25, - 0xba, 0x9f, 0x24, 0x99, 0xa0, 0x29, 0x91, 0x52, 0x81, 0xdb, 0x1b, 0x27, 0x00, 0x80, 0x31, 0xa1, - 0x1a, 0x14, 0x89, 0x73, 0x05, 0x98, 0x21, 0x12, 0x10, 0x44, 0x02, 0x88, 0x62, 0x24, 0x88, 0x18, - 0x44, 0x22, 0x21, 0x01, 0x30, 0x35, 0x22, 0x34, 0x23, 0x12, 0x63, 0x24, 0x23, 0x10, 0x44, 0x33, - 0x11, 0x71, 0x24, 0x00, 0x31, 0x23, 0x02, 0x72, 0x14, 0x20, 0x22, 0x22, 0x80, 0x51, 0x23, 0x53, - 0x22, 0x01, 0x9a, 0x52, 0x34, 0x12, 0x18, 0x02, 0x59, 0x07, 0xa9, 0x28, 0x35, 0xb8, 0x9c, 0x51, - 0x82, 0x9c, 0x31, 0x02, 0xeb, 0x28, 0xb1, 0x1b, 0x31, 0xf2, 0x8c, 0x00, 0x00, 0xab, 0x11, 0x9a, - 0xc3, 0xcf, 0x11, 0x18, 0xfa, 0x3d, 0x81, 0x81, 0xae, 0x00, 0x30, 0xd1, 0x0b, 0x81, 0x09, 0xaa, - 0x10, 0x88, 0xa1, 0x8e, 0xd9, 0x29, 0x92, 0x0b, 0xba, 0x08, 0x88, 0x37, 0xef, 0x20, 0x90, 0x09, - 0xa9, 0x02, 0x9c, 0x33, 0xa8, 0xdb, 0x20, 0xe0, 0x1b, 0x14, 0xa2, 0xaf, 0x05, 0x89, 0xca, 0x32, - 0x08, 0xa2, 0x0d, 0x99, 0x41, 0x91, 0xad, 0x10, 0x21, 0xb0, 0x8c, 0x10, 0xc0, 0x68, 0xb2, 0x0d, - 0xa1, 0x08, 0x09, 0x23, 0xeb, 0x1a, 0x84, 0x89, 0x99, 0x08, 0x1a, 0x23, 0xd0, 0xbf, 0x23, 0x19, - 0xb1, 0xa9, 0xbb, 0x73, 0xd1, 0x9b, 0x63, 0xa1, 0x8b, 0x82, 0x99, 0x8b, 0x26, 0x99, 0xca, 0x51, - 0xa8, 0x12, 0x9c, 0x00, 0x0c, 0x27, 0xda, 0x18, 0x22, 0xb9, 0x89, 0x3c, 0x07, 0x9b, 0x82, 0x0b, - 0x23, 0x00, 0x89, 0xaa, 0x91, 0x9f, 0x73, 0x94, 0x9d, 0x00, 0x33, 0xe8, 0x0a, 0x31, 0x83, 0xab, - 0x8a, 0x41, 0x11, 0xb8, 0x4a, 0x13, 0xe9, 0x0c, 0x45, 0x91, 0x9c, 0x00, 0x22, 0x80, 0x9b, 0x63, - 0x98, 0x01, 0x8c, 0x34, 0x90, 0x89, 0x10, 0x63, 0x82, 0x0a, 0xc0, 0x6a, 0x84, 0x1a, 0x12, 0x18, - 0x90, 0x30, 0x04, 0x8a, 0x55, 0x90, 0x13, 0xad, 0x42, 0x01, 0x02, 0x09, 0xa8, 0x71, 0x86, 0x88, - 0x0b, 0x25, 0x9b, 0x23, 0x11, 0xbc, 0x34, 0xa8, 0x89, 0x72, 0xb2, 0x2c, 0x06, 0xba, 0x19, 0x53, - 0xb8, 0x38, 0xc2, 0x0b, 0x32, 0x13, 0xec, 0x29, 0x12, 0x99, 0x89, 0x20, 0x08, 0xb8, 0x2d, 0x15, - 0xb8, 0x8d, 0x03, 0x18, 0xe2, 0x8d, 0x22, 0x88, 0xa9, 0x8b, 0x62, 0xd0, 0x28, 0xc8, 0x09, 0x09, - 0x81, 0xcc, 0x58, 0xa2, 0x9d, 0x10, 0x80, 0x98, 0x9d, 0x81, 0xaa, 0x02, 0xab, 0x80, 0xbf, 0x9b, - 0x02, 0x8b, 0x81, 0x03, 0xff, 0x1d, 0x92, 0xab, 0x00, 0x08, 0x9a, 0x03, 0xcf, 0x88, 0x80, 0xb9, - 0x50, 0xe0, 0x0a, 0x30, 0xc3, 0x9f, 0x11, 0x80, 0x9a, 0x28, 0xa1, 0x8a, 0xa0, 0x0a, 0x33, 0xf8, - 0x8b, 0x03, 0x89, 0xb0, 0x6a, 0xb0, 0x8a, 0x48, 0x92, 0x0a, 0x21, 0x02, 0xee, 0x58, 0x82, 0x8a, - 0x8a, 0x37, 0xb9, 0x19, 0x51, 0xa3, 0x8c, 0x80, 0x42, 0x91, 0x09, 0x11, 0x83, 0x59, 0x87, 0x8b, - 0x15, 0x89, 0x98, 0x45, 0xb9, 0x30, 0x02, 0x81, 0x9d, 0x27, 0x80, 0x88, 0x28, 0x00, 0x02, 0x09, - 0x24, 0x44, 0xa0, 0x30, 0xc8, 0x70, 0x84, 0x0a, 0x12, 0x91, 0x2b, 0x47, 0x88, 0x09, 0x33, 0xc9, - 0x62, 0x81, 0x90, 0x2a, 0x17, 0x09, 0x80, 0x09, 0x43, 0x03, 0x9a, 0x33, 0xaa, 0x24, 0x72, 0xb1, - 0x1c, 0x04, 0x18, 0x12, 0x10, 0xaa, 0x45, 0xaa, 0x08, 0x54, 0xc9, 0x29, 0x14, 0xb8, 0x0a, 0x27, - 0xc8, 0x1a, 0x11, 0x80, 0x88, 0x98, 0xab, 0x73, 0xa3, 0xac, 0x19, 0x04, 0x9a, 0x8a, 0x13, 0xad, - 0x81, 0x89, 0xc9, 0x40, 0xb0, 0xcb, 0x8e, 0x14, 0xab, 0xa8, 0x49, 0xb1, 0x2b, 0xfa, 0x2a, 0xa8, - 0xb1, 0x1d, 0xd1, 0x08, 0xcb, 0x42, 0xca, 0x88, 0x9d, 0x33, 0xa9, 0xda, 0x0c, 0x82, 0xaa, 0x40, - 0xf0, 0x1c, 0x93, 0x9a, 0x99, 0x10, 0xaa, 0x20, 0xd9, 0xae, 0x33, 0xc0, 0x9b, 0x89, 0x03, 0xaf, - 0x22, 0xaa, 0xb0, 0x8d, 0x00, 0x24, 0xdd, 0x10, 0x80, 0x88, 0x8a, 0x80, 0x19, 0x95, 0x9f, 0x00, - 0x31, 0xba, 0x10, 0xaa, 0x88, 0x64, 0xb0, 0x8b, 0x20, 0x03, 0xc9, 0x9a, 0x28, 0x34, 0x84, 0xbf, - 0x21, 0x28, 0x04, 0x9a, 0xaa, 0x42, 0xa8, 0x22, 0x99, 0x90, 0x70, 0x85, 0x9d, 0x21, 0x12, 0x99, - 0xbb, 0x61, 0xa3, 0x1c, 0x93, 0x89, 0x49, 0x27, 0x99, 0xc9, 0x19, 0x42, 0x14, 0xc8, 0x8a, 0x31, - 0x15, 0xd9, 0x29, 0x02, 0x40, 0x13, 0xcb, 0x18, 0x24, 0x80, 0x00, 0x62, 0x23, 0xc9, 0x2b, 0x54, - 0x84, 0x9a, 0x18, 0x25, 0x18, 0x03, 0x29, 0xa1, 0x60, 0x83, 0x58, 0x06, 0xaa, 0x11, 0x33, 0xb1, - 0x19, 0x40, 0x85, 0x50, 0xa1, 0x01, 0xab, 0x15, 0x31, 0x93, 0xbc, 0x2a, 0x37, 0xc0, 0x0a, 0x12, - 0x11, 0xcb, 0x48, 0x03, 0xfa, 0x0c, 0x02, 0x82, 0x9c, 0x81, 0x00, 0x88, 0x00, 0xfb, 0x8c, 0x33, - 0xd9, 0x9c, 0x33, 0xd8, 0x1a, 0x12, 0xaa, 0x9b, 0x98, 0x89, 0x32, 0xf8, 0x8d, 0x31, 0xa0, 0xbd, - 0x50, 0xa1, 0x0b, 0x12, 0xd9, 0x39, 0x13, 0xd9, 0x8c, 0x33, 0xb8, 0x29, 0x17, 0xc9, 0x3a, 0x14, - 0x9a, 0xbb, 0x64, 0x80, 0x13, 0xbb, 0x01, 0x22, 0xba, 0x71, 0x84, 0xba, 0x49, 0x04, 0x89, 0x24, - 0xa9, 0x8b, 0x35, 0x90, 0x9b, 0x37, 0xda, 0x20, 0x82, 0x80, 0x09, 0xa8, 0x1a, 0x44, 0x82, 0xcf, - 0x31, 0x01, 0x90, 0x8e, 0x01, 0x08, 0x12, 0xcb, 0x0a, 0x41, 0xc0, 0x0b, 0x02, 0xc9, 0x8c, 0x35, - 0xb8, 0xdb, 0x1a, 0x23, 0x99, 0xdb, 0x19, 0x91, 0x00, 0xbf, 0x23, 0xac, 0xa9, 0x79, 0xc3, 0x9c, - 0x22, 0xa0, 0x9c, 0x10, 0x81, 0x99, 0xb0, 0x8f, 0x33, 0xb9, 0xda, 0x60, 0xa2, 0x8a, 0x18, 0xa1, - 0x8d, 0x83, 0x1b, 0x03, 0xa8, 0x9c, 0x66, 0xb1, 0x8a, 0x11, 0x01, 0x89, 0x81, 0x09, 0x44, 0x90, - 0x32, 0x10, 0xc0, 0x7a, 0x05, 0x38, 0xf1, 0x1a, 0x23, 0x10, 0x98, 0x42, 0x81, 0xa0, 0x71, 0xa3, - 0x2a, 0xb1, 0x30, 0x65, 0xa2, 0x8e, 0x32, 0x82, 0x09, 0x90, 0x20, 0x03, 0x01, 0x8c, 0x25, 0xb9, - 0x09, 0x55, 0xa2, 0x1a, 0x13, 0xaa, 0xab, 0x55, 0xb0, 0x91, 0x2c, 0x06, 0x08, 0xa9, 0x11, 0xac, - 0x98, 0x72, 0x81, 0x98, 0xba, 0x39, 0x05, 0xab, 0xbc, 0x72, 0x83, 0xc9, 0x8a, 0x03, 0xca, 0x0b, - 0x22, 0x24, 0xdc, 0x08, 0x11, 0xa0, 0xae, 0x20, 0xa2, 0x8c, 0x00, 0x22, 0xce, 0x18, 0x01, 0xa0, - 0xac, 0x08, 0x80, 0x98, 0xad, 0x11, 0xd8, 0xbb, 0x9a, 0x72, 0xa3, 0xaf, 0x8a, 0x32, 0xb8, 0x9b, - 0xb9, 0x0b, 0x90, 0xb9, 0x1e, 0xe2, 0x9d, 0x00, 0x08, 0xab, 0x88, 0xbb, 0xa9, 0x71, 0xf3, 0x8e, - 0x91, 0x18, 0x81, 0x09, 0x99, 0xa9, 0x1b, 0xa1, 0x11, 0xef, 0x51, 0x91, 0x8a, 0x8b, 0x31, 0x80, - 0x20, 0x93, 0xaa, 0x9c, 0x44, 0x15, 0xbb, 0x10, 0x72, 0x82, 0x08, 0x89, 0x34, 0x01, 0x98, 0x62, - 0x25, 0xa8, 0x19, 0x37, 0x98, 0x11, 0x28, 0x01, 0x46, 0xa0, 0x18, 0x42, 0x01, 0x20, 0x25, 0x88, - 0x40, 0x02, 0x00, 0x71, 0x02, 0x99, 0x53, 0x01, 0x98, 0x41, 0x81, 0x72, 0xa2, 0x0a, 0x09, 0x35, - 0x99, 0x98, 0x51, 0x92, 0x99, 0x9a, 0x62, 0xd0, 0x89, 0x09, 0x35, 0xb9, 0x8b, 0xb9, 0x9c, 0x40, - 0xb2, 0xbd, 0x1a, 0xa2, 0xbf, 0x18, 0xb1, 0x9f, 0x81, 0x18, 0xc0, 0x9d, 0x99, 0x29, 0x91, 0x8b, - 0xec, 0x09, 0x99, 0x82, 0xbb, 0xba, 0x1a, 0xfa, 0x8a, 0x00, 0xa9, 0xbe, 0x10, 0x99, 0xb9, 0x8e, - 0x13, 0x9a, 0xc9, 0x1c, 0x02, 0xac, 0x89, 0x72, 0xb0, 0x1a, 0xa9, 0x32, 0x33, 0xd8, 0x8c, 0x32, - 0xb8, 0x19, 0x75, 0xa3, 0x9d, 0x40, 0x15, 0xaa, 0x89, 0x32, 0x11, 0x02, 0x9a, 0x98, 0x71, 0x82, - 0x8b, 0x47, 0x90, 0x09, 0x10, 0x22, 0x8a, 0x92, 0x1e, 0x45, 0x92, 0x9e, 0x20, 0x11, 0x81, 0x89, - 0x82, 0x5a, 0x85, 0x8c, 0x21, 0x81, 0xac, 0x35, 0x98, 0x88, 0x32, 0xd9, 0x28, 0x03, 0xb8, 0x0a, - 0x23, 0x08, 0x26, 0xb0, 0x0a, 0x55, 0xb1, 0x8f, 0x43, 0xa0, 0x9c, 0x30, 0x21, 0xc0, 0x1b, 0x22, - 0x91, 0x8d, 0x34, 0xdb, 0x38, 0x11, 0xe0, 0x1c, 0x04, 0x89, 0x88, 0x18, 0x08, 0x13, 0xdf, 0x28, - 0x02, 0xc8, 0x1a, 0x13, 0x89, 0x90, 0xaa, 0x0a, 0x33, 0xfc, 0x28, 0x18, 0xa2, 0x0e, 0x92, 0x4a, - 0xb2, 0x8d, 0x10, 0x23, 0xab, 0x31, 0xdb, 0x09, 0x72, 0x05, 0xbb, 0x09, 0x54, 0xb0, 0x1a, 0x34, - 0xc8, 0x19, 0x33, 0x11, 0x21, 0xd9, 0x28, 0x54, 0x91, 0x9b, 0x46, 0x81, 0x88, 0x41, 0xa2, 0x49, - 0x04, 0xa8, 0x3a, 0x37, 0xa8, 0x28, 0x80, 0x34, 0xa0, 0x28, 0x44, 0x93, 0x8b, 0x13, 0x48, 0xb0, - 0x71, 0x03, 0x31, 0xc9, 0x8a, 0x72, 0x84, 0x9b, 0x00, 0x20, 0x10, 0x13, 0xdf, 0x38, 0x82, 0xa9, - 0x1a, 0x86, 0x9b, 0x81, 0xaa, 0x30, 0x82, 0xfd, 0x0a, 0x01, 0x90, 0x9e, 0x88, 0x08, 0xa1, 0xac, - 0x19, 0xa0, 0xcc, 0x29, 0xd2, 0xaf, 0x01, 0x98, 0x99, 0x89, 0xb9, 0x9b, 0x98, 0x09, 0xf8, 0xae, - 0x09, 0x01, 0xb8, 0xdb, 0x19, 0xf9, 0x19, 0x99, 0x23, 0xcd, 0x89, 0x19, 0x92, 0xaa, 0x99, 0xca, - 0x1a, 0x42, 0xc0, 0xad, 0x98, 0x89, 0xa9, 0x29, 0x23, 0xd9, 0xaf, 0x19, 0x53, 0xc0, 0x8c, 0x20, - 0x14, 0xcd, 0x18, 0x02, 0x98, 0x8a, 0x21, 0xa1, 0x8d, 0x13, 0x00, 0xe8, 0x0a, 0x03, 0x34, 0xc9, - 0xca, 0x39, 0x85, 0x28, 0x80, 0xb0, 0x1e, 0x23, 0x10, 0x91, 0x2b, 0x87, 0x29, 0xb4, 0x1d, 0x26, - 0x90, 0x99, 0x58, 0x83, 0x09, 0x12, 0x21, 0xa1, 0x6b, 0x14, 0x01, 0x89, 0x63, 0x14, 0xba, 0x52, - 0x11, 0x10, 0x33, 0x33, 0x98, 0x52, 0x11, 0x35, 0x11, 0x30, 0x35, 0x33, 0x88, 0x46, 0x89, 0x34, - 0x21, 0xa1, 0x71, 0xa1, 0x48, 0x23, 0x93, 0x9c, 0x41, 0x32, 0x84, 0x8c, 0x91, 0x5a, 0x92, 0x89, - 0x30, 0x85, 0x8c, 0x02, 0x1b, 0xc0, 0x8b, 0xc8, 0x39, 0x06, 0xdd, 0x0a, 0x32, 0xc8, 0xbc, 0x38, - 0xc0, 0x89, 0x89, 0xc9, 0x9d, 0x08, 0x00, 0xcb, 0x9b, 0xbb, 0x02, 0xbf, 0xb9, 0x1b, 0xc3, 0x9f, - 0x08, 0x92, 0xad, 0x80, 0x99, 0xb8, 0x2a, 0xc0, 0x0b, 0xc9, 0x8c, 0x08, 0x16, 0xdb, 0x09, 0x82, - 0x9a, 0xa8, 0x21, 0x80, 0x02, 0x1b, 0x75, 0xd3, 0x0b, 0x12, 0x11, 0x89, 0x13, 0x22, 0x00, 0x26, - 0x40, 0x85, 0x0c, 0x04, 0x48, 0x05, 0x99, 0x20, 0x03, 0x21, 0x10, 0x35, 0xa9, 0x73, 0xa0, 0x21, - 0x81, 0x26, 0x9b, 0x36, 0x90, 0xa9, 0x78, 0x93, 0x18, 0xa0, 0x0a, 0x90, 0x73, 0x90, 0x08, 0x20, - 0x83, 0xcc, 0x28, 0x01, 0x80, 0x0a, 0xa0, 0x31, 0xfc, 0x2b, 0x34, 0xa9, 0xca, 0x9d, 0x21, 0x94, - 0x8c, 0xa3, 0x8c, 0xd8, 0x58, 0xa3, 0x9b, 0x90, 0x88, 0x9c, 0x24, 0xfb, 0x19, 0x11, 0x90, 0x9b, - 0x90, 0x28, 0x98, 0x82, 0x0e, 0x95, 0x9c, 0x9b, 0x64, 0xb1, 0xac, 0x42, 0x81, 0x89, 0x99, 0x28, - 0x00, 0x23, 0xfa, 0x8b, 0x48, 0x04, 0x18, 0xd9, 0x49, 0xb2, 0x20, 0xba, 0x43, 0x8b, 0x36, 0xa8, - 0x99, 0xab, 0x55, 0x12, 0xc9, 0x2a, 0x03, 0x24, 0xdc, 0x20, 0x10, 0x90, 0x31, 0x23, 0xcb, 0x41, - 0x02, 0xcb, 0x40, 0x14, 0x11, 0x20, 0xb0, 0x48, 0x53, 0x12, 0x92, 0x0d, 0x27, 0x10, 0x98, 0x18, - 0x14, 0x21, 0x32, 0xe8, 0x49, 0x35, 0xb0, 0x2b, 0x04, 0x29, 0x82, 0x40, 0xa1, 0x72, 0xd0, 0x39, - 0x03, 0xd8, 0x0b, 0x25, 0x08, 0xa1, 0x2a, 0xe9, 0x10, 0x08, 0x91, 0xad, 0x99, 0x28, 0xa4, 0xad, - 0xdb, 0x00, 0xab, 0x25, 0xfb, 0x8a, 0x90, 0x8c, 0x00, 0xba, 0x9c, 0x08, 0xb9, 0xcb, 0xbb, 0xca, - 0xbd, 0x18, 0xc9, 0xac, 0x08, 0xae, 0xa8, 0x1a, 0xe0, 0x0a, 0xcb, 0x43, 0xc9, 0x9a, 0x98, 0x98, - 0x21, 0xd8, 0x8c, 0x11, 0x00, 0xad, 0x33, 0x8a, 0xc2, 0x7b, 0xa2, 0x1a, 0x12, 0x11, 0x18, 0x43, - 0x01, 0x04, 0x28, 0x32, 0x17, 0x48, 0x05, 0x08, 0x81, 0x63, 0x12, 0x32, 0x90, 0x72, 0x22, 0x92, - 0x3c, 0x17, 0x00, 0x88, 0x41, 0x81, 0x31, 0x01, 0x21, 0x42, 0x81, 0x60, 0x13, 0x10, 0x98, 0x55, - 0x98, 0x21, 0x28, 0x04, 0x18, 0x00, 0x10, 0x10, 0x89, 0x74, 0x92, 0x8a, 0x24, 0xa0, 0x0d, 0x15, - 0xab, 0x41, 0xa2, 0xac, 0x00, 0x11, 0xb9, 0x29, 0xa2, 0x9f, 0x23, 0xba, 0x99, 0x31, 0xf2, 0xae, - 0x99, 0x52, 0xc0, 0x08, 0x99, 0x81, 0x8d, 0x03, 0x8c, 0x81, 0xa9, 0xa9, 0x30, 0xfc, 0x29, 0x10, - 0xa1, 0x8e, 0x91, 0x3b, 0xc3, 0x8b, 0xa0, 0x89, 0x3b, 0x87, 0x9d, 0x00, 0x18, 0xc0, 0x0a, 0x00, - 0xd2, 0x0d, 0xa0, 0x1c, 0x25, 0xc0, 0x8d, 0x10, 0x00, 0x98, 0x8a, 0x90, 0x10, 0xbc, 0xa2, 0x3d, - 0xd4, 0x0c, 0x01, 0x91, 0xbc, 0x38, 0x82, 0xd9, 0x0c, 0x82, 0x32, 0xed, 0x10, 0xa9, 0x11, 0x89, - 0xb0, 0x9c, 0x11, 0x91, 0x9d, 0x90, 0x40, 0xd9, 0x88, 0x29, 0x95, 0x8e, 0x04, 0x8a, 0x98, 0x2a, - 0x93, 0x99, 0xad, 0x01, 0x2b, 0x17, 0x8c, 0x12, 0x80, 0xda, 0x48, 0x82, 0x99, 0x0a, 0x17, 0xab, - 0x03, 0x1d, 0x83, 0x1b, 0x98, 0x51, 0x05, 0x9f, 0x12, 0x08, 0x90, 0x10, 0x8a, 0x14, 0x18, 0xda, - 0x38, 0x91, 0x0b, 0x35, 0x98, 0xaa, 0x53, 0xa9, 0x02, 0x5a, 0xd0, 0x51, 0xa8, 0x01, 0x1a, 0x94, - 0x1c, 0x06, 0xab, 0x11, 0x32, 0xcc, 0x22, 0x0a, 0x13, 0x19, 0xc3, 0x2c, 0xa2, 0x79, 0x85, 0x9b, - 0x20, 0x83, 0x8c, 0x02, 0x21, 0xa9, 0x63, 0xc9, 0x01, 0x38, 0x83, 0x8b, 0x27, 0xa9, 0x49, 0x05, - 0xab, 0x14, 0x08, 0xc9, 0x51, 0x90, 0x43, 0xc0, 0x1a, 0x13, 0x32, 0xfb, 0x38, 0x30, 0xc3, 0x2c, - 0x94, 0x18, 0xa8, 0x41, 0x91, 0x53, 0xbc, 0x03, 0x3b, 0xb5, 0x69, 0x92, 0x3b, 0xb4, 0x2c, 0xa0, - 0x73, 0xb9, 0x21, 0x10, 0xc8, 0x2a, 0x05, 0x0a, 0x93, 0x2b, 0xb8, 0x64, 0xd8, 0x20, 0x00, 0xa1, - 0x1b, 0x16, 0x9a, 0x01, 0x18, 0x18, 0x84, 0xad, 0x11, 0x33, 0xfb, 0x40, 0x98, 0xa0, 0x18, 0x23, - 0xc9, 0x08, 0x98, 0x30, 0xf1, 0x0b, 0x84, 0x8c, 0xa2, 0x72, 0xdc, 0x10, 0x09, 0x92, 0x2b, 0xa1, - 0x08, 0x8d, 0xa2, 0x1b, 0xb4, 0x0d, 0x02, 0xbd, 0x11, 0x8d, 0x92, 0x8c, 0x22, 0xd0, 0x8d, 0x00, - 0x22, 0xcb, 0x90, 0x0f, 0x14, 0xba, 0x09, 0x10, 0xb9, 0x20, 0xb0, 0x3c, 0xb5, 0x8c, 0x09, 0x15, - 0x9c, 0xa2, 0x39, 0xc1, 0x20, 0xbb, 0x23, 0xdb, 0x0b, 0x26, 0xa0, 0x9a, 0x88, 0x40, 0xb1, 0x3a, - 0xd3, 0x19, 0x92, 0x0f, 0x93, 0x18, 0xab, 0x36, 0xeb, 0x09, 0x04, 0x08, 0xa0, 0xa8, 0x0f, 0x24, - 0xa9, 0x8a, 0x03, 0x39, 0xd1, 0x9b, 0x50, 0x84, 0x9d, 0x88, 0x11, 0x22, 0xe9, 0x19, 0x10, 0x15, - 0xad, 0x02, 0x32, 0xd0, 0x0b, 0x24, 0xaa, 0x12, 0x18, 0x89, 0x86, 0x2d, 0x86, 0x18, 0xd0, 0x38, - 0x93, 0x38, 0xb1, 0x48, 0x09, 0x07, 0x8b, 0x03, 0x38, 0x88, 0x26, 0xaa, 0x23, 0x0a, 0x06, 0x49, - 0x94, 0x2b, 0xb1, 0x73, 0xa0, 0x20, 0x88, 0x11, 0x42, 0xa0, 0x10, 0x0a, 0x07, 0x39, 0xa3, 0x50, - 0xe8, 0x38, 0xa2, 0x19, 0x04, 0x90, 0x9b, 0x31, 0x06, 0xbd, 0x62, 0xb9, 0x30, 0xa9, 0x10, 0x89, - 0x94, 0x9f, 0x22, 0xb0, 0x9e, 0x22, 0xa1, 0xbc, 0x10, 0x10, 0xb1, 0x9d, 0x10, 0x90, 0xdc, 0x1b, - 0x05, 0xaa, 0xa0, 0x99, 0xab, 0x80, 0x28, 0xf8, 0x1b, 0xcb, 0x03, 0x1d, 0xb1, 0x9b, 0x80, 0xae, - 0x43, 0xda, 0x89, 0x20, 0xda, 0x09, 0x13, 0xca, 0x31, 0xe9, 0x19, 0x04, 0xbc, 0x11, 0x21, 0xc9, - 0x30, 0x93, 0xaf, 0x30, 0x84, 0xdb, 0x40, 0xb1, 0x58, 0x83, 0xbe, 0x30, 0x23, 0xb8, 0x18, 0x01, - 0xa9, 0x31, 0x9a, 0x57, 0xba, 0x31, 0x90, 0x12, 0x99, 0x73, 0x81, 0x8b, 0x42, 0x03, 0x89, 0xbd, - 0x73, 0x83, 0xa9, 0x59, 0x93, 0x8b, 0x50, 0x83, 0x8b, 0x25, 0xa9, 0x20, 0x12, 0xda, 0x72, 0xa2, - 0x0a, 0x19, 0x04, 0x0b, 0x15, 0x8b, 0x00, 0x13, 0xbb, 0x73, 0xa2, 0x8d, 0x82, 0x30, 0xb0, 0x21, - 0xdb, 0x32, 0xc1, 0x28, 0x8d, 0x87, 0x1c, 0x94, 0x28, 0xda, 0x21, 0xab, 0x32, 0x03, 0xcb, 0x08, - 0x13, 0xcd, 0x10, 0x31, 0xb8, 0x30, 0xa8, 0xfa, 0x61, 0xc0, 0x18, 0x80, 0x10, 0x98, 0xc9, 0x7a, - 0xb2, 0x1a, 0x08, 0x02, 0xca, 0x38, 0x82, 0x99, 0x9a, 0x16, 0xaf, 0x11, 0x12, 0xcb, 0x11, 0xbb, - 0x15, 0x0b, 0xe0, 0x73, 0xb9, 0x98, 0x1a, 0x13, 0xa9, 0x19, 0x90, 0xa8, 0x0d, 0x91, 0x41, 0xba, - 0xf1, 0x1e, 0x04, 0x8a, 0xc1, 0x49, 0xa1, 0x0c, 0x02, 0xab, 0x13, 0x8d, 0x84, 0x39, 0xa1, 0xdc, - 0x20, 0x00, 0x33, 0xce, 0x20, 0x11, 0xd9, 0x28, 0x01, 0xb0, 0x1d, 0x83, 0x41, 0xd8, 0x20, 0x82, - 0xaa, 0x09, 0x64, 0xa8, 0xa8, 0x6a, 0xa3, 0x39, 0xea, 0x31, 0x80, 0x22, 0xae, 0x31, 0x91, 0x00, - 0x99, 0x38, 0x93, 0x1d, 0x13, 0x19, 0xd2, 0x0e, 0x13, 0x88, 0xe0, 0x2a, 0x15, 0x89, 0x09, 0x80, - 0x89, 0x99, 0xb1, 0x6c, 0xb2, 0x0c, 0xb9, 0x72, 0xa8, 0x80, 0x0d, 0x93, 0x49, 0xd0, 0x0a, 0x11, - 0xda, 0x48, 0x90, 0x99, 0x29, 0xb1, 0x9d, 0x52, 0xc9, 0x8a, 0x42, 0xa0, 0xac, 0x20, 0x21, 0x9a, - 0xa3, 0xef, 0x22, 0x90, 0x9a, 0x12, 0x89, 0x9a, 0x84, 0x0d, 0x14, 0x00, 0xcc, 0x30, 0x92, 0xaa, - 0x23, 0x32, 0xec, 0x09, 0x53, 0x02, 0xba, 0xab, 0x71, 0x95, 0x19, 0x00, 0x80, 0x1a, 0x26, 0xa9, - 0x48, 0x91, 0x98, 0x5c, 0x15, 0xa8, 0x29, 0x22, 0x80, 0x99, 0x25, 0x99, 0x34, 0xa1, 0x18, 0x10, - 0x36, 0x11, 0x0a, 0x05, 0x1a, 0x24, 0x40, 0x15, 0x99, 0x99, 0x70, 0x96, 0x09, 0x10, 0x22, 0xeb, - 0x40, 0x91, 0x11, 0x99, 0x00, 0x41, 0x92, 0xac, 0x53, 0xb8, 0x08, 0x21, 0xa2, 0x89, 0x18, 0x98, - 0x10, 0x01, 0xdf, 0x32, 0xb8, 0xbb, 0x79, 0xf3, 0x3b, 0x81, 0x89, 0xba, 0x42, 0xfc, 0x38, 0xa0, - 0x09, 0xba, 0x20, 0x32, 0xe9, 0xbb, 0x38, 0xa8, 0xea, 0x4a, 0xc2, 0x9a, 0xab, 0x35, 0x90, 0xfb, - 0x19, 0x91, 0x98, 0x0a, 0xd1, 0x39, 0x92, 0xb0, 0xbf, 0x25, 0x9a, 0x0a, 0x01, 0x08, 0x08, 0x08, - 0x02, 0x00, 0x00, 0x7d, 0x0b, 0x02, 0x01, 0x00, 0x6a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, - 0x88, 0x01, 0x98, 0x18, 0x00, 0xa8, 0x30, 0xa8, 0x29, 0x88, 0x31, 0xb0, 0xab, 0x30, 0x21, 0x47, - 0xce, 0x48, 0x91, 0x09, 0x00, 0x81, 0xaa, 0x61, 0xa1, 0x9e, 0x33, 0xa8, 0x08, 0x03, 0x8e, 0xa3, - 0x3b, 0x94, 0x80, 0x0b, 0xd9, 0x54, 0xb0, 0x08, 0x8b, 0x25, 0xb8, 0x1a, 0xa2, 0x2b, 0x37, 0xbc, - 0x31, 0x99, 0xba, 0x66, 0xc8, 0x1a, 0x15, 0xbb, 0x51, 0xb0, 0x19, 0x91, 0x31, 0xda, 0x28, 0x91, - 0x39, 0xa6, 0x0d, 0x02, 0xa9, 0x60, 0xc0, 0x38, 0xa8, 0x20, 0xe1, 0x59, 0xc1, 0x29, 0x93, 0xa8, - 0x1b, 0x05, 0x99, 0x28, 0x91, 0x39, 0xed, 0x71, 0xa1, 0x8c, 0x21, 0x91, 0x09, 0x02, 0xb9, 0x89, - 0x58, 0x84, 0x8c, 0x12, 0xc9, 0x48, 0xb1, 0x1b, 0x17, 0xcb, 0x31, 0xb2, 0x0a, 0xa2, 0x3b, 0x07, - 0x9c, 0x11, 0x83, 0x9f, 0x22, 0xa1, 0x30, 0xfb, 0x7b, 0xb2, 0x19, 0x12, 0xac, 0x21, 0x90, 0x08, - 0x20, 0xa8, 0x9b, 0x45, 0xab, 0x94, 0x2c, 0x02, 0x12, 0xcf, 0x30, 0x04, 0xbc, 0x41, 0xb0, 0x49, - 0x91, 0xa8, 0x38, 0xdb, 0x36, 0xba, 0x39, 0x92, 0x9d, 0x25, 0xab, 0x31, 0xb8, 0x4a, 0xb2, 0x59, - 0xe9, 0x41, 0xa0, 0x89, 0x11, 0x0b, 0x96, 0x1d, 0x84, 0x0b, 0x02, 0x9a, 0x32, 0xbc, 0x31, 0x81, - 0x98, 0x32, 0xdf, 0x24, 0xd9, 0x39, 0x14, 0xdb, 0x41, 0xb9, 0x29, 0x03, 0x89, 0x18, 0xb0, 0x18, - 0x28, 0xc8, 0x78, 0xa1, 0x0d, 0x85, 0x1b, 0x83, 0xa8, 0x8e, 0x25, 0xba, 0x30, 0x95, 0x9e, 0x13, - 0x09, 0x90, 0x08, 0x10, 0xba, 0x42, 0x80, 0x48, 0xf9, 0x29, 0xa0, 0x50, 0x92, 0x0c, 0x82, 0x0d, - 0x12, 0x9a, 0x22, 0xd8, 0x28, 0x80, 0x82, 0xac, 0x43, 0x90, 0xeb, 0x72, 0xb8, 0x2a, 0x33, 0xf8, - 0x2b, 0x07, 0xab, 0x21, 0xa0, 0x38, 0xc1, 0x28, 0xb1, 0x39, 0xb1, 0x89, 0x00, 0x10, 0x35, 0xfa, - 0x49, 0xb9, 0x60, 0xb3, 0x0f, 0x03, 0x9b, 0x40, 0x83, 0xae, 0x11, 0x02, 0xaa, 0x83, 0x89, 0x22, - 0x9a, 0x91, 0x1a, 0x82, 0x30, 0xf3, 0x0f, 0x43, 0xd2, 0x0e, 0x13, 0x9a, 0x20, 0xb1, 0x2c, 0x85, - 0x8b, 0x00, 0x11, 0xb9, 0x40, 0xab, 0x47, 0xea, 0x38, 0x91, 0x89, 0x12, 0x99, 0x8b, 0x15, 0x19, - 0xd3, 0x0f, 0x04, 0x9a, 0x32, 0xb8, 0x1b, 0x83, 0x8b, 0x30, 0xa1, 0x73, 0xfa, 0x49, 0x91, 0x19, - 0xb2, 0x2d, 0x03, 0x8b, 0x92, 0x2c, 0x85, 0x8c, 0x42, 0xd8, 0x19, 0x80, 0x32, 0xba, 0x08, 0x33, - 0xcd, 0x10, 0x22, 0xc0, 0x2b, 0x85, 0x9d, 0x52, 0xb1, 0x0c, 0x14, 0xbb, 0x49, 0x05, 0xab, 0x83, - 0x0b, 0x05, 0xbb, 0x72, 0xb1, 0x8c, 0x33, 0xb8, 0x19, 0x91, 0x10, 0x19, 0xe3, 0x2b, 0x15, 0xda, - 0x49, 0x92, 0x1b, 0x81, 0x00, 0x19, 0xc1, 0x8b, 0x45, 0xb0, 0x9a, 0x50, 0xa3, 0x9e, 0x23, 0xb9, - 0x38, 0x84, 0xcb, 0x21, 0x03, 0x9f, 0x21, 0x80, 0x09, 0x9b, 0x27, 0x9c, 0x11, 0x18, 0x98, 0x80, - 0x0c, 0x03, 0x33, 0xdf, 0x41, 0x90, 0x8a, 0x10, 0xb0, 0x70, 0xb8, 0x59, 0x92, 0xbb, 0x40, 0xa1, - 0x31, 0xbb, 0x62, 0xb8, 0x9c, 0x53, 0xa8, 0x21, 0xd8, 0x2b, 0x17, 0xac, 0x31, 0x90, 0x98, 0x39, - 0xa3, 0x0d, 0x02, 0x9b, 0x47, 0xda, 0x28, 0x80, 0x28, 0xa1, 0x9b, 0x52, 0xb1, 0x0e, 0x15, 0xac, - 0x52, 0xd8, 0x28, 0x82, 0x9a, 0x13, 0xba, 0x72, 0xd8, 0x28, 0x91, 0x09, 0x12, 0xb8, 0x0a, 0x84, - 0x1b, 0x07, 0xac, 0x42, 0xb0, 0x0c, 0x24, 0xa9, 0x19, 0x91, 0x1a, 0x04, 0x9b, 0x18, 0x52, 0xd8, - 0x09, 0x33, 0xcb, 0x28, 0x07, 0xbc, 0x20, 0x31, 0x92, 0xdd, 0x40, 0x92, 0x8d, 0x13, 0xba, 0x41, - 0x91, 0x8a, 0x09, 0x15, 0xcb, 0x60, 0xa1, 0x8c, 0x05, 0xa9, 0x10, 0x80, 0x08, 0x01, 0xba, 0x61, - 0xa1, 0x8e, 0x33, 0xa9, 0x0a, 0x14, 0xbb, 0x22, 0x88, 0x2b, 0x87, 0xaa, 0x11, 0x30, 0xf1, 0x2e, - 0x06, 0xdb, 0x40, 0x92, 0xab, 0x43, 0xa9, 0x18, 0x82, 0x0b, 0x92, 0x1b, 0x14, 0xae, 0x54, 0xb9, - 0x28, 0xb8, 0x31, 0xb1, 0x3c, 0x97, 0x9a, 0x21, 0xb8, 0x40, 0xa1, 0x0c, 0x13, 0xbc, 0x72, 0xb0, - 0x48, 0xc8, 0x20, 0xda, 0x52, 0xa1, 0x19, 0xc9, 0x10, 0x01, 0x40, 0xe0, 0x2a, 0x84, 0x9c, 0x32, - 0xb0, 0x3b, 0x82, 0x98, 0x9b, 0x55, 0xc9, 0x00, 0x10, 0x92, 0xae, 0x44, 0xc8, 0x39, 0x91, 0x0a, - 0x91, 0x18, 0x32, 0xea, 0x09, 0x34, 0xe9, 0x29, 0x82, 0x89, 0x88, 0x01, 0x28, 0xd1, 0x39, 0x12, - 0xf2, 0x8f, 0x33, 0xb0, 0x0c, 0x34, 0xcb, 0x39, 0x82, 0xaa, 0x62, 0xb8, 0x08, 0x82, 0x9d, 0x44, - 0xb8, 0x38, 0xf9, 0x40, 0xb1, 0x2b, 0x05, 0xac, 0x20, 0x01, 0x82, 0x9b, 0x20, 0xb9, 0x28, 0x44, - 0xfb, 0x40, 0xa0, 0x09, 0x11, 0x91, 0x9e, 0x42, 0xa0, 0x3b, 0xa3, 0xae, 0x62, 0x80, 0x88, 0x9a, - 0x01, 0x3b, 0x97, 0x09, 0x98, 0x40, 0xe1, 0x4a, 0x82, 0x8d, 0x13, 0xab, 0x72, 0xa8, 0x9a, 0x40, - 0xa3, 0x8e, 0x24, 0xba, 0x29, 0x04, 0x8c, 0x23, 0xfa, 0x39, 0x04, 0xbb, 0x41, 0xb0, 0x18, 0x82, - 0x9a, 0x8c, 0x36, 0xb9, 0x28, 0xc1, 0x4b, 0x85, 0x8f, 0x25, 0xba, 0x30, 0xc8, 0x28, 0x81, 0x22, - 0xdb, 0x89, 0x23, 0x19, 0xe8, 0x61, 0xc0, 0x29, 0xb1, 0x29, 0x05, 0xba, 0x01, 0x00, 0x99, 0x01, - 0x20, 0x01, 0xb0, 0xdc, 0x71, 0xc9, 0x51, 0x92, 0xad, 0x21, 0x01, 0xaa, 0x52, 0xb8, 0x8a, 0x31, - 0x98, 0x32, 0xfb, 0x40, 0xb1, 0x2c, 0x82, 0x9a, 0x23, 0x9f, 0x26, 0xda, 0x38, 0x93, 0x9c, 0x32, - 0xb9, 0x1a, 0x07, 0x0b, 0x93, 0x8c, 0x22, 0x09, 0xc0, 0x3a, 0x04, 0xaa, 0x81, 0x48, 0xd2, 0x2b, - 0x12, 0xd8, 0x29, 0x93, 0x41, 0xf8, 0x19, 0x80, 0x18, 0x92, 0x3a, 0x93, 0xde, 0x71, 0xc1, 0x09, - 0x12, 0xb8, 0x48, 0xc1, 0x2a, 0xa3, 0x4b, 0x92, 0x8a, 0x80, 0xab, 0x47, 0xb8, 0x21, 0xeb, 0x10, - 0x12, 0xb0, 0x3a, 0xb4, 0x0f, 0x14, 0xb9, 0x28, 0x82, 0x8e, 0x22, 0x01, 0xcc, 0x31, 0xa0, 0x10, - 0xb0, 0x3d, 0x96, 0x9b, 0x52, 0xb1, 0x8b, 0x34, 0xfa, 0x39, 0x04, 0xac, 0x22, 0xa8, 0x40, 0xd0, - 0x2b, 0x06, 0xab, 0x22, 0xba, 0x20, 0x04, 0xbd, 0x43, 0xa8, 0x28, 0xb1, 0x2a, 0x90, 0x32, 0xca, - 0xaa, 0x74, 0xb8, 0x21, 0x89, 0x0a, 0x94, 0x1b, 0x00, 0x09, 0x05, 0x0d, 0x26, 0xbe, 0x42, 0xb9, - 0x40, 0x91, 0x0b, 0x02, 0x0a, 0xa8, 0x52, 0xf0, 0x49, 0xb3, 0x0e, 0x13, 0x0a, 0x93, 0x9e, 0x32, - 0xb1, 0x0b, 0x01, 0x12, 0x99, 0x0a, 0x96, 0x9d, 0x53, 0xa0, 0x08, 0xad, 0x54, 0xc8, 0x38, 0xa1, - 0x1b, 0x01, 0x18, 0xa0, 0x20, 0xf9, 0x68, 0xa1, 0x2b, 0x90, 0x18, 0x01, 0x2a, 0x94, 0xca, 0x19, - 0x00, 0x24, 0xa1, 0xaf, 0x25, 0xac, 0x43, 0xbb, 0x24, 0xbc, 0x52, 0xa0, 0x0a, 0x32, 0xd9, 0x28, - 0xb0, 0x59, 0x93, 0x8e, 0x23, 0xbb, 0x21, 0x82, 0x9c, 0x21, 0x84, 0xaf, 0x16, 0xba, 0x11, 0x00, - 0x98, 0x20, 0x90, 0x89, 0xa8, 0x68, 0xb1, 0x38, 0x90, 0x98, 0x5b, 0xa4, 0xbf, 0x46, 0xc8, 0x19, - 0x01, 0x99, 0x31, 0xa0, 0x98, 0x89, 0x58, 0x94, 0xbc, 0x73, 0xc8, 0x39, 0xa2, 0x2a, 0x94, 0x9b, - 0x10, 0x03, 0x8d, 0x23, 0xea, 0x40, 0xb8, 0x30, 0xa0, 0x29, 0xc2, 0x2c, 0x87, 0x9a, 0x19, 0x22, - 0xa2, 0x9e, 0x31, 0x80, 0xaa, 0x42, 0xca, 0x43, 0xda, 0x40, 0xa8, 0x28, 0xa1, 0x2a, 0xa3, 0x0f, - 0x16, 0xab, 0x38, 0xc2, 0x2a, 0x13, 0xd9, 0x3a, 0x85, 0x8b, 0x02, 0xa9, 0x23, 0xae, 0x41, 0x82, - 0x8a, 0xb0, 0x0d, 0x16, 0x99, 0x00, 0x09, 0x01, 0xc8, 0x50, 0xa1, 0x8e, 0x04, 0x0a, 0x13, 0xcc, - 0x51, 0xa0, 0x8b, 0x33, 0x9a, 0x32, 0xec, 0x40, 0xa0, 0x08, 0x20, 0xb2, 0x9f, 0x34, 0xab, 0x20, - 0x01, 0xab, 0x90, 0x70, 0x91, 0x0a, 0x89, 0x31, 0xb0, 0x2a, 0xb2, 0x59, 0x96, 0x8f, 0x03, 0x9a, - 0x42, 0xd8, 0x18, 0x00, 0x10, 0xa0, 0xbb, 0x71, 0xa2, 0x08, 0x9c, 0x53, 0xb1, 0x8d, 0x53, 0xb9, - 0x1a, 0x14, 0xaa, 0x01, 0x28, 0xc1, 0x0c, 0x25, 0xca, 0x30, 0xb1, 0x0d, 0x06, 0x9a, 0x02, 0x0a, - 0x83, 0x9d, 0x31, 0x85, 0xad, 0x21, 0x01, 0xa8, 0x1b, 0x03, 0x81, 0x9c, 0x22, 0xaa, 0x32, 0x89, - 0xb5, 0x0f, 0x05, 0xaa, 0x21, 0x9a, 0x24, 0xbc, 0x41, 0xa2, 0x9a, 0x01, 0x4a, 0xc0, 0x43, 0xca, - 0x29, 0xa4, 0x3c, 0x81, 0xb1, 0x3b, 0xa6, 0x0c, 0x85, 0x0b, 0x83, 0xba, 0x72, 0xd3, 0x0a, 0x00, - 0x81, 0x29, 0x83, 0xae, 0x34, 0xda, 0x48, 0xa1, 0x2b, 0x93, 0x8d, 0x53, 0xb1, 0xab, 0x20, 0x82, - 0x08, 0x9a, 0x54, 0x98, 0xca, 0x48, 0x81, 0xba, 0x44, 0x88, 0xab, 0x21, 0x3b, 0x87, 0x0d, 0x82, - 0x09, 0xb8, 0x33, 0x9a, 0x25, 0xe8, 0x0a, 0x02, 0x09, 0x12, 0xc1, 0x1a, 0x91, 0x1c, 0x47, 0x9f, - 0x21, 0x90, 0x10, 0xca, 0x30, 0x81, 0x88, 0xa9, 0x62, 0xc0, 0x1a, 0x01, 0x00, 0x3a, 0xb5, 0x8e, - 0x22, 0x82, 0xdb, 0x39, 0x04, 0xab, 0x24, 0xba, 0x30, 0x98, 0x18, 0xe9, 0x70, 0xa0, 0x08, 0xa1, - 0x3a, 0xb2, 0x50, 0xc2, 0x1a, 0xd8, 0x5a, 0x16, 0xbc, 0x30, 0x91, 0x08, 0x98, 0x38, 0xc2, 0x2b, - 0x83, 0x8a, 0x31, 0xa8, 0x10, 0xff, 0x44, 0xc9, 0x29, 0x94, 0x0b, 0x22, 0xca, 0x28, 0x11, 0x00, - 0xfb, 0x40, 0x92, 0xa9, 0x89, 0x21, 0x01, 0x92, 0x8e, 0x11, 0x94, 0x0f, 0x02, 0x89, 0x88, 0x12, - 0x8b, 0x02, 0xd1, 0x59, 0xb0, 0x18, 0x15, 0xdc, 0x48, 0x92, 0x8b, 0x31, 0x92, 0xbc, 0x38, 0x03, - 0x8a, 0x02, 0x9b, 0x48, 0xa4, 0x8e, 0x00, 0x44, 0xe9, 0x1a, 0x25, 0xbb, 0x48, 0xa2, 0x8c, 0x32, - 0xc8, 0x38, 0x93, 0xbc, 0x31, 0xb0, 0x18, 0x63, 0xd9, 0x08, 0x21, 0x91, 0x9e, 0x23, 0xab, 0x43, - 0xd0, 0x2a, 0x86, 0xab, 0x42, 0xb0, 0x29, 0xb0, 0x28, 0x82, 0x0a, 0x12, 0x81, 0xdf, 0x42, 0xa8, - 0x19, 0x84, 0xbc, 0x51, 0x14, 0xad, 0x28, 0xa0, 0x28, 0x15, 0xbb, 0x10, 0x9a, 0x27, 0xcb, 0x38, - 0x84, 0xaa, 0x49, 0xb2, 0x1b, 0x24, 0xa9, 0x89, 0x20, 0x99, 0x19, 0x15, 0x89, 0xa4, 0xcf, 0x25, - 0xaa, 0x12, 0x88, 0x89, 0x81, 0x0c, 0x04, 0x88, 0x08, 0x10, 0xba, 0x5b, 0xa4, 0x3a, 0xa1, 0x0a, - 0x35, 0xda, 0xab, 0x73, 0xa4, 0xab, 0x22, 0xa0, 0x02, 0x0f, 0x15, 0x9c, 0x20, 0xa0, 0x48, 0xc0, - 0x09, 0x22, 0xb0, 0x2a, 0x83, 0x0d, 0x81, 0x2b, 0x16, 0xad, 0x21, 0x91, 0x29, 0x91, 0x98, 0x8a, - 0xb9, 0x57, 0xb0, 0x0c, 0x15, 0xca, 0x48, 0xa3, 0x8c, 0x21, 0xb8, 0x30, 0xa0, 0x38, 0xc0, 0x29, - 0xb8, 0x73, 0xf1, 0x19, 0x10, 0x02, 0x98, 0xdb, 0x21, 0x90, 0x32, 0xc2, 0x8f, 0x14, 0x9b, 0x14, - 0xbb, 0x30, 0x93, 0x8c, 0x33, 0xbb, 0x2b, 0x07, 0x8c, 0x92, 0x29, 0x05, 0xaa, 0xaa, 0x54, 0x98, - 0x0b, 0x04, 0x8a, 0x82, 0x1c, 0x82, 0x92, 0xaf, 0x62, 0xa2, 0x8c, 0x02, 0x89, 0x80, 0x59, 0x95, - 0x8e, 0x22, 0xaa, 0x31, 0xc8, 0x0a, 0x26, 0xb9, 0x19, 0x02, 0x8b, 0x82, 0x88, 0x10, 0xb4, 0x8f, - 0x25, 0xab, 0x31, 0xd9, 0x39, 0x05, 0xac, 0x32, 0xba, 0x18, 0x36, 0xda, 0x28, 0xa8, 0x30, 0x91, - 0xac, 0x72, 0x90, 0x0b, 0x04, 0xba, 0x29, 0x05, 0x88, 0xb9, 0x60, 0xb2, 0x0c, 0x81, 0x08, 0x32, - 0xa0, 0xcb, 0x58, 0x92, 0x9e, 0x63, 0xb9, 0x38, 0x90, 0x00, 0x98, 0x89, 0x22, 0x8a, 0x40, 0xb1, - 0x9c, 0x20, 0x84, 0x09, 0xc1, 0x1a, 0x03, 0x20, 0xfa, 0x7c, 0xb1, 0x09, 0x62, 0xc0, 0xa9, 0x68, - 0x92, 0x8c, 0x22, 0x90, 0xc8, 0x3a, 0x04, 0xb9, 0x21, 0x09, 0xc3, 0x8d, 0x25, 0xca, 0x20, 0x01, - 0xc1, 0x0c, 0x23, 0xb1, 0x1b, 0xa3, 0x2d, 0xc3, 0x79, 0xa2, 0x9b, 0x89, 0x27, 0xa9, 0x89, 0x14, - 0xab, 0x21, 0x02, 0x8b, 0xd8, 0x4b, 0x85, 0x29, 0xd1, 0x1c, 0x14, 0xaa, 0x10, 0x10, 0x99, 0x88, - 0x11, 0x71, 0xc9, 0x19, 0x91, 0x2c, 0x86, 0x19, 0xe1, 0x2a, 0x82, 0x02, 0x9d, 0x23, 0xd9, 0x20, - 0xa8, 0x33, 0xaa, 0x92, 0x8f, 0x04, 0x09, 0x83, 0xdb, 0x58, 0xb0, 0x18, 0x15, 0xac, 0x11, 0x81, - 0x88, 0xa9, 0x13, 0x9a, 0x60, 0xa4, 0x8e, 0x23, 0xcb, 0x33, 0xaa, 0x81, 0x1a, 0x23, 0xab, 0x02, - 0xab, 0x88, 0x47, 0xa9, 0x9a, 0x14, 0x0e, 0x17, 0xeb, 0x40, 0x90, 0x09, 0x01, 0x0b, 0x92, 0x29, - 0x81, 0x8a, 0x84, 0x8e, 0x14, 0xaa, 0x03, 0x2a, 0xb0, 0x94, 0x8f, 0x86, 0x0a, 0x83, 0x8c, 0x13, - 0x8a, 0x8a, 0x42, 0xd0, 0x3b, 0x06, 0x9a, 0x39, 0xd0, 0x10, 0x0a, 0x86, 0x29, 0xc2, 0x0e, 0x03, - 0x1a, 0x00, 0x99, 0x20, 0x80, 0xda, 0x72, 0xc0, 0x3b, 0x86, 0x8c, 0x12, 0x8a, 0x13, 0x8c, 0x90, - 0x21, 0xab, 0x34, 0xd9, 0x30, 0xc2, 0x8c, 0x23, 0x98, 0x93, 0x1f, 0x93, 0x9b, 0x25, 0xab, 0x20, - 0x98, 0x32, 0xcd, 0x23, 0x99, 0x11, 0x80, 0x9e, 0x22, 0x98, 0x39, 0x93, 0xcb, 0x40, 0xaa, 0x32, - 0x07, 0xaf, 0x32, 0xd0, 0x49, 0xa2, 0x29, 0xd9, 0x49, 0x82, 0x9a, 0x42, 0xa9, 0x88, 0x3b, 0x95, - 0x89, 0x09, 0x15, 0x9d, 0x22, 0x98, 0x88, 0x1b, 0x06, 0x9f, 0x25, 0xba, 0x21, 0xb0, 0x39, 0xa2, - 0x9b, 0x30, 0x84, 0x0f, 0x25, 0xdb, 0x28, 0x91, 0x00, 0x89, 0x04, 0x8a, 0x90, 0x8a, 0x27, 0xbb, - 0x51, 0xe9, 0x48, 0x92, 0x0b, 0x02, 0xab, 0x32, 0x94, 0x9e, 0x22, 0x80, 0x0b, 0x93, 0x8e, 0x14, - 0x98, 0x98, 0x12, 0xaa, 0x40, 0xd0, 0x48, 0xb0, 0x38, 0xb2, 0x1e, 0x07, 0xac, 0x32, 0xd8, 0x30, - 0x98, 0x01, 0xa9, 0x29, 0x05, 0xab, 0x31, 0xc8, 0x20, 0x9b, 0x47, 0xac, 0x21, 0xc8, 0x30, 0x80, - 0x08, 0xb0, 0x2a, 0x80, 0x17, 0x9e, 0x31, 0xb1, 0x1b, 0x84, 0x0b, 0xa4, 0x6b, 0xb2, 0x0c, 0x22, - 0xb8, 0x29, 0x91, 0x58, 0xc1, 0x10, 0xdb, 0x6a, 0x85, 0xab, 0x32, 0xc0, 0x2b, 0x85, 0x8b, 0x22, - 0xa9, 0x18, 0x28, 0x01, 0xca, 0x3a, 0x94, 0x9a, 0x34, 0xeb, 0x71, 0xd8, 0x49, 0xb2, 0x1b, 0x13, - 0x88, 0x8b, 0x05, 0x9d, 0x42, 0xb0, 0x28, 0xaa, 0x40, 0xb2, 0x2e, 0x84, 0xab, 0x41, 0xa1, 0x8a, - 0x01, 0x18, 0x01, 0xc8, 0x2a, 0x82, 0x95, 0x2f, 0x93, 0xab, 0x28, 0x80, 0x43, 0x88, 0xf8, 0x19, - 0x00, 0x15, 0xae, 0x53, 0xb9, 0x00, 0x18, 0x81, 0xa9, 0x51, 0xe9, 0x48, 0x92, 0x8d, 0x32, 0xb8, - 0x2a, 0x21, 0xda, 0x20, 0x00, 0x21, 0xfb, 0x58, 0x90, 0x8b, 0x33, 0x9a, 0x82, 0xbb, 0x70, 0xd3, - 0x3a, 0x91, 0x00, 0xa8, 0x0f, 0x15, 0x0b, 0x92, 0x09, 0xb0, 0x4a, 0x02, 0xb8, 0x58, 0xd1, 0x28, - 0xa8, 0x12, 0x0a, 0x15, 0xcd, 0x11, 0x00, 0x95, 0x1d, 0x03, 0xaa, 0x8a, 0x24, 0x00, 0xd8, 0x0a, - 0x33, 0x88, 0x99, 0x84, 0x9f, 0x01, 0x14, 0xaa, 0x18, 0xa3, 0x9f, 0x26, 0xba, 0x21, 0x01, 0xbd, - 0x30, 0x04, 0xaa, 0x88, 0x15, 0x9a, 0xb1, 0x4a, 0x83, 0xbd, 0x64, 0xc8, 0x28, 0xa2, 0x0d, 0x14, - 0xaa, 0x10, 0x18, 0x90, 0xa8, 0x79, 0x93, 0xac, 0x12, 0x9a, 0x25, 0xaa, 0x30, 0xc8, 0xb9, 0x73, - 0x91, 0x8b, 0x33, 0xba, 0xba, 0x72, 0xb1, 0x3c, 0x07, 0xbb, 0x31, 0xa2, 0x0e, 0x82, 0x11, 0x9b, - 0x01, 0x1a, 0x05, 0x8b, 0x98, 0x48, 0xa3, 0x8a, 0x21, 0xeb, 0x61, 0xb8, 0x41, 0xad, 0x23, 0x88, - 0x98, 0x22, 0xfb, 0x28, 0x12, 0xc9, 0x42, 0xdb, 0x41, 0x98, 0x89, 0xa2, 0x68, 0xc0, 0x30, 0xb8, - 0x1b, 0x17, 0xbb, 0x53, 0xc9, 0x30, 0xb8, 0x39, 0xb4, 0x5b, 0xa0, 0x30, 0xd8, 0x1a, 0x14, 0xbb, - 0x63, 0x98, 0x98, 0x28, 0xba, 0x63, 0xa0, 0x09, 0x18, 0xb0, 0x59, 0x93, 0xbf, 0x36, 0xca, 0x48, - 0xb0, 0x29, 0x84, 0x0a, 0xa8, 0x28, 0x81, 0x18, 0xa9, 0x37, 0xdc, 0x28, 0x02, 0x19, 0xc1, 0x2a, - 0xa3, 0x1e, 0x94, 0x3b, 0xc3, 0x1b, 0x22, 0xb1, 0x8b, 0x30, 0xb3, 0x29, 0xda, 0x38, 0x82, 0x16, - 0x9d, 0x21, 0xf8, 0x3a, 0x07, 0xab, 0x21, 0xc0, 0x58, 0xa2, 0x8c, 0x13, 0xbb, 0x34, 0xcb, 0x62, - 0xb8, 0x19, 0x11, 0xba, 0x51, 0x81, 0xa9, 0x99, 0x58, 0x91, 0x22, 0xdc, 0x31, 0xf0, 0x6a, 0xb2, - 0x2a, 0x81, 0x89, 0x01, 0x89, 0x00, 0x29, 0xc1, 0x7a, 0xc1, 0x29, 0x81, 0x8a, 0x32, 0xa8, 0xb0, - 0x1d, 0x85, 0x28, 0xb9, 0x28, 0xb6, 0x1f, 0x84, 0x8a, 0x23, 0xeb, 0x30, 0xb1, 0x1b, 0x17, 0xbb, - 0x41, 0xa1, 0x8c, 0x13, 0x08, 0x00, 0xba, 0x19, 0x24, 0xeb, 0x41, 0x90, 0xb0, 0x3c, 0x85, 0x09, - 0xb8, 0x38, 0xc1, 0x28, 0x32, 0xf9, 0x31, 0xbb, 0x98, 0x70, 0xa4, 0x8c, 0x13, 0xab, 0x14, 0x0a, - 0x00, 0xd1, 0x2c, 0x13, 0xa1, 0x9a, 0x02, 0x9c, 0x07, 0x0c, 0x03, 0xa8, 0x2b, 0x13, 0xd0, 0x1d, - 0x84, 0x90, 0x09, 0x22, 0xf9, 0x49, 0xa1, 0x19, 0x81, 0x18, 0xa0, 0xaa, 0x53, 0x9a, 0x17, 0xdb, - 0x30, 0x82, 0x9c, 0x18, 0x44, 0xd8, 0x98, 0x28, 0x80, 0x83, 0x2c, 0xc3, 0x1d, 0x14, 0xaa, 0x01, - 0x99, 0x01, 0x11, 0xa2, 0xbf, 0x45, 0xb9, 0x18, 0x10, 0xb1, 0x2d, 0x93, 0x0a, 0x12, 0x90, 0x48, - 0xf3, 0x8f, 0x14, 0x99, 0x20, 0xc8, 0x58, 0xc1, 0x2a, 0x12, 0xbb, 0x72, 0xc8, 0x00, 0x10, 0x90, - 0x09, 0x00, 0x89, 0x32, 0xaa, 0x11, 0xb9, 0x6a, 0xa5, 0x9e, 0x34, 0xb9, 0x10, 0xa8, 0x29, 0x93, - 0x20, 0xeb, 0x53, 0xc9, 0x2a, 0x16, 0xac, 0x31, 0x89, 0x90, 0x18, 0x91, 0x09, 0x00, 0x58, 0xf1, - 0x69, 0xc8, 0x38, 0x91, 0x19, 0xb1, 0x0b, 0x62, 0x91, 0x0a, 0xaa, 0x41, 0xb1, 0x4a, 0xa3, 0x29, - 0xdc, 0x60, 0x90, 0x98, 0x61, 0xd8, 0x2a, 0x13, 0xb9, 0x19, 0x83, 0x0c, 0x14, 0x9a, 0xa8, 0x38, - 0x15, 0xe9, 0x39, 0xc3, 0x2c, 0x94, 0x2a, 0x02, 0xae, 0x22, 0x08, 0x1c, 0x85, 0x89, 0x88, 0x99, - 0x42, 0x88, 0x20, 0xbd, 0x22, 0x9b, 0x03, 0x32, 0xd2, 0x8e, 0x12, 0xa0, 0x1b, 0x05, 0x81, 0x8d, - 0x82, 0x00, 0x9d, 0x27, 0xca, 0x40, 0xc1, 0x2b, 0x04, 0x9b, 0x14, 0xaa, 0x18, 0x83, 0x9a, 0x01, - 0x99, 0x23, 0xa8, 0x9d, 0x64, 0xb9, 0x28, 0x01, 0xb9, 0x21, 0xaa, 0x62, 0xa0, 0x19, 0x08, 0xa0, - 0x1a, 0x14, 0x9a, 0x10, 0x98, 0x21, 0x89, 0x78, 0x02, 0x00, 0x00, 0x7d, 0x0b, 0x02, 0x01, 0x00, - 0x60, 0x14, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0xf7, 0x8f, 0x77, 0x8a, 0x77, 0x91, 0x88, 0x1b, - 0x86, 0x10, 0xfb, 0x18, 0xa2, 0x5b, 0xd0, 0x30, 0x98, 0x10, 0x0c, 0xd2, 0x1b, 0x80, 0x38, 0xc3, - 0x28, 0x9b, 0x27, 0x8a, 0x83, 0x09, 0x9c, 0x92, 0x58, 0xba, 0x88, 0x47, 0x19, 0xd8, 0x41, 0x8a, - 0x04, 0x80, 0xad, 0x00, 0x20, 0x09, 0x81, 0x90, 0x8f, 0x82, 0x11, 0x8d, 0x02, 0x81, 0x92, 0x8e, - 0x91, 0x40, 0xc0, 0x79, 0x80, 0x99, 0x11, 0x89, 0xc0, 0x38, 0x20, 0x37, 0xc9, 0xba, 0x51, 0x99, - 0x12, 0x91, 0x2b, 0xfa, 0x31, 0x88, 0x89, 0xb0, 0x3b, 0xc1, 0x31, 0x63, 0xb8, 0xf1, 0x3d, 0xa2, - 0x30, 0x99, 0xa0, 0x11, 0x2a, 0x9b, 0x17, 0x0f, 0x02, 0x10, 0x91, 0x9b, 0x58, 0x01, 0xb1, 0x8d, - 0x88, 0x28, 0xa3, 0x11, 0x89, 0x39, 0xf8, 0x28, 0xbd, 0x12, 0x01, 0x47, 0xcc, 0x80, 0x20, 0x30, - 0xa2, 0xba, 0x0e, 0x25, 0x99, 0x01, 0xba, 0x30, 0x19, 0x95, 0x9c, 0x71, 0xb8, 0x11, 0x8d, 0x83, - 0x59, 0x92, 0x08, 0xca, 0x31, 0x10, 0xd2, 0x8b, 0x0a, 0x04, 0x0c, 0x81, 0xbc, 0x44, 0x30, 0xfb, - 0x10, 0x9b, 0x21, 0x10, 0xb2, 0x8f, 0x03, 0x54, 0xc8, 0x88, 0x89, 0x24, 0x98, 0x19, 0x91, 0x88, - 0x18, 0x29, 0xb7, 0x0f, 0x02, 0x08, 0xb8, 0x3c, 0x94, 0x28, 0xa0, 0x00, 0xac, 0x22, 0x11, 0x01, - 0x9c, 0xb2, 0x2d, 0xa3, 0x1a, 0x30, 0xd4, 0x8d, 0x21, 0xd8, 0x1a, 0x14, 0x1b, 0x27, 0x8b, 0xa8, - 0x12, 0x3a, 0x27, 0xc0, 0xaa, 0x9c, 0x31, 0x22, 0x94, 0x9b, 0x0d, 0x95, 0x1a, 0x92, 0x8a, 0x14, - 0x38, 0xd0, 0x20, 0x9e, 0x11, 0x43, 0xdb, 0x18, 0x10, 0xb9, 0x28, 0xa1, 0xad, 0x34, 0xaa, 0xa4, - 0x0f, 0x92, 0x60, 0x82, 0x9a, 0x18, 0x81, 0x01, 0x34, 0xcb, 0x03, 0xbf, 0x81, 0x42, 0x80, 0x98, - 0x1a, 0xe2, 0x1d, 0x84, 0x30, 0xa1, 0xaa, 0x9c, 0x82, 0x5c, 0x84, 0xa9, 0x9b, 0x14, 0x08, 0xab, - 0x09, 0x04, 0x3c, 0x05, 0x02, 0x8f, 0x81, 0x10, 0x90, 0x30, 0xb0, 0x49, 0x04, 0x18, 0xf8, 0x19, - 0xba, 0x19, 0x30, 0x96, 0x49, 0xf9, 0x89, 0x31, 0xa8, 0x09, 0x02, 0x3a, 0x84, 0x31, 0x90, 0xac, - 0x48, 0x93, 0x58, 0x93, 0x4c, 0xb4, 0x9a, 0xdd, 0x38, 0x02, 0xa0, 0x0d, 0x08, 0x82, 0x48, 0x80, - 0xc9, 0x40, 0x10, 0xe3, 0x48, 0xa0, 0x99, 0x2a, 0x04, 0xa8, 0x49, 0x17, 0xc9, 0x18, 0xa9, 0x13, - 0x98, 0xba, 0x0e, 0x14, 0x10, 0xac, 0x88, 0x52, 0x99, 0x01, 0x80, 0x80, 0xad, 0x46, 0x90, 0x0a, - 0x88, 0x53, 0xeb, 0x29, 0x01, 0x40, 0x90, 0x81, 0x0c, 0xc3, 0x0a, 0xab, 0x84, 0x38, 0xdb, 0x33, - 0x52, 0xa8, 0xb9, 0x0c, 0x12, 0x91, 0x18, 0x28, 0x82, 0x0c, 0xe6, 0x4d, 0x83, 0x8b, 0x11, 0x8c, - 0x13, 0x00, 0x99, 0x88, 0x9c, 0x73, 0xf0, 0x0b, 0x12, 0x02, 0x8a, 0x30, 0xb3, 0x1d, 0x80, 0x32, - 0xb8, 0xbc, 0x89, 0x41, 0x83, 0xac, 0x73, 0xb2, 0x5b, 0x86, 0x9b, 0x80, 0x09, 0x50, 0x83, 0xaa, - 0x8b, 0x90, 0xc1, 0x0f, 0x14, 0x20, 0xea, 0x18, 0x22, 0xd9, 0x88, 0x63, 0xa8, 0x99, 0x09, 0x21, - 0x34, 0xd8, 0x9b, 0x81, 0x52, 0x98, 0x22, 0xbd, 0x80, 0x50, 0xa0, 0x21, 0xbb, 0x98, 0x78, 0x94, - 0x9e, 0x22, 0x21, 0xd0, 0x0c, 0x12, 0x98, 0x28, 0xc0, 0x38, 0x80, 0xc9, 0x2b, 0x27, 0x98, 0x89, - 0x54, 0xd9, 0x89, 0x30, 0xa4, 0x19, 0x90, 0xae, 0x12, 0x89, 0x42, 0x81, 0xca, 0x08, 0x32, 0xea, - 0x29, 0x11, 0x40, 0xb8, 0x98, 0x3c, 0x84, 0x10, 0xa8, 0x2a, 0xf2, 0x48, 0x32, 0xc3, 0xaf, 0x38, - 0x92, 0x28, 0xbb, 0x20, 0x31, 0x24, 0xfe, 0x09, 0x20, 0x83, 0x8b, 0xb0, 0x9d, 0x61, 0x04, 0xa9, - 0x89, 0x99, 0x65, 0x91, 0x9a, 0x89, 0x32, 0xb2, 0x0b, 0xaa, 0x35, 0x02, 0xa9, 0xaa, 0x29, 0x80, - 0x42, 0xa4, 0xff, 0x28, 0x22, 0xa1, 0xdb, 0x29, 0x06, 0x9b, 0x02, 0x1b, 0xa2, 0x20, 0x21, 0xea, - 0x99, 0x71, 0xb0, 0x00, 0x28, 0x82, 0x10, 0x88, 0xfe, 0x3a, 0x17, 0x98, 0x9b, 0x20, 0x08, 0x00, - 0x11, 0x94, 0x8e, 0x82, 0x09, 0x28, 0x81, 0x80, 0x9a, 0xba, 0x81, 0x2d, 0xb5, 0x4a, 0x99, 0x03, - 0x1c, 0xc2, 0x39, 0x99, 0x57, 0xca, 0x21, 0x98, 0xb9, 0x78, 0xa4, 0x3a, 0xb3, 0x2a, 0xd9, 0x48, - 0x10, 0x11, 0x11, 0xef, 0x29, 0x13, 0x88, 0xba, 0x00, 0x00, 0x88, 0x81, 0x8a, 0x02, 0x52, 0xa2, - 0xcf, 0x90, 0x50, 0x85, 0xa9, 0x8b, 0x04, 0x49, 0x04, 0xa9, 0x8b, 0x33, 0x80, 0xdc, 0x40, 0x02, - 0x08, 0xba, 0xbb, 0xcc, 0x71, 0x94, 0x18, 0xa9, 0x89, 0x22, 0xb8, 0x0c, 0x10, 0x25, 0x08, 0xc8, - 0x30, 0xda, 0x52, 0x91, 0x89, 0x98, 0xab, 0x64, 0x80, 0x08, 0x81, 0x88, 0xcd, 0x01, 0x1a, 0x37, - 0xb8, 0x9e, 0x00, 0x32, 0xb0, 0x3b, 0x86, 0xad, 0x28, 0x25, 0xb9, 0x89, 0x11, 0x00, 0xb9, 0x29, - 0x32, 0xc8, 0x61, 0xb8, 0x39, 0xa3, 0x8d, 0x26, 0x9c, 0x23, 0x99, 0x88, 0xb9, 0x09, 0x9f, 0x57, - 0xb8, 0x89, 0x11, 0x90, 0x10, 0x11, 0xc8, 0xcd, 0x40, 0x02, 0x00, 0xc9, 0x1a, 0x83, 0x00, 0x98, - 0x98, 0x20, 0x36, 0x88, 0xe9, 0x9d, 0x32, 0x22, 0x12, 0xcb, 0xae, 0x10, 0x73, 0x92, 0x8b, 0xb8, - 0x09, 0x32, 0x01, 0xa9, 0xa9, 0x78, 0xc8, 0x09, 0xaa, 0x74, 0x82, 0xb9, 0x8c, 0x21, 0x30, 0x15, - 0xc9, 0xac, 0x41, 0x82, 0x11, 0xba, 0x9b, 0x30, 0x47, 0xc8, 0x8c, 0x10, 0x04, 0x08, 0x80, 0xea, - 0x1a, 0x24, 0x10, 0xa9, 0x8a, 0xaa, 0x61, 0x92, 0x88, 0x18, 0xc1, 0x9a, 0x40, 0xa3, 0x9f, 0x63, - 0xa0, 0x0a, 0x9a, 0x53, 0x01, 0x9a, 0x91, 0x9d, 0x33, 0x8a, 0x43, 0xa0, 0xae, 0x31, 0x18, 0x82, - 0xcd, 0x28, 0x41, 0x94, 0x9e, 0x00, 0x10, 0x11, 0x18, 0xd1, 0x9c, 0x29, 0x17, 0x8b, 0x03, 0xcb, - 0x1a, 0x25, 0xa8, 0x08, 0x10, 0x04, 0xae, 0x28, 0x13, 0xba, 0x68, 0xa1, 0x08, 0xac, 0x13, 0x40, - 0xf1, 0x0a, 0x21, 0x93, 0x8b, 0x88, 0x15, 0x8b, 0x04, 0x9c, 0xd8, 0x48, 0x91, 0x58, 0xb2, 0xac, - 0x18, 0x17, 0x98, 0xa0, 0x8a, 0x22, 0x00, 0x00, 0x8a, 0x88, 0x09, 0x57, 0xc9, 0x0b, 0x04, 0x28, - 0x90, 0x08, 0xfb, 0x18, 0x35, 0xe8, 0x8a, 0x01, 0x21, 0xa1, 0x99, 0x19, 0xb1, 0x72, 0xa8, 0xa8, - 0x89, 0x72, 0x05, 0x99, 0x9b, 0x11, 0x12, 0xab, 0x04, 0x9e, 0x23, 0x1a, 0x94, 0xab, 0x9b, 0x42, - 0x10, 0x05, 0xae, 0x31, 0xb1, 0x19, 0xa2, 0x89, 0x89, 0x05, 0xbc, 0x51, 0xa2, 0x2b, 0x16, 0xba, - 0x90, 0x79, 0x83, 0xd8, 0x0b, 0x83, 0xca, 0x72, 0x91, 0xb8, 0x59, 0xa1, 0x2a, 0x93, 0x2a, 0x98, - 0x45, 0xcb, 0x10, 0x99, 0x89, 0x58, 0x27, 0xdb, 0x28, 0xb8, 0x49, 0x03, 0x99, 0x09, 0xa1, 0x0b, - 0x12, 0x18, 0xc8, 0x40, 0x91, 0xae, 0x11, 0x2a, 0x06, 0x80, 0x88, 0x08, 0x03, 0x63, 0xfa, 0x39, - 0x92, 0x51, 0xea, 0x10, 0x08, 0x90, 0x18, 0xa0, 0x9b, 0x08, 0x38, 0xf2, 0x50, 0xd1, 0x1c, 0x84, - 0x8c, 0x14, 0x80, 0x89, 0x81, 0x1b, 0x93, 0x0c, 0x07, 0x9b, 0x44, 0xb8, 0x09, 0xa8, 0x40, 0x13, - 0xeb, 0x89, 0x00, 0x20, 0x84, 0x9b, 0xac, 0x73, 0xc2, 0x19, 0x91, 0x8a, 0x44, 0xa9, 0x99, 0x0a, - 0x24, 0x81, 0x19, 0xf2, 0x0d, 0x25, 0x90, 0x8a, 0x98, 0x59, 0x82, 0x98, 0xac, 0x40, 0x92, 0x98, - 0x29, 0x97, 0x8d, 0x12, 0x80, 0xb9, 0x20, 0x01, 0x00, 0xaa, 0x8a, 0x05, 0xaf, 0x33, 0x81, 0xa0, - 0x3a, 0xb2, 0x3a, 0x73, 0xc1, 0x8d, 0x63, 0xa0, 0x89, 0x99, 0x20, 0x32, 0xa0, 0xbc, 0x9b, 0x52, - 0x26, 0xa1, 0xcf, 0x10, 0x32, 0xb0, 0xac, 0x21, 0x80, 0x31, 0xa5, 0xbf, 0x30, 0x23, 0x81, 0xdc, - 0x18, 0x02, 0x18, 0x25, 0xea, 0x8b, 0x53, 0x81, 0xb9, 0x1b, 0x13, 0x19, 0x83, 0xae, 0x08, 0x12, - 0x1a, 0x13, 0x99, 0xcf, 0x50, 0x03, 0xcc, 0x21, 0x98, 0x31, 0xb1, 0x8b, 0x28, 0x93, 0x9b, 0x28, - 0x07, 0x9f, 0x63, 0xb0, 0x8a, 0x02, 0x89, 0x32, 0x00, 0xd0, 0xac, 0x31, 0xb1, 0x61, 0xa1, 0x8c, - 0x11, 0x89, 0x33, 0xf9, 0x89, 0x29, 0x07, 0xa9, 0x8a, 0x16, 0x89, 0x98, 0x81, 0x9a, 0x32, 0x30, - 0xd1, 0x58, 0xb8, 0x88, 0x1b, 0x92, 0x49, 0x16, 0x98, 0xc9, 0x0d, 0x23, 0x91, 0x09, 0x83, 0x8c, - 0xf0, 0x3a, 0x14, 0xa8, 0x8c, 0x90, 0x63, 0xc8, 0x48, 0x93, 0xcc, 0x38, 0x05, 0xab, 0x10, 0x81, - 0x38, 0x22, 0xf0, 0x8e, 0x32, 0xa9, 0x53, 0xb0, 0x9d, 0x00, 0x23, 0xa0, 0x8a, 0xc0, 0x19, 0x17, - 0xa9, 0x0a, 0x02, 0x23, 0xaa, 0xd9, 0x58, 0xa0, 0x41, 0xa8, 0xba, 0x4b, 0x27, 0x99, 0x89, 0x00, - 0x8e, 0x34, 0x81, 0xda, 0x1a, 0x22, 0x83, 0xbd, 0x33, 0xb9, 0x9c, 0x24, 0x89, 0x01, 0x0a, 0x15, - 0xaa, 0xeb, 0x40, 0x81, 0x98, 0x19, 0x17, 0xec, 0x20, 0x21, 0xa8, 0x19, 0x88, 0x99, 0x50, 0x94, - 0x1a, 0xa1, 0x8c, 0x26, 0xcc, 0x28, 0x12, 0x18, 0x93, 0xbf, 0x38, 0x13, 0xa9, 0x0b, 0x21, 0xd1, - 0x6a, 0xa2, 0xaa, 0x19, 0x14, 0x11, 0xa2, 0xdf, 0x28, 0x24, 0xc9, 0x18, 0x81, 0x99, 0x18, 0x15, - 0x19, 0xe9, 0x48, 0xa2, 0x9b, 0x28, 0x14, 0x13, 0xfc, 0x1b, 0x01, 0x23, 0xa9, 0x9a, 0x40, 0xb1, - 0x8c, 0x43, 0xb8, 0x18, 0x13, 0x01, 0xfb, 0x0b, 0x02, 0x58, 0x15, 0xc9, 0x0c, 0x22, 0x98, 0x2a, - 0x86, 0x9a, 0x01, 0xc9, 0x5a, 0x05, 0xac, 0x11, 0x91, 0xa8, 0x9b, 0x47, 0xa1, 0x8b, 0x00, 0x12, - 0xc9, 0x0b, 0x45, 0xa8, 0x8c, 0x42, 0x98, 0x80, 0xaa, 0x40, 0x05, 0xba, 0x8b, 0x35, 0xa0, 0x0b, - 0x05, 0x98, 0xac, 0x12, 0x31, 0xb1, 0x9e, 0x21, 0x41, 0xd8, 0x0a, 0x14, 0xc8, 0x2b, 0x83, 0x19, - 0x82, 0xaa, 0x23, 0xcf, 0x35, 0xa9, 0x98, 0x29, 0x13, 0x09, 0xdb, 0x64, 0xc8, 0x0a, 0x32, 0x01, - 0xb9, 0x0c, 0x91, 0x3a, 0xa5, 0x2c, 0x87, 0x9b, 0x99, 0x62, 0x03, 0xbd, 0x48, 0x91, 0x88, 0x30, - 0xd1, 0x19, 0xc0, 0x60, 0x91, 0xa9, 0x1a, 0x32, 0x92, 0xaf, 0x21, 0x13, 0xab, 0x18, 0x80, 0x9a, - 0x31, 0x37, 0xfa, 0x0b, 0x32, 0x03, 0xba, 0x00, 0xaf, 0x51, 0x83, 0xbb, 0x19, 0x03, 0x1b, 0x07, - 0xa9, 0x8e, 0x23, 0x08, 0x80, 0x8b, 0x80, 0x10, 0x10, 0x01, 0xd9, 0xcd, 0x62, 0x81, 0xa9, 0x29, - 0x32, 0x96, 0xae, 0x52, 0xb9, 0x00, 0x30, 0x83, 0xab, 0x8c, 0x25, 0xa8, 0x8c, 0x31, 0x81, 0xbc, - 0x62, 0xa1, 0x8f, 0x21, 0x81, 0x88, 0xac, 0x22, 0x08, 0x15, 0xda, 0x19, 0x04, 0xab, 0x52, 0x91, - 0xab, 0x18, 0x44, 0xb0, 0xab, 0x39, 0x47, 0xb8, 0x9a, 0x10, 0x10, 0x90, 0x19, 0x83, 0xcf, 0x40, - 0x12, 0xb9, 0x9f, 0x63, 0x90, 0xaa, 0x08, 0x19, 0x02, 0x62, 0xc0, 0x9a, 0x21, 0x88, 0x14, 0xa8, - 0xca, 0x30, 0x34, 0xea, 0x2a, 0x01, 0x00, 0x09, 0x91, 0xac, 0x00, 0x73, 0xc0, 0x18, 0x18, 0xf9, - 0x19, 0x02, 0x41, 0xb1, 0x0c, 0x80, 0x93, 0x9f, 0x43, 0x88, 0xb9, 0x20, 0x82, 0x98, 0x0d, 0x26, - 0x82, 0xcd, 0x19, 0x31, 0xb1, 0x60, 0xa0, 0xa9, 0xa9, 0x52, 0xa2, 0x0b, 0xa1, 0x7a, 0x04, 0xdc, - 0x28, 0x01, 0x11, 0xb8, 0x0a, 0x83, 0xab, 0x73, 0x82, 0xc0, 0x9e, 0x53, 0x90, 0x8b, 0x00, 0x21, - 0x02, 0xcd, 0x28, 0x01, 0x89, 0x32, 0x91, 0xbd, 0x1a, 0x26, 0xb8, 0x09, 0x21, 0xa0, 0x80, 0x9a, - 0xfb, 0x79, 0x83, 0x08, 0x88, 0xd9, 0x0b, 0x33, 0x54, 0xe0, 0x1a, 0x01, 0x9a, 0x62, 0xb0, 0x8b, - 0x32, 0xaa, 0x83, 0x8e, 0x22, 0x14, 0x8a, 0xa3, 0xbf, 0x08, 0x63, 0x83, 0x9c, 0x99, 0x22, 0x11, - 0xf9, 0x49, 0x91, 0x1b, 0x03, 0xa9, 0x9a, 0x9a, 0x77, 0xc0, 0x1a, 0xa1, 0x38, 0x33, 0xfa, 0x18, - 0x99, 0x32, 0x91, 0x88, 0x9a, 0x90, 0x70, 0x82, 0xbc, 0x09, 0x44, 0xb0, 0x30, 0xfb, 0x18, 0x10, - 0x11, 0xa0, 0x0c, 0x81, 0x29, 0x35, 0xf9, 0x1a, 0x01, 0x19, 0x00, 0xc0, 0x29, 0x9b, 0x47, 0xb0, - 0x8b, 0x20, 0x83, 0x29, 0xc8, 0x91, 0x4b, 0x93, 0x38, 0xfa, 0xa0, 0x3b, 0x36, 0x02, 0xde, 0x28, - 0x02, 0x00, 0xba, 0x10, 0xa0, 0x38, 0x21, 0x94, 0xcf, 0x28, 0x86, 0x09, 0xa0, 0x8d, 0x44, 0xb0, - 0x0b, 0x03, 0x9b, 0x41, 0x11, 0xb1, 0x9f, 0x48, 0x84, 0x8a, 0x81, 0xab, 0x30, 0x17, 0x9b, 0x00, - 0x8c, 0x13, 0x18, 0xca, 0x33, 0xaf, 0x44, 0xa8, 0xab, 0x31, 0xa1, 0x50, 0x80, 0xe9, 0x38, 0x80, - 0x02, 0xb8, 0x3b, 0xb0, 0x61, 0x83, 0xbf, 0x42, 0x99, 0x10, 0x03, 0xae, 0x89, 0x72, 0x82, 0xab, - 0x10, 0x8a, 0x01, 0x04, 0x09, 0xe8, 0x59, 0xa2, 0x1a, 0x92, 0xca, 0x51, 0x91, 0x99, 0x9c, 0x64, - 0xa0, 0x09, 0x81, 0xc9, 0x10, 0x11, 0x12, 0xeb, 0x39, 0x06, 0x9c, 0x20, 0x80, 0x88, 0x91, 0x89, - 0x33, 0xaa, 0xfa, 0x71, 0xa1, 0x0b, 0x20, 0x03, 0xae, 0x08, 0x53, 0xc8, 0x28, 0xa0, 0x21, 0xdb, - 0x11, 0x38, 0xb1, 0x8a, 0x8a, 0x34, 0x81, 0x09, 0x41, 0xf2, 0x0f, 0x21, 0x01, 0x99, 0xab, 0x63, - 0xb1, 0x2d, 0xa4, 0x3b, 0x92, 0x8b, 0x21, 0xac, 0x13, 0x21, 0xa1, 0xbf, 0x32, 0x28, 0xe0, 0x4a, - 0x92, 0x0b, 0x32, 0xa2, 0xdf, 0x49, 0x13, 0x9a, 0x11, 0xe8, 0x48, 0x91, 0x1b, 0xa2, 0x10, 0x8c, - 0x12, 0x51, 0xf0, 0x2b, 0x93, 0x18, 0xba, 0x58, 0x02, 0xd8, 0x3a, 0xa3, 0x90, 0x0f, 0x05, 0x0a, - 0x90, 0x1b, 0x86, 0x28, 0xc0, 0x28, 0x88, 0xaa, 0x63, 0x90, 0x90, 0xac, 0x43, 0xe9, 0x21, 0x91, - 0x89, 0xa1, 0x3a, 0x87, 0x9d, 0x33, 0x89, 0x88, 0x9a, 0x0a, 0x35, 0x08, 0x22, 0xed, 0x20, 0xa1, - 0x20, 0xc2, 0x8c, 0x02, 0x40, 0xc2, 0xae, 0x31, 0xa3, 0x0b, 0x23, 0x8b, 0xa1, 0x2a, 0x93, 0x23, - 0x8d, 0xe8, 0x65, 0xd8, 0x19, 0x11, 0x88, 0x90, 0x0a, 0x23, 0xac, 0x34, 0x89, 0xa2, 0xbf, 0x39, - 0x15, 0x88, 0xa8, 0xaa, 0x22, 0x51, 0xd9, 0x20, 0x90, 0x9a, 0x57, 0xd9, 0x1a, 0x21, 0x82, 0x8a, - 0xa8, 0x19, 0x41, 0x25, 0xc9, 0xbd, 0x72, 0x91, 0x89, 0x80, 0xca, 0x51, 0x81, 0x90, 0xab, 0x20, - 0x40, 0xb3, 0x8c, 0xb0, 0x71, 0x82, 0xcb, 0x31, 0xd8, 0x41, 0xa8, 0x29, 0x98, 0x80, 0x58, 0x84, - 0x9c, 0x98, 0x41, 0x80, 0xa8, 0x8b, 0x14, 0x81, 0x9b, 0x44, 0xd8, 0xac, 0x73, 0xa0, 0x80, 0x08, - 0x81, 0x0b, 0x04, 0x9c, 0x43, 0x99, 0x8a, 0x32, 0xc9, 0x01, 0xac, 0x74, 0xb1, 0x99, 0x88, 0x48, - 0x86, 0x9b, 0x92, 0x1a, 0x13, 0x99, 0xb1, 0x8c, 0x1a, 0x57, 0x08, 0xdc, 0x28, 0x05, 0x88, 0x99, - 0x8a, 0x22, 0x22, 0xc9, 0x98, 0x89, 0x54, 0xb0, 0x38, 0xfa, 0x39, 0x14, 0xa9, 0xa9, 0x3a, 0x04, - 0xa0, 0x2a, 0xd1, 0x49, 0xa2, 0x8b, 0x22, 0xa1, 0x1e, 0x05, 0xaa, 0x0b, 0x16, 0xa9, 0x80, 0x48, - 0x91, 0x10, 0xe9, 0x41, 0x90, 0x30, 0xdd, 0x21, 0x11, 0xc8, 0x18, 0xfa, 0x30, 0x83, 0x88, 0xa0, - 0xbf, 0x53, 0x92, 0x89, 0xab, 0x02, 0x51, 0x91, 0x0b, 0xd1, 0x49, 0x01, 0x93, 0xaf, 0x23, 0x98, - 0x30, 0xd0, 0x9b, 0x23, 0x50, 0xb3, 0x9f, 0x08, 0x25, 0xa9, 0x99, 0x0a, 0x24, 0x01, 0xba, 0xaa, - 0x3a, 0x37, 0x80, 0xca, 0xab, 0x72, 0x82, 0x98, 0xa8, 0x19, 0x43, 0xb1, 0x0a, 0xc9, 0x61, 0xb2, - 0x0a, 0x20, 0xc9, 0x45, 0xba, 0x09, 0x1b, 0x27, 0x9a, 0x98, 0x18, 0x19, 0x87, 0x8b, 0x92, 0x2c, - 0x86, 0xab, 0x20, 0x02, 0x9a, 0x15, 0x9c, 0xa2, 0x61, 0xa9, 0x80, 0x2a, 0x17, 0xaa, 0xb3, 0x1e, - 0x12, 0x02, 0x80, 0xbd, 0x1a, 0x12, 0x31, 0x83, 0xdf, 0x28, 0x11, 0xa1, 0x8c, 0x21, 0x85, 0x8d, - 0x83, 0xa9, 0x28, 0x13, 0xa8, 0x9a, 0x09, 0x27, 0x0d, 0x83, 0xac, 0x33, 0x89, 0x00, 0xb8, 0x8f, - 0x35, 0xa0, 0x8a, 0xb9, 0x78, 0x81, 0xb8, 0x29, 0x15, 0xda, 0x5a, 0xc3, 0x2a, 0x03, 0x8a, 0x89, - 0x98, 0x49, 0x17, 0xab, 0x98, 0x30, 0x06, 0xcc, 0x20, 0x01, 0x98, 0x81, 0x10, 0xec, 0x31, 0x08, - 0x03, 0xeb, 0x19, 0x23, 0xa1, 0x0c, 0x92, 0x81, 0x40, 0xfb, 0x29, 0x24, 0xb0, 0x1a, 0xa8, 0x18, - 0x82, 0x88, 0x42, 0xfc, 0x39, 0x82, 0x91, 0xac, 0x38, 0x16, 0xbb, 0x21, 0xa8, 0x38, 0xa9, 0x57, - 0xc0, 0x0a, 0x80, 0x38, 0x02, 0x08, 0x99, 0xf9, 0x5d, 0x94, 0x0a, 0xa0, 0x20, 0xc9, 0x58, 0xa0, - 0x18, 0x31, 0xc0, 0x88, 0x9e, 0x21, 0x24, 0xb0, 0x9c, 0x92, 0x10, 0x98, 0x32, 0xa4, 0x8f, 0x28, - 0xa3, 0x28, 0xba, 0x36, 0xab, 0x05, 0xaf, 0x31, 0x88, 0x00, 0x20, 0xd1, 0x8a, 0xb9, 0x70, 0x85, - 0x99, 0x00, 0x99, 0x80, 0x0c, 0x37, 0xc0, 0x8a, 0x29, 0x83, 0x1a, 0x01, 0x80, 0x00, 0x9a, 0xce, - 0x41, 0x83, 0x9a, 0x44, 0xdb, 0x88, 0x2a, 0x16, 0x98, 0x8a, 0x11, 0x98, 0x88, 0x9b, 0x25, 0x61, - 0xd2, 0x8d, 0x11, 0x88, 0x31, 0xa2, 0x8b, 0xca, 0x30, 0x83, 0x98, 0x09, 0x16, 0xac, 0x13, 0xbc, - 0x00, 0x76, 0xd2, 0x1a, 0xa1, 0x09, 0x23, 0xa1, 0x9c, 0x32, 0x98, 0xea, 0x51, 0xa9, 0x52, 0xa8, - 0xa8, 0x09, 0x10, 0x42, 0x12, 0xf0, 0x0f, 0x03, 0x89, 0x01, 0x18, 0xba, 0x31, 0xc9, 0x38, 0xa2, - 0x52, 0xeb, 0x38, 0xa1, 0x2b, 0x16, 0xaa, 0x08, 0x12, 0x08, 0xc9, 0x81, 0x68, 0x91, 0x11, 0xcf, - 0x28, 0x22, 0x02, 0xdb, 0x99, 0x21, 0x02, 0xd8, 0x4a, 0x92, 0x8b, 0x34, 0xe1, 0x8d, 0x34, 0x80, - 0xaa, 0x8b, 0x29, 0x17, 0x08, 0x80, 0xbd, 0x32, 0x88, 0xa1, 0x2b, 0x27, 0xdb, 0x50, 0xb0, 0x09, - 0x01, 0x01, 0x80, 0xac, 0x31, 0x80, 0x23, 0xfb, 0x79, 0x91, 0x9c, 0x22, 0x99, 0x01, 0x00, 0xa0, - 0xad, 0x50, 0x93, 0x1b, 0xb2, 0x1c, 0x34, 0x91, 0x9f, 0x11, 0x00, 0x83, 0x9f, 0x01, 0x09, 0x53, - 0xe0, 0x2a, 0x83, 0x8a, 0x08, 0x92, 0x9e, 0x44, 0x80, 0xba, 0x89, 0x38, 0x34, 0xa3, 0xcf, 0x10, - 0x11, 0x91, 0x10, 0xb9, 0x2b, 0x04, 0xc8, 0x29, 0x99, 0x14, 0x50, 0xd1, 0x9c, 0x30, 0x12, 0x11, - 0xfa, 0x2c, 0x82, 0x40, 0xb0, 0x9b, 0x18, 0x35, 0x8a, 0xf9, 0x48, 0x81, 0x29, 0xa1, 0x8c, 0x09, - 0x13, 0x80, 0x0b, 0x83, 0x9c, 0x02, 0x42, 0x9b, 0x47, 0xeb, 0x1a, 0x02, 0x30, 0xc0, 0x89, 0xa8, - 0x20, 0x27, 0xcb, 0x21, 0x9b, 0x21, 0x25, 0xcb, 0x20, 0x10, 0xa1, 0xdb, 0x29, 0x00, 0x44, 0xc8, - 0x99, 0x5b, 0x94, 0x39, 0xf8, 0x18, 0x91, 0x31, 0xca, 0x8a, 0x35, 0x9c, 0x04, 0x9a, 0xba, 0x45, - 0x01, 0x99, 0x99, 0x8b, 0x38, 0x47, 0xbd, 0x41, 0x81, 0xaa, 0x28, 0x00, 0x01, 0x09, 0xb1, 0x1d, - 0x85, 0x8a, 0x50, 0xb1, 0x9c, 0x12, 0x32, 0xe9, 0x1a, 0x04, 0x1a, 0xe8, 0x29, 0x13, 0xc0, 0x2b, - 0x83, 0xab, 0x68, 0x91, 0x00, 0xaa, 0x72, 0x84, 0xac, 0x9a, 0x72, 0x02, 0x9a, 0x9b, 0x12, 0x8a, - 0x26, 0xc1, 0x0e, 0x02, 0x09, 0x22, 0xea, 0x19, 0x14, 0x99, 0xa0, 0x1c, 0x12, 0x10, 0x88, 0xc8, - 0x1c, 0x43, 0xa2, 0x9e, 0x02, 0x01, 0x22, 0xec, 0x09, 0x40, 0xb2, 0x40, 0xc9, 0x88, 0x11, 0x21, - 0xa2, 0x0c, 0xd9, 0x50, 0xb1, 0x2b, 0x12, 0x83, 0x9f, 0x91, 0x18, 0x19, 0x13, 0xb8, 0xbc, 0x70, - 0x83, 0x8b, 0xe1, 0x4a, 0x83, 0x98, 0x19, 0xc8, 0x70, 0xa2, 0x0b, 0x33, 0xd9, 0x09, 0x22, 0x80, - 0xd2, 0x2d, 0xa3, 0x9d, 0x02, 0x40, 0x83, 0xeb, 0x8b, 0x14, 0x82, 0x8c, 0x23, 0xba, 0x9b, 0x46, - 0xb2, 0x0d, 0x80, 0x41, 0xc0, 0x0a, 0x83, 0x28, 0x81, 0xa9, 0x30, 0xf8, 0x69, 0x92, 0x89, 0x8a, - 0x33, 0xa9, 0xaf, 0x33, 0x89, 0x42, 0xf8, 0x8b, 0x31, 0x01, 0x10, 0xc0, 0x1b, 0xc9, 0x64, 0xc9, - 0x20, 0x00, 0x91, 0x0b, 0x81, 0x48, 0x98, 0x92, 0x0c, 0x14, 0x9a, 0x31, 0xa4, 0xcf, 0x24, 0x98, - 0xa0, 0x8c, 0x12, 0x53, 0xd8, 0x88, 0x28, 0xd1, 0x29, 0x02, 0x89, 0x88, 0x31, 0xc0, 0x9c, 0x3a, - 0x67, 0x99, 0xaa, 0x28, 0x24, 0xb8, 0x8c, 0x22, 0x98, 0x23, 0x00, 0xcd, 0x99, 0x50, 0x22, 0xc3, - 0xbf, 0x31, 0x14, 0xab, 0x88, 0x31, 0xa9, 0x20, 0x90, 0x98, 0x4d, 0x06, 0xaa, 0xb9, 0x49, 0x16, - 0xa9, 0x09, 0x00, 0x10, 0x02, 0x88, 0xef, 0x31, 0x01, 0xb8, 0x29, 0xe8, 0x50, 0xa1, 0x09, 0xb8, - 0x52, 0xa9, 0x10, 0x02, 0xbc, 0x73, 0xb1, 0x89, 0x08, 0x82, 0x40, 0xa0, 0xca, 0x2d, 0x27, 0xab, - 0x08, 0x80, 0x02, 0x1a, 0x04, 0xcb, 0x89, 0x24, 0x98, 0x12, 0xcc, 0x28, 0x93, 0x8e, 0x14, 0x29, - 0xe0, 0x1b, 0x02, 0x31, 0xa9, 0x22, 0x9e, 0x02, 0x18, 0x00, 0xc8, 0x08, 0x38, 0xa6, 0x9f, 0x30, - 0x23, 0x91, 0xde, 0x29, 0x14, 0x98, 0x09, 0xb1, 0x0c, 0x25, 0x08, 0xdd, 0x30, 0x83, 0x80, 0xb9, - 0x09, 0x1a, 0x27, 0x08, 0xa8, 0xab, 0x38, 0x27, 0xd8, 0x8a, 0x21, 0x82, 0x28, 0xda, 0x80, 0x60, - 0xa2, 0x8d, 0x02, 0x9a, 0x11, 0x25, 0xec, 0x00, 0x20, 0x90, 0x08, 0x98, 0x10, 0x23, 0xa1, 0xcf, - 0x32, 0xb0, 0x2a, 0x25, 0xc9, 0x89, 0x08, 0x24, 0xad, 0x34, 0xab, 0x82, 0x0e, 0x04, 0x08, 0x08, - 0xca, 0x39, 0x22, 0xa2, 0xcb, 0x38, 0x13, 0xa3, 0xdf, 0x12, 0x99, 0x11, 0x48, 0xe2, 0x0b, 0x81, - 0x53, 0xa0, 0xaa, 0x3b, 0x07, 0x9a, 0x02, 0x99, 0x40, 0x85, 0xab, 0xea, 0x61, 0x80, 0x80, 0x08, - 0xb9, 0x4a, 0x06, 0x1b, 0xd1, 0x2a, 0x94, 0x09, 0x90, 0x18, 0xa1, 0x1a, 0x16, 0xcb, 0x18, 0x00, - 0x83, 0x49, 0xb2, 0x8f, 0x03, 0x09, 0x92, 0x28, 0xc8, 0x10, 0xa8, 0x38, 0x00, 0x06, 0x8f, 0x12, - 0x80, 0xbf, 0x53, 0xa1, 0x8b, 0x05, 0xa9, 0x19, 0x02, 0x14, 0xbe, 0x11, 0x21, 0xa9, 0x22, 0xfb, - 0x38, 0x90, 0x13, 0x8e, 0xc2, 0x3a, 0x04, 0x00, 0x98, 0xbd, 0x50, 0x02, 0x99, 0xa9, 0x34, 0xaa, - 0x84, 0x8d, 0x92, 0x69, 0x92, 0x08, 0xb9, 0xa9, 0x41, 0x35, 0xf9, 0x0b, 0x22, 0x01, 0xba, 0x90, - 0x38, 0x84, 0x88, 0x30, 0xde, 0x40, 0x92, 0x99, 0x01, 0xe8, 0x49, 0x94, 0x0b, 0x98, 0x63, 0xb0, - 0x1a, 0xa0, 0x58, 0x91, 0x08, 0xb0, 0x5b, 0xc2, 0x0a, 0x35, 0xca, 0x01, 0x29, 0xd9, 0x29, 0x13, - 0x10, 0xb8, 0x1a, 0xcf, 0x53, 0x82, 0xbd, 0x51, 0x91, 0xaa, 0x12, 0x00, 0x89, 0x03, 0xa9, 0xae, - 0x15, 0x18, 0x11, 0xe1, 0x8c, 0x28, 0x15, 0xaa, 0x0b, 0x33, 0x00, 0xa9, 0x1b, 0x23, 0xa9, 0x08, - 0x11, 0x28, 0xf8, 0x68, 0xa8, 0x11, 0xcf, 0x44, 0xa9, 0x09, 0x89, 0x17, 0x8a, 0x80, 0x98, 0x28, - 0xa2, 0x1b, 0x13, 0x1b, 0xd1, 0x30, 0xbc, 0x35, 0x8b, 0x83, 0xa8, 0xbd, 0x79, 0x24, 0xc1, 0xac, - 0x10, 0x24, 0xc8, 0x08, 0xa8, 0x48, 0x22, 0xd0, 0x0c, 0x03, 0x08, 0x80, 0x80, 0xbd, 0x31, 0x22, - 0x07, 0xaf, 0x82, 0x48, 0x91, 0xba, 0x18, 0x51, 0xb2, 0x9a, 0x23, 0xca, 0x41, 0x98, 0x80, 0x89, - 0x23, 0x3b, 0xc7, 0x0d, 0x82, 0x28, 0x94, 0xad, 0x31, 0xa2, 0x2b, 0xc1, 0x29, 0x42, 0xea, 0x58, - 0xb1, 0x1b, 0x03, 0xba, 0x51, 0xa1, 0x11, 0x9a, 0xca, 0x08, 0x74, 0x82, 0xb9, 0x9c, 0x41, 0x08, - 0x04, 0x8d, 0x81, 0x81, 0xbb, 0x44, 0x08, 0xc1, 0x28, 0xe9, 0x30, 0xca, 0x61, 0x92, 0xab, 0x98, - 0x30, 0x12, 0x81, 0xaa, 0x3a, 0x47, 0xac, 0x29, 0x93, 0x1a, 0x31, 0x90, 0xa1, 0xff, 0x33, 0xa0, - 0x8b, 0x84, 0x9b, 0x15, 0x99, 0x08, 0x29, 0x04, 0xcb, 0x49, 0xc0, 0x18, 0x49, 0x95, 0x9b, 0x10, - 0x91, 0x1a, 0x22, 0xa9, 0x22, 0xbb, 0x1d, 0xa2, 0x2f, 0x47, 0xaa, 0x99, 0x21, 0xd1, 0x3c, 0x06, - 0x89, 0x88, 0x11, 0xbc, 0x41, 0x98, 0x33, 0xcc, 0x08, 0x82, 0x29, 0x15, 0xae, 0x18, 0x12, 0x88, - 0x99, 0x8a, 0x13, 0x01, 0xb4, 0x4c, 0xf8, 0x39, 0x84, 0x1b, 0x81, 0x09, 0x42, 0xfa, 0x5b, 0x82, - 0x08, 0x99, 0x92, 0x0b, 0x14, 0x1b, 0x94, 0x1b, 0xc8, 0x28, 0x83, 0xaa, 0xcc, 0x72, 0x95, 0xad, - 0x41, 0x98, 0x08, 0x82, 0x19, 0x18, 0xb9, 0x50, 0xb9, 0x43, 0xca, 0x32, 0x90, 0xfb, 0x48, 0x82, - 0x00, 0xba, 0x00, 0x4a, 0xa4, 0xaa, 0x70, 0xa2, 0x19, 0xb2, 0x9f, 0x15, 0x9a, 0x23, 0x9b, 0xa8, - 0x59, 0x80, 0x80, 0xac, 0x63, 0xa1, 0x9c, 0x01, 0x88, 0x64, 0xb0, 0x8a, 0x88, 0x08, 0x54, 0x90, - 0xc0, 0x1c, 0x23, 0x91, 0xba, 0x8f, 0x26, 0x99, 0x80, 0x89, 0x1a, 0x13, 0xc8, 0x38, 0xa9, 0xb3, - 0x4f, 0x02, 0xc8, 0x2b, 0x33, 0xd0, 0xab, 0x69, 0x83, 0x28, 0xbc, 0x04, 0x0a, 0x92, 0x19, 0x15, - 0x99, 0xcb, 0x52, 0x10, 0xe0, 0x19, 0x01, 0x98, 0x1a, 0x01, 0x58, 0xd1, 0x8d, 0x23, 0x82, 0xbe, - 0x31, 0x11, 0xa9, 0x9a, 0x31, 0xa0, 0x40, 0x10, 0xe0, 0x38, 0xc0, 0x58, 0x93, 0xaa, 0xbd, 0x72, - 0x84, 0x9c, 0x08, 0x41, 0xa1, 0x8b, 0x81, 0x2a, 0x95, 0x28, 0x99, 0xd0, 0x0c, 0x53, 0x91, 0xb0, - 0x9f, 0x23, 0x03, 0x9c, 0xa8, 0x58, 0x00, 0x00, 0xa0, 0x8b, 0x0b, 0x27, 0x3a, 0xc4, 0x8b, 0x08, - 0x32, 0xc3, 0x0b, 0x40, 0xb4, 0x8d, 0x08, 0x14, 0xa9, 0x1a, 0x07, 0xa9, 0x99, 0xa1, 0x73, 0xc1, - 0x10, 0x9a, 0xb1, 0x5a, 0x03, 0x82, 0xdc, 0x19, 0x05, 0x98, 0x09, 0x08, 0x22, 0x11, 0xfb, 0x1a, - 0x18, 0x34, 0xa1, 0x9e, 0xa8, 0x51, 0x80, 0x12, 0xdb, 0x28, 0xb2, 0x60, 0xb0, 0x8c, 0x43, 0x98, - 0x98, 0xc9, 0x58, 0x93, 0x19, 0x11, 0xfc, 0x20, 0x80, 0x01, 0xaa, 0x08, 0x34, 0xb1, 0x9d, 0x90, - 0x50, 0x11, 0x94, 0x8f, 0x81, 0x09, 0x33, 0xa0, 0x8c, 0xc9, 0x39, 0x17, 0x98, 0xa8, 0x18, 0x18, - 0xc3, 0x1c, 0x13, 0xc0, 0x1a, 0x19, 0x07, 0x0d, 0x90, 0x42, 0xa8, 0xba, 0x60, 0x91, 0x1b, 0x87, - 0x8a, 0xa0, 0x11, 0x21, 0xaa, 0x93, 0x1c, 0x11, 0xa5, 0x2c, 0xe0, 0x29, 0x02, 0x84, 0xad, 0x48, - 0x81, 0xa8, 0x40, 0xd8, 0x18, 0x08, 0x81, 0x30, 0xca, 0x11, 0x98, 0x39, 0xa6, 0x0c, 0x21, 0xa2, - 0x3a, 0x91, 0x85, 0xaf, 0x49, 0x04, 0x98, 0x9d, 0x02, 0x12, 0x9b, 0x12, 0xb8, 0x2d, 0x91, 0x42, - 0xb9, 0xa9, 0x30, 0x2a, 0x17, 0x8f, 0x20, 0x82, 0x8b, 0x29, 0x93, 0x10, 0x1b, 0x97, 0xab, 0x42, - 0x99, 0x06, 0xbb, 0x20, 0xa0, 0x8e, 0x27, 0xaa, 0x98, 0x30, 0x89, 0x04, 0x8a, 0x18, 0x9a, 0x17, - 0x1f, 0xa2, 0x89, 0x28, 0x03, 0x8c, 0xa2, 0x0c, 0x06, 0x19, 0x94, 0x9d, 0x32, 0xe0, 0x39, 0xa2, - 0x0d, 0x41, 0x81, 0xaa, 0x8a, 0x02, 0x40, 0x82, 0xea, 0x0a, 0x18, 0x15, 0xa0, 0x1b, 0xe1, 0x2a, - 0x74, 0xc0, 0x0a, 0x11, 0x11, 0xa1, 0x8f, 0x01, 0x00, 0x10, 0x01, 0xd8, 0x8d, 0x11, 0x24, 0x9a, - 0xa9, 0x30, 0xa1, 0x0b, 0x16, 0xab, 0x00, 0x81, 0x51, 0xea, 0x20, 0x21, 0xaa, 0x14, 0xad, 0x81, - 0x48, 0x92, 0x89, 0x9b, 0x82, 0x51, 0xb0, 0x61, 0xda, 0x28, 0x10, 0x81, 0xcc, 0x19, 0x37, 0xb9, - 0x18, 0xb1, 0x8f, 0x22, 0x12, 0xc8, 0x2a, 0x90, 0x9a, 0x62, 0x83, 0xe8, 0x2a, 0xb3, 0x20, 0xa8, - 0x39, 0x07, 0x8d, 0x08, 0x00, 0x00, 0x0c, 0x17, 0xa9, 0x8c, 0x32, 0xa0, 0x29, 0xa0, 0x2a, 0x84, - 0xcb, 0x30, 0x52, 0xf8, 0x49, 0x81, 0x99, 0x09, 0x28, 0x04, 0xa9, 0x8c, 0x80, 0x63, 0xa8, 0xa9, - 0x46, 0xcb, 0x00, 0x01, 0x00, 0xb0, 0x38, 0x00, 0xa3, 0xac, 0x0e, 0x07, 0x99, 0x40, 0xc0, 0x18, - 0x99, 0x41, 0x93, 0x8c, 0xa8, 0x59, 0x92, 0x89, 0x99, 0x43, 0xc8, 0x08, 0x9b, 0x27, 0x0b, 0x91, - 0x31, 0xf9, 0x8d, 0x24, 0x00, 0x80, 0xc9, 0x09, 0x20, 0x06, 0x9a, 0x89, 0x04, 0xab, 0x30, 0xa4, - 0x0c, 0xb0, 0x73, 0x00, 0xda, 0x09, 0x43, 0x00, 0xea, 0x28, 0x91, 0x89, 0x50, 0xa3, 0x9c, 0x20, - 0x91, 0x2b, 0x96, 0x0b, 0x02, 0x01, 0xc8, 0x8c, 0x21, 0x15, 0x9c, 0x80, 0x40, 0xd9, 0x09, 0x73, - 0x90, 0xbb, 0x52, 0xa1, 0xab, 0x23, 0x48, 0xd0, 0x09, 0x30, 0x98, 0x80, 0x28, 0x98, 0xa3, 0x0f, - 0x80, 0x06, 0x3b, 0xb2, 0x9c, 0x99, 0x32, 0xa0, 0x73, 0xa1, 0x9e, 0x11, 0x01, 0x91, 0x99, 0x19, - 0x98, 0x35, 0xc9, 0x6a, 0x84, 0xaa, 0x18, 0xa9, 0x80, 0x44, 0x89, 0xa0, 0x0b, 0x9d, 0x47, 0xbb, - 0x08, 0x05, 0x89, 0x32, 0xfb, 0x29, 0x01, 0x01, 0x9b, 0x43, 0xfa, 0x49, 0x02, 0xb9, 0x39, 0x81, - 0xa1, 0x40, 0xdc, 0x22, 0x11, 0xea, 0x2a, 0x05, 0xab, 0x01, 0x21, 0x90, 0x9c, 0x53, 0xb9, 0x08, - 0x03, 0x9d, 0x33, 0xe9, 0x19, 0x24, 0xe0, 0x0a, 0x33, 0xc9, 0x20, 0x10, 0xd2, 0x1c, 0x02, 0x98, - 0x08, 0x01, 0x8b, 0x15, 0xc9, 0x2e, 0x85, 0x1b, 0x93, 0x9a, 0x88, 0x43, 0xc9, 0x58, 0xc0, 0x1a, - 0x04, 0x88, 0x80, 0x9a, 0x09, 0x42, 0x90, 0x09, 0xd3, 0x3c, 0xa3, 0x24, 0xcf, 0x31, 0x10, 0xc8, - 0x10, 0x01, 0xa9, 0xba, 0x56, 0x9a, 0x90, 0x48, 0x80, 0xd2, 0x1e, 0x12, 0x81, 0xab, 0x51, 0xd0, - 0x29, 0x01, 0xa3, 0x0d, 0x08, 0xc1, 0x41, 0x08, 0xb3, 0x0e, 0xa2, 0x19, 0x22, 0x84, 0xbe, 0x41, - 0x81, 0xb8, 0x28, 0xbb, 0x64, 0x90, 0x81, 0x8b, 0xb8, 0x58, 0x23, 0xc2, 0xaf, 0x02, 0x40, 0xb1, - 0x8a, 0x80, 0x28, 0x11, 0xaa, 0xa0, 0x0b, 0x75, 0x96, 0xac, 0x30, 0xa0, 0x40, 0xa0, 0x19, 0xa8, - 0x58, 0x93, 0xac, 0x01, 0x39, 0x84, 0x02, 0xdf, 0x21, 0x81, 0x89, 0x20, 0xc8, 0x09, 0x19, 0x15, - 0xab, 0x11, 0x21, 0xec, 0x18, 0x23, 0x98, 0x18, 0xf8, 0x3a, 0x34, 0xc1, 0x9d, 0x41, 0xb3, 0x0c, - 0x81, 0x88, 0x08, 0x23, 0xe9, 0x28, 0x89, 0x06, 0x9a, 0x81, 0xaa, 0x71, 0x85, 0xbc, 0x28, 0x01, - 0x92, 0x50, 0xfa, 0x08, 0x41, 0xa1, 0x9a, 0x29, 0x91, 0x50, 0x90, 0xab, 0x28, 0x24, 0xb9, 0x10, - 0xc8, 0x1d, 0x27, 0xa8, 0xaa, 0x21, 0x38, 0xb1, 0xcb, 0x3c, 0x07, 0x9a, 0x32, 0xda, 0x10, 0x21, - 0xa0, 0x0a, 0xeb, 0x52, 0x93, 0x0c, 0xa0, 0x19, 0x90, 0x40, 0x03, 0xcc, 0x38, 0x92, 0x8b, 0x17, - 0xba, 0x40, 0xc0, 0x49, 0xa1, 0x20, 0xab, 0x13, 0x8d, 0x31, 0xd4, 0x2c, 0x83, 0x9c, 0x13, 0x9a, - 0x04, 0x9d, 0x31, 0xa3, 0x9e, 0x51, 0x82, 0x9c, 0x28, 0x91, 0x12, 0x8a, 0xc0, 0x8d, 0x35, 0xb8, - 0x18, 0x08, 0xfa, 0x51, 0x91, 0xaa, 0x29, 0x13, 0x9a, 0x15, 0xcd, 0x31, 0x00, 0xb9, 0x13, 0x9b, - 0x12, 0x82, 0xa9, 0x8f, 0x17, 0x0a, 0xa0, 0x29, 0xb9, 0x35, 0xb1, 0x1a, 0xb8, 0xaa, 0x75, 0xb3, - 0xab, 0x29, 0x14, 0x99, 0xb9, 0x5a, 0x95, 0x2b, 0x80, 0xb3, 0x1e, 0x98, 0x14, 0x18, 0xb9, 0x8a, - 0x45, 0x99, 0xa0, 0x5b, 0x02, 0x93, 0x9f, 0x11, 0x91, 0x02, 0x9b, 0x87, 0x8d, 0xa0, 0x72, 0xb2, - 0x9b, 0x09, 0x43, 0xc2, 0x3b, 0x83, 0xea, 0x3a, 0x04, 0xa8, 0x4a, 0x82, 0xdb, 0x59, 0x91, 0x19, - 0x20, 0xa8, 0x38, 0xba, 0x82, 0x5a, 0xb5, 0x2d, 0x12, 0xa1, 0x9f, 0x21, 0xa0, 0x08, 0x22, 0x9a, - 0x91, 0x2b, 0x97, 0x1d, 0x83, 0x8c, 0x22, 0x8a, 0x82, 0xc0, 0x5b, 0x04, 0xfa, 0x29, 0x21, 0xb2, - 0x1c, 0x10, 0x81, 0x9c, 0x42, 0x93, 0x9e, 0x0a, 0x17, 0x09, 0xaa, 0x00, 0x41, 0xa0, 0x18, 0xa1, - 0x8d, 0x80, 0x71, 0xb2, 0x0d, 0x08, 0x22, 0x99, 0xa2, 0x0e, 0x03, 0x08, 0x89, 0x20, 0xd0, 0x48, - 0x85, 0xbc, 0x51, 0xb9, 0x52, 0xa9, 0x98, 0x40, 0xb2, 0x2a, 0xa1, 0xea, 0x5a, 0x25, 0xb9, 0x99, - 0x10, 0xab, 0x47, 0x99, 0x88, 0x98, 0x20, 0x8a, 0x17, 0xac, 0x11, 0x01, 0x09, 0x81, 0xac, 0x32, - 0x13, 0xfa, 0x1b, 0x14, 0x99, 0x28, 0x13, 0xcf, 0x00, 0x31, 0x03, 0xdc, 0x18, 0x12, 0x09, 0xa1, - 0x2b, 0xb1, 0x30, 0x40, 0x96, 0xce, 0x28, 0x25, 0xb9, 0x1b, 0x01, 0x08, 0x13, 0x80, 0xad, 0xc0, - 0x7a, 0x94, 0x89, 0x98, 0x28, 0xa2, 0x09, 0x40, 0xe0, 0x08, 0x22, 0x89, 0xa2, 0x0d, 0x23, 0x9a, - 0xab, 0x55, 0xa3, 0x9f, 0x23, 0xc9, 0x2a, 0x14, 0xba, 0x20, 0xa4, 0x8c, 0x00, 0x23, 0xb8, 0x1b, - 0xf1, 0x39, 0x32, 0xc2, 0x09, 0xac, 0x90, 0x65, 0x98, 0x98, 0x08, 0x41, 0xc0, 0x18, 0xa1, 0x1c, - 0x04, 0x21, 0xfb, 0x0d, 0x24, 0xa0, 0x09, 0xa8, 0x52, 0xd8, 0x28, 0x01, 0xaa, 0x11, 0x11, 0xe0, - 0x8c, 0x13, 0x41, 0xd8, 0x09, 0x88, 0x41, 0xb0, 0x40, 0x91, 0xbc, 0x30, 0x05, 0xbc, 0x53, 0xa8, - 0x19, 0x11, 0xf9, 0x38, 0x93, 0x0a, 0x90, 0x29, 0xf1, 0x29, 0x81, 0x51, 0xc1, 0x9b, 0x88, 0x51, - 0x01, 0xa0, 0x88, 0x0c, 0xa3, 0x3c, 0x01, 0xa2, 0x69, 0x92, 0xbf, 0x42, 0xa0, 0x41, 0xa0, 0xc9, - 0x1e, 0x23, 0x02, 0xad, 0x80, 0x28, 0x22, 0xaa, 0xaa, 0x23, 0x18, 0x92, 0x55, 0xfb, 0x2d, 0x03, - 0x18, 0xdb, 0x20, 0x01, 0xb0, 0x2a, 0x15, 0xba, 0x32, 0xb0, 0x9f, 0x05, 0x19, 0x84, 0xaa, 0x0b, - 0x33, 0x90, 0x1a, 0xd0, 0x01, 0x5b, 0xc5, 0x2b, 0x81, 0x12, 0xac, 0x81, 0x88, 0x41, 0x90, 0xd8, - 0x6a, 0x02, 0xb8, 0x10, 0xbd, 0x51, 0x84, 0x0a, 0xb0, 0x1b, 0x20, 0x16, 0x90, 0xbc, 0x2b, 0x17, - 0x89, 0xa3, 0x1e, 0x84, 0x9a, 0x18, 0x80, 0x80, 0x0b, 0x37, 0xdc, 0x31, 0xa8, 0x31, 0xda, 0x08, - 0x41, 0xb2, 0x1b, 0x98, 0x30, 0x88, 0x02, 0x3a, 0xf4, 0x1c, 0x32, 0x90, 0x88, 0xdb, 0x38, 0x93, - 0x8b, 0x35, 0xa8, 0xbc, 0x91, 0x60, 0x22, 0xcc, 0x32, 0xbf, 0x33, 0x80, 0x99, 0xa3, 0x1c, 0x12, - 0x90, 0x31, 0xd9, 0x9a, 0x50, 0x24, 0xed, 0x41, 0x90, 0x89, 0x88, 0x08, 0x81, 0x70, 0xa9, 0x88, - 0x40, 0xb0, 0x1a, 0x94, 0x8d, 0x34, 0xba, 0x28, 0x91, 0x9e, 0x35, 0xb8, 0x8a, 0x11, 0x08, 0x84, - 0x8c, 0x23, 0x0a, 0xfb, 0x52, 0x80, 0xaa, 0x08, 0x32, 0xc9, 0x08, 0x31, 0xc2, 0x8f, 0x14, 0xac, - 0x24, 0xb9, 0x81, 0x9a, 0x73, 0x91, 0x9b, 0x11, 0xa8, 0x19, 0x43, 0xa1, 0x0a, 0xdc, 0x62, 0xa1, - 0x89, 0x80, 0x02, 0xb0, 0x4c, 0xa4, 0x3c, 0xa2, 0x9a, 0x09, 0x21, 0x07, 0x8e, 0x02, 0x89, 0x13, - 0xad, 0x22, 0xb9, 0x2b, 0x35, 0xa1, 0xad, 0x31, 0xa8, 0x90, 0x51, 0xa1, 0x51, 0xba, 0x98, 0x11, - 0x7a, 0xd2, 0x38, 0xba, 0x88, 0x55, 0xa9, 0x89, 0x08, 0x82, 0x31, 0xe9, 0x8b, 0x25, 0x20, 0xf8, - 0x39, 0xa9, 0x11, 0x80, 0x31, 0xf9, 0x3a, 0x13, 0xd9, 0x50, 0xd9, 0x20, 0x01, 0xb8, 0x10, 0x0a, - 0xb4, 0x5b, 0xa2, 0x1b, 0x02, 0x18, 0xa4, 0xbf, 0x52, 0x02, 0x99, 0x8b, 0xc0, 0x49, 0x22, 0x02, - 0xcb, 0xa9, 0x9a, 0x72, 0x87, 0x9b, 0x22, 0xba, 0x09, 0x34, 0xc8, 0x18, 0xa1, 0x03, 0xaf, 0x04, - 0x18, 0xb8, 0x42, 0xca, 0x32, 0xac, 0x35, 0xb9, 0xab, 0x52, 0x12, 0xca, 0x09, 0x11, 0x22, 0xa1, - 0xbf, 0x10, 0x08, 0x62, 0xb1, 0x1c, 0xa1, 0x8a, 0x13, 0x70, 0xda, 0x38, 0x84, 0x9b, 0x89, 0x24, - 0x01, 0xca, 0x0a, 0x15, 0xc9, 0x58, 0xa3, 0x0a, 0xb8, 0x71, 0xc1, 0x8b, 0x31, 0x20, 0xc1, 0x9b, - 0x41, 0xa2, 0x2b, 0x85, 0x9b, 0xaa, 0x55, 0xd9, 0x30, 0x90, 0x21, 0xb0, 0xbf, 0x51, 0x82, 0x98, - 0x2a, 0xb1, 0x29, 0x20, 0x84, 0xde, 0x38, 0x92, 0x43, 0xdb, 0x08, 0x01, 0x10, 0xb1, 0x0c, 0x02, - 0x3a, 0xb1, 0x88, 0x7a, 0xc3, 0x4b, 0xc3, 0x0b, 0x32, 0xa8, 0x48, 0xe1, 0x1b, 0x22, 0xd3, 0x4c, - 0xb1, 0x80, 0x1b, 0x07, 0x8a, 0x82, 0x19, 0x93, 0x9f, 0x30, 0x03, 0x9d, 0x80, 0x49, 0x94, 0x8a, - 0x99, 0x02, 0x99, 0x37, 0x8e, 0x93, 0x9d, 0x42, 0x82, 0xbc, 0x28, 0x12, 0x90, 0x99, 0x21, 0x8a, - 0xb2, 0x71, 0x98, 0xb9, 0x5b, 0x25, 0xb1, 0xaf, 0x30, 0x13, 0x9a, 0x89, 0x99, 0x52, 0x92, 0x8b, - 0xc2, 0x0d, 0x16, 0x88, 0x9a, 0xa8, 0x38, 0x16, 0xb8, 0xb9, 0x48, 0x92, 0x13, 0x8a, 0xf9, 0x3a, - 0x17, 0x0b, 0xb8, 0x30, 0x83, 0x89, 0xac, 0x23, 0x11, 0xbf, 0x54, 0x9a, 0x00, 0x89, 0x21, 0x92, - 0xcf, 0x52, 0x90, 0xa8, 0x28, 0x80, 0xb8, 0x48, 0x82, 0x10, 0xfb, 0x10, 0x10, 0x18, 0x88, 0x11, - 0xb8, 0xef, 0x51, 0x82, 0xba, 0x30, 0x89, 0x12, 0xda, 0x49, 0x82, 0x08, 0x10, 0xe9, 0x99, 0x3a, - 0x17, 0x08, 0xd0, 0x8c, 0x14, 0x80, 0x88, 0xa0, 0x49, 0xa3, 0x1b, 0xc3, 0x1c, 0x13, 0x10, 0xd8, - 0x9c, 0x48, 0x16, 0xaa, 0x18, 0x89, 0x10, 0x30, 0xd0, 0x01, 0xad, 0x44, 0xa0, 0x8c, 0x18, 0x14, - 0x99, 0x81, 0xb8, 0x4a, 0x90, 0x20, 0x01, 0xea, 0x38, 0x91, 0x92, 0xae, 0x71, 0xc4, 0x0c, 0x13, - 0x8a, 0x12, 0xba, 0x69, 0x93, 0xab, 0x10, 0x40, 0xc1, 0x18, 0x88, 0xb8, 0x39, 0x85, 0x29, 0xea, - 0x2b, 0x26, 0x90, 0x9d, 0x00, 0x32, 0xc1, 0x19, 0xd0, 0x19, 0x12, 0x58, 0xa1, 0xae, 0x31, 0x01, - 0x01, 0xcd, 0x30, 0x83, 0x8b, 0xb4, 0x3d, 0x85, 0x0a, 0xb1, 0x0b, 0x31, 0x98, 0x73, 0xe0, 0x19, - 0xa9, 0x25, 0x9a, 0x80, 0x28, 0x90, 0x21, 0xeb, 0x28, 0x24, 0xd8, 0x1a, 0x88, 0x21, 0x01, 0x90, - 0x3a, 0x97, 0x8f, 0x03, 0x88, 0x8b, 0x35, 0xc9, 0x00, 0x9c, 0x83, 0x61, 0xb0, 0xab, 0x44, 0xb8, - 0x1a, 0x24, 0xa9, 0x00, 0xa9, 0x9a, 0x15, 0x0e, 0x04, 0x08, 0xc0, 0x8a, 0x24, 0x18, 0xd0, 0x29, - 0x20, 0xb4, 0x8f, 0x01, 0x13, 0xa9, 0x09, 0x80, 0x99, 0x39, 0xa4, 0x73, 0xe4, 0x0b, 0x12, 0xa8, - 0x19, 0x14, 0x0a, 0xd1, 0x3b, 0xc1, 0x41, 0x88, 0x81, 0x8a, 0xb0, 0x10, 0xdd, 0x76, 0xa0, 0x8a, - 0x00, 0xa1, 0x30, 0xb1, 0x20, 0xdb, 0x31, 0x90, 0x02, 0xbf, 0x42, 0x83, 0xac, 0x80, 0x98, 0x60, - 0x03, 0xba, 0x2a, 0xc9, 0x41, 0x09, 0x03, 0x0b, 0x80, 0xbb, 0x45, 0xc8, 0x9a, 0x55, 0xa3, 0xad, - 0x10, 0x11, 0x80, 0x10, 0xeb, 0x31, 0xb9, 0x1c, 0x27, 0xab, 0x82, 0x19, 0x90, 0x10, 0xc8, 0x78, - 0xa0, 0x01, 0x8a, 0x9a, 0x40, 0x43, 0xa1, 0x8f, 0x83, 0x9e, 0x33, 0x88, 0xc1, 0x29, 0x98, 0x12, - 0x9a, 0xc8, 0x74, 0xc0, 0x19, 0xa2, 0x3b, 0x83, 0x88, 0x10, 0xd0, 0x0c, 0x22, 0x96, 0x9e, 0x22, - 0x80, 0x98, 0x10, 0xab, 0x34, 0xb9, 0x30, 0xb9, 0x92, 0x8f, 0x34, 0x08, 0xd1, 0x8c, 0x81, 0x73, - 0xd1, 0x1a, 0x12, 0xb9, 0x10, 0x10, 0x81, 0x9e, 0x13, 0x8b, 0x27, 0xad, 0x10, 0x13, 0xcb, 0x42, - 0xaa, 0x12, 0x09, 0x91, 0xa8, 0x1c, 0x84, 0x1a, 0x85, 0x8d, 0x82, 0x3b, 0x06, 0xaa, 0x0c, 0x06, - 0x89, 0x90, 0x18, 0xa2, 0x00, 0x0d, 0x25, 0xbb, 0x89, 0x63, 0x01, 0xd9, 0x09, 0x81, 0x40, 0xd1, - 0x4b, 0xa4, 0x0c, 0x92, 0x18, 0x03, 0xab, 0x00, 0x18, 0x21, 0xfb, 0x7a, 0x92, 0x9b, 0x00, 0x25, - 0xac, 0x31, 0x90, 0x8b, 0x82, 0x0b, 0x44, 0x81, 0xbf, 0x52, 0x88, 0x88, 0x80, 0x8b, 0x24, 0xa8, - 0x29, 0xb1, 0x9f, 0x42, 0x01, 0xd8, 0x19, 0x01, 0x08, 0x93, 0x9f, 0x42, 0x90, 0x89, 0x0a, 0x07, - 0x0e, 0x83, 0x0a, 0x08, 0xa1, 0x49, 0xa2, 0x1a, 0x93, 0x8b, 0x29, 0x95, 0x0b, 0x81, 0x51, 0xf0, - 0x18, 0x8a, 0x94, 0x8b, 0x45, 0xa9, 0x01, 0x8c, 0x09, 0x27, 0x99, 0x09, 0x91, 0x9f, 0x14, 0x18, - 0x88, 0xc8, 0x3a, 0x24, 0xe9, 0x28, 0x01, 0xa8, 0x19, 0x18, 0xb0, 0x78, 0xd8, 0x48, 0x93, 0x9c, - 0x00, 0x81, 0x20, 0xb0, 0x38, 0xb0, 0x8b, 0xad, 0x47, 0x81, 0x9f, 0x22, 0x98, 0x88, 0x19, 0x11, - 0x12, 0xb9, 0x9c, 0x10, 0x43, 0x91, 0x0a, 0xfa, 0x28, 0x28, 0x03, 0xa8, 0xce, 0x51, 0xa2, 0x8a, - 0xb9, 0x58, 0x03, 0x39, 0xf3, 0x0f, 0x03, 0x8a, 0x22, 0xba, 0x30, 0xa0, 0x1b, 0x26, 0xcb, 0x38, - 0x25, 0xe9, 0x1a, 0x10, 0x31, 0x90, 0xbb, 0x0b, 0x17, 0xbb, 0x63, 0xb8, 0x18, 0x90, 0x19, 0x23, - 0xdd, 0x09, 0x63, 0xb1, 0x8a, 0x11, 0x90, 0x2a, 0x84, 0x09, 0xaa, 0x90, 0x78, 0x15, 0xa8, 0xae, - 0x42, 0xb9, 0x31, 0x98, 0x01, 0x8a, 0x12, 0x49, 0xf0, 0x8b, 0x72, 0xa1, 0x9a, 0x28, 0x93, 0x2a, - 0x86, 0xae, 0x10, 0x21, 0x01, 0x91, 0xae, 0x28, 0x16, 0x99, 0x8a, 0xa0, 0x69, 0x93, 0x1c, 0x91, - 0x8b, 0x40, 0x84, 0x9b, 0x18, 0x82, 0x20, 0xd8, 0x0c, 0x04, 0x01, 0x9b, 0x19, 0x87, 0x0e, 0x05, - 0x9a, 0x88, 0x02, 0x29, 0xc0, 0x20, 0xbb, 0x52, 0xa0, 0x80, 0x1b, 0xd0, 0x73, 0x98, 0x00, 0xa8, - 0x2a, 0x82, 0x30, 0x9a, 0xc2, 0x48, 0xec, 0x73, 0xc0, 0x39, 0x90, 0x09, 0x12, 0xf8, 0x38, 0xa2, - 0x9a, 0x3b, 0x07, 0x0d, 0x80, 0x22, 0xb9, 0x18, 0x19, 0x24, 0xfa, 0x09, 0x22, 0x88, 0x88, 0x28, - 0xb0, 0x8d, 0x43, 0x22, 0xe8, 0x9c, 0x42, 0x82, 0x8a, 0x10, 0xe9, 0x28, 0x98, 0x85, 0x1b, 0xa2, - 0x09, 0x21, 0xb3, 0xbf, 0x06, 0x9a, 0x02, 0x20, 0xe8, 0x39, 0xd1, 0x28, 0x15, 0xaa, 0x89, 0x83, - 0x3a, 0xa2, 0x06, 0x8f, 0x92, 0x19, 0x13, 0xda, 0x20, 0x02, 0xda, 0x2a, 0x85, 0x0a, 0x31, 0xc1, - 0x8e, 0x01, 0x08, 0x34, 0xc9, 0xbc, 0x43, 0x00, 0xa1, 0x1b, 0x91, 0x38, 0x95, 0x8d, 0x90, 0x80, - 0x79, 0x96, 0x8a, 0x90, 0x10, 0x91, 0x20, 0xa8, 0xa0, 0x4a, 0xe1, 0x58, 0x80, 0x0a, 0x10, 0xf0, - 0x2a, 0x84, 0x18, 0xb8, 0x08, 0x99, 0x35, 0xad, 0x23, 0x80, 0xdb, 0x49, 0x81, 0x20, 0xd8, 0x30, - 0x88, 0xa8, 0x60, 0xa1, 0xbb, 0x59, 0x16, 0xc8, 0x2a, 0xa0, 0x49, 0x13, 0xca, 0x18, 0xc0, 0x3a, - 0x23, 0x95, 0xaf, 0x12, 0x18, 0xc1, 0x1b, 0x12, 0x23, 0xcb, 0xa1, 0x2d, 0x93, 0x40, 0xa2, 0xbe, - 0x30, 0x84, 0x29, 0xc3, 0x8e, 0x11, 0x12, 0xca, 0x41, 0xfa, 0x48, 0x01, 0x98, 0x0c, 0x91, 0x30, - 0x80, 0x82, 0x8e, 0x03, 0xaa, 0x21, 0x19, 0x94, 0x0b, 0xe8, 0x30, 0x81, 0x99, 0x62, 0xc0, 0x0c, - 0x82, 0x38, 0xe8, 0x41, 0x99, 0x12, 0xad, 0x22, 0x81, 0xd9, 0x78, 0xa1, 0x8a, 0x10, 0xa3, 0x09, - 0xa0, 0x79, 0xb1, 0x1a, 0xba, 0x47, 0x98, 0x88, 0x19, 0xc8, 0x4a, 0x14, 0xc8, 0x1a, 0xa1, 0x68, - 0xb3, 0x0b, 0x90, 0x48, 0xa8, 0x22, 0xd9, 0x2b, 0x16, 0xa8, 0x80, 0xda, 0x61, 0x92, 0x9b, 0x88, - 0x63, 0xb8, 0x00, 0x88, 0x9a, 0x36, 0xca, 0x20, 0xc1, 0x8b, 0x73, 0x92, 0x8c, 0x90, 0x28, 0x20, - 0xa0, 0x89, 0x80, 0x99, 0x50, 0x24, 0xfa, 0x3a, 0x81, 0x80, 0x09, 0x9a, 0x47, 0xc9, 0x89, 0x22, - 0xb1, 0x8a, 0x31, 0xb2, 0x1d, 0x96, 0x2b, 0xc3, 0x29, 0x9a, 0x26, 0xb8, 0x2b, 0x07, 0xac, 0x21, - 0x90, 0x00, 0x10, 0xc9, 0x2b, 0x15, 0x99, 0x24, 0xdd, 0x29, 0x23, 0xaa, 0x10, 0xab, 0x72, 0xa2, - 0x8a, 0x89, 0x28, 0x82, 0x37, 0xf9, 0x0a, 0x02, 0x20, 0xa1, 0x0c, 0x00, 0x31, 0xd1, 0x8d, 0x13, - 0x8a, 0x25, 0xad, 0x81, 0x19, 0x13, 0x8a, 0xc2, 0x9f, 0x25, 0xb1, 0x1b, 0x80, 0x20, 0x91, 0x8a, - 0x90, 0x62, 0xea, 0x30, 0x14, 0xfb, 0x39, 0x83, 0x9b, 0x32, 0xa2, 0x8e, 0x81, 0x80, 0x19, 0x84, - 0x8c, 0x03, 0xba, 0x01, 0x78, 0xc1, 0x3a, 0xb2, 0x8c, 0x24, 0xd9, 0x58, 0xb3, 0x1c, 0x91, 0x18, - 0x89, 0x33, 0xe9, 0x29, 0x84, 0x89, 0x10, 0xc9, 0x80, 0x5b, 0x07, 0xaa, 0x10, 0x0a, 0x82, 0x32, - 0xdb, 0x08, 0x8c, 0x25, 0xb0, 0x9a, 0x21, 0xa1, 0x39, 0xf3, 0x0d, 0x16, 0xb9, 0x39, 0x85, 0x9c, - 0x18, 0x42, 0xc9, 0x29, 0x04, 0xba, 0x20, 0x98, 0x22, 0x21, 0xfb, 0x3b, 0x86, 0xab, 0x24, 0xa8, - 0x09, 0x81, 0x99, 0x11, 0x91, 0x63, 0xa1, 0xef, 0x30, 0x12, 0xaa, 0x89, 0x80, 0x20, 0x92, 0x08, - 0xc9, 0x4a, 0x86, 0x18, 0xc0, 0x1b, 0x00, 0x43, 0xd9, 0x31, 0xcc, 0x73, 0xa8, 0x8a, 0x22, 0xb9, - 0x42, 0x09, 0xb1, 0x0c, 0x30, 0x03, 0xb8, 0xcf, 0x51, 0xa2, 0x09, 0x80, 0xa8, 0x19, 0x38, 0x17, - 0x9b, 0xca, 0x60, 0x01, 0xa9, 0x1a, 0xa3, 0x1c, 0x45, 0xc0, 0x0c, 0x83, 0x09, 0x22, 0xa8, 0x8f, - 0x32, 0xa9, 0x28, 0x84, 0x9d, 0x21, 0x20, 0xc0, 0x9d, 0x23, 0x11, 0xc1, 0x8e, 0x81, 0x48, 0x92, - 0x2a, 0xc1, 0x9c, 0x33, 0x98, 0x21, 0xec, 0x20, 0x33, 0xda, 0x1b, 0x84, 0x8a, 0x25, 0xa9, 0x0a, - 0x08, 0x38, 0x37, 0xe9, 0x8b, 0x23, 0x80, 0x99, 0x31, 0xc8, 0x3a, 0xb3, 0x9d, 0x22, 0x88, 0x45, - 0xc9, 0xbd, 0x52, 0x80, 0x08, 0x00, 0xd9, 0x59, 0xa2, 0x29, 0x80, 0x98, 0x0a, 0x37, 0xdb, 0x18, - 0x10, 0x81, 0x10, 0xdb, 0x41, 0x92, 0xcb, 0x60, 0xa2, 0x9b, 0x22, 0xa0, 0xac, 0x35, 0xc8, 0x18, - 0x98, 0x98, 0x31, 0xd2, 0x3b, 0x05, 0xca, 0x59, 0xa3, 0x1e, 0x83, 0x99, 0x18, 0x23, 0xdd, 0x51, - 0x90, 0x8a, 0x30, 0xa8, 0x28, 0xb8, 0x32, 0x8a, 0xc4, 0x1e, 0x05, 0xab, 0x31, 0x00, 0xaa, 0xa0, - 0x3a, 0x84, 0x01, 0x9c, 0x21, 0xd1, 0x2d, 0x16, 0xc9, 0x2b, 0x05, 0x09, 0xa8, 0x58, 0xb1, 0x28, - 0xaa, 0x01, 0x53, 0xeb, 0x52, 0xb9, 0x10, 0x18, 0x91, 0xab, 0x10, 0x11, 0x32, 0xde, 0x30, 0x82, - 0xbd, 0x61, 0xa2, 0x0c, 0x23, 0xda, 0x2a, 0x85, 0x99, 0x20, 0xd2, 0x8c, 0x34, 0x91, 0x9c, 0x22, - 0x9c, 0x24, 0xb9, 0x09, 0x31, 0xd0, 0x40, 0x99, 0xb8, 0x5b, 0x14, 0x08, 0xca, 0x1b, 0x25, 0x91, - 0x8f, 0x02, 0x09, 0xa1, 0x30, 0xd9, 0x29, 0x83, 0x18, 0x98, 0xf9, 0x49, 0x04, 0xa8, 0x0b, 0x13, - 0xac, 0x53, 0xa8, 0x19, 0xa8, 0x59, 0x14, 0xcb, 0x28, 0x91, 0x98, 0x4b, 0x07, 0x8e, 0x11, 0x00, - 0x9a, 0x10, 0x01, 0x98, 0x0b, 0xb1, 0x72, 0xd5, 0x2a, 0x92, 0x0a, 0x12, 0x98, 0xbb, 0x65, 0xb8, - 0x1b, 0x17, 0xbb, 0x30, 0x82, 0x8a, 0x98, 0x00, 0x61, 0xa1, 0xae, 0x41, 0x83, 0xbb, 0x00, 0x21, - 0xa8, 0x71, 0xa0, 0x9a, 0x99, 0x72, 0x82, 0xc9, 0x0d, 0x15, 0x09, 0xa9, 0x20, 0x98, 0x41, 0xb8, - 0x8b, 0x10, 0x99, 0x67, 0xc9, 0x18, 0x88, 0x32, 0x99, 0xa8, 0x0a, 0x22, 0x05, 0x8b, 0xc0, 0x1d, - 0x27, 0xa8, 0x9a, 0x81, 0x1a, 0x26, 0xa0, 0xaa, 0x28, 0xd0, 0x49, 0x03, 0xda, 0x3a, 0x85, 0x8a, - 0x81, 0x8a, 0x21, 0x21, 0xf8, 0x19, 0x90, 0x38, 0x80, 0x25, 0xad, 0x23, 0xac, 0x33, 0xf1, 0x2b, - 0x04, 0x9a, 0x81, 0x08, 0xa1, 0x6a, 0x86, 0xaa, 0x88, 0xb8, 0x70, 0x83, 0x9a, 0x0a, 0x03, 0xbf, - 0x44, 0xa0, 0x99, 0x29, 0x03, 0x98, 0x89, 0x88, 0x37, 0xda, 0x00, 0x98, 0x3a, 0x05, 0x08, 0xa9, - 0xba, 0x54, 0x03, 0x9d, 0x98, 0x41, 0x00, 0x9a, 0xb0, 0x9f, 0x45, 0xa0, 0x9a, 0x11, 0xb9, 0x38, - 0x27, 0xc9, 0x19, 0x92, 0x09, 0x82, 0xaa, 0x69, 0x84, 0x0a, 0xb9, 0x61, 0xca, 0x41, 0x80, 0x88, - 0x18, 0xd8, 0x58, 0xb8, 0x52, 0xb9, 0xa0, 0x39, 0x86, 0x8c, 0x22, 0x91, 0x9e, 0x12, 0x0a, 0x12, - 0x90, 0x8b, 0x35, 0xec, 0x28, 0x12, 0x91, 0x8c, 0x12, 0xaa, 0x48, 0x82, 0xbb, 0x40, 0x90, 0x21, - 0x9e, 0x93, 0x1c, 0x03, 0x02, 0xaf, 0x22, 0x08, 0x90, 0x1c, 0x17, 0x9d, 0x81, 0x10, 0x8a, 0x35, - 0xb9, 0x09, 0x21, 0xf0, 0x4b, 0x82, 0xa8, 0x2a, 0x05, 0xbb, 0x41, 0xc8, 0x30, 0x01, 0xbe, 0x63, - 0xba, 0x43, 0xa8, 0xb8, 0x6a, 0x91, 0x80, 0x89, 0x00, 0x61, 0xb0, 0x8a, 0x13, 0xac, 0x52, 0x83, - 0x9c, 0xda, 0x51, 0x92, 0x0a, 0xa1, 0x1d, 0x05, 0x0b, 0x91, 0x89, 0x09, 0x16, 0x90, 0xcb, 0x38, - 0x82, 0x52, 0xfa, 0x18, 0x10, 0x91, 0x08, 0x90, 0x19, 0x28, 0x07, 0xac, 0x81, 0x29, 0x02, 0x53, - 0xfc, 0x28, 0x88, 0x11, 0x80, 0x9c, 0x43, 0xc9, 0x29, 0x93, 0x19, 0xa9, 0x52, 0xda, 0x49, 0x84, - 0x9c, 0x02, 0x0a, 0x05, 0xb9, 0x19, 0x11, 0x23, 0xbb, 0x22, 0xf8, 0x1c, 0x24, 0x98, 0xa0, 0x0f, - 0x13, 0x80, 0xac, 0x31, 0x81, 0x89, 0x11, 0xcc, 0x0a, 0x55, 0x90, 0xab, 0x02, 0x9c, 0x37, 0xc9, - 0x10, 0x0a, 0x11, 0x02, 0x9b, 0xe8, 0x69, 0x92, 0x89, 0x81, 0x8c, 0x32, 0x91, 0x8c, 0x83, 0x9f, - 0x33, 0x81, 0xbc, 0x61, 0xa0, 0x09, 0x11, 0xeb, 0x21, 0x11, 0xa0, 0x99, 0x08, 0x22, 0x8a, 0xf3, - 0x7a, 0xc1, 0x18, 0x80, 0x12, 0xc9, 0x0a, 0x25, 0xc9, 0x01, 0x0c, 0x16, 0xbb, 0x22, 0x00, 0xb0, - 0x0e, 0x22, 0x91, 0x19, 0xe9, 0x29, 0x14, 0x9b, 0x13, 0xa9, 0xaa, 0x41, 0x94, 0x8c, 0x02, 0x1a, - 0x27, 0xdb, 0x08, 0x80, 0x52, 0x90, 0xc8, 0x0c, 0x24, 0xa8, 0x11, 0xa9, 0x9b, 0x36, 0xa9, 0x08, - 0x0b, 0x05, 0x48, 0xf3, 0x0c, 0x81, 0x31, 0x81, 0xba, 0x8c, 0x92, 0x73, 0xd0, 0x29, 0x91, 0x28, - 0x89, 0xa2, 0x2a, 0xa0, 0x46, 0xca, 0x10, 0xbb, 0x67, 0xa9, 0x88, 0x08, 0x00, 0x04, 0x9d, 0x12, - 0x89, 0x18, 0x02, 0xca, 0x18, 0x28, 0x14, 0xda, 0x28, 0xca, 0x54, 0xa8, 0x08, 0x08, 0xa8, 0x31, - 0x89, 0xb1, 0x38, 0x02, 0xc9, 0x91, 0x8e, 0x73, 0xa3, 0x8f, 0x03, 0x9c, 0x04, 0x89, 0x01, 0x91, - 0x0e, 0x84, 0x0b, 0x94, 0x2c, 0x02, 0xa9, 0x0b, 0x25, 0x8a, 0x80, 0x1a, 0x04, 0xa8, 0x8b, 0x53, - 0xb8, 0x3a, 0x85, 0xac, 0x89, 0x34, 0x28, 0xe2, 0x9a, 0x70, 0x91, 0xbc, 0x42, 0x80, 0xa8, 0x2a, - 0x02, 0xb9, 0x3a, 0x27, 0x9c, 0x11, 0x18, 0x80, 0xa0, 0x0b, 0x74, 0x90, 0xb1, 0x9f, 0x12, 0x08, - 0x83, 0x68, 0xfa, 0x28, 0x92, 0x89, 0x00, 0x92, 0x1a, 0xc1, 0x3a, 0xa8, 0x41, 0x24, 0xfc, 0x39, - 0x91, 0x18, 0x32, 0xb0, 0xaf, 0x52, 0xa8, 0x11, 0xab, 0x52, 0x90, 0x99, 0x31, 0xec, 0x41, 0xa9, - 0x33, 0xc9, 0x8c, 0x23, 0x91, 0x0c, 0x82, 0x80, 0xae, 0x34, 0x10, 0xfa, 0x20, 0x89, 0x24, 0xdc, - 0x30, 0x81, 0x88, 0x88, 0x19, 0x94, 0x8e, 0x14, 0x9a, 0x02, 0x9b, 0x24, 0xb9, 0x29, 0xb1, 0x71, - 0xc0, 0x29, 0x92, 0x9d, 0x42, 0x80, 0x89, 0xa8, 0x39, 0x85, 0x1a, 0xc2, 0x8b, 0x42, 0xa0, 0x88, - 0x50, 0xd8, 0x80, 0x4b, 0x86, 0xba, 0x51, 0xa1, 0x8b, 0x20, 0x93, 0x09, 0xb9, 0x49, 0xb2, 0x19, - 0x5a, 0x07, 0xd9, 0x2b, 0x03, 0x18, 0xb1, 0x3c, 0x07, 0xad, 0x48, 0x83, 0x8b, 0x09, 0x41, 0xc8, - 0x29, 0xa0, 0x41, 0xc8, 0x18, 0x81, 0x01, 0xeb, 0x5a, 0x04, 0x9c, 0x81, 0x20, 0xd1, 0x38, 0x82, - 0x9e, 0x02, 0x38, 0x91, 0xfa, 0x49, 0x02, 0x91, 0xcb, 0x29, 0x84, 0x29, 0xb3, 0x1c, 0x95, 0x8c, - 0x14, 0xab, 0x00, 0x09, 0x17, 0xba, 0x10, 0xba, 0x55, 0xa0, 0x9b, 0x25, 0xac, 0x13, 0x08, 0x18, - 0xc0, 0x1a, 0x21, 0xb8, 0x20, 0x51, 0xd8, 0x11, 0x9b, 0x12, 0x09, 0xb2, 0x6a, 0xd2, 0x9d, 0x23, - 0x08, 0xa8, 0x29, 0x21, 0xf0, 0x4d, 0x85, 0x9c, 0x21, 0x08, 0x81, 0xbb, 0x48, 0x84, 0x8a, 0x91, - 0x49, 0xd3, 0x0d, 0x15, 0x88, 0xa9, 0x00, 0x32, 0xf9, 0x0a, 0x13, 0x01, 0xc9, 0x29, 0x09, 0x88, - 0x24, 0xab, 0x63, 0xca, 0x8a, 0x43, 0xb2, 0x0e, 0x04, 0x8a, 0x10, 0xa9, 0x41, 0x80, 0x8a, 0x87, - 0x8c, 0x82, 0x31, 0xa9, 0x01, 0xf9, 0x2b, 0x07, 0x8b, 0x03, 0x9a, 0x11, 0xa8, 0x00, 0x9d, 0x63, - 0xa2, 0x9b, 0x09, 0x82, 0x48, 0x92, 0xac, 0x12, 0x40, 0xdb, 0x24, 0xac, 0x22, 0x09, 0x85, 0xab, - 0x9a, 0x47, 0xa0, 0xaa, 0x42, 0xb0, 0x09, 0x99, 0x23, 0x30, 0x84, 0xff, 0x20, 0x80, 0x8a, 0x27, - 0xca, 0x10, 0x09, 0x01, 0x09, 0x00, 0x98, 0x01, 0x9c, 0x30, 0x96, 0x2a, 0x02, 0xdc, 0x18, 0x01, - 0x21, 0x91, 0x9a, 0x91, 0xaf, 0x17, 0x9b, 0x13, 0x8a, 0x02, 0x00, 0xbc, 0x33, 0x0d, 0x85, 0x4a, - 0xd1, 0x0c, 0x21, 0x12, 0xba, 0x82, 0x2c, 0xf3, 0x3b, 0x85, 0x8a, 0x19, 0x04, 0x8c, 0x93, 0x1e, - 0x93, 0x49, 0xc1, 0x88, 0x18, 0xa0, 0x61, 0xa0, 0x18, 0xc8, 0x19, 0x03, 0x88, 0x19, 0x82, 0x81, - 0xbf, 0x13, 0xad, 0x65, 0xa8, 0x00, 0xab, 0x18, 0x62, 0x82, 0x9c, 0xa0, 0x49, 0x91, 0x32, 0xcc, - 0x81, 0x58, 0xb3, 0x8d, 0xa2, 0x48, 0x91, 0x82, 0x8c, 0xb1, 0x61, 0x90, 0x8a, 0x28, 0x81, 0x29, - 0xf3, 0x2c, 0xa2, 0x50, 0xc8, 0x30, 0xaa, 0x80, 0x42, 0xb0, 0x2b, 0x02, 0xc9, 0x2e, 0x17, 0x9b, - 0x03, 0xdb, 0x30, 0x91, 0x01, 0x88, 0xd0, 0x3b, 0x07, 0xaa, 0x88, 0x22, 0x90, 0x19, 0xb2, 0xaa, - 0x79, 0x03, 0x01, 0x9e, 0xc0, 0x70, 0x91, 0x98, 0x89, 0x83, 0x1d, 0x85, 0x8c, 0x11, 0x88, 0x29, - 0xb3, 0x2c, 0xc4, 0x4c, 0x84, 0x8c, 0x82, 0x8a, 0x33, 0xd9, 0x18, 0x98, 0x42, 0x98, 0x02, 0xcc, - 0x19, 0x23, 0x29, 0x84, 0xde, 0x30, 0x90, 0x30, 0xa8, 0x9c, 0x23, 0xaa, 0x36, 0xb8, 0x0b, 0x84, - 0x8b, 0x41, 0xa9, 0x81, 0x2b, 0x95, 0xaa, 0x2b, 0x96, 0x60, 0xa2, 0x9a, 0x8c, 0x32, 0x12, 0x88, - 0xca, 0xce, 0x72, 0xa2, 0x89, 0x88, 0x89, 0x53, 0xa8, 0x91, 0x0e, 0x13, 0x80, 0x9a, 0xc0, 0x29, - 0x33, 0x84, 0xad, 0x10, 0x98, 0x52, 0xc0, 0x1a, 0x13, 0xa9, 0x12, 0xcf, 0x14, 0x88, 0x90, 0x2a, - 0xe2, 0x3a, 0x81, 0x22, 0x28, 0xf9, 0x59, 0xd8, 0x28, 0x82, 0x1a, 0xa4, 0x8b, 0x13, 0xcc, 0x25, - 0x9b, 0x14, 0x9a, 0x90, 0x1c, 0x05, 0x0b, 0x33, 0xfa, 0x09, 0x21, 0x98, 0x32, 0xcc, 0x31, 0xc8, - 0x38, 0x92, 0x9a, 0x20, 0x92, 0x8d, 0x01, 0x11, 0x02, 0xcf, 0x06, 0x0a, 0x12, 0x9d, 0x03, 0x8b, - 0x22, 0x89, 0x12, 0xcc, 0x49, 0x94, 0x0e, 0x14, 0xab, 0x30, 0xb8, 0x28, 0x91, 0x49, 0xa5, 0x8e, - 0x82, 0x0a, 0x26, 0xba, 0x20, 0xa9, 0x11, 0xa2, 0x6b, 0xc3, 0xaa, 0x73, 0xb0, 0x89, 0x09, 0x25, - 0xaa, 0x11, 0xca, 0x49, 0x15, 0xcb, 0x48, 0xa0, 0x19, 0x23, 0xba, 0xb9, 0x7b, 0x84, 0x0a, 0xa8, - 0x29, 0x00, 0x05, 0x8e, 0x93, 0x1c, 0x06, 0x9a, 0x81, 0x99, 0x33, 0xa1, 0x89, 0xda, 0x72, 0x98, - 0x08, 0x80, 0xab, 0x50, 0x04, 0xbb, 0x31, 0xb3, 0xbf, 0x35, 0xab, 0x00, 0x22, 0xa9, 0x08, 0xa0, - 0x3b, 0x37, 0xbb, 0x19, 0x22, 0xf0, 0x48, 0xa1, 0x99, 0x28, 0xd1, 0x59, 0xb2, 0x1c, 0x83, 0xaa, - 0x62, 0x93, 0x8c, 0xa9, 0x52, 0xab, 0x25, 0xa9, 0x8a, 0x20, 0x01, 0x14, 0xae, 0x21, 0xa9, 0x13, - 0xaa, 0x60, 0x95, 0x9f, 0x33, 0xab, 0x00, 0x9b, 0x37, 0xb0, 0x8d, 0x03, 0x10, 0xb0, 0x1a, 0x81, - 0x89, 0x24, 0xad, 0x43, 0xda, 0x50, 0x90, 0x80, 0x8a, 0x8a, 0x45, 0x90, 0x9b, 0x80, 0x18, 0x03, - 0x8f, 0x85, 0x9c, 0x34, 0xca, 0x30, 0xb0, 0x29, 0x15, 0xbb, 0x00, 0x1a, 0x87, 0x1b, 0x93, 0x99, - 0x3a, 0xd3, 0x48, 0xb0, 0x18, 0x92, 0xaa, 0x20, 0x81, 0x53, 0xfa, 0x29, 0x82, 0xc9, 0x10, 0x23, - 0x98, 0xed, 0x50, 0xa1, 0x1a, 0x12, 0x01, 0xdc, 0x09, 0x43, 0x01, 0xb9, 0xbb, 0x79, 0x03, 0x1b, - 0x82, 0x9e, 0x22, 0xbb, 0x72, 0x93, 0x9f, 0x31, 0x90, 0x9a, 0x10, 0x21, 0xbb, 0x36, 0xfc, 0x38, - 0x81, 0x10, 0xb8, 0x80, 0x0b, 0x25, 0xb0, 0x1a, 0xa3, 0x0e, 0x16, 0xaa, 0x88, 0x80, 0x40, 0x01, - 0x90, 0xcd, 0x60, 0xa1, 0x28, 0x99, 0x81, 0x2b, 0xa2, 0x09, 0x42, 0xcb, 0x31, 0x96, 0x9e, 0x88, - 0x45, 0xc8, 0x29, 0x91, 0x0a, 0x12, 0xab, 0x35, 0xca, 0x18, 0xa1, 0x52, 0xb9, 0x3a, 0x85, 0x0b, - 0xd1, 0x4a, 0x93, 0x8c, 0x14, 0xaa, 0x20, 0xa1, 0x8b, 0x73, 0x90, 0xb9, 0x2a, 0x43, 0xf9, 0x60, - 0xb0, 0x2a, 0x81, 0xa9, 0x62, 0xd0, 0x28, 0x90, 0x28, 0x90, 0x99, 0x10, 0x8c, 0x27, 0xca, 0x10, - 0x80, 0x11, 0x80, 0xbb, 0x03, 0x9b, 0x63, 0x98, 0xd0, 0x1c, 0x37, 0xf1, 0x2a, 0x80, 0x18, 0x82, - 0x89, 0x99, 0xa1, 0x69, 0x94, 0x19, 0xdc, 0x48, 0x01, 0x88, 0x89, 0x80, 0x02, 0x80, 0x98, 0x8b, - 0x06, 0x09, 0xb9, 0x53, 0xea, 0x20, 0x82, 0x81, 0xba, 0x38, 0x13, 0x1a, 0x97, 0xaf, 0x32, 0x90, - 0x28, 0xe8, 0x39, 0x90, 0x10, 0x20, 0xc2, 0x8f, 0x00, 0x13, 0x8b, 0x24, 0xcc, 0x88, 0x60, 0x93, - 0xac, 0x21, 0xa0, 0x69, 0xa3, 0xab, 0x20, 0x13, 0xda, 0x11, 0xbe, 0x40, 0x33, 0xb0, 0xab, 0xac, - 0x43, 0x32, 0xb5, 0x8f, 0x82, 0x2a, 0x84, 0xbb, 0x18, 0x33, 0x00, 0xb0, 0x9e, 0x80, 0x74, 0xb1, - 0x0b, 0x80, 0x99, 0x64, 0xb1, 0x8b, 0x08, 0x10, 0x13, 0xa9, 0x00, 0xbf, 0x73, 0xc1, 0x28, 0xb8, - 0x30, 0xc8, 0x40, 0x90, 0x08, 0x89, 0x81, 0x0c, 0x14, 0x32, 0xcf, 0x31, 0xb8, 0x02, 0x29, 0xd2, - 0x48, 0xc0, 0x0b, 0x23, 0x81, 0x2c, 0x92, 0xda, 0x1b, 0x27, 0xba, 0x43, 0xea, 0x18, 0x12, 0xb9, - 0x30, 0xd8, 0x30, 0x03, 0xc0, 0x0e, 0x12, 0x0a, 0x23, 0xd8, 0x8b, 0x02, 0x20, 0x20, 0xe8, 0x08, - 0x40, 0x91, 0xcc, 0x10, 0x11, 0x81, 0x82, 0xaf, 0x38, 0x93, 0x32, 0xec, 0x1a, 0x13, 0x80, 0x01, - 0xac, 0x84, 0x1e, 0x05, 0xa8, 0x8d, 0x33, 0x98, 0x91, 0x0c, 0x04, 0xba, 0x59, 0x13, 0xd9, 0x88, - 0x39, 0xe3, 0x39, 0x82, 0x89, 0x20, 0xed, 0x58, 0x92, 0x89, 0x01, 0xca, 0x30, 0x02, 0x99, 0x8b, - 0x27, 0xac, 0x32, 0xb8, 0x09, 0x01, 0x89, 0x25, 0xbc, 0x21, 0x12, 0xd1, 0x1d, 0x21, 0xa1, 0x2a, - 0x93, 0xce, 0x38, 0x93, 0x49, 0xf3, 0x1c, 0x11, 0x81, 0x01, 0xae, 0x22, 0xa9, 0x71, 0xb0, 0x1b, - 0x23, 0xa9, 0x00, 0xaa, 0x26, 0xb9, 0x00, 0x11, 0xa2, 0x9f, 0x34, 0xd0, 0x8c, 0x33, 0x19, 0xa1, - 0xbc, 0x59, 0x85, 0x0a, 0xb1, 0x29, 0x91, 0x20, 0xb3, 0x3a, 0xfc, 0x00, 0x59, 0x95, 0x8c, 0x11, - 0xa0, 0x39, 0xb4, 0x2c, 0xa2, 0x2a, 0x80, 0x02, 0x89, 0x90, 0x19, 0x84, 0x3a, 0xfb, 0x6c, 0x02, - 0xbb, 0x30, 0x22, 0xf9, 0x2b, 0x23, 0xeb, 0x40, 0x81, 0x01, 0xea, 0x0a, 0x41, 0x05, 0xbb, 0x10, - 0xb8, 0x3b, 0x37, 0xaa, 0x88, 0x29, 0xb1, 0x50, 0xd0, 0x39, 0xa0, 0x32, 0x88, 0xfb, 0x48, 0x91, - 0x11, 0xcb, 0x20, 0x91, 0x41, 0xca, 0x22, 0xa8, 0x9a, 0x61, 0xc2, 0x9e, 0x41, 0x85, 0xab, 0x11, - 0xba, 0x61, 0x91, 0x21, 0xfb, 0x10, 0x98, 0x32, 0xb0, 0x89, 0x00, 0xa8, 0x51, 0xc2, 0x8d, 0x21, - 0x10, 0x82, 0xa9, 0xae, 0x51, 0xa1, 0x62, 0xc8, 0x9a, 0x40, 0xa3, 0x2a, 0x82, 0xdb, 0x30, 0xa2, - 0x0d, 0x03, 0x1b, 0x15, 0xa9, 0xac, 0x19, 0x35, 0xb9, 0x44, 0xfb, 0x29, 0x82, 0x11, 0xa9, 0x8a, - 0x21, 0x22, 0x81, 0xbf, 0x21, 0x90, 0x59, 0x05, 0xbd, 0x28, 0x10, 0x11, 0x09, 0xc9, 0x10, 0x9a, - 0x73, 0xb3, 0x9c, 0x33, 0xaa, 0xc8, 0x6b, 0xa3, 0x1c, 0x14, 0xaa, 0x99, 0x38, 0x04, 0x60, 0xd0, - 0x9b, 0x33, 0x81, 0x9c, 0x13, 0xac, 0x35, 0xb9, 0x28, 0xeb, 0x30, 0x15, 0x9a, 0x00, 0xd8, 0x0b, - 0x35, 0xb0, 0x0c, 0x12, 0xb9, 0x60, 0xa0, 0x88, 0x98, 0x53, 0xab, 0x27, 0xbb, 0x1b, 0x35, 0xa8, - 0x8a, 0x00, 0x89, 0x42, 0xd0, 0x39, 0xc1, 0x21, 0x88, 0xa2, 0x9f, 0x02, 0x21, 0x80, 0x82, 0xff, - 0x30, 0x82, 0x98, 0x99, 0x81, 0x19, 0x25, 0xf8, 0x28, 0x98, 0x1a, 0x36, 0xc8, 0x8b, 0x08, 0x51, - 0x81, 0xb9, 0x1a, 0x81, 0x38, 0x21, 0xb1, 0x0b, 0xf9, 0x3a, 0x44, 0xd0, 0x2a, 0x84, 0x9a, 0x99, - 0x21, 0x2a, 0x07, 0xab, 0x21, 0x89, 0xa5, 0x2e, 0x83, 0x8a, 0x0a, 0x06, 0x8b, 0x81, 0x88, 0x39, - 0x94, 0x8a, 0x01, 0xc9, 0xcc, 0x74, 0x81, 0x99, 0x8a, 0xa8, 0x71, 0x91, 0x09, 0x98, 0x01, 0x18, - 0x23, 0xfc, 0x4a, 0x84, 0x0b, 0x11, 0xd8, 0x1c, 0x15, 0x99, 0x90, 0x2a, 0x83, 0x9a, 0x10, 0x08, - 0xa0, 0x11, 0x0b, 0xd9, 0x13, 0x4d, 0x16, 0xa9, 0xcb, 0x5b, 0x87, 0x88, 0x08, 0xa0, 0x8a, 0x53, - 0x90, 0x89, 0x00, 0xad, 0x44, 0xb0, 0x08, 0x9a, 0x32, 0x92, 0x8c, 0x81, 0x0b, 0xd3, 0x1c, 0x37, - 0xb0, 0x9c, 0x18, 0x15, 0x9a, 0x12, 0xcb, 0x21, 0x8a, 0x52, 0xa1, 0xae, 0x40, 0x84, 0x9a, 0xa0, - 0x20, 0x42, 0x84, 0xbe, 0x0b, 0x16, 0x01, 0x9a, 0xb9, 0x19, 0x44, 0xa3, 0x8c, 0xc9, 0x48, 0x15, - 0xa8, 0xba, 0x19, 0x46, 0xb8, 0x89, 0x89, 0x42, 0x91, 0x2a, 0xc0, 0x0b, 0x10, 0x17, 0x99, 0x99, - 0x39, 0x94, 0x19, 0xfa, 0x48, 0x01, 0x80, 0xcb, 0x5a, 0x04, 0x99, 0x99, 0x12, 0xda, 0x70, 0x91, - 0x8a, 0x80, 0x10, 0x00, 0x88, 0xd8, 0x5a, 0x05, 0xcb, 0x30, 0xa1, 0x18, 0x98, 0x89, 0x21, 0x44, - 0xfa, 0x18, 0x89, 0x22, 0x12, 0xbc, 0x98, 0x99, 0x64, 0x01, 0xb8, 0x9f, 0x23, 0x01, 0xe8, 0x1a, - 0x23, 0x82, 0xac, 0xaa, 0x73, 0xa0, 0x00, 0x18, 0xd9, 0x40, 0x91, 0x81, 0xbc, 0x41, 0x10, 0x93, - 0xaf, 0x18, 0x34, 0x98, 0xca, 0x19, 0x20, 0x84, 0x9a, 0x02, 0x9a, 0x12, 0x28, 0xfa, 0x39, 0x00, - 0x24, 0xda, 0xad, 0x51, 0x33, 0xea, 0x0a, 0x01, 0x41, 0xb0, 0x9c, 0x31, 0x93, 0x5a, 0xd0, 0x09, - 0x89, 0x63, 0xa8, 0x01, 0x9a, 0x98, 0x60, 0x91, 0x8a, 0x3a, 0x87, 0x8a, 0xc9, 0x48, 0x23, 0xc1, - 0xad, 0x21, 0x00, 0x91, 0x51, 0xda, 0x18, 0x18, 0x22, 0xd8, 0x0a, 0x11, 0x14, 0xea, 0x29, 0x11, - 0x90, 0x10, 0xda, 0x40, 0xa0, 0x20, 0x81, 0xfb, 0x59, 0x93, 0x8b, 0x91, 0x1a, 0x41, 0x95, 0x8e, - 0x98, 0x31, 0x80, 0x01, 0xcc, 0x32, 0x98, 0x80, 0x21, 0xec, 0x41, 0x00, 0x80, 0x9c, 0x23, 0x1a, - 0xc4, 0x0c, 0x01, 0x41, 0xb9, 0x00, 0x0c, 0x00, 0x34, 0xe8, 0x8d, 0x32, 0x01, 0xba, 0x01, 0x1a, - 0x08, 0x86, 0x0a, 0x80, 0xd8, 0x40, 0x81, 0x9d, 0x25, 0xa1, 0x9d, 0x10, 0x12, 0x81, 0xa0, 0x8e, - 0xa2, 0x29, 0x25, 0x80, 0xfd, 0x38, 0x82, 0x18, 0xa8, 0x9b, 0x50, 0x92, 0x09, 0x88, 0x38, 0xaa, - 0x23, 0xde, 0x41, 0x80, 0x11, 0x90, 0xbd, 0x30, 0x51, 0x92, 0xbc, 0xca, 0x45, 0x88, 0x80, 0x0c, - 0xb2, 0x39, 0x44, 0xe0, 0x0a, 0x10, 0x02, 0xaa, 0x30, 0xa9, 0xa8, 0x70, 0xc2, 0x30, 0xab, 0x04, - 0x2a, 0xb1, 0x40, 0xeb, 0x18, 0x22, 0xb1, 0x59, 0xf0, 0x2a, 0x02, 0x01, 0x8a, 0xb8, 0x2c, 0x33, - 0x04, 0xbd, 0x81, 0x29, 0x27, 0xcb, 0xba, 0x72, 0x83, 0x98, 0x9d, 0x11, 0x21, 0x12, 0xfb, 0x8a, - 0x40, 0x02, 0x98, 0xaa, 0xaa, 0x72, 0x04, 0xb8, 0x8c, 0x98, 0x64, 0x90, 0x89, 0xa0, 0x1a, 0x24, - 0x88, 0xa9, 0x38, 0xe8, 0x60, 0xb8, 0x29, 0x21, 0xa3, 0x8e, 0xa8, 0x50, 0x81, 0x08, 0x82, 0xbc, - 0x29, 0x28, 0x14, 0x98, 0xac, 0x38, 0xa1, 0x72, 0xf2, 0x2a, 0xa1, 0x28, 0x82, 0x9a, 0x84, 0xaf, - 0x53, 0x82, 0x9b, 0xaa, 0x52, 0x81, 0x88, 0xb1, 0x1b, 0x91, 0x45, 0xa8, 0xac, 0x11, 0x80, 0x32, - 0xf9, 0x0a, 0x08, 0x33, 0x22, 0xfa, 0x8f, 0x14, 0x81, 0xaa, 0x29, 0x84, 0x18, 0x98, 0xc8, 0x1b, - 0x25, 0x12, 0xf9, 0x9c, 0x43, 0x80, 0x82, 0x9d, 0x10, 0x91, 0x08, 0x22, 0xd8, 0x0a, 0x92, 0x5a, - 0xb3, 0x1c, 0x91, 0x08, 0x80, 0x20, 0xb3, 0x2e, 0xe8, 0x50, 0x00, 0x11, 0xdd, 0x40, 0x98, 0x11, - 0x88, 0xa0, 0x38, 0xb8, 0xaa, 0x61, 0x82, 0x48, 0xc1, 0xae, 0x28, 0x14, 0x00, 0xd8, 0x09, 0x91, - 0x3a, 0x37, 0xda, 0x89, 0x10, 0x42, 0xa0, 0xbb, 0x40, 0x01, 0x91, 0xab, 0x00, 0x18, 0x48, 0x87, - 0x9c, 0x88, 0x50, 0xa1, 0x89, 0x00, 0x42, 0xea, 0x42, 0xab, 0x92, 0x0b, 0x64, 0xa1, 0xac, 0x20, - 0x11, 0x93, 0x9c, 0x8b, 0x27, 0x9a, 0x81, 0x81, 0x9d, 0x52, 0x90, 0x8a, 0x00, 0x91, 0x8d, 0x27, - 0x9a, 0x80, 0x0b, 0x93, 0x6b, 0x86, 0xbb, 0x11, 0x89, 0x13, 0x91, 0x9b, 0x12, 0xc9, 0x72, 0xb1, - 0x8a, 0x21, 0x10, 0xb4, 0xaf, 0x40, 0x11, 0x98, 0xca, 0x2c, 0x15, 0x09, 0x90, 0x8b, 0x90, 0x70, - 0x95, 0x8b, 0x09, 0x22, 0x11, 0xfb, 0x28, 0x92, 0xaa, 0x13, 0x28, 0x03, 0xdd, 0x18, 0x02, 0xa9, - 0x48, 0x07, 0xbc, 0x01, 0x30, 0x81, 0xa9, 0x80, 0x8f, 0x24, 0x98, 0x8a, 0x11, 0x13, 0xdb, 0x9b, - 0x40, 0x36, 0xb0, 0xbc, 0x39, 0x92, 0x60, 0xb2, 0x8d, 0x12, 0x8a, 0x33, 0xa8, 0xbc, 0x49, 0x25, - 0xa0, 0x9f, 0x11, 0x08, 0x23, 0xca, 0x8a, 0x32, 0xb8, 0x3b, 0x27, 0xd8, 0x19, 0x10, 0xa2, 0x8f, - 0x11, 0x42, 0xe8, 0x8a, 0x21, 0x12, 0xab, 0x19, 0x07, 0xbb, 0x41, 0xa2, 0xa9, 0x49, 0x05, 0xa9, - 0x9c, 0x00, 0x54, 0x88, 0x99, 0x89, 0x48, 0xa1, 0x1a, 0xe1, 0x59, 0x04, 0xcb, 0x29, 0x00, 0x42, - 0xc0, 0x9c, 0x02, 0x18, 0x82, 0x11, 0xca, 0x8a, 0x30, 0x17, 0xbc, 0x31, 0x82, 0x0a, 0xa0, 0x00, - 0x0c, 0x36, 0xe0, 0x8b, 0x30, 0x13, 0x99, 0xbd, 0x44, 0x80, 0x80, 0xb9, 0x1a, 0xc1, 0x70, 0xa3, - 0xac, 0x20, 0x09, 0xa1, 0x38, 0x51, 0xc2, 0x2b, 0x99, 0x90, 0x58, 0x26, 0xba, 0xc8, 0x2c, 0x24, - 0x99, 0x12, 0xcb, 0x19, 0x14, 0x1b, 0x06, 0x9e, 0x24, 0xaa, 0xb1, 0x8b, 0x35, 0x98, 0x11, 0xc9, - 0x0b, 0x92, 0x38, 0x34, 0xa8, 0x09, 0x89, 0xea, 0x19, 0x51, 0x02, 0x42, 0xfd, 0x3b, 0x04, 0x00, - 0x09, 0xc0, 0x0b, 0x25, 0xaa, 0x10, 0x1a, 0x07, 0xa9, 0x89, 0xc9, 0x78, 0x94, 0x0b, 0x92, 0x8a, - 0x41, 0xb2, 0x0c, 0x81, 0x20, 0x91, 0xe9, 0x29, 0x12, 0x04, 0x1a, 0xf2, 0x0f, 0x13, 0x08, 0xa1, - 0xbb, 0x50, 0x81, 0x88, 0xa8, 0x49, 0x02, 0xdb, 0x51, 0xb9, 0x41, 0xa0, 0xa8, 0x3a, 0x95, 0x2b, - 0x04, 0xba, 0x3a, 0x83, 0x21, 0xac, 0xb8, 0x70, 0x85, 0x9d, 0x12, 0x18, 0xab, 0x98, 0x73, 0xa9, - 0x22, 0xb0, 0x1c, 0xb3, 0x6b, 0x84, 0xdb, 0x30, 0x98, 0x21, 0x81, 0xdc, 0x18, 0x14, 0x90, 0x08, - 0x91, 0x8c, 0x33, 0xb1, 0x0f, 0xb2, 0x79, 0xa3, 0x9c, 0x90, 0x31, 0x89, 0x17, 0xdb, 0x29, 0x02, - 0x22, 0xbc, 0x28, 0x91, 0x3a, 0xa5, 0x8e, 0x02, 0x08, 0x31, 0xa3, 0xdf, 0x38, 0x04, 0x98, 0x1a, - 0x91, 0x1a, 0x94, 0x1b, 0x04, 0xdb, 0x39, 0x94, 0x8c, 0x12, 0x00, 0xa1, 0x0b, 0x40, 0xd9, 0x39, - 0x82, 0x30, 0x91, 0xeb, 0x2a, 0xc8, 0x73, 0x81, 0xe9, 0x30, 0x91, 0x98, 0x29, 0xa3, 0x7a, 0xc2, - 0x1c, 0xb1, 0x1b, 0x37, 0x91, 0xcb, 0x1b, 0x84, 0x08, 0x21, 0xa9, 0x0a, 0x13, 0x99, 0xb8, 0x69, - 0x00, 0x02, 0x81, 0xef, 0x33, 0xda, 0x61, 0x90, 0x9a, 0x28, 0x92, 0x40, 0xdb, 0x31, 0xa8, 0x10, - 0x89, 0x01, 0xca, 0x2b, 0x67, 0xa9, 0x8a, 0x90, 0x72, 0xa1, 0x0a, 0x90, 0x90, 0x30, 0xb1, 0x33, - 0xcf, 0x32, 0x98, 0x88, 0xa1, 0x2d, 0x06, 0x8a, 0x91, 0x89, 0x02, 0x30, 0xc0, 0x09, 0x99, 0x81, - 0x6a, 0xa4, 0x0c, 0x92, 0x3a, 0x12, 0xe9, 0x8a, 0x53, 0x81, 0x00, 0xea, 0x38, 0xd9, 0x52, 0xa8, - 0x19, 0x93, 0x8f, 0x22, 0xb0, 0x0a, 0x02, 0x20, 0x15, 0xcf, 0x11, 0x10, 0xa1, 0x10, 0x9b, 0x01, - 0x89, 0x44, 0x08, 0xf0, 0x2b, 0x91, 0x53, 0xb9, 0x00, 0x29, 0xc2, 0x0b, 0x84, 0x8c, 0x22, 0x10, - 0x96, 0xaf, 0x30, 0x13, 0xb9, 0x39, 0xea, 0x28, 0x32, 0xa2, 0x8d, 0xb0, 0x3d, 0x17, 0xc9, 0x28, - 0x98, 0x11, 0x1b, 0x85, 0x9b, 0x10, 0x71, 0xd1, 0x19, 0xa0, 0x38, 0x82, 0xa0, 0x1b, 0x02, 0xae, - 0x72, 0x92, 0x9c, 0x00, 0x19, 0x14, 0xb9, 0x0a, 0x88, 0x37, 0xa9, 0xea, 0x28, 0x82, 0x42, 0xc9, - 0x09, 0x90, 0x48, 0x17, 0xbc, 0x10, 0x11, 0x08, 0xa0, 0x8b, 0x00, 0x62, 0x92, 0x9b, 0xe0, 0x4b, - 0x05, 0x98, 0x9a, 0x41, 0xb0, 0x20, 0x9a, 0x91, 0x0d, 0x33, 0x91, 0xca, 0x3a, 0x25, 0xb8, 0x0d, - 0x13, 0x99, 0x18, 0x81, 0x70, 0xc1, 0x1a, 0x94, 0x1c, 0xd0, 0x39, 0x43, 0xe8, 0x28, 0xb0, 0x2b, - 0x04, 0x8a, 0x14, 0xaa, 0xdb, 0x71, 0x90, 0x11, 0x9a, 0x98, 0x4a, 0xa3, 0x4b, 0x91, 0x90, 0x5c, - 0x94, 0xbb, 0x09, 0x63, 0x92, 0x90, 0xac, 0x10, 0x20, 0x10, 0x05, 0xbe, 0x28, 0x32, 0xd1, 0x0c, - 0x01, 0x20, 0x90, 0x09, 0x09, 0xe9, 0x38, 0x27, 0xb8, 0xae, 0x53, 0x80, 0xb9, 0x20, 0x91, 0x8a, - 0x23, 0xbb, 0x54, 0xdb, 0x31, 0x88, 0x00, 0x0b, 0xa3, 0x1f, 0x24, 0xb8, 0xab, 0x32, 0x9a, 0x47, - 0xa8, 0xab, 0x98, 0x1a, 0x77, 0xb0, 0x09, 0x90, 0x18, 0x03, 0x0a, 0xc9, 0x31, 0x11, 0xb9, 0x1a, - 0xa0, 0x61, 0x12, 0xce, 0x10, 0x19, 0x05, 0x91, 0xaa, 0xaf, 0x44, 0xa1, 0x0a, 0x98, 0x32, 0xa9, - 0x89, 0x64, 0xc9, 0x89, 0x43, 0x91, 0xc9, 0x0c, 0x26, 0x99, 0x98, 0x1a, 0x03, 0xa8, 0x8a, 0x64, - 0xd0, 0x2a, 0x82, 0x99, 0x81, 0x99, 0x51, 0x23, 0xfb, 0x5a, 0xb1, 0x19, 0x82, 0xb9, 0x52, 0xa1, - 0x9b, 0x21, 0x91, 0x20, 0xc9, 0x51, 0xb0, 0x9f, 0x31, 0x14, 0xa0, 0xcc, 0x41, 0xd8, 0x29, 0x84, - 0x00, 0xba, 0x89, 0x44, 0x80, 0xb9, 0x2b, 0xb3, 0x69, 0xa1, 0x21, 0x8d, 0x02, 0x28, 0xa1, 0x88, - 0xaf, 0x63, 0x03, 0xcb, 0x8a, 0x22, 0x11, 0xf9, 0x0b, 0x35, 0xb0, 0x0d, 0x13, 0xab, 0x09, 0x43, - 0x12, 0xea, 0x8b, 0x63, 0xc0, 0x28, 0x90, 0x29, 0xc8, 0x40, 0x80, 0xb2, 0x1d, 0x12, 0x00, 0xc9, - 0x38, 0xb0, 0x1b, 0x56, 0xb0, 0x9b, 0x39, 0x95, 0x0c, 0x33, 0xc1, 0x8a, 0x81, 0x89, 0x94, 0x0f, - 0x24, 0xa9, 0x8a, 0x01, 0x28, 0xf1, 0x4b, 0x86, 0x8a, 0x10, 0xa9, 0x48, 0xb1, 0x48, 0xa1, 0x8b, - 0x22, 0xc8, 0x09, 0x54, 0xa1, 0xbb, 0x09, 0x01, 0x60, 0x84, 0x99, 0xbc, 0x9a, 0x46, 0x91, 0x19, - 0xb9, 0x38, 0x92, 0x1a, 0xa5, 0x8d, 0x32, 0x13, 0xf9, 0x8c, 0x32, 0x82, 0x9d, 0x11, 0x30, 0xca, - 0x99, 0x52, 0xa8, 0x80, 0x62, 0xa1, 0xaf, 0x11, 0x41, 0xb1, 0x19, 0xb9, 0x88, 0x78, 0x83, 0x8b, - 0xb1, 0x8c, 0x01, 0x44, 0x98, 0x98, 0x01, 0xad, 0x35, 0xca, 0x28, 0x93, 0x9d, 0x33, 0x91, 0xab, - 0xab, 0x43, 0x33, 0xfc, 0x10, 0x09, 0x33, 0xc8, 0x3a, 0xa1, 0xb9, 0x2e, 0x07, 0x99, 0x80, 0x40, - 0x92, 0xba, 0xdb, 0x70, 0x02, 0x88, 0xbd, 0x31, 0x32, 0xc0, 0x8d, 0x81, 0x21, 0xa1, 0x09, 0x98, - 0xb8, 0x6c, 0x14, 0x91, 0xbf, 0x30, 0x22, 0xc0, 0x0a, 0x11, 0x30, 0xf0, 0x2a, 0x82, 0x09, 0x82, - 0xaa, 0x2b, 0x16, 0x99, 0x30, 0xc2, 0xaf, 0x40, 0x04, 0x89, 0x88, 0xbf, 0x63, 0xa0, 0x08, 0x00, - 0x89, 0x98, 0x38, 0x17, 0xcb, 0x18, 0x11, 0x82, 0x9a, 0x9a, 0x52, 0x90, 0x8c, 0x14, 0x9a, 0x18, - 0x83, 0x0c, 0x85, 0x8b, 0xa8, 0x35, 0x9b, 0x85, 0x8f, 0x14, 0xba, 0x09, 0x42, 0x82, 0xb9, 0x0c, - 0x13, 0x98, 0xaa, 0x74, 0x90, 0x99, 0x9c, 0x34, 0x08, 0x82, 0xcb, 0x09, 0x42, 0xc8, 0x20, 0x33, - 0xef, 0x38, 0x01, 0x98, 0x98, 0x28, 0x13, 0x81, 0xbf, 0x20, 0x12, 0x98, 0x0b, 0x41, 0xa4, 0x9f, - 0x02, 0x08, 0x22, 0x98, 0xa0, 0x8e, 0xa9, 0x46, 0xa0, 0x00, 0xdb, 0x49, 0x13, 0xaa, 0x2b, 0xb2, - 0x68, 0x01, 0x9a, 0x12, 0xbd, 0x61, 0x91, 0x09, 0xc9, 0x18, 0x64, 0xb1, 0x8a, 0x80, 0x00, 0x08, - 0xd8, 0x68, 0x92, 0x29, 0xe9, 0x1a, 0x22, 0x99, 0x30, 0xa4, 0xaf, 0x30, 0x11, 0x00, 0xc1, 0x0e, - 0x23, 0xca, 0x38, 0xa2, 0x18, 0x80, 0x88, 0x13, 0x8d, 0x13, 0xdc, 0x48, 0x16, 0xcb, 0x10, 0xb8, - 0x48, 0x04, 0xa8, 0xab, 0x01, 0x29, 0x15, 0x9c, 0x11, 0x0a, 0x02, 0xd2, 0x8f, 0x13, 0x11, 0xa0, - 0xb8, 0x0f, 0x24, 0x80, 0x99, 0xaa, 0x52, 0xa0, 0x58, 0xd8, 0x1a, 0x24, 0x00, 0xea, 0x09, 0x28, - 0x33, 0xb0, 0x9d, 0x08, 0x83, 0x8a, 0x11, 0x84, 0x9e, 0x34, 0xca, 0x80, 0x2a, 0x23, 0x82, 0xfa, - 0x09, 0x22, 0x81, 0x00, 0x9f, 0x22, 0x01, 0xac, 0x18, 0x83, 0x1e, 0x14, 0x98, 0xcb, 0x38, 0xb4, - 0x29, 0x33, 0xb8, 0xbb, 0x9f, 0x22, 0x82, 0x5a, 0x94, 0x8a, 0xaf, 0x62, 0x92, 0xa9, 0x0d, 0x14, - 0x89, 0x00, 0xa8, 0x8a, 0x52, 0x02, 0x99, 0xbd, 0x30, 0x31, 0x14, 0xc9, 0xad, 0x52, 0xb0, 0x10, - 0xa8, 0x22, 0x81, 0xda, 0x9a, 0x53, 0xa1, 0x50, 0x92, 0xcf, 0x10, 0x12, 0x81, 0x99, 0xaa, 0x43, - 0xb8, 0x08, 0x38, 0x15, 0xcd, 0x41, 0x90, 0x29, 0x91, 0xaa, 0x8a, 0x73, 0xa5, 0xab, 0x00, 0x00, - 0x33, 0xc9, 0x32, 0xcc, 0x99, 0x75, 0xb8, 0x1a, 0x08, 0x44, 0xb9, 0x99, 0x29, 0x82, 0x22, 0xac, - 0x80, 0x81, 0x3a, 0x17, 0x89, 0xca, 0x20, 0x01, 0xe1, 0x0e, 0x25, 0x90, 0x9a, 0x91, 0x09, 0x31, - 0xc0, 0x29, 0x04, 0xce, 0x42, 0xb0, 0x18, 0x00, 0xb9, 0x61, 0xd0, 0x3b, 0x15, 0xa8, 0x8a, 0x11, - 0x92, 0xbc, 0x34, 0xdb, 0x52, 0x98, 0x18, 0xa9, 0x28, 0x19, 0x07, 0xc9, 0x2b, 0x14, 0xa9, 0x29, - 0x82, 0x0a, 0x80, 0x50, 0xf8, 0x28, 0x18, 0x04, 0x0c, 0xd8, 0x58, 0x91, 0x0a, 0x90, 0x28, 0x98, - 0x43, 0xe8, 0x8b, 0x24, 0x18, 0xa2, 0xad, 0x21, 0x81, 0x03, 0xae, 0x01, 0x40, 0xc0, 0x48, 0xb0, - 0x1d, 0x25, 0xb9, 0x0a, 0x11, 0x89, 0x03, 0x08, 0xaf, 0x16, 0x9a, 0x90, 0x18, 0x43, 0xa0, 0x9a, - 0x18, 0xeb, 0x61, 0x91, 0x09, 0xc8, 0x58, 0x81, 0xa9, 0x89, 0x41, 0x04, 0xca, 0x0a, 0x33, 0xc2, - 0x0c, 0x31, 0xf8, 0x39, 0x81, 0x80, 0x9c, 0x14, 0x10, 0xba, 0x80, 0x29, 0x25, 0x90, 0xce, 0x40, - 0xa2, 0x8a, 0x42, 0xd8, 0x39, 0x23, 0xe8, 0x8c, 0x33, 0x98, 0x89, 0x80, 0xca, 0x50, 0x02, 0xa2, - 0xac, 0x8a, 0x37, 0x80, 0xca, 0x28, 0x80, 0x22, 0x9c, 0x02, 0x9e, 0x33, 0xa8, 0xb9, 0x62, 0xb9, - 0x53, 0x91, 0xe9, 0x1e, 0x14, 0x09, 0xc8, 0x38, 0x80, 0x00, 0x99, 0x80, 0x40, 0xc1, 0x19, 0x99, - 0x90, 0x72, 0x96, 0xba, 0x9b, 0x34, 0x13, 0xca, 0x09, 0x10, 0x11, 0x91, 0xab, 0x09, 0x16, 0x0b, - 0xc3, 0x9d, 0x52, 0x11, 0xb2, 0xaf, 0x11, 0x08, 0x25, 0xba, 0x99, 0x29, 0x26, 0xb8, 0x1b, 0xd1, - 0x4a, 0x03, 0x20, 0xb8, 0x9a, 0x9a, 0x33, 0x1d, 0x07, 0xbb, 0x38, 0xb1, 0x40, 0xa1, 0x39, 0xcf, - 0x33, 0x8b, 0x06, 0x0b, 0xc3, 0x7a, 0xb2, 0x89, 0x1a, 0x84, 0x1b, 0x12, 0xa1, 0x8f, 0x03, 0x1a, - 0xa3, 0x2a, 0x99, 0x21, 0xc9, 0xca, 0x79, 0x95, 0x1a, 0x01, 0xbc, 0x19, 0x55, 0x90, 0x0b, 0x88, - 0x08, 0x13, 0x09, 0xec, 0x40, 0x83, 0xab, 0x19, 0xa8, 0x74, 0x81, 0xc8, 0x0c, 0x13, 0x19, 0xe0, - 0x30, 0xb0, 0x59, 0xb1, 0x0c, 0x08, 0x25, 0x98, 0x98, 0xab, 0x41, 0x23, 0x91, 0xed, 0x29, 0x13, - 0x18, 0xd9, 0x88, 0x51, 0xb0, 0x38, 0xba, 0x11, 0x80, 0x10, 0xa9, 0x80, 0x6c, 0x06, 0xad, 0x20, - 0x08, 0x42, 0xda, 0x81, 0x19, 0xa1, 0x22, 0x01, 0xfc, 0x28, 0x92, 0x48, 0xb2, 0x0d, 0x92, 0x11, - 0x9a, 0xb0, 0x73, 0xd0, 0x19, 0x00, 0x02, 0x99, 0x99, 0x23, 0xca, 0x45, 0xac, 0x13, 0x8b, 0xa2, - 0x6a, 0x92, 0xa9, 0x9d, 0x27, 0xaa, 0x88, 0x51, 0xa0, 0x08, 0x99, 0x00, 0x38, 0x87, 0x9b, 0x90, - 0x01, 0x0e, 0x37, 0xdb, 0x2a, 0x23, 0x98, 0x98, 0xa8, 0x38, 0x15, 0x99, 0xdb, 0x30, 0x00, 0x12, - 0x9b, 0xb3, 0xbf, 0x70, 0x12, 0xaa, 0x89, 0x1a, 0x37, 0xcb, 0x18, 0x40, 0xc1, 0x1b, 0x90, 0x35, - 0xca, 0x10, 0x89, 0x81, 0x18, 0x99, 0x35, 0x9c, 0xb8, 0x58, 0xa3, 0x0c, 0x24, 0xa0, 0xae, 0x13, - 0x19, 0x06, 0x9a, 0xcb, 0x51, 0x01, 0xa0, 0x0c, 0x12, 0x8a, 0x10, 0x01, 0x10, 0xde, 0x51, 0x91, - 0xb9, 0x19, 0x12, 0x03, 0xb9, 0xac, 0x73, 0xc2, 0x08, 0x98, 0x18, 0x91, 0x11, 0x39, 0xf2, 0x3d, - 0x90, 0x23, 0xa9, 0xfd, 0x59, 0x84, 0x99, 0x90, 0x00, 0x2a, 0x85, 0x9b, 0x81, 0x19, 0x11, 0x14, - 0xad, 0xa1, 0x4c, 0x85, 0x8a, 0x89, 0x31, 0xa0, 0x28, 0xda, 0x21, 0x00, 0x99, 0x23, 0xbf, 0x23, - 0x80, 0x11, 0xba, 0x00, 0x21, 0xac, 0x23, 0xad, 0x4a, 0x27, 0x9e, 0x10, 0x04, 0x9b, 0x81, 0x8a, - 0x27, 0xac, 0x18, 0x12, 0x2b, 0x87, 0x9d, 0x01, 0x08, 0x08, 0x43, 0xea, 0x28, 0x90, 0x38, 0x92, - 0x9e, 0x32, 0xd8, 0x28, 0x90, 0x01, 0x28, 0xb1, 0x09, 0xa9, 0x00, 0x65, 0xe0, 0x39, 0xb0, 0x22, - 0x9c, 0x11, 0x9a, 0x31, 0x11, 0xb8, 0x9c, 0x03, 0x9f, 0x54, 0x02, 0xcb, 0x1b, 0x93, 0x38, 0xa8, - 0x20, 0x80, 0xe1, 0x4a, 0xe0, 0x60, 0xb0, 0x38, 0xb8, 0x09, 0x31, 0x98, 0x85, 0x2d, 0xb4, 0x2d, - 0xb1, 0x4a, 0x84, 0x18, 0xda, 0x20, 0x08, 0xc2, 0x39, 0xc2, 0x29, 0x40, 0xc5, 0x8f, 0x13, 0x8a, - 0x22, 0xa9, 0x89, 0x19, 0x22, 0x03, 0xae, 0x28, 0x84, 0x1a, 0xd8, 0x19, 0x10, 0x15, 0x9a, 0x99, - 0xba, 0x71, 0x12, 0x81, 0xca, 0x8c, 0x12, 0x19, 0x83, 0x31, 0x10, 0xfd, 0x0a, 0x11, 0x32, 0xe9, - 0x58, 0xb1, 0x91, 0x8f, 0x05, 0x0a, 0x11, 0x88, 0xcb, 0x48, 0x11, 0x80, 0x08, 0xba, 0x18, 0x30, - 0xa2, 0x8e, 0x04, 0x09, 0x15, 0xeb, 0x2a, 0x81, 0x54, 0xc8, 0x89, 0x8a, 0x14, 0x28, 0xc0, 0x39, - 0xb0, 0x18, 0x23, 0xce, 0x31, 0xa8, 0x35, 0xba, 0xcb, 0x6a, 0x04, 0x88, 0xa9, 0x09, 0x42, 0xc1, - 0x4b, 0xa5, 0x8c, 0x12, 0x02, 0xdb, 0x89, 0x33, 0x13, 0xd8, 0x9f, 0x33, 0x99, 0x91, 0x18, 0xba, - 0x52, 0x80, 0x91, 0x9b, 0x18, 0x23, 0x91, 0x05, 0xdf, 0x11, 0x30, 0xa4, 0x9c, 0x80, 0x30, 0xb2, - 0x0e, 0x43, 0xb8, 0x0b, 0x81, 0x40, 0xa3, 0x9e, 0x30, 0x82, 0xca, 0x3a, 0x02, 0x04, 0xae, 0x23, - 0x98, 0xa9, 0x4b, 0x27, 0xca, 0x8a, 0x22, 0x32, 0xd1, 0x8b, 0xa1, 0x61, 0xc8, 0x40, 0x80, 0xba, - 0x58, 0x92, 0x2a, 0xf0, 0x1a, 0x54, 0xc8, 0x1b, 0x12, 0x18, 0xa8, 0x01, 0x9a, 0x83, 0x8c, 0x44, - 0xb0, 0x0b, 0x94, 0x2b, 0xa3, 0x8b, 0x28, 0x96, 0x5b, 0xe3, 0x0c, 0x33, 0xb1, 0x0c, 0x81, 0x28, - 0x03, 0xcc, 0x1a, 0x15, 0x88, 0x10, 0xb8, 0x8d, 0x90, 0x70, 0x95, 0x0c, 0x81, 0x18, 0x90, 0xa9, - 0x4a, 0x06, 0xba, 0x18, 0x01, 0x8a, 0x47, 0xaa, 0xa0, 0x0d, 0x15, 0x88, 0x90, 0x88, 0x9a, 0x27, - 0x9a, 0xba, 0x72, 0xb1, 0x00, 0x99, 0x13, 0x9a, 0x00, 0x51, 0xf8, 0x29, 0x02, 0x09, 0x89, 0xaa, - 0x73, 0xa1, 0x8b, 0x81, 0x18, 0x21, 0x11, 0xf0, 0x8c, 0x08, 0x27, 0xda, 0x31, 0xa8, 0x10, 0xa9, - 0x01, 0x01, 0x98, 0x28, 0x32, 0xf9, 0x3d, 0xa1, 0x38, 0xb1, 0x19, 0x80, 0xfb, 0x70, 0xc3, 0x1a, - 0x81, 0x81, 0x9e, 0x23, 0x31, 0xf8, 0x2b, 0x01, 0x80, 0x88, 0x99, 0x43, 0x08, 0xd8, 0x3a, 0xa1, - 0x58, 0xb1, 0x19, 0xca, 0x32, 0x28, 0x07, 0xcb, 0x89, 0x42, 0x30, 0xf8, 0x0c, 0x12, 0x21, 0xb8, - 0x9a, 0x98, 0x18, 0x54, 0x90, 0xa3, 0xbf, 0x34, 0x08, 0xea, 0x30, 0x10, 0xa1, 0x8f, 0x20, 0x00, - 0x03, 0xbb, 0x0a, 0x13, 0x9b, 0x27, 0xb8, 0xab, 0x18, 0x14, 0x22, 0xdb, 0x9a, 0x72, 0xb1, 0x28, - 0xcb, 0x64, 0x98, 0xa8, 0x2b, 0x06, 0x99, 0x09, 0x00, 0x12, 0x9b, 0x11, 0x2a, 0xa4, 0xbb, 0x58, - 0x97, 0x8e, 0x23, 0x8a, 0x90, 0x1c, 0x92, 0x61, 0xb0, 0x89, 0x09, 0x14, 0x8a, 0x08, 0x82, 0x39, - 0xc4, 0x0f, 0x92, 0x3a, 0x92, 0x31, 0xd8, 0xad, 0x68, 0x14, 0xb8, 0xab, 0x20, 0x04, 0x89, 0x00, - 0xd0, 0x4b, 0x94, 0x19, 0xa1, 0x9c, 0x81, 0x42, 0x88, 0x99, 0x25, 0xbc, 0x00, 0x00, 0x59, 0x07, - 0xaa, 0xb9, 0x61, 0x80, 0x10, 0x9b, 0x10, 0x9a, 0x88, 0x55, 0xc9, 0x20, 0x00, 0xda, 0x30, 0x81, - 0x18, 0xc0, 0xaa, 0x7a, 0x84, 0x9a, 0xa8, 0x70, 0xa1, 0x29, 0x01, 0xfa, 0x39, 0x83, 0x18, 0xe9, - 0x28, 0x11, 0xc0, 0x2a, 0x92, 0x3b, 0x04, 0xc8, 0x0b, 0x53, 0x80, 0x83, 0x9f, 0x88, 0x18, 0x32, - 0x03, 0xfd, 0x19, 0x21, 0x00, 0x98, 0xbc, 0x42, 0x12, 0xb8, 0x99, 0x18, 0x01, 0x33, 0x31, 0xfc, - 0x0f, 0x93, 0x70, 0x90, 0xaa, 0x19, 0x15, 0x9a, 0x82, 0x0a, 0x99, 0x80, 0x69, 0x05, 0xab, 0x00, - 0x1a, 0xb3, 0x2b, 0x00, 0x47, 0xca, 0x19, 0x12, 0xba, 0x12, 0x2a, 0x17, 0xbf, 0x30, 0x13, 0x99, - 0x20, 0xde, 0x40, 0x91, 0x88, 0x80, 0x0a, 0x34, 0xc0, 0x2a, 0xd0, 0x19, 0x11, 0x32, 0xe9, 0x9a, - 0x20, 0x15, 0x9c, 0x03, 0x1a, 0xa3, 0x9a, 0x8e, 0x45, 0x90, 0x89, 0x99, 0xba, 0x54, 0xb9, 0x41, - 0x81, 0x9d, 0x11, 0x89, 0x53, 0xb8, 0x88, 0x00, 0xa8, 0x1b, 0x45, 0x91, 0xbd, 0x62, 0xa1, 0x9a, - 0x1a, 0x05, 0x48, 0xb1, 0xdb, 0x48, 0x82, 0x9a, 0x13, 0xbc, 0x02, 0x29, 0x16, 0xda, 0x3a, 0x03, - 0x18, 0xc8, 0xbb, 0x68, 0x04, 0x89, 0x92, 0x9b, 0x18, 0x01, 0x81, 0x50, 0xf8, 0x59, 0xb1, 0x39, - 0xc9, 0x28, 0x35, 0xd0, 0x9b, 0x89, 0x53, 0x92, 0x0a, 0x02, 0xcc, 0x19, 0x33, 0x99, 0x01, 0x8b, - 0x89, 0x02, 0x7a, 0xa3, 0x78, 0xc0, 0x0b, 0x21, 0x98, 0x12, 0xbb, 0x68, 0x04, 0xbb, 0xad, 0x63, - 0x02, 0xba, 0x81, 0x1b, 0x05, 0x88, 0x98, 0xea, 0x38, 0x26, 0xc8, 0x9c, 0x31, 0x05, 0xa9, 0x8a, - 0x01, 0x29, 0x44, 0xc0, 0x9d, 0x38, 0x14, 0xca, 0x10, 0xa0, 0x31, 0x92, 0x8c, 0xa2, 0x1e, 0x25, - 0xa9, 0x99, 0x0b, 0x25, 0x81, 0xac, 0x01, 0x98, 0x20, 0x22, 0xa0, 0xac, 0x73, 0xa9, 0x98, 0x34, - 0x9d, 0x95, 0x1c, 0x92, 0x1b, 0x13, 0x22, 0xb9, 0xcd, 0x39, 0x04, 0x8d, 0x15, 0x88, 0x8b, 0x93, - 0x0e, 0x02, 0x00, 0x20, 0xbc, 0x10, 0x42, 0x82, 0xdf, 0x40, 0x81, 0xa8, 0x19, 0xa1, 0x08, 0x71, - 0xb2, 0x0c, 0x98, 0x19, 0x63, 0xc1, 0x2b, 0x83, 0x89, 0xab, 0x14, 0x9b, 0x46, 0xa1, 0xac, 0x10, - 0x98, 0x63, 0x91, 0xbb, 0x39, 0x82, 0x01, 0x0b, 0xc8, 0x73, 0x94, 0xac, 0x88, 0x40, 0x13, 0xc8, - 0x9d, 0x81, 0x40, 0x02, 0xab, 0x00, 0x0a, 0x27, 0xc9, 0x8b, 0x04, 0x38, 0x87, 0xcb, 0x29, 0x02, - 0x18, 0x01, 0xbd, 0x42, 0x98, 0x81, 0x08, 0xcb, 0x72, 0xa3, 0xab, 0x8b, 0x04, 0x59, 0x03, 0xba, - 0x8c, 0x22, 0x89, 0x12, 0x08, 0xda, 0x4a, 0x15, 0xba, 0x4a, 0xa3, 0x4a, 0xa5, 0xaf, 0x42, 0x88, - 0x08, 0x80, 0x88, 0x9a, 0x20, 0x03, 0x09, 0xc0, 0x1c, 0x27, 0x9a, 0x80, 0xa9, 0x31, 0xbf, 0x63, - 0x91, 0x9a, 0x91, 0x3a, 0x07, 0xab, 0x29, 0x83, 0x48, 0xb0, 0x0b, 0x00, 0x00, 0x28, 0x07, 0x9f, - 0x81, 0x29, 0x35, 0xc9, 0x8c, 0x32, 0xa1, 0x9b, 0x30, 0x88, 0x52, 0x99, 0xb9, 0x8e, 0x31, 0x15, - 0xaa, 0x90, 0x0d, 0x44, 0xa9, 0x08, 0x81, 0x09, 0x03, 0xdb, 0x0c, 0x37, 0xa8, 0x8a, 0x94, 0x8e, - 0x13, 0x99, 0x22, 0x98, 0x81, 0xac, 0x08, 0xb1, 0x7c, 0x05, 0xa8, 0x9d, 0x21, 0x02, 0x18, 0xb0, - 0x1b, 0x01, 0x9a, 0x46, 0xbb, 0x08, 0x32, 0x90, 0xdc, 0x21, 0x0a, 0x06, 0x19, 0xd0, 0x8a, 0x41, - 0xb1, 0x1c, 0x15, 0x1b, 0xa2, 0x9d, 0x82, 0x19, 0x54, 0x91, 0x9c, 0xa9, 0x59, 0x23, 0xc9, 0x30, - 0xb9, 0xb0, 0x1c, 0x27, 0x99, 0x11, 0xda, 0x19, 0x84, 0x89, 0x11, 0x81, 0x99, 0x02, 0xcf, 0x33, - 0x98, 0x0a, 0x25, 0xa8, 0xfb, 0x3a, 0x06, 0x09, 0xc2, 0x0a, 0x02, 0x18, 0x99, 0x21, 0x23, 0xbe, - 0x43, 0xcd, 0x28, 0x14, 0x99, 0x18, 0xc8, 0x1a, 0x21, 0x16, 0xea, 0x29, 0x01, 0x00, 0xb8, 0x18, - 0x03, 0x90, 0x1b, 0x85, 0xbf, 0x30, 0x14, 0x88, 0xb0, 0x0e, 0x93, 0x3b, 0x02, 0x33, 0xbd, 0x88, - 0x88, 0x0c, 0x47, 0xa8, 0x8a, 0x89, 0x34, 0xc1, 0x0c, 0x15, 0xba, 0x09, 0x51, 0x91, 0xbb, 0x38, - 0x26, 0xd9, 0x89, 0x20, 0x85, 0xab, 0x11, 0x29, 0x26, 0xab, 0x99, 0x1c, 0x33, 0x11, 0xd0, 0x8b, - 0x99, 0x31, 0x27, 0xb8, 0xbc, 0x38, 0x04, 0x18, 0xa3, 0xaf, 0x35, 0xa9, 0x8a, 0x10, 0x08, 0x04, - 0x9a, 0x88, 0x2a, 0xa4, 0x6a, 0xc2, 0x0c, 0x02, 0x24, 0xcb, 0xca, 0x60, 0x02, 0x09, 0x99, 0x99, - 0x28, 0x93, 0x79, 0xa1, 0x1a, 0xb1, 0x58, 0xc0, 0x2b, 0x84, 0x89, 0x28, 0xd0, 0x8c, 0x25, 0x90, - 0xbb, 0x72, 0x01, 0xf8, 0x3a, 0x93, 0x29, 0xa2, 0x0a, 0xc9, 0x29, 0x53, 0xc3, 0x9d, 0x02, 0x20, - 0xc9, 0x30, 0x80, 0x90, 0x30, 0x82, 0xfb, 0x8d, 0x62, 0x92, 0xba, 0x28, 0x14, 0xc9, 0x19, 0xb8, - 0x58, 0x33, 0xb0, 0xcc, 0x1a, 0x14, 0x30, 0xd0, 0x09, 0xb8, 0x2b, 0x16, 0x32, 0xca, 0x9c, 0x32, - 0xd9, 0x29, 0x33, 0x83, 0x8f, 0x91, 0x4a, 0xb1, 0x0c, 0x43, 0xb0, 0x0a, 0x08, 0x12, 0x90, 0x8b, - 0x02, 0x35, 0xcf, 0x10, 0x10, 0x11, 0x80, 0xda, 0x71, 0xd1, 0x8c, 0x31, 0x03, 0xbb, 0x00, 0x00, - 0x82, 0x1b, 0x05, 0x89, 0xfb, 0x78, 0x81, 0xa9, 0x0a, 0x22, 0x24, 0xa9, 0xdc, 0x48, 0x81, 0x28, - 0xb1, 0x0c, 0x93, 0x28, 0x80, 0xf0, 0x1c, 0x23, 0x1a, 0xb3, 0x8e, 0x88, 0x64, 0xb0, 0x89, 0x89, - 0x32, 0x83, 0xed, 0x30, 0xa1, 0x28, 0x93, 0xac, 0x88, 0x09, 0x37, 0xa0, 0x89, 0xad, 0x53, 0x80, - 0x09, 0x80, 0x81, 0xac, 0x88, 0x30, 0x24, 0xb0, 0x1c, 0xa2, 0x98, 0x0b, 0x14, 0xbb, 0x27, 0x8c, - 0x16, 0xbc, 0x32, 0x98, 0x00, 0x98, 0x0c, 0x25, 0xd9, 0x2a, 0x15, 0x89, 0xa2, 0x9d, 0x01, 0x10, - 0x11, 0x24, 0xeb, 0x08, 0xc9, 0x38, 0x03, 0x08, 0x09, 0xa6, 0x0e, 0xb2, 0x2a, 0x35, 0x83, 0xaf, - 0x08, 0x00, 0x21, 0x98, 0x10, 0x89, 0xd0, 0x0c, 0x34, 0xa8, 0x22, 0x80, 0xbb, 0xbd, 0x19, 0x75, - 0x03, 0xbc, 0x19, 0x91, 0x0a, 0x23, 0x00, 0x01, 0xb9, 0x18, 0xfb, 0x2a, 0x00, 0x15, 0x28, 0xfb, - 0x6a, 0xa0, 0x08, 0x63, 0xa0, 0x8b, 0xb8, 0x3a, 0x25, 0x11, 0x90, 0xac, 0x99, 0xab, 0x64, 0x10, - 0xb3, 0x0a, 0xb8, 0xbc, 0x71, 0x83, 0x29, 0x82, 0xcf, 0x09, 0x53, 0x82, 0xaa, 0x80, 0x9c, 0x34, - 0xc0, 0x8c, 0x52, 0x81, 0xab, 0x22, 0xdb, 0x40, 0x12, 0xa8, 0xaa, 0x29, 0x14, 0x12, 0xf8, 0x8c, - 0x23, 0x08, 0xa3, 0x9f, 0x19, 0x34, 0x98, 0xa0, 0x8d, 0x12, 0x0a, 0x06, 0x9d, 0x23, 0x8a, 0x10, - 0xca, 0x29, 0x14, 0x11, 0xca, 0x4a, 0xc1, 0x2c, 0x05, 0xa9, 0x20, 0xc0, 0x19, 0x28, 0x02, 0x18, - 0xea, 0x0b, 0x17, 0x18, 0xb0, 0x1b, 0x83, 0x1b, 0x01, 0x94, 0xff, 0x48, 0x04, 0xb9, 0x8a, 0x12, - 0x09, 0x23, 0xc9, 0x89, 0x10, 0x33, 0xe9, 0x19, 0x91, 0x30, 0x81, 0xdb, 0x2a, 0x15, 0x19, 0x16, - 0xec, 0x0a, 0x34, 0xa0, 0x8a, 0x80, 0x08, 0x21, 0x91, 0x9c, 0x00, 0x90, 0x62, 0xa0, 0xbb, 0x74, - 0xb0, 0x89, 0x10, 0x81, 0x0a, 0x06, 0xa9, 0x9a, 0x42, 0xb1, 0x89, 0x0d, 0x47, 0xb9, 0x8a, 0x10, - 0x23, 0x08, 0x02, 0xaf, 0xd8, 0x69, 0x05, 0xba, 0x18, 0x01, 0x89, 0x02, 0x9d, 0x32, 0x82, 0xab, - 0xb9, 0x39, 0x54, 0x15, 0xbd, 0x00, 0x09, 0x13, 0x12, 0xea, 0x9a, 0x50, 0x14, 0xca, 0x8a, 0x11, - 0x52, 0xb2, 0x9d, 0x18, 0x22, 0x9a, 0x20, 0xa8, 0x18, 0x8a, 0x15, 0xbb, 0x41, 0xa2, 0x2a, 0xf3, - 0x9f, 0x36, 0xb9, 0x09, 0x01, 0x80, 0x1a, 0x95, 0x0d, 0x12, 0x08, 0xb8, 0x19, 0x02, 0x21, 0xac, - 0x11, 0xcb, 0x73, 0xb6, 0x8b, 0x81, 0x19, 0x64, 0xb1, 0x9e, 0x30, 0x80, 0x02, 0x8a, 0xba, 0x49, - 0x03, 0x34, 0xdc, 0x09, 0x20, 0x14, 0xbb, 0xab, 0x58, 0x05, 0x08, 0xb1, 0xad, 0x30, 0x23, 0xa0, - 0xac, 0x32, 0x01, 0xa9, 0x1c, 0xc2, 0x70, 0x93, 0xcc, 0x1a, 0x22, 0x32, 0xd2, 0x8d, 0x02, 0x9a, - 0x41, 0x82, 0x9a, 0x09, 0x10, 0xb0, 0xbf, 0x55, 0x01, 0xda, 0x2a, 0x22, 0x92, 0xdb, 0x19, 0x13, - 0x88, 0x33, 0xfc, 0x8a, 0x43, 0x90, 0x29, 0xe8, 0x19, 0x33, 0x92, 0x9f, 0x01, 0x29, 0x84, 0x8b, - 0xb9, 0x7a, 0x85, 0x9a, 0x88, 0x00, 0x21, 0x00, 0xcb, 0x99, 0x62, 0x02, 0x90, 0xdc, 0x19, 0x43, - 0x82, 0xcb, 0x0a, 0x12, 0x38, 0x84, 0xac, 0x28, 0x22, 0xfa, 0x2a, 0x01, 0x24, 0xab, 0x91, 0xaa, - 0x08, 0x71, 0x87, 0x9c, 0x80, 0x41, 0x81, 0xad, 0x28, 0x23, 0x91, 0xbe, 0x00, 0x21, 0x13, 0xa9, - 0x9a, 0x9c, 0x54, 0x91, 0xa9, 0x88, 0x29, 0x16, 0x90, 0xfb, 0x29, 0x34, 0x80, 0xcc, 0x89, 0x70, - 0x83, 0xab, 0x9a, 0x42, 0x92, 0x08, 0x90, 0xbc, 0x40, 0x32, 0xa1, 0xbc, 0x19, 0x22, 0x13, 0xdb, - 0x8c, 0x36, 0xc0, 0x9b, 0x18, 0x36, 0xa8, 0xa8, 0x1b, 0x33, 0xc8, 0x28, 0x93, 0xcf, 0x22, 0x21, - 0xa2, 0xaf, 0x38, 0x34, 0xe9, 0x1a, 0x80, 0x32, 0xa1, 0xad, 0x21, 0x03, 0xcc, 0x18, 0x08, 0x23, - 0x22, 0xb0, 0xaf, 0x0b, 0x25, 0x22, 0xc0, 0xac, 0x2b, 0x26, 0x90, 0xb9, 0x1b, 0x26, 0x98, 0xad, - 0x31, 0x32, 0xc0, 0x08, 0xca, 0x18, 0x22, 0x23, 0xdf, 0x28, 0x03, 0x08, 0xc0, 0x8a, 0x20, 0x27, - 0xc9, 0x9a, 0x00, 0x44, 0x90, 0x89, 0xdb, 0x50, 0x82, 0x90, 0xac, 0x02, 0x20, 0x24, 0xea, 0x8a, - 0x41, 0x92, 0xaa, 0x89, 0x41, 0x92, 0x09, 0xb8, 0xaa, 0x64, 0x14, 0xca, 0xab, 0x08, 0x65, 0x91, - 0xab, 0x20, 0xa0, 0x29, 0x15, 0xb9, 0xbb, 0x74, 0xa1, 0x8b, 0x12, 0x8b, 0x42, 0xc1, 0x1b, 0x81, - 0x38, 0x21, 0xf0, 0x1c, 0x05, 0xb8, 0x08, 0x08, 0x88, 0x32, 0x9a, 0x33, 0xf8, 0x0f, 0x14, 0x80, - 0x8b, 0x01, 0x88, 0xb9, 0x69, 0x04, 0x8a, 0xd0, 0x0b, 0x62, 0x92, 0x9b, 0x19, 0x04, 0x89, 0x84, - 0x9d, 0x13, 0x0a, 0xc1, 0x50, 0xc8, 0x19, 0x20, 0x06, 0xbc, 0x20, 0x12, 0x80, 0xcb, 0x30, 0xa0, - 0x49, 0x91, 0x10, 0xea, 0x8a, 0x25, 0x80, 0x99, 0x09, 0x11, 0xb1, 0x0c, 0x24, 0x18, 0x27, 0xfb, - 0x0b, 0x13, 0x8a, 0x34, 0x90, 0xaa, 0x8c, 0xbb, 0x77, 0x90, 0x0a, 0x08, 0x80, 0x19, 0x12, 0x88, - 0xc8, 0x8d, 0x24, 0xc8, 0x38, 0xa4, 0x49, 0xd2, 0x0b, 0x21, 0x98, 0x80, 0x39, 0x83, 0x8c, 0x93, - 0x8f, 0xa3, 0x7b, 0xa1, 0x18, 0x80, 0x91, 0x8d, 0x31, 0x02, 0xc8, 0x8a, 0x99, 0x21, 0x52, 0x04, - 0xf9, 0x0b, 0x04, 0x28, 0xa2, 0xbc, 0x34, 0xa0, 0x1a, 0x91, 0x8e, 0x13, 0x31, 0xa4, 0xdf, 0x20, - 0x91, 0x18, 0x02, 0xd9, 0x39, 0xa2, 0x5a, 0xd1, 0x0b, 0x21, 0x17, 0xba, 0x08, 0x1a, 0x15, 0x98, - 0x82, 0xb8, 0x9f, 0x44, 0xb0, 0x1a, 0x01, 0x10, 0xd0, 0x8b, 0x32, 0x80, 0x11, 0x90, 0xaf, 0x88, - 0x41, 0x24, 0xe8, 0x1a, 0x90, 0x8a, 0x71, 0x83, 0xaa, 0x00, 0x98, 0xab, 0x51, 0x25, 0xc8, 0x9b, - 0x02, 0x59, 0x94, 0x9c, 0x12, 0x88, 0xa8, 0x20, 0x91, 0x38, 0x21, 0xf3, 0x9d, 0x9a, 0x37, 0x99, - 0x09, 0x93, 0x8e, 0x43, 0xb0, 0x9d, 0x32, 0x81, 0x28, 0xda, 0x28, 0x81, 0xa9, 0x51, 0xc0, 0x09, - 0x08, 0x45, 0xd8, 0x8a, 0x42, 0xa0, 0x88, 0x19, 0xa4, 0x1d, 0x02, 0x10, 0xca, 0x19, 0x03, 0x91, - 0x4b, 0xb2, 0xad, 0x35, 0x99, 0xa8, 0x18, 0xa0, 0x60, 0xb1, 0x3a, 0x04, 0xcb, 0x8f, 0x36, 0xb8, - 0x19, 0x90, 0x2a, 0x14, 0xcc, 0x48, 0x01, 0x99, 0x09, 0xb8, 0x2c, 0x37, 0xa8, 0x8b, 0xd1, 0x3b, - 0x27, 0x90, 0xaa, 0x80, 0x0a, 0x17, 0xa9, 0x18, 0x01, 0x98, 0x19, 0x93, 0xcc, 0x59, 0x15, 0xba, - 0x9a, 0x31, 0x20, 0x03, 0xcc, 0x1b, 0x04, 0x8a, 0x11, 0xa1, 0x5b, 0x16, 0xda, 0x18, 0x01, 0xc9, - 0x50, 0xa1, 0x0a, 0x22, 0xb0, 0x9a, 0x59, 0x92, 0x20, 0xc0, 0xaf, 0x15, 0x2a, 0x93, 0xad, 0x29, - 0x15, 0xa8, 0xaa, 0x11, 0x21, 0x16, 0xbb, 0xa9, 0x0a, 0x33, 0x37, 0xba, 0xbb, 0x10, 0x44, 0x31, - 0xf0, 0x2f, 0x00, 0x80, 0x89, 0x01, 0x8a, 0x43, 0xaa, 0x92, 0x9f, 0x22, 0x03, 0x9b, 0x81, 0x98, - 0x31, 0xfb, 0x3a, 0x01, 0x41, 0xa3, 0xbf, 0x00, 0x31, 0x98, 0x22, 0x8a, 0xa3, 0x9f, 0x81, 0x78, - 0x96, 0x9a, 0x98, 0x00, 0x10, 0x53, 0xa2, 0xcb, 0x9f, 0x43, 0x81, 0xa8, 0x8d, 0x22, 0x00, 0xa9, - 0x1a, 0x12, 0xa2, 0x3b, 0xa5, 0x9f, 0x31, 0x15, 0xa9, 0xba, 0x2a, 0x15, 0x23, 0xec, 0x88, 0x30, - 0xa3, 0x0c, 0xb1, 0x68, 0x91, 0x08, 0xa8, 0x89, 0x20, 0x54, 0x82, 0xcf, 0x19, 0x24, 0xa9, 0x10, - 0xa9, 0x90, 0x28, 0x02, 0x31, 0xb9, 0xa9, 0x78, 0xb1, 0x8e, 0x44, 0xa0, 0x88, 0x9b, 0x12, 0x22, - 0xb0, 0x8f, 0x82, 0x6a, 0xb3, 0x8d, 0x01, 0x21, 0x99, 0x82, 0x0c, 0xc1, 0x0e, 0x24, 0x00, 0x9b, - 0x12, 0xa9, 0xb9, 0x1b, 0x77, 0x91, 0xbb, 0x39, 0x04, 0x9a, 0x33, 0xc9, 0x09, 0x9d, 0x17, 0x8a, - 0x82, 0x89, 0x00, 0x31, 0xfb, 0x1a, 0x32, 0x02, 0xda, 0x3a, 0x15, 0xfa, 0x28, 0x92, 0x1a, 0xa3, - 0x8c, 0x23, 0x99, 0x19, 0x73, 0xb1, 0xaf, 0x30, 0x02, 0x99, 0x00, 0x80, 0x80, 0x9a, 0x22, 0xec, - 0x52, 0xa0, 0x28, 0x90, 0xa9, 0x69, 0xb2, 0x78, 0xc1, 0x8b, 0x30, 0xa3, 0x0a, 0x09, 0x36, 0xd0, - 0xac, 0x38, 0x14, 0x18, 0x80, 0xd8, 0x8e, 0x22, 0x11, 0x91, 0xcb, 0x0a, 0x23, 0x20, 0xa0, 0x1a, - 0x52, 0xd1, 0x9b, 0x2b, 0x37, 0xa9, 0x08, 0xb8, 0x1b, 0x26, 0xb9, 0x62, 0xc0, 0x8a, 0x30, 0x04, - 0xcb, 0x20, 0x11, 0xd1, 0x1b, 0x01, 0x91, 0x9b, 0x69, 0x84, 0x8a, 0xb9, 0x39, 0x47, 0xa9, 0x09, - 0xa9, 0x89, 0x46, 0x80, 0x98, 0x8c, 0xa1, 0x79, 0x93, 0x0b, 0xb0, 0x2b, 0x37, 0xca, 0x19, 0x10, - 0x02, 0xa9, 0xbb, 0x72, 0xc1, 0x38, 0x11, 0xe8, 0x1a, 0x93, 0x2c, 0x84, 0x9a, 0x44, 0xc9, 0x8b, - 0x63, 0xb0, 0x2b, 0x15, 0xc9, 0x0b, 0x23, 0xa8, 0x31, 0x91, 0xc9, 0x2b, 0xa2, 0x79, 0x94, 0x8d, - 0x12, 0xaa, 0x38, 0x83, 0xb8, 0x9c, 0x53, 0x03, 0xcc, 0x10, 0x28, 0xd8, 0x70, 0x92, 0xac, 0x00, - 0x01, 0x32, 0xc8, 0x8a, 0x03, 0xbb, 0x31, 0x09, 0x27, 0xa1, 0x0d, 0xc9, 0x1a, 0x63, 0xa3, 0x1b, - 0xb3, 0xac, 0x19, 0x25, 0xa8, 0x21, 0xbb, 0x11, 0x82, 0xbf, 0x47, 0xb0, 0x0c, 0x04, 0xba, 0x29, - 0x23, 0x22, 0xe8, 0xab, 0x1a, 0x26, 0x8b, 0x23, 0x09, 0xd9, 0x19, 0x11, 0x90, 0x1a, 0xd4, 0x5a, - 0x85, 0x9d, 0x00, 0x30, 0x82, 0xaa, 0x9a, 0x13, 0x40, 0xb2, 0x8c, 0x81, 0x30, 0xcc, 0x64, 0xe8, - 0x2a, 0x14, 0xa8, 0x99, 0x8a, 0x34, 0x91, 0x98, 0x8c, 0x91, 0x59, 0xc1, 0x50, 0xa1, 0x9c, 0x32, - 0xc1, 0x5b, 0xa4, 0x8c, 0x22, 0x89, 0x89, 0x42, 0xc0, 0x09, 0x00, 0x90, 0x2a, 0xc1, 0x68, 0x93, - 0x9f, 0x11, 0x12, 0x9b, 0x00, 0x20, 0xfb, 0x29, 0x42, 0x91, 0x8a, 0xaa, 0x31, 0x84, 0x0d, 0x01, - 0x89, 0x09, 0x25, 0xac, 0x90, 0x79, 0xb4, 0x0a, 0xa0, 0x29, 0x15, 0x28, 0xd8, 0x0a, 0x28, 0xa0, - 0x34, 0xea, 0x1a, 0x83, 0x29, 0x15, 0xcb, 0x28, 0xac, 0x36, 0xd9, 0x18, 0x23, 0xdb, 0x38, 0x81, - 0x0a, 0x82, 0xa9, 0x29, 0x87, 0x0e, 0x13, 0x89, 0xba, 0x22, 0x9b, 0x41, 0x80, 0x33, 0xde, 0x18, - 0x81, 0x21, 0x04, 0xcd, 0x20, 0x00, 0x11, 0xa0, 0x9c, 0x22, 0x08, 0xb1, 0x1e, 0xb0, 0x70, 0x85, - 0xba, 0x9a, 0x31, 0x23, 0x81, 0x9d, 0xc1, 0x69, 0xd2, 0x2a, 0x84, 0x89, 0x01, 0x81, 0xda, 0x0a, - 0x43, 0x04, 0xca, 0x89, 0x18, 0x51, 0x91, 0xb9, 0x0b, 0x15, 0x99, 0x12, 0xac, 0x42, 0x13, 0xfb, - 0x0a, 0x99, 0x72, 0x93, 0x8c, 0x98, 0x30, 0x91, 0xba, 0x70, 0xb4, 0x1b, 0x03, 0x98, 0x8c, 0x63, - 0x98, 0x09, 0xb9, 0x2a, 0x45, 0x92, 0xad, 0x02, 0x8a, 0x36, 0xea, 0x18, 0x10, 0xa0, 0x1a, 0x82, - 0x19, 0xa8, 0x33, 0x8d, 0x96, 0x9c, 0x72, 0xb1, 0x9b, 0x32, 0x82, 0x99, 0x9b, 0x15, 0x9a, 0x84, - 0x8c, 0x33, 0xe1, 0x38, 0xb0, 0x9c, 0x32, 0x30, 0xd1, 0x8d, 0x33, 0xb9, 0x88, 0x12, 0x8f, 0x13, - 0x10, 0xd9, 0x0c, 0x34, 0xa1, 0xcb, 0x30, 0x80, 0x92, 0x60, 0xe8, 0x38, 0xa1, 0x3a, 0xa2, 0xfa, - 0x3a, 0x17, 0x98, 0xaa, 0x98, 0x50, 0x12, 0xba, 0x2a, 0x02, 0x08, 0x82, 0xce, 0x30, 0x23, 0xc8, - 0x0a, 0xb9, 0x7b, 0x15, 0x91, 0xcb, 0x8a, 0x43, 0x13, 0xb9, 0x9d, 0x31, 0xb2, 0x0c, 0x01, 0x08, - 0x88, 0x54, 0xc1, 0xac, 0x18, 0x53, 0x91, 0xbc, 0x41, 0x81, 0x09, 0xc9, 0x08, 0x30, 0x34, 0xe0, - 0x8b, 0x81, 0x31, 0x24, 0xe8, 0x8b, 0x02, 0x0a, 0x17, 0xb9, 0x88, 0x34, 0xa8, 0xcd, 0x38, 0x23, - 0x11, 0xfa, 0x1b, 0x03, 0xba, 0x70, 0x91, 0x09, 0x90, 0x2a, 0x84, 0xad, 0x52, 0x81, 0x88, 0xdb, - 0x28, 0x12, 0x30, 0xb2, 0x9f, 0x81, 0x88, 0x12, 0x30, 0x86, 0xcb, 0x0a, 0x21, 0xa9, 0x20, 0x33, - 0xe8, 0x8d, 0x22, 0x00, 0xd1, 0x8d, 0x44, 0xb1, 0x0c, 0x88, 0x31, 0x11, 0xda, 0x18, 0x90, 0x0b, - 0x47, 0xaa, 0x21, 0x99, 0x41, 0xc1, 0x9d, 0x80, 0x63, 0xa1, 0x8b, 0xa8, 0x59, 0x05, 0x99, 0x8a, - 0x81, 0x2a, 0x04, 0x01, 0xdd, 0x29, 0x52, 0x91, 0xda, 0x1a, 0x24, 0x90, 0x98, 0xa9, 0x70, 0xa1, - 0x88, 0x88, 0x08, 0x20, 0x00, 0x12, 0xff, 0x38, 0x12, 0xa1, 0x9c, 0x80, 0x40, 0x93, 0x9d, 0x11, - 0x81, 0x88, 0x99, 0x03, 0x9d, 0x02, 0x38, 0x15, 0xfb, 0x1b, 0x23, 0xa0, 0x89, 0x61, 0xa1, 0x9c, - 0x28, 0x89, 0x57, 0xb9, 0x1b, 0x14, 0xa9, 0x11, 0xaa, 0x12, 0xb8, 0x41, 0x01, 0xe0, 0x8e, 0x24, - 0x92, 0x9c, 0x99, 0x62, 0xa2, 0xab, 0x10, 0x12, 0x22, 0xfb, 0x8c, 0x15, 0x9a, 0x52, 0xb8, 0x09, - 0x99, 0x50, 0x04, 0xbb, 0x08, 0x40, 0x92, 0xab, 0x38, 0x12, 0x08, 0xc0, 0x0c, 0x92, 0x2b, 0x37, - 0xb8, 0x09, 0xea, 0x41, 0xc0, 0x28, 0x92, 0x21, 0xf8, 0x8b, 0x22, 0x21, 0x92, 0xae, 0x20, 0x81, - 0x9b, 0x12, 0x82, 0x6c, 0xb3, 0x1c, 0x90, 0xaa, 0x71, 0x24, 0xd9, 0x8b, 0x82, 0x63, 0xb0, 0x9b, - 0x42, 0xc1, 0x38, 0xc8, 0x8a, 0x53, 0xa1, 0x0a, 0xb2, 0x9e, 0x21, 0x44, 0xa0, 0xbc, 0x1a, 0x43, - 0x02, 0x9a, 0xbc, 0x72, 0xb3, 0x8c, 0x22, 0xb9, 0x50, 0x93, 0xac, 0x00, 0x39, 0x94, 0x28, 0xcb, - 0x18, 0x22, 0x90, 0x10, 0xc9, 0x0c, 0x34, 0xd1, 0x8e, 0x82, 0x38, 0x93, 0x08, 0xd9, 0x28, 0xdc, - 0x43, 0x81, 0xac, 0x63, 0xb0, 0x0a, 0x00, 0x01, 0x10, 0xdb, 0x31, 0x31, 0xe1, 0xab, 0x71, 0x93, - 0x9c, 0x08, 0x21, 0x9a, 0x34, 0xcb, 0x18, 0x80, 0xaa, 0x46, 0xe9, 0x20, 0x00, 0xb0, 0x28, 0xea, - 0x52, 0x88, 0x98, 0x09, 0x99, 0x55, 0xb8, 0x88, 0x89, 0x15, 0x8b, 0x05, 0x9a, 0xa9, 0x61, 0x91, - 0x89, 0xa9, 0x48, 0x94, 0x0a, 0xb1, 0x58, 0xb1, 0x4a, 0x93, 0xbf, 0x42, 0x02, 0xa8, 0xbc, 0x21, - 0x00, 0x62, 0xd0, 0x8a, 0x12, 0x11, 0x9a, 0x1a, 0x00, 0x24, 0xbb, 0x02, 0x9e, 0x82, 0x6a, 0x84, - 0x0b, 0xa8, 0x28, 0x39, 0xc7, 0x1d, 0x04, 0x99, 0x18, 0x00, 0x88, 0x89, 0x30, 0x85, 0xad, 0x18, - 0x12, 0xa0, 0x31, 0xa0, 0xd9, 0x00, 0xad, 0x73, 0xb4, 0x09, 0xb9, 0x62, 0xb0, 0x89, 0x18, 0x14, - 0x00, 0xec, 0x20, 0x80, 0x30, 0x92, 0x88, 0xaf, 0x12, 0x20, 0xb2, 0x0b, 0xc9, 0x70, 0x92, 0xcb, - 0x19, 0x26, 0x99, 0xa8, 0x20, 0x08, 0xc2, 0x2d, 0x15, 0x99, 0x9c, 0x32, 0xb8, 0x1a, 0x01, 0x24, - 0x11, 0xfa, 0x19, 0xb9, 0x62, 0x90, 0x41, 0xcb, 0x81, 0x0c, 0x17, 0xb9, 0x20, 0x90, 0x9a, 0x58, - 0x93, 0x1c, 0x03, 0xea, 0x29, 0x82, 0x8a, 0x11, 0x14, 0xa9, 0xb9, 0x1d, 0x44, 0x91, 0xad, 0x18, - 0x34, 0xa9, 0x88, 0xa1, 0x8e, 0x42, 0xa1, 0x8b, 0x85, 0x8d, 0x34, 0xa9, 0x19, 0x98, 0x20, 0x9a, - 0x85, 0x0e, 0x44, 0xc8, 0x0b, 0x11, 0x08, 0x20, 0x11, 0xeb, 0x19, 0x80, 0x28, 0x16, 0xe9, 0x3a, - 0xa4, 0x8a, 0x02, 0x90, 0x61, 0xd1, 0x8b, 0x12, 0x01, 0xb8, 0x30, 0xfa, 0x40, 0xa2, 0x19, 0x90, - 0x09, 0x41, 0xa3, 0xcf, 0x12, 0x12, 0x99, 0x98, 0xea, 0x68, 0x03, 0xba, 0x0a, 0x11, 0x12, 0x20, - 0xfa, 0x1b, 0x04, 0x0b, 0x81, 0x33, 0xaf, 0x30, 0x82, 0xae, 0x32, 0xb1, 0x78, 0xd1, 0x0b, 0x33, - 0x80, 0xba, 0x10, 0x01, 0xa9, 0x51, 0x81, 0x89, 0xc8, 0x2a, 0x02, 0x00, 0x0f, 0x16, 0xa9, 0xcb, - 0x48, 0x24, 0xb0, 0xac, 0x2b, 0x47, 0xa9, 0x88, 0x99, 0x33, 0xba, 0x42, 0xb8, 0x29, 0x44, 0xd9, - 0x1a, 0x88, 0x42, 0x01, 0xb8, 0xaf, 0x22, 0x24, 0xc8, 0x9c, 0x18, 0x34, 0xa0, 0x88, 0xac, 0x41, - 0xa0, 0x31, 0xfa, 0x1b, 0x13, 0x52, 0xd8, 0x9a, 0x30, 0x16, 0xab, 0x98, 0x20, 0x13, 0x10, 0xf9, - 0x2b, 0x81, 0x31, 0xb1, 0x09, 0x98, 0x1b, 0x17, 0xa8, 0x0b, 0x82, 0x35, 0xef, 0x20, 0x18, 0x03, - 0xad, 0x18, 0x21, 0x81, 0x9c, 0x50, 0xc3, 0x1c, 0x82, 0x9a, 0x19, 0x37, 0xa9, 0xba, 0x1a, 0x63, - 0x12, 0xb9, 0x0c, 0x90, 0x31, 0x21, 0xd1, 0xaf, 0x31, 0x23, 0xd0, 0x8b, 0x01, 0x10, 0x23, 0xf9, - 0x8c, 0x15, 0x09, 0x91, 0x9b, 0x19, 0x27, 0xa9, 0x99, 0x18, 0x22, 0x32, 0xf9, 0x8a, 0x8a, 0x45, - 0x90, 0xa8, 0x89, 0x01, 0x30, 0xf0, 0x29, 0x93, 0x19, 0x81, 0xdc, 0x48, 0x12, 0x01, 0xbd, 0x88, - 0x00, 0x34, 0xc1, 0x8a, 0x21, 0xa8, 0x62, 0xfb, 0x08, 0x61, 0xa1, 0x8b, 0x80, 0x28, 0x12, 0x88, - 0xab, 0x10, 0x23, 0x22, 0xfb, 0x8e, 0x42, 0x82, 0xa8, 0xbd, 0x48, 0x85, 0x89, 0x98, 0x30, 0x81, - 0x18, 0xf1, 0x1d, 0x21, 0x22, 0xd9, 0x9b, 0x09, 0x36, 0x00, 0xb0, 0x0c, 0xc8, 0x49, 0x13, 0x80, - 0xad, 0x53, 0xb9, 0x99, 0x32, 0xa0, 0x44, 0xe8, 0x8c, 0x32, 0x00, 0x81, 0xba, 0x89, 0x60, 0xa3, - 0x1b, 0xc8, 0x31, 0x31, 0xb4, 0xbf, 0x21, 0x01, 0x01, 0xdb, 0x28, 0x21, 0xb3, 0x8c, 0xd9, 0x69, - 0x03, 0x01, 0xaf, 0x80, 0x30, 0x04, 0xb9, 0x9b, 0x42, 0x91, 0x18, 0xe8, 0x2b, 0x26, 0x08, 0xa8, - 0xcb, 0x58, 0x03, 0xba, 0x10, 0x98, 0x02, 0x3a, 0xa4, 0x8c, 0x89, 0x66, 0xd8, 0x0a, 0x11, 0x31, - 0xc0, 0x8b, 0x88, 0x61, 0xa2, 0x8b, 0xa8, 0x72, 0x82, 0x9b, 0x00, 0xa9, 0x58, 0x02, 0x88, 0xcc, - 0x31, 0x82, 0x00, 0xdc, 0x51, 0x91, 0xab, 0x18, 0x14, 0x8a, 0x13, 0xba, 0xbc, 0x28, 0x43, 0x36, - 0xde, 0x21, 0x90, 0x80, 0x0a, 0x04, 0x8b, 0x04, 0xcb, 0x50, 0x82, 0x99, 0x88, 0x8a, 0x12, 0x57, - 0xe8, 0x8a, 0x32, 0xa0, 0x18, 0xa1, 0xc9, 0x2a, 0x17, 0x89, 0x98, 0x09, 0x42, 0x81, 0xcc, 0x0a, - 0x34, 0x10, 0xf8, 0x8a, 0x22, 0x11, 0xb0, 0x1c, 0x90, 0x48, 0x13, 0xdb, 0x01, 0x9d, 0x73, 0x81, - 0xbc, 0x18, 0x33, 0xa2, 0xac, 0x88, 0x30, 0x24, 0xa0, 0xac, 0xa9, 0x71, 0x02, 0x90, 0xbd, 0x12, - 0x29, 0x93, 0x0a, 0x89, 0x63, 0xc0, 0x8a, 0x82, 0x0c, 0x37, 0xd8, 0x2a, 0xa0, 0x00, 0x20, 0x21, - 0xe0, 0x8c, 0x21, 0x10, 0x03, 0xdc, 0x28, 0x83, 0xba, 0x59, 0x84, 0x9a, 0x11, 0x28, 0x93, 0xcf, - 0x09, 0x11, 0x73, 0x91, 0xba, 0x0a, 0x81, 0x40, 0x21, 0xc4, 0x9f, 0x30, 0x81, 0x9a, 0x10, 0x20, - 0xa2, 0x9c, 0x99, 0x59, 0x27, 0x90, 0x9a, 0xa9, 0x0b, 0x27, 0x08, 0x91, 0x8d, 0x13, 0x9b, 0xa1, - 0x3c, 0x17, 0x99, 0x9a, 0x11, 0x90, 0x11, 0x19, 0xb3, 0x9e, 0xa8, 0x61, 0x91, 0x09, 0x20, 0x02, - 0xfb, 0x8b, 0x28, 0x73, 0x96, 0x9c, 0x01, 0x11, 0x98, 0xaa, 0x41, 0x81, 0x99, 0x24, 0xad, 0x88, - 0x22, 0x24, 0x09, 0xf8, 0x1e, 0x03, 0x8a, 0x81, 0x23, 0xfb, 0x89, 0x20, 0x82, 0x48, 0xc0, 0x28, - 0xca, 0x00, 0x19, 0x36, 0xb1, 0x9e, 0x80, 0x51, 0x92, 0xad, 0x30, 0x83, 0x98, 0x9d, 0x42, 0x92, - 0x9c, 0x33, 0xb8, 0xbc, 0x70, 0x02, 0x89, 0xd9, 0x48, 0x92, 0x8a, 0x99, 0x52, 0x91, 0xa9, 0xa8, - 0x38, 0x03, 0x8a, 0x11, 0x0b, 0xc4, 0x8f, 0x52, 0xa1, 0x8a, 0x00, 0x21, 0xb2, 0xaf, 0x72, 0xc3, - 0x0b, 0x02, 0x08, 0x84, 0x9d, 0x12, 0x89, 0x01, 0x88, 0xa2, 0x8c, 0x11, 0x43, 0xc8, 0xbd, 0x30, - 0x14, 0x02, 0xdc, 0x09, 0x00, 0x25, 0x98, 0xbd, 0x42, 0x91, 0x9b, 0x24, 0xa0, 0x2b, 0x94, 0x0b, - 0x02, 0xc9, 0x79, 0x06, 0xba, 0x8c, 0x42, 0x92, 0x1b, 0xa2, 0x8a, 0x01, 0x11, 0xc9, 0x70, 0xe0, - 0x49, 0x92, 0xab, 0x20, 0x81, 0x12, 0xcc, 0x18, 0x21, 0x13, 0xbf, 0x32, 0x80, 0x90, 0x80, 0xbb, - 0x43, 0x43, 0xe0, 0x19, 0xb0, 0x30, 0x18, 0xc1, 0x69, 0x83, 0xae, 0x11, 0x8a, 0x23, 0x99, 0xb9, - 0x18, 0xac, 0x63, 0x01, 0xe9, 0x39, 0x04, 0x90, 0xdb, 0x2a, 0x17, 0x09, 0xa0, 0x1a, 0xc8, 0x30, - 0x45, 0xd9, 0x2a, 0x80, 0x12, 0xa8, 0x9a, 0x41, 0x44, 0xca, 0x89, 0x08, 0x08, 0x34, 0xda, 0x00, - 0x09, 0x00, 0x02, 0xce, 0x21, 0x38, 0x06, 0xbc, 0x0b, 0x53, 0x81, 0x09, 0xcb, 0x61, 0xa0, 0x28, - 0x91, 0x0a, 0x14, 0x9a, 0xd8, 0x8b, 0x44, 0x23, 0xb9, 0xbe, 0x40, 0x81, 0x22, 0x9b, 0xa8, 0x8b, - 0x53, 0x12, 0xfb, 0x0a, 0x43, 0xa0, 0xb8, 0x3b, 0x93, 0x4c, 0x86, 0xba, 0x8b, 0x35, 0xa1, 0x8d, - 0x10, 0x23, 0x01, 0xdf, 0x51, 0xa0, 0x08, 0x09, 0x04, 0xa9, 0x88, 0x22, 0xba, 0x38, 0x22, 0x91, - 0xfa, 0x9c, 0x62, 0x91, 0x9a, 0x18, 0x04, 0xa8, 0xac, 0x20, 0x52, 0x91, 0x99, 0xe8, 0x0c, 0x25, - 0x00, 0x91, 0xca, 0x1b, 0x17, 0xa9, 0x28, 0xb9, 0x55, 0xb8, 0x19, 0x99, 0x43, 0x89, 0x90, 0x2a, - 0xeb, 0x50, 0x03, 0xa9, 0x8e, 0x22, 0x18, 0xc0, 0x8c, 0x12, 0x21, 0x91, 0xeb, 0x89, 0x51, 0x01, - 0xa9, 0x20, 0xbb, 0x43, 0x98, 0x31, 0xca, 0x19, 0x27, 0xab, 0xc1, 0x3b, 0x27, 0x98, 0xba, 0x30, - 0x03, 0xa9, 0xc9, 0x68, 0xa0, 0x20, 0xaa, 0xc0, 0x1d, 0x27, 0x98, 0xc9, 0x1b, 0x26, 0x00, 0xdb, - 0x28, 0x83, 0x89, 0x90, 0x08, 0x98, 0x51, 0xa3, 0x2a, 0xd9, 0x08, 0x71, 0xc2, 0x0c, 0x81, 0x52, - 0xb8, 0x9b, 0x21, 0x11, 0x01, 0xb8, 0x9f, 0x14, 0x8b, 0x24, 0xb8, 0x09, 0x21, 0xfb, 0x1a, 0x24, - 0xa0, 0x11, 0xda, 0x89, 0x40, 0x16, 0xa8, 0x8d, 0x81, 0x38, 0x86, 0xab, 0x80, 0x42, 0x98, 0x29, - 0xe8, 0x1b, 0x44, 0x90, 0xa9, 0x8b, 0x33, 0x00, 0xa2, 0xdf, 0x42, 0x92, 0x8b, 0x92, 0x0b, 0x02, - 0x44, 0xdb, 0x10, 0xba, 0x52, 0x81, 0xb9, 0x49, 0x90, 0x32, 0xca, 0xaa, 0x78, 0x04, 0xa8, 0x9b, - 0x13, 0x1a, 0x84, 0xac, 0x41, 0xa8, 0x39, 0xd2, 0x2e, 0x14, 0x80, 0x9b, 0xc9, 0x68, 0x93, 0x99, - 0x00, 0xb8, 0x50, 0x91, 0x88, 0xca, 0x51, 0x01, 0xa0, 0x9f, 0x21, 0x01, 0x99, 0xa1, 0x3b, 0x06, - 0xbb, 0x19, 0x15, 0x0c, 0x27, 0xb8, 0xba, 0x4b, 0x17, 0x99, 0x18, 0xc8, 0x29, 0x01, 0x31, 0xca, - 0x08, 0x88, 0x21, 0xba, 0x18, 0x54, 0xb0, 0x28, 0xdc, 0x88, 0x3a, 0x57, 0x9a, 0x89, 0x10, 0x90, - 0x21, 0xc8, 0x1a, 0x34, 0xea, 0x39, 0x12, 0xd8, 0x38, 0xc8, 0x51, 0x88, 0xb9, 0x40, 0x91, 0x09, - 0x08, 0x01, 0xbe, 0x30, 0x43, 0xd1, 0x8d, 0x81, 0x48, 0x04, 0xbd, 0x30, 0xa0, 0x31, 0x90, 0xc8, - 0x0f, 0x03, 0x31, 0xb2, 0xbc, 0x3a, 0x15, 0x99, 0x21, 0xdb, 0x40, 0x80, 0xa9, 0x80, 0x21, 0xb2, - 0x0d, 0x34, 0xc9, 0x38, 0xa9, 0x23, 0xe9, 0x2a, 0xc1, 0x38, 0x38, 0xf3, 0x0f, 0x03, 0xa8, 0x48, - 0xa3, 0x9c, 0x89, 0x46, 0x98, 0x88, 0xbb, 0x41, 0x04, 0xaa, 0x20, 0x80, 0xb8, 0x2b, 0x27, 0xe9, - 0x2a, 0x04, 0x09, 0x90, 0xcc, 0x51, 0x81, 0x98, 0x89, 0x22, 0xd8, 0x39, 0xa1, 0x18, 0x9a, 0x15, - 0x00, 0xeb, 0x2a, 0x15, 0x10, 0xe9, 0x0a, 0x22, 0x92, 0x5a, 0xd1, 0x2a, 0x93, 0x9a, 0x09, 0x42, - 0x94, 0x0d, 0x04, 0xac, 0x01, 0x0b, 0x44, 0xb2, 0x9f, 0x22, 0xa0, 0x9a, 0x43, 0x02, 0xcc, 0x28, - 0xb0, 0x61, 0x80, 0x0a, 0x91, 0x8c, 0x12, 0x80, 0x00, 0xbb, 0x67, 0xb8, 0x08, 0xa9, 0x38, 0x26, - 0xa0, 0xae, 0x30, 0x13, 0xa8, 0xbb, 0x39, 0x14, 0x08, 0xaa, 0x81, 0xcf, 0x72, 0x82, 0xb9, 0x9b, - 0x32, 0x23, 0xda, 0x30, 0x91, 0xcb, 0x48, 0x84, 0xad, 0x52, 0x90, 0x08, 0xba, 0x29, 0x36, 0xc8, - 0x2a, 0x92, 0x8a, 0x18, 0x85, 0x1c, 0x94, 0x99, 0x89, 0x38, 0xb1, 0x38, 0x13, 0xf9, 0x6a, 0xc0, - 0x1a, 0x22, 0xc0, 0x49, 0x14, 0xda, 0x9b, 0x51, 0x12, 0xa8, 0x8c, 0x21, 0x00, 0x90, 0x1b, 0x32, - 0xb1, 0x9f, 0x15, 0xbd, 0x41, 0x80, 0x20, 0xd1, 0x8c, 0x21, 0x11, 0x80, 0x8a, 0x02, 0x09, 0xc0, - 0xaf, 0x51, 0x81, 0x00, 0xa0, 0x9b, 0xa9, 0x74, 0x94, 0x9b, 0x9a, 0x62, 0x81, 0x98, 0x9b, 0x34, - 0x90, 0xbd, 0x41, 0x11, 0xa0, 0x0d, 0x13, 0x8b, 0x92, 0x3a, 0x91, 0x9e, 0x21, 0x24, 0x8a, 0xfa, - 0x2b, 0x31, 0x05, 0x9d, 0x20, 0x21, 0xd8, 0x0b, 0x81, 0x54, 0xa8, 0x9a, 0x0b, 0x25, 0xa8, 0x41, - 0xc0, 0x0b, 0x90, 0x39, 0x47, 0xdb, 0x29, 0x33, 0xb8, 0x9d, 0x20, 0x10, 0x02, 0x88, 0xfa, 0x30, - 0x98, 0x32, 0x98, 0xcc, 0x28, 0x22, 0xa2, 0x9f, 0x24, 0x9b, 0x13, 0xad, 0x11, 0x23, 0xdc, 0x21, - 0x90, 0x08, 0xa0, 0x8a, 0x14, 0x9c, 0x01, 0x64, 0x92, 0x9f, 0x01, 0x28, 0x02, 0xd9, 0x39, 0x90, - 0x90, 0x89, 0x73, 0xc3, 0x8b, 0x90, 0x28, 0x43, 0xb8, 0x8a, 0x90, 0xb9, 0x73, 0x08, 0xc2, 0x9d, - 0x33, 0x31, 0xe9, 0x88, 0x0b, 0x17, 0x08, 0xba, 0x50, 0xa1, 0x98, 0x2b, 0xb3, 0x70, 0xb2, 0x0a, - 0xa0, 0xab, 0x67, 0xa1, 0x8b, 0xa0, 0x51, 0xa1, 0x08, 0x8b, 0x02, 0x09, 0x08, 0xa3, 0x9e, 0x11, - 0x44, 0xb2, 0x9e, 0x18, 0x10, 0x30, 0xb3, 0xaf, 0x63, 0xc0, 0x1b, 0x83, 0x08, 0x31, 0xf9, 0x89, - 0x21, 0x83, 0xab, 0x43, 0xfb, 0x38, 0x14, 0xda, 0x29, 0x81, 0x00, 0x1a, 0x15, 0xbd, 0x28, 0x13, - 0xa9, 0x41, 0xea, 0x19, 0x23, 0x02, 0xbe, 0x10, 0x81, 0x30, 0xb3, 0xcf, 0x42, 0x90, 0x1a, 0x91, - 0x09, 0x21, 0x92, 0x8f, 0x11, 0x00, 0x80, 0x01, 0xad, 0x01, 0x39, 0xb3, 0xa9, 0xff, 0x43, 0x80, - 0xb1, 0x8e, 0x31, 0x80, 0x08, 0x82, 0xaf, 0x13, 0x09, 0x04, 0xa9, 0x8b, 0x34, 0xa0, 0xca, 0x69, - 0x92, 0x01, 0xbb, 0x99, 0x72, 0x94, 0x8c, 0x80, 0x12, 0x88, 0x98, 0x80, 0xbd, 0x62, 0x03, 0x9b, - 0xc1, 0x8e, 0x32, 0x12, 0xa8, 0x8d, 0x03, 0xab, 0x11, 0x92, 0x70, 0xa5, 0xad, 0x21, 0x20, 0x92, - 0x19, 0xa8, 0xba, 0x1c, 0x24, 0x44, 0xeb, 0x88, 0x40, 0xb1, 0x2b, 0xc0, 0x50, 0x91, 0x98, 0x0b, - 0x33, 0x90, 0xd9, 0x28, 0x99, 0x37, 0xbb, 0x01, 0x99, 0x20, 0x45, 0xb1, 0xdf, 0x28, 0x25, 0xb8, - 0x0b, 0x11, 0x20, 0xb0, 0x8c, 0x21, 0xb8, 0x70, 0x93, 0xba, 0xab, 0x25, 0x18, 0x94, 0xbc, 0x10, - 0x24, 0xd9, 0x28, 0x88, 0x25, 0xb9, 0xcc, 0x49, 0x23, 0x90, 0xaa, 0x80, 0x1a, 0x93, 0x7a, 0xa3, - 0x9c, 0x18, 0x36, 0xd8, 0xab, 0x62, 0x92, 0x99, 0x8c, 0x23, 0x11, 0xd0, 0x8c, 0x12, 0x22, 0xa9, - 0xbb, 0x21, 0x89, 0x57, 0xa0, 0xac, 0x80, 0x21, 0x23, 0xc9, 0x8b, 0x72, 0xb3, 0x8d, 0x00, 0x00, - 0x33, 0xf8, 0x1a, 0x91, 0x1a, 0x23, 0x91, 0xad, 0x00, 0x72, 0xa3, 0x9e, 0x08, 0x33, 0x01, 0xfb, - 0x0a, 0x23, 0x88, 0x10, 0x92, 0xaf, 0x12, 0x00, 0x99, 0x20, 0x98, 0x04, 0x08, 0xfa, 0x3b, 0x04, - 0x89, 0x20, 0xd0, 0x2c, 0x06, 0xac, 0x30, 0x13, 0x9b, 0x81, 0x9f, 0x42, 0x90, 0x1a, 0x85, 0xbb, - 0x18, 0x23, 0xb9, 0x20, 0x72, 0xb1, 0xad, 0x89, 0x45, 0xa0, 0x80, 0x9a, 0x90, 0x39, 0x26, 0xb8, - 0xbc, 0x38, 0x35, 0xa1, 0xbe, 0x30, 0x23, 0xb9, 0x01, 0xbe, 0x52, 0x80, 0x90, 0x08, 0x38, 0xf1, - 0x1a, 0x03, 0x9c, 0x43, 0x90, 0x80, 0xcc, 0x38, 0x33, 0xb2, 0xaf, 0x42, 0xa0, 0x8d, 0x22, 0xa0, - 0x20, 0xd9, 0x29, 0x92, 0x0a, 0x24, 0x98, 0x81, 0x9e, 0x84, 0x0a, 0x84, 0x9a, 0x60, 0x85, 0x9c, - 0x90, 0x38, 0x12, 0xb0, 0x9a, 0x10, 0x98, 0x14, 0x0a, 0xb2, 0xaf, 0x51, 0x11, 0xd9, 0x8c, 0x45, - 0xa8, 0x09, 0xb0, 0x3c, 0x16, 0xaa, 0x18, 0x02, 0x99, 0xb9, 0x61, 0x91, 0xab, 0x45, 0x90, 0xaa, - 0xbc, 0x72, 0x13, 0xb9, 0x0b, 0x02, 0x8a, 0x51, 0x03, 0xbc, 0x99, 0x11, 0x18, 0x81, 0xa9, 0x0a, - 0xbd, 0x77, 0xa9, 0x28, 0x81, 0x09, 0x98, 0x20, 0xa8, 0x9c, 0x46, 0xba, 0x22, 0xcb, 0x50, 0x13, - 0xcb, 0x0d, 0x03, 0x68, 0x92, 0xab, 0x9a, 0x24, 0x89, 0x33, 0xfa, 0x0a, 0x14, 0x09, 0x91, 0x9d, - 0x20, 0x14, 0xaa, 0x9a, 0x18, 0x33, 0xa9, 0x32, 0x88, 0xef, 0x30, 0x10, 0x85, 0xbc, 0x20, 0x04, - 0xba, 0x28, 0x05, 0x8a, 0x90, 0xaa, 0x34, 0x00, 0xf9, 0x48, 0x82, 0x80, 0xac, 0x11, 0xba, 0x50, - 0x16, 0xba, 0x18, 0xa9, 0x22, 0xea, 0x32, 0x89, 0x33, 0xcf, 0x20, 0xb0, 0x58, 0x84, 0x99, 0xbc, - 0x52, 0x81, 0x10, 0x01, 0xfb, 0x19, 0x84, 0x09, 0x81, 0xb9, 0x51, 0xb0, 0x0b, 0x12, 0x22, 0xcb, - 0x88, 0x8a, 0x37, 0xb9, 0x10, 0xc0, 0x1e, 0x14, 0x09, 0xc0, 0x0b, 0x58, 0x05, 0x9a, 0x80, 0x89, - 0x34, 0xfa, 0x18, 0x81, 0x18, 0x82, 0xcc, 0x49, 0x04, 0x88, 0x9a, 0x11, 0x9c, 0x26, 0x99, 0xac, - 0x34, 0xa0, 0x18, 0xad, 0x28, 0x41, 0x92, 0x0c, 0xa2, 0x9f, 0x63, 0xa1, 0x8a, 0x88, 0x20, 0x02, - 0x99, 0xad, 0x50, 0x03, 0xaa, 0x00, 0xad, 0x52, 0x11, 0xc9, 0x1a, 0x82, 0x40, 0xa2, 0xae, 0x29, - 0x14, 0x11, 0xda, 0x88, 0xa0, 0x51, 0x04, 0xca, 0x89, 0x01, 0x88, 0x43, 0xe8, 0x28, 0x92, 0x9a, - 0x18, 0x80, 0x44, 0xb0, 0xae, 0x22, 0x2a, 0x87, 0x9c, 0x01, 0x11, 0x89, 0x91, 0x8b, 0x16, 0x99, - 0x10, 0x18, 0xd8, 0x1c, 0x35, 0xd8, 0x9b, 0x62, 0x92, 0x99, 0xb9, 0x30, 0x04, 0x18, 0xc9, 0x8a, - 0x09, 0x25, 0x80, 0xcb, 0x38, 0x14, 0x9a, 0xc9, 0x69, 0x05, 0x0a, 0xc0, 0x0a, 0x22, 0x01, 0x88, - 0xa9, 0x40, 0xfa, 0x31, 0xa0, 0x0a, 0x24, 0x10, 0xf9, 0x9c, 0x21, 0x53, 0xb1, 0xad, 0x88, 0x72, - 0x91, 0xa9, 0x89, 0x24, 0x89, 0x81, 0x8b, 0xb8, 0x72, 0x91, 0x81, 0xae, 0x52, 0xa8, 0x22, 0xda, - 0x39, 0x02, 0xa8, 0x89, 0x88, 0x71, 0x94, 0x8b, 0xa8, 0x09, 0x31, 0x16, 0xc9, 0xa9, 0x49, 0x12, - 0xa8, 0x8d, 0x53, 0xa0, 0x8b, 0x88, 0x20, 0x24, 0xcb, 0x10, 0x00, 0xd8, 0x59, 0x84, 0x99, 0x8f, - 0x16, 0xa9, 0x18, 0x88, 0x21, 0xa2, 0xac, 0x41, 0x90, 0x88, 0x0a, 0xb2, 0x4a, 0x16, 0x9a, 0xcb, - 0x40, 0x93, 0xa9, 0x10, 0x01, 0x08, 0x19, 0xf9, 0x5b, 0x80, 0x35, 0xca, 0xab, 0x21, 0x52, 0x04, - 0x9c, 0xc9, 0x39, 0x12, 0x01, 0x80, 0xbb, 0x44, 0xa9, 0x00, 0x9d, 0x61, 0x04, 0xeb, 0x1a, 0x12, - 0x21, 0xc0, 0x8a, 0x08, 0x01, 0x11, 0xcb, 0x18, 0x82, 0x62, 0x82, 0xef, 0x10, 0x12, 0x00, 0xab, - 0x48, 0x81, 0x82, 0x9f, 0x12, 0x18, 0x88, 0x83, 0x9e, 0xa8, 0x71, 0x02, 0xaa, 0x8a, 0x20, 0x02, - 0x18, 0xd8, 0x40, 0xb0, 0x09, 0x89, 0xba, 0x78, 0xa3, 0x33, 0xdd, 0x8b, 0x15, 0x21, 0xc8, 0x18, - 0x9a, 0x05, 0x9c, 0x12, 0x22, 0xb0, 0x09, 0x9c, 0xa8, 0x77, 0xb0, 0x09, 0x80, 0x30, 0xc0, 0x0a, - 0x28, 0x43, 0xe9, 0x1c, 0x04, 0x9c, 0x23, 0x89, 0x80, 0x8a, 0x90, 0x69, 0xb2, 0x0d, 0x44, 0xb0, - 0x9b, 0x19, 0x14, 0x08, 0x11, 0xc2, 0x9f, 0x12, 0x08, 0x41, 0xc2, 0xac, 0x51, 0x90, 0x98, 0x18, - 0x00, 0x22, 0xcc, 0x89, 0x28, 0x27, 0xc9, 0x89, 0x80, 0x38, 0x14, 0xaa, 0x9a, 0x12, 0xb9, 0x73, - 0xe5, 0x09, 0x81, 0x20, 0xb3, 0x8f, 0x22, 0x90, 0x89, 0x81, 0x10, 0x92, 0x9e, 0x34, 0xd1, 0x0b, - 0x02, 0x18, 0x81, 0xac, 0x23, 0x20, 0xf8, 0x0e, 0x23, 0x80, 0xb9, 0x8b, 0x16, 0x98, 0x99, 0x1a, - 0x27, 0x99, 0x9a, 0x60, 0xb0, 0x1b, 0x24, 0x92, 0xcb, 0x0a, 0x46, 0xc0, 0x8a, 0x11, 0x31, 0xc8, - 0x9c, 0x41, 0x93, 0x29, 0xe8, 0x18, 0x8b, 0x24, 0x09, 0x11, 0xa8, 0xbf, 0x31, 0x21, 0xd1, 0x3b, - 0x94, 0x0b, 0x98, 0x08, 0x72, 0x82, 0xca, 0x18, 0x98, 0x29, 0x37, 0xb8, 0xac, 0x00, 0x63, 0xb1, - 0x0c, 0x80, 0x33, 0xa0, 0xba, 0x8d, 0x22, 0x23, 0xa9, 0x51, 0xba, 0xbc, 0x68, 0x83, 0x8b, 0x80, - 0x08, 0x02, 0xf0, 0x2d, 0x85, 0x39, 0xe1, 0x1a, 0x91, 0x01, 0x19, 0x42, 0xb0, 0x9c, 0x98, 0x18, - 0x64, 0x82, 0x99, 0x99, 0xa9, 0x39, 0x47, 0xd0, 0x8b, 0x23, 0xc1, 0x0b, 0x02, 0x02, 0x09, 0x93, - 0xbf, 0x1a, 0x35, 0x21, 0x98, 0xde, 0x18, 0x12, 0x08, 0x80, 0x09, 0x80, 0x30, 0xb9, 0x63, 0xf8, - 0x3a, 0x82, 0x19, 0x93, 0x8d, 0x99, 0x43, 0x12, 0xbf, 0x24, 0xca, 0x38, 0x91, 0x20, 0xa9, 0x9b, - 0x53, 0xa8, 0x13, 0x0c, 0xe3, 0x48, 0xb8, 0x10, 0xbc, 0x44, 0x11, 0xf9, 0x09, 0x12, 0x80, 0x30, - 0xd1, 0x9d, 0x30, 0x35, 0xc8, 0xad, 0x32, 0x91, 0x10, 0xca, 0x11, 0x01, 0x8a, 0x23, 0xac, 0xb9, - 0x72, 0x86, 0xac, 0x00, 0x31, 0x81, 0xaa, 0x8c, 0x20, 0x23, 0x88, 0xd1, 0x1b, 0x25, 0xa9, 0x9a, - 0x21, 0xea, 0x70, 0x95, 0xac, 0x10, 0x20, 0x01, 0x88, 0xaa, 0x1a, 0x26, 0xb8, 0x39, 0xd0, 0x39, - 0x92, 0x30, 0xfa, 0x30, 0xc9, 0x20, 0x01, 0x02, 0xcc, 0x0a, 0x22, 0x88, 0x22, 0x20, 0xfa, 0x9b, - 0x45, 0xb8, 0x18, 0x08, 0x24, 0xea, 0x8a, 0x30, 0x27, 0xca, 0x19, 0x90, 0x8a, 0x46, 0x80, 0xb8, - 0xab, 0x21, 0x34, 0xc1, 0x9f, 0x21, 0x00, 0x82, 0xad, 0x21, 0x80, 0x08, 0x09, 0x12, 0xbb, 0x40, - 0x36, 0xfb, 0x1b, 0x15, 0x98, 0xa9, 0x80, 0x58, 0x05, 0xaa, 0x00, 0x8a, 0x32, 0xb0, 0xab, 0x3a, - 0x06, 0x51, 0xf9, 0x08, 0x09, 0x32, 0x01, 0xea, 0x1b, 0x03, 0x12, 0xba, 0x08, 0x29, 0x44, 0xf9, - 0x0a, 0x00, 0x43, 0x98, 0x91, 0x0e, 0x11, 0x11, 0xda, 0x00, 0x99, 0x72, 0x96, 0xac, 0x11, 0x18, - 0x12, 0x98, 0xbc, 0x50, 0xa0, 0x08, 0x38, 0x86, 0x9c, 0x92, 0x8a, 0x80, 0x44, 0x11, 0xc1, 0xaf, - 0x10, 0x22, 0x82, 0xaa, 0xa8, 0x8a, 0x45, 0x00, 0xb8, 0x8c, 0x24, 0xa0, 0x99, 0x9b, 0x34, 0x02, - 0xb8, 0xcb, 0x39, 0x54, 0xa1, 0x9a, 0x1a, 0x93, 0x78, 0xb7, 0x8e, 0x02, 0x21, 0xb8, 0x80, 0x9a, - 0x12, 0x12, 0xbc, 0x63, 0x90, 0x00, 0xeb, 0x00, 0x09, 0x27, 0x99, 0x8a, 0xa2, 0x1c, 0x17, 0xaa, - 0x18, 0x10, 0x80, 0x89, 0xcc, 0x72, 0x81, 0x80, 0xbc, 0x18, 0x33, 0x83, 0x08, 0xfd, 0x28, 0x12, - 0xa1, 0x0c, 0xc1, 0x59, 0x84, 0x9a, 0x99, 0x11, 0x31, 0xc3, 0x9e, 0x10, 0x32, 0xa1, 0x9d, 0x88, - 0x11, 0x20, 0x85, 0xcc, 0x09, 0x34, 0x12, 0xc8, 0xbe, 0x40, 0x03, 0xa0, 0x1a, 0xc2, 0x1c, 0x04, - 0x88, 0x99, 0x10, 0x43, 0xf8, 0x2a, 0xa1, 0x62, 0xb9, 0x09, 0x09, 0x13, 0x88, 0x09, 0xb0, 0x19, - 0x04, 0x18, 0xc1, 0x4c, 0x07, 0x9c, 0x80, 0x28, 0x13, 0x11, 0xfc, 0x2b, 0x23, 0x92, 0x9c, 0x91, - 0x2a, 0x07, 0x99, 0x08, 0xab, 0x51, 0x92, 0x98, 0xbe, 0x63, 0x11, 0x98, 0xad, 0x18, 0x52, 0xa1, - 0x8a, 0x99, 0x31, 0x11, 0x04, 0xbe, 0x18, 0x23, 0xaa, 0x62, 0xd9, 0x20, 0x81, 0x80, 0xec, 0x48, - 0x03, 0xa8, 0x9b, 0x18, 0x24, 0x88, 0xe9, 0x3a, 0x82, 0x80, 0x18, 0xa3, 0x9e, 0x12, 0x0a, 0x33, - 0xa9, 0x8a, 0x36, 0xf9, 0x9a, 0x71, 0x84, 0x9d, 0x01, 0x80, 0x20, 0x90, 0x8a, 0x01, 0xb9, 0x42, - 0x28, 0xe1, 0x2b, 0x84, 0xba, 0x19, 0x31, 0x38, 0x07, 0xfb, 0x1b, 0x34, 0x88, 0xa8, 0xab, 0x28, - 0x56, 0xc0, 0x8a, 0x01, 0x81, 0x10, 0x91, 0x8d, 0x24, 0x9a, 0x04, 0xbb, 0x18, 0x41, 0xa4, 0x9e, - 0x11, 0x88, 0x51, 0xb1, 0x0f, 0x02, 0x89, 0x10, 0x90, 0x89, 0x13, 0xbd, 0x38, 0x23, 0xc9, 0x70, - 0x92, 0xbf, 0x40, 0x92, 0x28, 0xa8, 0x80, 0x0a, 0x13, 0xea, 0x68, 0xa2, 0x0a, 0x92, 0xaa, 0x61, - 0x82, 0xbb, 0x08, 0x91, 0x2a, 0x47, 0xa8, 0xac, 0x48, 0x02, 0x88, 0xba, 0x29, 0x45, 0xc1, 0x1b, - 0x82, 0x9a, 0x19, 0xa5, 0x4a, 0x82, 0x81, 0xbd, 0x53, 0xea, 0x30, 0x81, 0x00, 0xdb, 0x38, 0x00, - 0x43, 0xc9, 0x89, 0x8a, 0x32, 0x21, 0x10, 0xb1, 0xdf, 0x42, 0xa1, 0xac, 0x59, 0x84, 0x0a, 0xa0, - 0x28, 0x00, 0xca, 0x70, 0x81, 0x98, 0x9c, 0x22, 0x88, 0x90, 0x1a, 0xb1, 0x72, 0xe2, 0x88, 0x29, - 0x13, 0x8b, 0x07, 0xab, 0x08, 0x30, 0x92, 0x12, 0xcf, 0x22, 0x8a, 0x84, 0xac, 0x52, 0xa1, 0x08, - 0x99, 0xa9, 0x62, 0x91, 0x0a, 0x31, 0xfa, 0x1b, 0x24, 0xa1, 0x8a, 0x00, 0x01, 0xcc, 0x70, 0xa4, - 0x0b, 0x92, 0x00, 0x0a, 0x92, 0x2d, 0x86, 0x8b, 0x81, 0x41, 0xcb, 0x28, 0x20, 0x92, 0xab, 0x80, - 0x78, 0x95, 0xac, 0x21, 0x80, 0x51, 0xd8, 0x8a, 0x1a, 0x36, 0xa8, 0x8a, 0x02, 0x8e, 0x23, 0x0a, - 0xa2, 0x0e, 0x14, 0x99, 0x98, 0x1a, 0x03, 0x10, 0xf9, 0x59, 0xb1, 0x3a, 0x82, 0x20, 0xcd, 0x41, - 0x80, 0x09, 0x19, 0xea, 0x52, 0x98, 0x90, 0x0a, 0x81, 0x34, 0xbc, 0x32, 0xa8, 0x99, 0x40, 0xf8, - 0x30, 0xb8, 0x40, 0x00, 0xf1, 0x0d, 0x14, 0x88, 0x99, 0x02, 0x19, 0x91, 0x99, 0x31, 0x21, 0xf3, - 0x9e, 0x41, 0x80, 0x99, 0x32, 0xc8, 0x88, 0x9a, 0x20, 0x28, 0x86, 0x48, 0xd2, 0xac, 0x31, 0x91, - 0x99, 0x22, 0xba, 0x42, 0x01, 0xea, 0x02, 0x1e, 0x94, 0x40, 0xf8, 0x0a, 0x24, 0xa9, 0x30, 0xb3, - 0xbf, 0x32, 0x81, 0x91, 0x8a, 0x20, 0x02, 0xaa, 0xaf, 0x41, 0x32, 0xc0, 0x8d, 0x82, 0x8b, 0x52, - 0x82, 0x9d, 0x12, 0xbc, 0x42, 0x02, 0xac, 0x20, 0x20, 0x94, 0xbe, 0x20, 0x14, 0x90, 0x99, 0xa8, - 0x2a, 0x83, 0x43, 0x01, 0xda, 0x9b, 0x31, 0x81, 0x0a, 0x08, 0x57, 0xd1, 0x9c, 0x10, 0x20, 0x16, - 0xcb, 0x00, 0x88, 0x02, 0xc9, 0x59, 0x83, 0x8b, 0x18, 0x88, 0xb9, 0x39, 0x67, 0xb1, 0x9e, 0x12, - 0x21, 0xc8, 0x1b, 0x14, 0x80, 0xa0, 0xaf, 0x63, 0xa8, 0x49, 0x91, 0xaa, 0x00, 0x10, 0x22, 0xc2, - 0x9f, 0x21, 0x11, 0xc0, 0x9b, 0x51, 0x82, 0x0a, 0xb9, 0x30, 0x01, 0x08, 0xb9, 0x32, 0xfd, 0x38, - 0x15, 0xbc, 0x32, 0xa8, 0x33, 0xda, 0x9c, 0x63, 0x81, 0x9a, 0x19, 0x83, 0xbb, 0x30, 0x83, 0x49, - 0xe1, 0x19, 0x99, 0x81, 0x2c, 0x27, 0xc8, 0x8c, 0x03, 0x10, 0xb2, 0x9c, 0x19, 0x47, 0xa9, 0x89, - 0x89, 0x23, 0x81, 0xa8, 0xa8, 0xaf, 0x26, 0x00, 0x90, 0xbc, 0x38, 0x27, 0xb9, 0x99, 0x18, 0x16, - 0xaa, 0x88, 0x10, 0x82, 0x28, 0xb9, 0xfb, 0x59, 0x04, 0x89, 0xa8, 0x9c, 0x43, 0x01, 0xb1, 0x9e, - 0x10, 0x00, 0x33, 0xfb, 0x30, 0x82, 0xa9, 0x11, 0xca, 0x29, 0x24, 0x08, 0xd3, 0xaf, 0x42, 0x02, - 0xab, 0x89, 0x30, 0x83, 0x9d, 0x11, 0x11, 0xb9, 0x19, 0x91, 0xee, 0x39, 0x15, 0x10, 0xc9, 0x2a, - 0xa3, 0x0c, 0x11, 0x20, 0x26, 0xbc, 0x88, 0x9c, 0x37, 0xa8, 0x89, 0x80, 0x08, 0x21, 0xab, 0x27, - 0xca, 0x39, 0x83, 0xbc, 0x80, 0x48, 0x27, 0xab, 0xab, 0x40, 0x12, 0xa8, 0x40, 0xd8, 0x3a, 0x94, - 0xab, 0x20, 0x14, 0x1a, 0xa3, 0x9e, 0x20, 0x11, 0x22, 0xcc, 0xa8, 0x8f, 0x27, 0xa8, 0x8a, 0x21, - 0x01, 0xb8, 0x9e, 0x23, 0x00, 0x81, 0x39, 0xf1, 0x0d, 0x21, 0x82, 0xbb, 0x88, 0x72, 0x83, 0xda, - 0x8b, 0x41, 0x13, 0xa8, 0x88, 0xcc, 0x30, 0x24, 0xb0, 0xaa, 0x99, 0x58, 0x16, 0xba, 0x8a, 0x35, - 0x00, 0xda, 0x9b, 0x58, 0x15, 0x99, 0x9a, 0x91, 0x1c, 0x17, 0x8b, 0x01, 0x09, 0x90, 0x23, 0xca, - 0x8a, 0x53, 0x91, 0x9a, 0xb9, 0x71, 0x92, 0x99, 0x18, 0xea, 0x61, 0xa1, 0x8b, 0x02, 0x21, 0xa0, - 0xad, 0x14, 0xab, 0x53, 0x91, 0x1a, 0xd9, 0x40, 0x82, 0xda, 0x1a, 0x45, 0xc1, 0x8c, 0x12, 0x91, - 0x2a, 0xb1, 0x48, 0xa8, 0x10, 0x18, 0xd3, 0x0e, 0x11, 0x23, 0xdc, 0x18, 0x90, 0x32, 0xb8, 0x8c, - 0x42, 0x82, 0x99, 0x80, 0xce, 0x62, 0xa1, 0x09, 0x19, 0x93, 0x0f, 0x05, 0x98, 0x89, 0x81, 0x29, - 0xc3, 0x0c, 0x23, 0x80, 0xa8, 0xcc, 0x1a, 0x35, 0x80, 0x08, 0xc9, 0x29, 0x12, 0xa9, 0x8a, 0x53, - 0x81, 0x18, 0xfc, 0x0b, 0x54, 0x02, 0xbc, 0x0a, 0x31, 0x83, 0x2b, 0x87, 0x8d, 0x82, 0x19, 0xa2, - 0x8b, 0x20, 0x36, 0xb9, 0xea, 0x1b, 0x16, 0x80, 0x90, 0x8a, 0x88, 0x21, 0xb2, 0xab, 0x61, 0xa0, - 0x54, 0xda, 0x09, 0x20, 0x23, 0x81, 0xbf, 0x20, 0x80, 0x22, 0xc8, 0x39, 0xc1, 0xcb, 0x78, 0xa4, - 0x0b, 0x22, 0x98, 0x1a, 0xa0, 0x3b, 0x37, 0xeb, 0x38, 0x02, 0xeb, 0x40, 0x90, 0x08, 0xa0, 0x19, - 0x82, 0x19, 0x84, 0xbc, 0x52, 0xba, 0x22, 0xa0, 0x0b, 0x93, 0x5a, 0x15, 0xa9, 0xb1, 0x9f, 0x17, - 0x09, 0xa9, 0x28, 0x00, 0x80, 0x19, 0xb4, 0x0c, 0x14, 0x98, 0xb8, 0x8e, 0x53, 0x04, 0xca, 0x99, - 0x38, 0x94, 0x8a, 0x42, 0xd0, 0x2b, 0x03, 0x8a, 0x83, 0xab, 0x29, 0x06, 0xbe, 0x41, 0x11, 0xa0, - 0x4b, 0xf2, 0x2c, 0x05, 0x8a, 0x10, 0x90, 0x8c, 0x23, 0x98, 0x91, 0x1a, 0xb1, 0x20, 0xdc, 0x51, - 0x12, 0xa0, 0xaf, 0x18, 0x16, 0xb9, 0x21, 0xa9, 0x00, 0x19, 0xa2, 0x2b, 0xa5, 0x49, 0x91, 0xb0, - 0x8f, 0x14, 0x40, 0xe0, 0x0a, 0x82, 0x18, 0x02, 0xb8, 0x09, 0x81, 0xba, 0xaa, 0x77, 0xb1, 0x18, - 0x80, 0x98, 0xae, 0x22, 0x42, 0x92, 0xdc, 0x29, 0x84, 0x9b, 0x41, 0x90, 0x80, 0x18, 0xca, 0x21, - 0x88, 0x35, 0xb8, 0xca, 0x1d, 0x84, 0x2a, 0x14, 0xa0, 0x0c, 0xb2, 0x8c, 0x21, 0x22, 0x26, 0xfb, - 0x1a, 0x02, 0x9a, 0x23, 0x18, 0x81, 0xfb, 0x0c, 0x24, 0x88, 0xb0, 0x50, 0xc8, 0x89, 0x42, 0x91, - 0x8a, 0x08, 0x02, 0xda, 0x70, 0xc0, 0x19, 0x13, 0x89, 0x91, 0x8c, 0x99, 0x45, 0x90, 0x38, 0xc0, - 0xbe, 0x50, 0x84, 0xab, 0x32, 0xb1, 0x8c, 0x10, 0x00, 0x29, 0x86, 0x8a, 0xa1, 0x8e, 0x22, 0x12, - 0xbb, 0x32, 0xb9, 0x08, 0x1b, 0x05, 0x03, 0xbf, 0x61, 0xa0, 0x2b, 0x93, 0x1c, 0x06, 0x8b, 0xa0, - 0x29, 0x02, 0x28, 0x20, 0xfb, 0x21, 0xdc, 0x48, 0x13, 0x99, 0x99, 0x8a, 0x23, 0x13, 0xb8, 0x9f, - 0x93, 0x8e, 0x23, 0x13, 0xdc, 0x29, 0x02, 0x02, 0xbd, 0x23, 0x09, 0x11, 0xc3, 0x8e, 0x14, 0xdb, - 0x30, 0x82, 0x88, 0xba, 0x2a, 0x17, 0x9a, 0x22, 0x20, 0xd0, 0x9b, 0x99, 0x42, 0x73, 0xf2, 0x0a, - 0x80, 0x80, 0x51, 0x92, 0x9a, 0xab, 0x20, 0x21, 0x87, 0x9b, 0x24, 0xd0, 0x8f, 0x13, 0x88, 0x11, - 0xa9, 0x8b, 0x34, 0xa9, 0x32, 0xba, 0x20, 0x00, 0xda, 0x0b, 0x73, 0xa1, 0x0c, 0x26, 0xda, 0x9a, - 0x23, 0x12, 0xc0, 0x29, 0xc2, 0x2c, 0xa4, 0x2c, 0x05, 0xba, 0x19, 0x83, 0x88, 0x00, 0x20, 0x04, - 0xae, 0x00, 0x28, 0x93, 0x3c, 0xf2, 0x59, 0x90, 0x90, 0x8a, 0x51, 0xc8, 0x39, 0x04, 0xc9, 0x9a, - 0x32, 0x23, 0x90, 0xdd, 0x20, 0xb8, 0x30, 0x35, 0xf1, 0x0a, 0x91, 0x28, 0xa0, 0x28, 0x30, 0xd4, - 0x0c, 0x92, 0x38, 0xa2, 0x18, 0xda, 0x29, 0x14, 0xa8, 0x8c, 0x53, 0xa2, 0x8d, 0x12, 0x89, 0xca, - 0x52, 0x00, 0xa3, 0x0d, 0xb8, 0x50, 0xf2, 0x39, 0x84, 0xca, 0x19, 0x02, 0x28, 0x82, 0xbb, 0x1a, - 0x00, 0x37, 0x8b, 0x93, 0x8f, 0x01, 0x32, 0xfa, 0x19, 0x28, 0x03, 0x89, 0xeb, 0x19, 0x35, 0xc1, - 0x0a, 0x83, 0x9c, 0x21, 0x84, 0xbb, 0x99, 0x71, 0x94, 0x9b, 0x9a, 0x64, 0x90, 0x99, 0x0b, 0x22, - 0x28, 0x23, 0xac, 0xd9, 0x3b, 0x16, 0x08, 0xa0, 0x0b, 0x91, 0x50, 0x01, 0xa9, 0x49, 0xf0, 0x1a, - 0x11, 0x08, 0x06, 0xcb, 0x10, 0x99, 0x58, 0x93, 0x8b, 0x38, 0xb2, 0x4a, 0xe9, 0x48, 0xa2, 0x1a, - 0x81, 0x08, 0x8c, 0x37, 0x9e, 0x81, 0x00, 0x11, 0x10, 0xfa, 0x19, 0x22, 0x90, 0x10, 0xfb, 0x18, - 0x11, 0x23, 0xca, 0xba, 0x4a, 0x35, 0xc0, 0x0e, 0x01, 0x20, 0xa0, 0x0a, 0x01, 0x8c, 0x24, 0xa1, - 0x9d, 0x21, 0x80, 0x99, 0x15, 0xaa, 0x10, 0x13, 0xcf, 0x30, 0x82, 0x18, 0x00, 0xe1, 0x4b, 0x93, - 0xbb, 0x40, 0xc8, 0x51, 0x92, 0xda, 0x19, 0x25, 0xa9, 0x8a, 0x80, 0x11, 0x88, 0x61, 0xf9, 0x49, - 0x92, 0x09, 0xa0, 0xcb, 0x78, 0x85, 0x0a, 0x91, 0x9b, 0x30, 0x84, 0x09, 0x98, 0x8a, 0x8a, 0x46, - 0xc9, 0x18, 0x81, 0x88, 0x01, 0xcd, 0x73, 0xa1, 0x88, 0x89, 0x82, 0x89, 0x12, 0x18, 0xba, 0x18, - 0xb0, 0x72, 0xb8, 0x1d, 0x86, 0x0a, 0x11, 0x88, 0xba, 0x01, 0x7a, 0xa7, 0x0b, 0x02, 0x10, 0xbd, - 0x53, 0x90, 0x9b, 0x31, 0x98, 0x14, 0x9e, 0x32, 0xa9, 0x88, 0x23, 0xbf, 0x33, 0xb9, 0x72, 0xa1, - 0xac, 0x30, 0xb3, 0x2b, 0x04, 0xb9, 0x50, 0x80, 0xc9, 0x1c, 0x14, 0x90, 0x8a, 0x22, 0xd9, 0x09, - 0x55, 0xc8, 0x1a, 0x92, 0x58, 0xb1, 0x8c, 0x31, 0x02, 0xc9, 0x8a, 0x12, 0xda, 0x50, 0x03, 0xa9, - 0x1a, 0xa2, 0x1c, 0x89, 0x27, 0x08, 0xd9, 0x09, 0x91, 0x19, 0x55, 0xb1, 0x9e, 0x81, 0x28, 0x05, - 0xba, 0x31, 0xc1, 0x0b, 0x41, 0xb0, 0x38, 0xa3, 0x59, 0xfa, 0x3a, 0x03, 0x01, 0xab, 0x91, 0x8c, - 0x23, 0x18, 0x98, 0x01, 0x9f, 0x24, 0xc9, 0x19, 0xa0, 0x79, 0x83, 0x8a, 0xa0, 0xad, 0x54, 0xa1, - 0x8a, 0x82, 0x29, 0xa2, 0x0c, 0x02, 0xa9, 0x71, 0xb1, 0x1a, 0xa8, 0x9a, 0x56, 0xb1, 0x1c, 0xa1, - 0x20, 0x0b, 0x07, 0x1a, 0xb1, 0x0b, 0xb2, 0x3c, 0x07, 0x18, 0xbc, 0x41, 0xb2, 0x0f, 0x83, 0x2a, - 0x04, 0xba, 0x20, 0x91, 0x8b, 0x91, 0x59, 0xb3, 0x1d, 0x23, 0xa8, 0xbf, 0x44, 0x88, 0x90, 0x88, - 0xab, 0x73, 0xb1, 0x48, 0xa1, 0xad, 0x20, 0x80, 0x30, 0x82, 0xaa, 0x1c, 0x15, 0xb9, 0xab, 0x74, - 0xa1, 0x89, 0x98, 0x1a, 0x17, 0xaa, 0x32, 0xc9, 0xaa, 0x62, 0x13, 0xda, 0x1a, 0x01, 0x24, 0xbc, - 0x11, 0x8a, 0x82, 0x60, 0xe8, 0x18, 0x91, 0x28, 0x91, 0x90, 0x9c, 0x32, 0x07, 0xab, 0xb8, 0x4b, - 0x17, 0x99, 0x99, 0x38, 0xb3, 0x9b, 0x70, 0x93, 0x8a, 0x80, 0xa8, 0x50, 0x01, 0x88, 0x91, 0xdf, - 0x30, 0x83, 0x8c, 0x01, 0x01, 0x0c, 0x15, 0xac, 0x30, 0xb2, 0x49, 0xb3, 0xcf, 0x51, 0x81, 0xa9, - 0x19, 0x83, 0x9a, 0x60, 0xb1, 0x8d, 0x23, 0x00, 0x00, 0xfa, 0x09, 0x23, 0x01, 0xb9, 0x89, 0x19, - 0x42, 0x03, 0xfb, 0x0c, 0x23, 0x01, 0xeb, 0x28, 0x80, 0x52, 0xb0, 0xac, 0x1a, 0x27, 0x98, 0xb8, - 0x0b, 0x63, 0x01, 0xa1, 0xcd, 0x38, 0x13, 0x90, 0x9a, 0x99, 0x49, 0x17, 0xba, 0x19, 0x11, 0x02, - 0x9b, 0xb2, 0x8f, 0x14, 0x52, 0xc0, 0xac, 0x30, 0x04, 0xa8, 0x9c, 0x31, 0x83, 0x98, 0xbd, 0x00, - 0x73, 0x91, 0x99, 0x9a, 0x19, 0x64, 0x91, 0x08, 0xeb, 0x18, 0x31, 0xb2, 0x9c, 0x21, 0x01, 0x04, - 0xbe, 0x28, 0x33, 0xb1, 0x9d, 0x88, 0x73, 0xb0, 0x09, 0x01, 0x9c, 0x31, 0x92, 0x08, 0xbe, 0x61, - 0x01, 0x80, 0xbc, 0x48, 0x12, 0xaa, 0x08, 0x20, 0x04, 0xdb, 0x1b, 0x03, 0x55, 0xc8, 0x0b, 0x82, - 0x0c, 0x44, 0x90, 0xe8, 0x1c, 0x14, 0x80, 0xa9, 0x8a, 0x50, 0x03, 0xba, 0x9a, 0x32, 0x01, 0x12, - 0xcc, 0x8c, 0x44, 0xa1, 0x89, 0xb9, 0x58, 0x12, 0x81, 0xcd, 0x88, 0x58, 0x24, 0xca, 0xaa, 0x31, - 0x24, 0xe0, 0x1b, 0x02, 0x10, 0xa0, 0x0a, 0xb9, 0x61, 0x11, 0x82, 0xaf, 0x18, 0x22, 0xb0, 0x1b, - 0xc2, 0x70, 0x82, 0xda, 0x8a, 0x43, 0x13, 0xea, 0x8a, 0x18, 0x34, 0x00, 0xbb, 0x8a, 0x20, 0x33, - 0x10, 0xfb, 0x1f, 0x13, 0x09, 0xc8, 0x2a, 0xa3, 0x62, 0xc8, 0x8b, 0x41, 0x14, 0xab, 0x08, 0x99, - 0x31, 0x04, 0xcd, 0x20, 0x80, 0x28, 0x13, 0xcd, 0x0a, 0x51, 0x04, 0xcb, 0x89, 0x43, 0x91, 0x99, - 0x88, 0x09, 0x82, 0xaa, 0x63, 0xa2, 0x5a, 0xd2, 0x8e, 0x21, 0x21, 0x81, 0xea, 0x8b, 0x23, 0x20, - 0x92, 0xcc, 0x2a, 0x25, 0x98, 0x9b, 0x30, 0x24, 0xe9, 0x1b, 0xb2, 0x6a, 0x05, 0x98, 0xdb, 0x28, - 0x13, 0x11, 0xbd, 0x28, 0x28, 0x13, 0x80, 0xfb, 0x2b, 0x11, 0x63, 0xd0, 0x9c, 0x23, 0x01, 0x09, - 0xa8, 0x8d, 0x14, 0x80, 0x88, 0x9a, 0x21, 0x20, 0xa1, 0xba, 0x9a, 0x78, 0x97, 0x8b, 0x01, 0x00, - 0x10, 0x04, 0xff, 0x40, 0x81, 0x8a, 0x80, 0x08, 0x11, 0x98, 0x18, 0x98, 0x10, 0x9a, 0x34, 0xfb, - 0x39, 0x24, 0xd0, 0x8e, 0x11, 0x12, 0x01, 0xdc, 0x19, 0x33, 0xa1, 0xaa, 0x99, 0x60, 0x91, 0x30, - 0xf9, 0x1b, 0x22, 0x22, 0x89, 0xfb, 0x0a, 0x44, 0xa0, 0x1a, 0x98, 0x29, 0x05, 0xdc, 0x49, 0x04, - 0x0a, 0x99, 0x08, 0x09, 0x22, 0x12, 0xb1, 0xcf, 0x30, 0x03, 0xa8, 0x99, 0x30, 0xa1, 0xcb, 0x79, - 0x82, 0x09, 0x98, 0x00, 0xbe, 0x44, 0x80, 0x9b, 0x12, 0x9a, 0x63, 0xb0, 0xab, 0x38, 0x14, 0x21, - 0xe9, 0xcc, 0x71, 0x83, 0xbb, 0x29, 0x91, 0x38, 0x84, 0xaa, 0x98, 0x31, 0x10, 0x04, 0xdf, 0x10, - 0x21, 0x93, 0x9e, 0x10, 0x80, 0x41, 0xb1, 0xbe, 0x39, 0x27, 0xc8, 0x08, 0x88, 0x80, 0x30, 0xa2, - 0x9b, 0xc8, 0x71, 0x83, 0xaa, 0x00, 0x88, 0x90, 0x34, 0xbd, 0x32, 0xf9, 0x39, 0x84, 0x8a, 0x10, - 0xaa, 0x08, 0x51, 0x04, 0xbb, 0x80, 0xcb, 0x72, 0xb3, 0x1b, 0xb8, 0x73, 0xb1, 0x1b, 0xb0, 0x61, - 0x02, 0xd9, 0x1a, 0xa1, 0x60, 0x82, 0xab, 0xab, 0x62, 0x12, 0x90, 0xbb, 0x1c, 0x26, 0xa8, 0x20, - 0xca, 0x8a, 0x73, 0x91, 0xaa, 0x30, 0xb1, 0x2a, 0xc1, 0x8a, 0x52, 0x24, 0xea, 0x89, 0x80, 0x40, - 0x13, 0xbb, 0x8a, 0x83, 0x0d, 0x04, 0x23, 0xba, 0xac, 0x00, 0x00, 0x0b, 0x37, 0x83, 0x9b, 0xfa, - 0x0c, 0x24, 0x20, 0xb9, 0x23, 0xae, 0x91, 0x39, 0x14, 0xa8, 0x9e, 0x00, 0x18, 0x33, 0xd8, 0x30, - 0xd2, 0x1b, 0x13, 0xe9, 0x0c, 0x24, 0x02, 0xb9, 0xaa, 0x1a, 0x36, 0xb9, 0x11, 0x13, 0xbc, 0x09, - 0x04, 0xac, 0x60, 0xa0, 0x44, 0xfb, 0x09, 0x21, 0x84, 0x1a, 0xc0, 0x0a, 0x11, 0x82, 0x0a, 0x04, - 0xcb, 0x00, 0xdb, 0x51, 0x82, 0x88, 0x28, 0xb2, 0x0e, 0x98, 0x72, 0xa1, 0x8a, 0x30, 0x01, 0xca, - 0x18, 0xab, 0x57, 0xb9, 0x39, 0xb1, 0x4a, 0x81, 0x09, 0x98, 0x00, 0x8e, 0x14, 0x9c, 0x12, 0x22, - 0x92, 0xed, 0x0a, 0x22, 0x03, 0xeb, 0x61, 0xa0, 0x08, 0x9b, 0x42, 0x02, 0x09, 0xc9, 0x0c, 0x85, - 0x8a, 0x26, 0xb9, 0x9a, 0x31, 0x01, 0x91, 0xbf, 0x43, 0x00, 0xa0, 0x0c, 0x90, 0x51, 0x93, 0xad, - 0x08, 0x03, 0x1b, 0x84, 0x8b, 0x91, 0x2c, 0x27, 0x9a, 0xca, 0x39, 0x25, 0x81, 0xac, 0x89, 0x16, - 0x9b, 0x81, 0x38, 0x83, 0x9c, 0x90, 0x68, 0xd2, 0x29, 0x22, 0xc1, 0xaf, 0x23, 0x89, 0x00, 0x08, - 0x88, 0x34, 0xdc, 0x18, 0x28, 0x83, 0xaa, 0x2a, 0x02, 0x22, 0xbe, 0x51, 0xa1, 0x9c, 0x01, 0x60, - 0xd1, 0x8a, 0x62, 0x82, 0xac, 0x11, 0x90, 0xa9, 0x20, 0x33, 0xb2, 0x8d, 0xa3, 0x0e, 0x92, 0x40, - 0x93, 0xcb, 0x8b, 0x42, 0x13, 0x88, 0xf1, 0x8d, 0x20, 0x23, 0xb9, 0x0e, 0x24, 0x80, 0xcb, 0x88, - 0x33, 0x08, 0xa9, 0x43, 0xbd, 0x22, 0x62, 0xf1, 0x0b, 0x12, 0x81, 0x8a, 0x92, 0x0c, 0x93, 0x3d, - 0x87, 0x8a, 0x98, 0x23, 0xa0, 0xbc, 0x70, 0x83, 0xba, 0x19, 0xa2, 0x4b, 0x84, 0x8b, 0x80, 0x18, - 0xa3, 0x8c, 0x06, 0x19, 0x13, 0xdb, 0x0a, 0x81, 0x2c, 0x47, 0xa8, 0xda, 0x38, 0x10, 0x92, 0x8b, - 0x82, 0x1e, 0x05, 0x8b, 0x81, 0x1a, 0x88, 0x43, 0xb8, 0xbe, 0x61, 0xa3, 0x09, 0xb8, 0x20, 0x24, - 0xb8, 0x9f, 0x11, 0x22, 0x99, 0x91, 0x9c, 0x9a, 0x73, 0xa5, 0x18, 0xfa, 0x38, 0x01, 0x20, 0xd8, - 0x2b, 0x13, 0x90, 0xad, 0x21, 0x01, 0x80, 0x9d, 0x32, 0x02, 0xdd, 0x40, 0x91, 0xaa, 0x31, 0x91, - 0x81, 0xdb, 0x50, 0x82, 0x99, 0x09, 0xb8, 0x21, 0x4b, 0x27, 0x0d, 0xa1, 0x1b, 0xb0, 0x70, 0x04, - 0xaa, 0x8a, 0x02, 0x08, 0x18, 0x13, 0xcc, 0x90, 0x69, 0x84, 0xba, 0x1a, 0x24, 0x81, 0xcd, 0x48, - 0xb1, 0x49, 0x03, 0xfa, 0x29, 0xb1, 0x38, 0x13, 0xa0, 0xab, 0x60, 0xa3, 0x9f, 0x04, 0x18, 0x92, - 0x8c, 0xa8, 0x58, 0x82, 0x99, 0x40, 0xf8, 0x29, 0x81, 0x88, 0x28, 0xa4, 0x0d, 0x03, 0xba, 0x40, - 0xb0, 0x30, 0xa3, 0x0b, 0xfb, 0x63, 0xb9, 0x38, 0x83, 0x89, 0xc8, 0x9d, 0x52, 0x13, 0x09, 0xf8, - 0x0a, 0x82, 0x20, 0x83, 0x9c, 0x11, 0xa0, 0x0d, 0xa2, 0x59, 0x92, 0x30, 0xc9, 0xbd, 0x41, 0x43, - 0xe9, 0x18, 0x98, 0x28, 0x02, 0x8a, 0xa0, 0x79, 0x13, 0xc9, 0xac, 0x59, 0x84, 0x08, 0x80, 0xba, - 0x1b, 0x20, 0x37, 0xd9, 0x39, 0xa2, 0x0c, 0x01, 0xa8, 0x50, 0x83, 0xcb, 0x28, 0xa0, 0x19, 0x34, - 0xe9, 0x28, 0xb3, 0x3a, 0xc3, 0x0e, 0x13, 0x92, 0xac, 0x99, 0x50, 0x02, 0x01, 0xaa, 0xeb, 0x51, - 0x92, 0x9d, 0x32, 0xa2, 0x29, 0xf2, 0x1a, 0x01, 0x19, 0x03, 0xd0, 0x9e, 0x14, 0x08, 0x04, 0xea, - 0x19, 0x82, 0x18, 0x92, 0xbb, 0x63, 0xb0, 0x08, 0x90, 0x29, 0xf0, 0x59, 0x82, 0x0a, 0x98, 0x31, - 0xa1, 0xaa, 0x80, 0xab, 0x55, 0xca, 0x75, 0xc0, 0x0a, 0x01, 0x19, 0x02, 0xa9, 0x09, 0x13, 0xba, - 0x52, 0xa8, 0x99, 0x32, 0x81, 0xfd, 0x1a, 0x16, 0x18, 0xa0, 0xb9, 0x9d, 0x34, 0x82, 0x99, 0x09, - 0xcb, 0x74, 0xa0, 0x09, 0x90, 0x19, 0x26, 0xea, 0x2a, 0x82, 0x30, 0xb2, 0xac, 0x38, 0xa1, 0x41, - 0xb1, 0x8c, 0x12, 0x41, 0xd2, 0xae, 0x28, 0x05, 0x00, 0xaa, 0x9a, 0x43, 0x18, 0x01, 0xaa, 0x0e, - 0x23, 0x88, 0xac, 0x42, 0x98, 0x43, 0xd9, 0x9c, 0x41, 0x82, 0x21, 0xd8, 0x9b, 0x39, 0x07, 0x9a, - 0x21, 0x90, 0x1b, 0xa2, 0x8f, 0x84, 0x18, 0x00, 0x82, 0xae, 0x0a, 0x35, 0xa0, 0x9b, 0x11, 0x21, - 0xeb, 0x32, 0xa9, 0x71, 0xc1, 0x1a, 0xa0, 0x91, 0x78, 0xa2, 0x19, 0x80, 0xaa, 0x89, 0x12, 0x60, - 0x93, 0x1c, 0xf2, 0x2b, 0x93, 0x80, 0x08, 0xb0, 0x21, 0x9a, 0x19, 0x64, 0x92, 0x9d, 0x41, 0xe9, - 0x1a, 0x53, 0xa0, 0x09, 0xda, 0x48, 0x83, 0x1a, 0xa0, 0x0a, 0x22, 0x89, 0x37, 0xec, 0x39, 0x13, - 0xba, 0x0a, 0x21, 0x80, 0x42, 0xb9, 0xca, 0x2b, 0x47, 0xa1, 0xad, 0x28, 0x14, 0x8a, 0x80, 0xbb, - 0x50, 0x82, 0x39, 0xc9, 0x8b, 0x64, 0x91, 0x9a, 0x09, 0x02, 0xb8, 0x70, 0xa8, 0x18, 0x04, 0xbc, - 0x28, 0x21, 0x82, 0x10, 0x8a, 0xc8, 0x31, 0xbf, 0x64, 0x81, 0xbd, 0x38, 0x82, 0x8b, 0x25, 0x98, - 0x91, 0xdf, 0x21, 0x02, 0xa8, 0x10, 0x9a, 0x12, 0x8b, 0x07, 0x9a, 0x11, 0x88, 0x88, 0x48, 0xe0, - 0x39, 0x05, 0x99, 0x99, 0xc8, 0x6a, 0x05, 0xaa, 0x28, 0xa2, 0x39, 0xe0, 0x28, 0xb1, 0x0d, 0x24, - 0xa0, 0x9c, 0x02, 0x29, 0x85, 0x90, 0x9d, 0x31, 0xb1, 0x8a, 0x53, 0x92, 0xab, 0x18, 0x01, 0xbe, - 0x73, 0xa1, 0x58, 0xc1, 0x9b, 0x33, 0xb0, 0x43, 0xda, 0x89, 0x00, 0xbb, 0x75, 0x81, 0xaa, 0x1a, - 0x82, 0x48, 0xd1, 0x29, 0x82, 0x80, 0xca, 0x20, 0x02, 0x81, 0x8f, 0x83, 0xad, 0x62, 0x91, 0x09, - 0x92, 0x9d, 0x34, 0xb9, 0x18, 0xb0, 0x1b, 0x57, 0xa9, 0x09, 0x80, 0x18, 0xb0, 0x30, 0x84, 0xbd, - 0x30, 0x22, 0xa3, 0x9f, 0x90, 0x30, 0xc1, 0x2a, 0x85, 0x09, 0x08, 0xb3, 0x1c, 0xe1, 0x29, 0x15, - 0xa1, 0xad, 0x22, 0x4b, 0x07, 0xab, 0x98, 0x11, 0x11, 0x10, 0x98, 0xca, 0x1b, 0x37, 0x88, 0xba, - 0x9a, 0x61, 0x84, 0xba, 0x0a, 0x33, 0x98, 0x41, 0xfb, 0x1b, 0x22, 0x21, 0x93, 0xad, 0x0c, 0x25, - 0x89, 0x82, 0xba, 0x9b, 0x47, 0x99, 0x90, 0x2b, 0x07, 0x8c, 0x00, 0x02, 0x8c, 0x13, 0x09, 0xa0, - 0x1c, 0x03, 0x80, 0xad, 0x22, 0xc9, 0x51, 0x88, 0x98, 0x39, 0xfb, 0x51, 0x00, 0x90, 0x0a, 0xd9, - 0x28, 0x00, 0x47, 0xaa, 0xba, 0x68, 0x82, 0x08, 0x80, 0xba, 0x58, 0x80, 0x88, 0x21, 0x29, 0xf3, - 0x8c, 0x82, 0x2b, 0x06, 0x89, 0x98, 0x88, 0x8a, 0x37, 0xb0, 0xbd, 0x38, 0x17, 0xa0, 0x8b, 0x11, - 0x0a, 0x04, 0x1a, 0xc1, 0x0a, 0x01, 0x30, 0x93, 0xcc, 0x61, 0xa0, 0x08, 0xaa, 0x42, 0x29, 0x97, - 0x0c, 0xb0, 0x78, 0xc2, 0x1a, 0x02, 0x89, 0x0a, 0x81, 0x59, 0xb2, 0x2b, 0x13, 0xc9, 0xac, 0x71, - 0x83, 0xba, 0xab, 0x74, 0x90, 0x80, 0x9a, 0x22, 0x08, 0x98, 0x99, 0x38, 0x16, 0xa8, 0xce, 0x48, - 0x92, 0x30, 0x90, 0xeb, 0x19, 0x11, 0x45, 0xc0, 0x8c, 0x08, 0x24, 0xa8, 0xba, 0x71, 0xb1, 0x09, - 0x81, 0x10, 0x88, 0x11, 0xc8, 0xab, 0x22, 0x51, 0x05, 0xad, 0x89, 0x50, 0x02, 0xcb, 0x28, 0x91, - 0x40, 0xa1, 0xa8, 0x1b, 0x86, 0x9b, 0x25, 0xaa, 0x99, 0x54, 0xa8, 0x88, 0x09, 0x2a, 0x37, 0xbf, - 0x11, 0x31, 0xd1, 0x19, 0x88, 0x82, 0x0b, 0x04, 0x9a, 0x18, 0x22, 0x9a, 0xa2, 0x9f, 0x17, 0x9b, - 0x11, 0x80, 0xa9, 0x30, 0x14, 0xdc, 0x30, 0x9a, 0x46, 0xea, 0x10, 0x81, 0x81, 0x9a, 0x80, 0x19, - 0x04, 0x18, 0xd1, 0x8d, 0x32, 0x91, 0x88, 0xdb, 0x49, 0x07, 0x9a, 0x00, 0x09, 0x88, 0x42, 0xc8, - 0x31, 0xcd, 0x43, 0x90, 0xc9, 0x49, 0x82, 0x98, 0x89, 0xb9, 0x71, 0x95, 0x8a, 0xb8, 0x40, 0x80, - 0x11, 0x81, 0xcc, 0x39, 0x03, 0x88, 0xab, 0x10, 0x62, 0xe1, 0x0b, 0x14, 0x00, 0x90, 0xab, 0x08, - 0x81, 0x62, 0x02, 0xfb, 0x2a, 0x13, 0x08, 0xb1, 0x9f, 0x61, 0x92, 0x9a, 0x98, 0x28, 0x22, 0x90, - 0x9d, 0x92, 0x5b, 0xa3, 0x9e, 0x33, 0xa8, 0x38, 0xb3, 0x9c, 0x0b, 0x14, 0x78, 0x86, 0xaf, 0x31, - 0x81, 0x9a, 0x01, 0x0a, 0x22, 0xa0, 0x9b, 0x30, 0x98, 0x43, 0x08, 0xd1, 0x9f, 0x12, 0x31, 0x83, - 0xbf, 0x39, 0x04, 0xa8, 0xaa, 0x63, 0xb1, 0x0a, 0x08, 0x24, 0xcb, 0x0a, 0x44, 0xb0, 0x8d, 0x23, - 0x98, 0x80, 0xac, 0x62, 0x92, 0x9b, 0x00, 0x42, 0xe0, 0x0c, 0x13, 0x30, 0xc9, 0x09, 0x8b, 0x44, - 0x82, 0xc9, 0x0a, 0x90, 0x71, 0xa2, 0x99, 0x29, 0xf9, 0x78, 0xa2, 0x9b, 0x28, 0x23, 0x91, 0xbb, - 0xac, 0x71, 0xa3, 0x1c, 0x93, 0x8b, 0x21, 0x12, 0xca, 0x9a, 0x68, 0x84, 0x89, 0xc9, 0x28, 0x10, - 0x17, 0xbb, 0x29, 0x80, 0x10, 0x13, 0x9e, 0x11, 0x3a, 0xa4, 0x89, 0xcd, 0x31, 0x20, 0x05, 0xdb, - 0x09, 0x10, 0x21, 0x00, 0xba, 0x80, 0x31, 0xda, 0x08, 0x10, 0x61, 0x83, 0xaa, 0xce, 0x68, 0xa2, - 0x6b, 0xa3, 0x0b, 0xab, 0x17, 0x99, 0x10, 0x11, 0xb9, 0x0b, 0xa8, 0x62, 0x31, 0xe9, 0x39, 0xa1, - 0x99, 0x0b, 0x22, 0x36, 0xb8, 0x9b, 0xd9, 0x69, 0x81, 0x24, 0xbb, 0xc9, 0x3a, 0x17, 0xa8, 0x89, - 0x20, 0x81, 0x21, 0xfc, 0x30, 0xd1, 0x58, 0xa2, 0x8d, 0x01, 0x00, 0x19, 0x02, 0x8b, 0xa9, 0x52, - 0xa9, 0x91, 0x3b, 0x07, 0x9a, 0x93, 0x2d, 0xb2, 0x4b, 0x82, 0x80, 0x11, 0xbf, 0x33, 0x9b, 0x14, - 0x1a, 0xc3, 0x0d, 0x11, 0x12, 0xbc, 0x33, 0x9c, 0x24, 0xd9, 0x8b, 0x73, 0xa1, 0x29, 0xa0, 0xaa, - 0x08, 0x45, 0xb8, 0x28, 0xf0, 0x29, 0x80, 0x04, 0xac, 0x21, 0x01, 0x89, 0x91, 0xac, 0x42, 0x03, - 0x9b, 0x27, 0xbf, 0x41, 0x91, 0x89, 0x00, 0x8b, 0x26, 0xca, 0x10, 0x81, 0x80, 0x38, 0xf2, 0x1d, - 0x82, 0x18, 0x21, 0xd9, 0x1b, 0x02, 0x21, 0xd0, 0x1a, 0x12, 0xd0, 0x49, 0x92, 0x09, 0xa8, 0x8a, - 0x25, 0x98, 0x89, 0x91, 0x0a, 0x47, 0xc0, 0x0a, 0x11, 0xba, 0x73, 0xa9, 0x00, 0x9b, 0x36, 0x80, - 0xfa, 0x2a, 0x85, 0x29, 0xd8, 0x18, 0x10, 0x80, 0x20, 0xf2, 0x0c, 0x03, 0x00, 0x19, 0xe0, 0x2c, - 0x15, 0x98, 0x99, 0x10, 0x9a, 0x34, 0x8a, 0xa8, 0x11, 0x8a, 0x32, 0xb9, 0x34, 0xff, 0x21, 0x01, - 0xa8, 0x8a, 0x31, 0x84, 0xb8, 0x9e, 0x23, 0x98, 0x08, 0x18, 0x13, 0xcf, 0x50, 0x81, 0xaa, 0x09, - 0x35, 0xa8, 0xb8, 0x2b, 0xa0, 0x67, 0xb0, 0x9b, 0x21, 0x93, 0x0b, 0x14, 0x99, 0xfa, 0x30, 0x80, - 0x13, 0xbc, 0x81, 0x43, 0xcd, 0x21, 0x11, 0xa2, 0x9f, 0x02, 0x21, 0xe9, 0x28, 0x82, 0x98, 0x8a, - 0x10, 0x33, 0xb0, 0x0b, 0xfa, 0x20, 0x18, 0x16, 0xab, 0x99, 0x29, 0x13, 0x52, 0xc8, 0xda, 0x6b, - 0x16, 0xca, 0x28, 0x91, 0x00, 0x09, 0x90, 0x0a, 0x03, 0x8a, 0x34, 0xd8, 0x8d, 0x22, 0x21, 0xe9, - 0x30, 0xa8, 0x98, 0x29, 0xa4, 0x4a, 0xd0, 0x40, 0xd9, 0x31, 0xa0, 0x08, 0x10, 0xa1, 0x0a, 0x38, - 0x27, 0xaf, 0x22, 0xaa, 0x30, 0xb3, 0x0f, 0x85, 0x9a, 0x02, 0x00, 0x11, 0xcb, 0x99, 0x53, 0x98, - 0xa2, 0x69, 0xda, 0x20, 0x80, 0x32, 0xf9, 0x1a, 0x01, 0x02, 0x89, 0x92, 0x9b, 0x68, 0xc1, 0x22, - 0xaf, 0x32, 0x01, 0xbb, 0x01, 0x28, 0x25, 0xfa, 0x0a, 0x11, 0x43, 0xa9, 0x88, 0xfb, 0x58, 0x12, - 0xb0, 0x8e, 0x02, 0x8b, 0x34, 0x9a, 0xa0, 0x30, 0xc2, 0x0c, 0x90, 0x72, 0x80, 0x90, 0x9a, 0x09, - 0x34, 0x90, 0xdb, 0x38, 0x82, 0x19, 0xb3, 0xbf, 0x54, 0x82, 0xba, 0x0b, 0x23, 0x8d, 0x25, 0xa8, - 0xaa, 0x18, 0x92, 0x00, 0x5b, 0xd1, 0x58, 0xa1, 0xab, 0x40, 0x93, 0x3c, 0xa3, 0xb9, 0x9f, 0x16, - 0x19, 0xb0, 0x38, 0xc0, 0x51, 0xb8, 0x08, 0x90, 0x21, 0xa8, 0x01, 0x98, 0x0d, 0xa1, 0x64, 0xb9, - 0x09, 0xaa, 0x33, 0x59, 0x87, 0x0c, 0x93, 0x9e, 0x20, 0x13, 0x88, 0xbc, 0x28, 0x03, 0x41, 0xe1, - 0x8b, 0x10, 0x22, 0x91, 0x8a, 0x88, 0x01, 0x8a, 0x83, 0xbb, 0x79, 0xa4, 0x61, 0xfb, 0x29, 0x34, - 0xa0, 0xdc, 0x09, 0x33, 0x01, 0xa9, 0x81, 0x9e, 0x32, 0x00, 0xa9, 0x29, 0xc8, 0x27, 0x9a, 0xf9, - 0x69, 0x93, 0x8b, 0x89, 0x21, 0x81, 0x12, 0xba, 0xba, 0x73, 0xc1, 0x29, 0xb1, 0x88, 0x18, 0x26, - 0xa9, 0xcc, 0x61, 0x82, 0xa9, 0x88, 0x0a, 0x25, 0x98, 0x09, 0xa9, 0xcb, 0x70, 0x83, 0xab, 0x29, - 0x04, 0x9a, 0x42, 0xb1, 0x0d, 0x22, 0xb9, 0x99, 0x48, 0x86, 0x2a, 0xb0, 0xaa, 0x78, 0xa3, 0x19, - 0x8a, 0x07, 0xab, 0x10, 0x03, 0xad, 0x32, 0xc1, 0x0a, 0x1a, 0x36, 0xa0, 0xab, 0x0c, 0x07, 0x19, - 0xd1, 0x1b, 0x24, 0x90, 0x99, 0x90, 0x9e, 0x43, 0x83, 0x19, 0xf9, 0x4a, 0x90, 0x11, 0x89, 0xa0, - 0x29, 0x05, 0xcc, 0x50, 0x81, 0x9b, 0x23, 0xba, 0x80, 0x71, 0xc1, 0x08, 0xa9, 0x32, 0xa2, 0x0c, - 0xb3, 0x6a, 0x92, 0x8d, 0x12, 0x08, 0xb8, 0x28, 0x91, 0x8c, 0x17, 0x8c, 0x92, 0x4a, 0x91, 0x31, - 0xbc, 0x21, 0x19, 0x84, 0x8f, 0x02, 0x9a, 0x48, 0x85, 0xbc, 0x38, 0x82, 0x20, 0xaa, 0x81, 0xac, - 0x27, 0xba, 0x53, 0xca, 0x00, 0x39, 0x93, 0xcd, 0x68, 0x83, 0xab, 0x32, 0xda, 0x30, 0x83, 0xbd, - 0x52, 0xb8, 0x18, 0x02, 0x89, 0x98, 0xa8, 0x79, 0x94, 0xad, 0x50, 0x92, 0x89, 0xa0, 0x10, 0xa9, - 0x81, 0x5b, 0x05, 0x8a, 0x89, 0x11, 0x92, 0x8f, 0x14, 0x98, 0xbb, 0x33, 0x80, 0x17, 0xad, 0x21, - 0x80, 0xba, 0x51, 0x90, 0x20, 0xb9, 0x18, 0xa1, 0x1d, 0x85, 0x88, 0x8b, 0x10, 0x32, 0xad, 0x37, - 0xbb, 0x89, 0x44, 0xb1, 0x9d, 0x42, 0x90, 0x9a, 0x80, 0x38, 0x26, 0xd9, 0x9c, 0x32, 0x89, 0x24, - 0x98, 0xb9, 0x89, 0x19, 0x21, 0x27, 0xaf, 0x22, 0x81, 0xdb, 0x28, 0x82, 0x63, 0xd9, 0x09, 0x10, - 0x00, 0x01, 0x09, 0x80, 0xfa, 0x5a, 0x83, 0x99, 0x9b, 0x44, 0xb0, 0xa9, 0x38, 0x84, 0xa9, 0x41, - 0xb1, 0x19, 0xec, 0x38, 0x04, 0x08, 0xb1, 0x8a, 0xaa, 0x71, 0x95, 0x1b, 0x81, 0xbb, 0x30, 0x72, - 0xc0, 0x89, 0x28, 0x04, 0xa9, 0x88, 0xaa, 0x72, 0x95, 0x0a, 0xca, 0x51, 0x91, 0x89, 0x00, 0xb1, - 0x1b, 0x25, 0xc2, 0x8f, 0x10, 0x31, 0x81, 0xbc, 0x9a, 0x73, 0x91, 0x8a, 0x94, 0x8c, 0x33, 0x99, - 0xa1, 0x9c, 0x51, 0x93, 0x08, 0xdb, 0x10, 0x42, 0xb1, 0x89, 0x8a, 0xc8, 0x71, 0x98, 0x20, 0xb1, - 0x0b, 0x83, 0xeb, 0x4a, 0x06, 0x8b, 0x32, 0xfa, 0x19, 0x22, 0xa9, 0x48, 0xa1, 0x0b, 0x18, 0x14, - 0xa2, 0x8f, 0x05, 0xcb, 0x51, 0xa0, 0x09, 0x80, 0x80, 0x53, 0xd0, 0x9b, 0x33, 0xa0, 0x28, 0xb3, - 0x8f, 0x81, 0x2a, 0x06, 0x99, 0x88, 0xa0, 0x30, 0xa4, 0xaf, 0x23, 0x13, 0xaa, 0xa1, 0x9d, 0x53, - 0xb8, 0x10, 0x90, 0x9a, 0x36, 0x9a, 0x83, 0xea, 0x3b, 0x06, 0x9a, 0x01, 0xd9, 0x50, 0x81, 0xa8, - 0x1a, 0x90, 0x10, 0x81, 0x71, 0xe3, 0x0b, 0x11, 0x11, 0xa9, 0x9a, 0x45, 0xd8, 0x08, 0x08, 0x04, - 0x8a, 0x92, 0x9b, 0x36, 0xea, 0x09, 0x23, 0xa9, 0x11, 0x09, 0xa8, 0x1a, 0xa0, 0x65, 0x90, 0xa0, - 0x9e, 0x33, 0x81, 0xab, 0x51, 0xc2, 0x9c, 0x28, 0x24, 0x12, 0xfd, 0x28, 0x92, 0x19, 0x99, 0x31, - 0xaa, 0x13, 0x8b, 0x98, 0x20, 0x44, 0xfb, 0x59, 0x81, 0xab, 0x42, 0x80, 0xb9, 0x0b, 0x24, 0x44, - 0xec, 0x28, 0x02, 0xa0, 0xaa, 0x32, 0x01, 0xbf, 0x45, 0xa9, 0x09, 0x80, 0x88, 0x41, 0xa1, 0xaa, - 0x10, 0xc1, 0x48, 0x04, 0xaa, 0x19, 0xb9, 0x4a, 0x37, 0xaa, 0xb9, 0x40, 0x14, 0xac, 0x20, 0x32, - 0xf9, 0x0b, 0x21, 0x02, 0x98, 0x8b, 0x06, 0xcb, 0x38, 0x22, 0xa2, 0xcc, 0x1a, 0x44, 0xc0, 0x89, - 0x1a, 0x35, 0xa9, 0x98, 0xad, 0x43, 0x12, 0xb8, 0x4a, 0x93, 0xab, 0x8d, 0x17, 0xaa, 0x18, 0x11, - 0x33, 0xbf, 0x28, 0x12, 0x88, 0xb9, 0xac, 0x72, 0x93, 0x0b, 0x94, 0xad, 0x51, 0xa1, 0x09, 0x88, - 0x80, 0x21, 0x41, 0xd1, 0x8c, 0x80, 0x29, 0x15, 0x89, 0x9b, 0x25, 0xad, 0x20, 0x62, 0xc0, 0x9b, - 0x33, 0x98, 0x89, 0x14, 0x00, 0xcd, 0x00, 0x41, 0xa1, 0xac, 0x50, 0x82, 0xab, 0x10, 0x12, 0xa8, - 0x39, 0xc3, 0x0c, 0x13, 0x0c, 0x07, 0x9c, 0x33, 0x99, 0xa8, 0x90, 0x0f, 0x12, 0x24, 0xaa, 0xb9, - 0x8e, 0x23, 0x23, 0xda, 0x18, 0xa0, 0x29, 0x05, 0x8b, 0x94, 0x8c, 0x33, 0xfb, 0x5b, 0x13, 0x8a, - 0x88, 0x0a, 0x00, 0xd9, 0x71, 0xb3, 0x8c, 0x11, 0x81, 0x99, 0x9b, 0x72, 0x92, 0x1b, 0x91, 0x89, - 0x9e, 0x44, 0x81, 0xac, 0x20, 0x01, 0xc9, 0x58, 0xa2, 0x0c, 0x81, 0x22, 0xaa, 0x81, 0x3b, 0x17, - 0xbf, 0x32, 0x82, 0xb9, 0x0a, 0x22, 0x32, 0xf0, 0x3d, 0xa2, 0x8c, 0x42, 0x92, 0xab, 0xa8, 0x71, - 0x91, 0xaa, 0x1a, 0x43, 0x01, 0xa8, 0x8d, 0x01, 0x51, 0xb8, 0x18, 0x0a, 0x85, 0x2a, 0x86, 0xac, - 0x9b, 0x64, 0x92, 0xbb, 0x10, 0x20, 0x05, 0xac, 0x10, 0x80, 0x99, 0x28, 0x36, 0xea, 0x19, 0x13, - 0xda, 0x28, 0x92, 0x30, 0xd8, 0x8b, 0x53, 0x80, 0x88, 0xb1, 0x8f, 0x24, 0x98, 0x8b, 0x33, 0x8b, - 0x11, 0xc1, 0x0c, 0x14, 0xac, 0x33, 0xa0, 0xbd, 0x70, 0x82, 0x99, 0xbc, 0x62, 0x92, 0x89, 0xa8, - 0x38, 0x14, 0xac, 0x11, 0x10, 0xc9, 0x40, 0x81, 0xc8, 0x0d, 0x34, 0x90, 0xc8, 0x9a, 0x50, 0xa2, - 0x21, 0xbc, 0x11, 0x08, 0x90, 0x18, 0x90, 0x9a, 0x66, 0x90, 0xbc, 0x58, 0x12, 0xa9, 0x00, 0xaf, - 0x53, 0x91, 0x99, 0x88, 0xa9, 0x52, 0xa8, 0x22, 0x89, 0xc9, 0x50, 0xc1, 0x3a, 0x02, 0x00, 0xeb, - 0x30, 0xa9, 0x44, 0xb9, 0x1a, 0xa1, 0x30, 0x26, 0xeb, 0xab, 0x46, 0x91, 0xba, 0x29, 0x22, 0x90, - 0x10, 0xe0, 0x0d, 0x22, 0x11, 0xb0, 0x8e, 0x00, 0x42, 0xb1, 0x9d, 0x21, 0x81, 0x31, 0xe9, 0x99, - 0x29, 0x15, 0x01, 0xca, 0x0c, 0x03, 0x11, 0x89, 0x94, 0x0e, 0x83, 0x89, 0xa9, 0x32, 0xca, 0x53, - 0x88, 0xc8, 0x39, 0xb2, 0x2d, 0x06, 0x8c, 0x04, 0x9d, 0x11, 0x12, 0x8a, 0xc0, 0x1c, 0x14, 0x8a, - 0x81, 0x00, 0x9a, 0x24, 0x10, 0xd9, 0xab, 0x58, 0x16, 0xa9, 0x8a, 0x30, 0xb2, 0x61, 0xf9, 0x08, - 0x19, 0x33, 0x98, 0xda, 0x2b, 0x16, 0x08, 0xa9, 0x9a, 0x11, 0x44, 0xb2, 0x9e, 0x08, 0x12, 0x52, - 0xf9, 0x1a, 0x12, 0x00, 0x80, 0xbb, 0x00, 0x30, 0x27, 0xab, 0xcb, 0x31, 0x12, 0x81, 0xda, 0x1b, - 0x15, 0x21, 0xfb, 0x09, 0x31, 0x92, 0x9b, 0x12, 0x09, 0xd9, 0x61, 0x98, 0x83, 0x8f, 0x81, 0x38, - 0xb1, 0x5a, 0xb2, 0x09, 0x8a, 0x16, 0xba, 0x2c, 0x05, 0x1a, 0x92, 0x9b, 0x09, 0x35, 0x9a, 0x02, - 0xdc, 0x2a, 0x37, 0xb9, 0x1a, 0xa0, 0x21, 0x12, 0xb9, 0xaa, 0x9b, 0x14, 0x65, 0xe9, 0x18, 0x80, - 0x12, 0x9b, 0x10, 0x01, 0x99, 0x72, 0xf0, 0x28, 0x88, 0x80, 0x51, 0xe8, 0x19, 0x01, 0x18, 0x82, - 0xca, 0x39, 0x84, 0xab, 0x20, 0xb1, 0x61, 0xa8, 0x18, 0xbb, 0x23, 0x90, 0x71, 0x83, 0xbe, 0x20, - 0x82, 0x3a, 0x96, 0x9c, 0x11, 0x80, 0xaa, 0x33, 0xb8, 0x0b, 0x02, 0x98, 0x71, 0xf4, 0x4b, 0x83, - 0x8a, 0x80, 0xb9, 0x71, 0xa1, 0x09, 0x89, 0x03, 0x9a, 0x10, 0x96, 0x9f, 0x33, 0x81, 0x99, 0xcc, - 0x50, 0x02, 0xa8, 0x8b, 0x00, 0x12, 0x9b, 0x57, 0xcb, 0x11, 0x09, 0x02, 0x81, 0xae, 0x43, 0x99, - 0x18, 0x80, 0xa0, 0x3a, 0x92, 0x98, 0x59, 0xb1, 0x0c, 0x01, 0x12, 0x2b, 0x07, 0x8f, 0x12, 0xb9, - 0x9d, 0x44, 0x92, 0x9b, 0xa3, 0x9d, 0x22, 0x11, 0xa1, 0x18, 0xae, 0x35, 0xb9, 0x00, 0x13, 0x9d, - 0x01, 0x00, 0xb9, 0x32, 0x9b, 0x25, 0xbc, 0x51, 0xc0, 0x3b, 0xa1, 0x73, 0xc0, 0x1c, 0x04, 0xaa, - 0x39, 0x95, 0x9b, 0x12, 0x18, 0x91, 0x9a, 0x2a, 0x57, 0xc8, 0x0b, 0x13, 0x80, 0x29, 0xc3, 0x0f, - 0x11, 0x10, 0xa0, 0xab, 0x12, 0x39, 0x37, 0xfb, 0x28, 0x90, 0x01, 0x39, 0xe1, 0x1c, 0x04, 0x0a, - 0x01, 0x9a, 0x00, 0x00, 0x11, 0x91, 0x9a, 0x4a, 0x15, 0xea, 0x10, 0x21, 0xcb, 0x42, 0xd9, 0x29, - 0x83, 0x2b, 0xa2, 0x9d, 0x33, 0xaa, 0x14, 0x61, 0xe9, 0x89, 0x3a, 0x85, 0x89, 0x01, 0x89, 0xba, - 0x53, 0x09, 0x93, 0xcb, 0x39, 0x06, 0x09, 0xb0, 0x2a, 0xd9, 0x72, 0xb0, 0x10, 0xbb, 0x41, 0x92, - 0x1a, 0xd1, 0x0c, 0x36, 0xc8, 0x1a, 0xa1, 0x69, 0x83, 0x9d, 0x80, 0x10, 0x02, 0x01, 0xbb, 0x99, - 0x43, 0x28, 0xd2, 0x0e, 0x21, 0x80, 0x3a, 0xf3, 0x1c, 0x14, 0x99, 0x88, 0x99, 0x39, 0x03, 0x20, - 0xcc, 0x29, 0x93, 0x9b, 0xb2, 0x32, 0x1b, 0x17, 0xac, 0x10, 0x10, 0x01, 0x98, 0x9b, 0x00, 0x29, - 0x12, 0x99, 0x29, 0x11, 0xb1, 0xab, 0x31, 0x91, 0x51, 0xc1, 0x3a, 0xf0, 0x38, 0xa2, 0x0a, 0x10, - 0x02, 0x99, 0xab, 0x31, 0xa9, 0x33, 0x91, 0x9c, 0x99, 0x53, 0x81, 0x09, 0xdb, 0x31, 0x99, 0x11, - 0x33, 0xa9, 0xb9, 0x31, 0xb1, 0x2c, 0x03, 0x9b, 0x01, 0x9a, 0x29, 0x91, 0x31, 0xa1, 0x9b, 0x30, - 0x21, 0xa0, 0x9b, 0x31, 0xa1, 0x19, 0x99, 0x92, 0x99, 0x31, 0xb1, 0x1b, 0x21, 0x11, 0xaa, 0x29, - 0x11, 0x00, 0x11, 0xa9, 0x1b, 0x12, 0x00, 0x92, 0xaa, 0x29, 0x13, 0xa9, 0x10, 0x99, 0x11, 0x01, - 0x90, 0xa9, 0x21, 0x11, 0x90, 0xa9, 0x19, 0x21, 0x90, 0x99, 0x11, 0x90, 0x19, 0x01, 0x09, 0x19, - 0x01, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x02, 0x00, 0x00, 0x7d, 0x0b, 0x02, 0x01, 0x00, - 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x70, 0xff, 0x71, 0x77, 0xb1, 0x22, 0xbc, 0xe9, - 0x39, 0x13, 0x18, 0xfc, 0x1a, 0x98, 0x42, 0x14, 0x99, 0xc9, 0x39, 0x21, 0x92, 0x37, 0xcb, 0xba, - 0x20, 0x28, 0xd4, 0x49, 0xa1, 0x09, 0x99, 0x42, 0x01, 0xc9, 0x59, 0x83, 0x9a, 0x19, 0xbb, 0x12, - 0x20, 0x9c, 0x01, 0x27, 0x8f, 0xb2, 0x31, 0xba, 0xb2, 0x79, 0x84, 0x2a, 0xb2, 0x9e, 0x20, 0x00, - 0x02, 0xcb, 0x21, 0xb9, 0x29, 0x37, 0x8b, 0xb0, 0x98, 0x70, 0x90, 0x93, 0x0e, 0x10, 0x83, 0x48, - 0xc2, 0x9c, 0xbb, 0x20, 0x25, 0xa0, 0x1b, 0xf8, 0x60, 0x82, 0x0a, 0x90, 0x31, 0x8a, 0xe3, 0x3a, - 0xeb, 0x20, 0x23, 0x98, 0x90, 0x09, 0x88, 0xab, 0xc2, 0x0b, 0x88, 0x77, 0x91, 0xa0, 0x51, 0xd9, - 0x1a, 0x82, 0x29, 0xb1, 0x30, 0x22, 0xf8, 0x29, 0xa9, 0x90, 0x09, 0x89, 0x04, 0xaf, 0x73, 0x92, - 0x28, 0x88, 0xb0, 0x0d, 0x00, 0x02, 0x0c, 0x34, 0xa8, 0xeb, 0x11, 0x0d, 0xc2, 0x19, 0x39, 0x87, - 0x00, 0x88, 0x90, 0x32, 0x90, 0xec, 0x19, 0x01, 0x9a, 0x80, 0x08, 0x73, 0x81, 0x18, 0x82, 0x29, - 0xf2, 0x8f, 0xa1, 0x39, 0x12, 0x90, 0x41, 0x90, 0xfa, 0x00, 0x38, 0x95, 0x09, 0xc0, 0x0c, 0x92, - 0x18, 0x01, 0x01, 0x3a, 0xa5, 0x4a, 0xb8, 0x28, 0x32, 0x28, 0xfc, 0x9b, 0x1b, 0x45, 0x91, 0x08, - 0xba, 0x38, 0xa8, 0x37, 0xaa, 0x21, 0x81, 0x0d, 0xf8, 0x4c, 0x08, 0x04, 0x89, 0xa8, 0x8a, 0x11, - 0x42, 0x51, 0xb0, 0xab, 0x12, 0x0e, 0xb8, 0x60, 0x88, 0x00, 0x2b, 0xa3, 0x0d, 0x24, 0x9b, 0x10, - 0x03, 0x9c, 0x21, 0xf9, 0x20, 0xac, 0x27, 0x1b, 0xa2, 0xa9, 0x98, 0x4b, 0x05, 0x32, 0xbd, 0x03, - 0xca, 0x9a, 0x61, 0x81, 0x00, 0x9b, 0x21, 0xb0, 0x63, 0xaa, 0xa1, 0x73, 0xd8, 0x11, 0x8b, 0x32, - 0xf8, 0x2a, 0x91, 0xab, 0x26, 0x89, 0x62, 0xc8, 0x20, 0xba, 0x31, 0x81, 0x88, 0x10, 0xde, 0x41, - 0xa9, 0x12, 0x9a, 0x10, 0x01, 0x9a, 0x93, 0x4c, 0x34, 0xfc, 0x32, 0xab, 0x91, 0x42, 0x89, 0xa0, - 0x31, 0xba, 0xac, 0x81, 0x29, 0x11, 0x88, 0x27, 0x0c, 0xab, 0x17, 0x22, 0xaa, 0x38, 0xb6, 0x1f, - 0xa2, 0x89, 0x98, 0x19, 0x25, 0xc9, 0x59, 0xb8, 0x18, 0x45, 0x89, 0xb1, 0x2c, 0x01, 0xd9, 0x3b, - 0x03, 0x29, 0xf0, 0x2a, 0x12, 0x90, 0x31, 0xb1, 0xad, 0x11, 0x24, 0xc9, 0x4a, 0xf3, 0x2b, 0x80, - 0x84, 0x3d, 0xb2, 0x18, 0xb8, 0x18, 0x20, 0x21, 0x88, 0x29, 0xa4, 0xfa, 0x2f, 0xa3, 0x20, 0x18, - 0xf2, 0x1c, 0x82, 0x19, 0x81, 0x09, 0x31, 0xf0, 0x3a, 0x03, 0xcb, 0x62, 0xa8, 0x98, 0x00, 0x08, - 0xa0, 0x0e, 0x06, 0x9a, 0x31, 0xd3, 0x2a, 0x82, 0x9a, 0x14, 0x9f, 0x12, 0x10, 0x0c, 0x83, 0xb8, - 0x2a, 0x88, 0x86, 0x1a, 0x8c, 0x85, 0x1c, 0x03, 0x88, 0xa9, 0x30, 0xa9, 0x42, 0xf8, 0x50, 0xba, - 0x11, 0x41, 0xca, 0x01, 0x80, 0x1d, 0xb3, 0x71, 0xb8, 0x01, 0x3a, 0xc1, 0x19, 0xd3, 0x59, 0xa8, - 0x12, 0x00, 0xbc, 0x29, 0x96, 0x3c, 0x93, 0x8a, 0x81, 0x98, 0x60, 0xd0, 0x10, 0x18, 0xc8, 0x33, - 0xaf, 0x11, 0x88, 0x20, 0x80, 0x8c, 0x17, 0x09, 0x90, 0x89, 0x09, 0x83, 0x8d, 0x12, 0x0a, 0x84, - 0x88, 0x8b, 0xba, 0x14, 0x54, 0xba, 0x16, 0x8e, 0xa8, 0x23, 0x28, 0x81, 0xa9, 0x13, 0xab, 0x9f, - 0x17, 0x99, 0x0a, 0x92, 0x80, 0x09, 0x80, 0x81, 0xad, 0x63, 0x00, 0x33, 0xd9, 0x31, 0xbb, 0x08, - 0xab, 0xbd, 0x20, 0x15, 0x19, 0x8d, 0x06, 0x10, 0x8a, 0x91, 0x72, 0xc8, 0x20, 0xd9, 0x1a, 0x03, - 0x2b, 0xa5, 0x89, 0x30, 0xfa, 0x20, 0x01, 0x2c, 0x87, 0x8a, 0x12, 0xad, 0x83, 0x39, 0xb9, 0x95, - 0x1a, 0xa2, 0x10, 0xad, 0x14, 0x28, 0x19, 0xc3, 0x59, 0xb9, 0x10, 0x02, 0xad, 0x26, 0xbc, 0x23, - 0x9c, 0x10, 0xc4, 0x4b, 0x93, 0x1a, 0x58, 0xf2, 0x38, 0xc8, 0x10, 0x80, 0x09, 0x10, 0xc1, 0x59, - 0xb8, 0x10, 0x93, 0x2a, 0x9a, 0xd3, 0x70, 0x98, 0x80, 0x22, 0xad, 0x00, 0x81, 0x00, 0x10, 0xad, - 0x85, 0x2c, 0xa3, 0x80, 0x1b, 0x14, 0x81, 0xac, 0x29, 0x86, 0x0c, 0x92, 0x30, 0xe9, 0x10, 0x9b, - 0x05, 0x59, 0xc8, 0x93, 0x1d, 0x21, 0xc3, 0x09, 0x31, 0xcc, 0x12, 0xaa, 0x48, 0xd1, 0x31, 0x90, - 0x99, 0x00, 0xad, 0x26, 0x08, 0x0b, 0x86, 0x1c, 0xa2, 0x00, 0x8b, 0x90, 0x68, 0xa2, 0x1b, 0x99, - 0x85, 0x1e, 0x94, 0x98, 0x20, 0x92, 0x18, 0xfb, 0x30, 0xb3, 0x4c, 0xd1, 0x18, 0x18, 0xb0, 0x40, - 0xd2, 0x4b, 0xb1, 0x01, 0x3a, 0x94, 0x39, 0xfb, 0x41, 0xc0, 0x29, 0xa0, 0x20, 0x8a, 0x91, 0x72, - 0xb8, 0x9a, 0x15, 0x0a, 0xa2, 0x22, 0xc9, 0x5b, 0xb8, 0x02, 0x0f, 0x96, 0x39, 0xd0, 0x10, 0x8a, - 0x03, 0x0a, 0x84, 0x1d, 0xa1, 0x22, 0xab, 0x02, 0x9c, 0x14, 0x29, 0xf1, 0x08, 0x10, 0x88, 0x22, - 0xcb, 0x21, 0x3a, 0xf3, 0x5a, 0xa1, 0x89, 0x99, 0x05, 0x0d, 0x86, 0x1a, 0x90, 0x82, 0x9b, 0x05, - 0x0d, 0xb3, 0x59, 0x90, 0x80, 0x29, 0xf0, 0x38, 0x81, 0x89, 0x93, 0x0d, 0x38, 0xc1, 0x30, 0x98, - 0x89, 0x0a, 0xa4, 0x4a, 0xd0, 0x73, 0xa9, 0xa2, 0x59, 0xc0, 0x22, 0x9c, 0x92, 0x20, 0xac, 0x05, - 0x9a, 0x30, 0xa0, 0xa2, 0x7a, 0xb0, 0x31, 0xbc, 0x26, 0x9a, 0x91, 0x19, 0xaa, 0x16, 0x8d, 0x04, - 0x8b, 0x28, 0x82, 0x0b, 0x23, 0xab, 0x05, 0x1e, 0x92, 0x08, 0x09, 0xb1, 0x08, 0x9e, 0x44, 0x08, - 0xf1, 0x29, 0x98, 0x12, 0x4b, 0x96, 0x8c, 0x01, 0x01, 0x8b, 0x92, 0x0c, 0x86, 0x8b, 0x04, 0x09, - 0x98, 0x15, 0x8d, 0xa3, 0x3b, 0xa3, 0x1c, 0x81, 0x94, 0x2b, 0xb2, 0x38, 0xa8, 0xbd, 0x43, 0x22, - 0xaf, 0x24, 0x0a, 0xa8, 0x92, 0x3b, 0xfa, 0x61, 0x10, 0xc9, 0x40, 0xb9, 0x30, 0xb9, 0x03, 0x38, - 0xed, 0x42, 0xa9, 0x10, 0x82, 0x0c, 0x83, 0x89, 0x40, 0xea, 0x21, 0x88, 0x99, 0x12, 0x8a, 0x50, - 0xc1, 0x19, 0x10, 0xbe, 0x44, 0x9a, 0x02, 0x10, 0x9a, 0x10, 0xf8, 0x50, 0xa8, 0x12, 0x8b, 0xb1, - 0x49, 0xa9, 0x17, 0xbb, 0x52, 0x8b, 0xa1, 0x53, 0xac, 0x14, 0xa9, 0x28, 0xa1, 0x09, 0x00, 0xb8, - 0x55, 0xac, 0x93, 0x20, 0x0c, 0x86, 0x8b, 0x12, 0xab, 0x21, 0x96, 0x0f, 0x13, 0x9a, 0x28, 0xa1, - 0x19, 0x18, 0xc9, 0x22, 0x2f, 0xa3, 0x18, 0x8d, 0xa3, 0x79, 0xa0, 0x81, 0x89, 0x00, 0x0a, 0x96, - 0x5a, 0xc9, 0x21, 0x09, 0x93, 0xaa, 0x01, 0x1b, 0xb3, 0x74, 0xaa, 0x93, 0x3c, 0xd2, 0x20, 0x80, - 0x8e, 0x21, 0xc1, 0x48, 0xa0, 0x90, 0x58, 0xda, 0x12, 0x10, 0x80, 0x08, 0xf0, 0x3a, 0xb2, 0x31, - 0xab, 0x87, 0x1c, 0xb0, 0x23, 0xab, 0x24, 0x02, 0xca, 0x59, 0xe0, 0x18, 0x08, 0x91, 0x21, 0x9c, - 0x23, 0xca, 0x38, 0x14, 0x99, 0x90, 0xbb, 0x27, 0xaf, 0x84, 0x19, 0x00, 0x00, 0x89, 0x15, 0xac, - 0x02, 0x09, 0x90, 0x35, 0xcd, 0x11, 0x08, 0x89, 0x28, 0xb2, 0x34, 0xbf, 0x86, 0x0a, 0x40, 0xd1, - 0x39, 0x90, 0xa9, 0x24, 0xba, 0x30, 0xa8, 0x50, 0xa8, 0x81, 0xaa, 0x81, 0x78, 0xc2, 0x31, 0xea, - 0x20, 0x09, 0xe2, 0x58, 0x98, 0x08, 0x00, 0x08, 0x1a, 0x82, 0x8f, 0x15, 0x8b, 0x82, 0x89, 0x18, - 0xc0, 0x49, 0xc4, 0x4b, 0xa4, 0x8a, 0x03, 0xaa, 0x42, 0xb1, 0x2c, 0xa5, 0x0b, 0x81, 0x81, 0x98, - 0x20, 0x3a, 0xf9, 0x21, 0x8a, 0x12, 0x10, 0x22, 0xab, 0x87, 0xaf, 0x28, 0x95, 0x0d, 0x86, 0x8b, - 0x12, 0x80, 0x1b, 0xb5, 0x29, 0x00, 0xb8, 0x52, 0xbc, 0x15, 0xab, 0x41, 0xb8, 0x3a, 0x85, 0x9c, - 0x14, 0xa9, 0x31, 0xc0, 0x08, 0x89, 0x14, 0xc0, 0x4a, 0xb1, 0x1a, 0x12, 0x9a, 0x94, 0x1d, 0x80, - 0x23, 0xa9, 0xaa, 0x47, 0xf8, 0x58, 0xa1, 0x9a, 0x21, 0xc8, 0x31, 0x8b, 0x93, 0x20, 0x9e, 0x82, - 0x40, 0x8a, 0x81, 0x11, 0xfc, 0x41, 0xa8, 0x28, 0x90, 0x92, 0x2d, 0x29, 0xb3, 0x1a, 0x87, 0x8d, - 0x84, 0x0c, 0x82, 0x91, 0x0b, 0x86, 0x1b, 0x92, 0x21, 0xb8, 0x2e, 0x95, 0x0a, 0x00, 0xa0, 0x1c, - 0xa4, 0x3a, 0x82, 0xb0, 0x5a, 0x94, 0x0b, 0x10, 0xc3, 0x5b, 0xa0, 0xb2, 0x1e, 0x10, 0x06, 0x8d, - 0x02, 0x8a, 0x91, 0x31, 0x9c, 0x04, 0x0a, 0x11, 0xdb, 0x00, 0x61, 0xd0, 0x39, 0xa2, 0x90, 0x3d, - 0xa5, 0x3b, 0x98, 0x11, 0xa8, 0x39, 0x10, 0xc5, 0x2d, 0xb1, 0x31, 0xb9, 0x59, 0xc4, 0x1a, 0x21, - 0xc1, 0x1a, 0x88, 0x02, 0x90, 0x7c, 0xa4, 0x9a, 0x28, 0x8b, 0x86, 0x99, 0x41, 0xb8, 0x0a, 0x17, - 0x8b, 0x80, 0x11, 0xba, 0x4a, 0xb3, 0x3a, 0x18, 0xc3, 0x41, 0xa8, 0x49, 0xf2, 0x2c, 0x84, 0x9a, - 0x91, 0x2c, 0x41, 0xe2, 0x58, 0xb8, 0x19, 0x01, 0x90, 0x91, 0x4c, 0x91, 0xb1, 0x5a, 0xa0, 0x20, - 0xc3, 0x5b, 0xb8, 0x18, 0x21, 0xac, 0x02, 0x90, 0x54, 0xbc, 0x15, 0xba, 0x39, 0xb1, 0x16, 0x1a, - 0xbb, 0x17, 0xab, 0x34, 0xac, 0x10, 0x00, 0x38, 0xf8, 0x19, 0x32, 0xca, 0x32, 0xe9, 0x20, 0xa2, - 0x1b, 0xa2, 0x19, 0x53, 0xc9, 0x81, 0x1c, 0x10, 0x90, 0x16, 0x9d, 0x81, 0x88, 0x08, 0x11, 0x08, - 0x85, 0x4a, 0xc3, 0x9e, 0x22, 0xaa, 0x34, 0xa8, 0x0a, 0xb9, 0x28, 0x95, 0x2c, 0x24, 0xd8, 0x48, - 0xcb, 0x15, 0x1b, 0x91, 0x80, 0xb9, 0x78, 0xb1, 0x01, 0x18, 0xc1, 0x2c, 0xc2, 0x11, 0x1c, 0xa2, - 0x71, 0xd0, 0x40, 0xa9, 0x80, 0x11, 0x0c, 0x12, 0xd9, 0x41, 0xba, 0x11, 0x01, 0x1b, 0xa6, 0x29, - 0x81, 0x9f, 0x13, 0x00, 0x09, 0xa3, 0x0c, 0xf1, 0x48, 0x08, 0xa8, 0x21, 0xab, 0x22, 0xc8, 0x33, - 0x9b, 0x21, 0x3a, 0x97, 0x5b, 0xc0, 0x08, 0x0d, 0x05, 0x1e, 0xa2, 0x20, 0x0b, 0xc3, 0x3a, 0xa1, - 0x20, 0x02, 0x90, 0x5d, 0xc1, 0x00, 0x8a, 0x28, 0xf3, 0x2a, 0x11, 0x90, 0x88, 0x8d, 0x04, 0x08, - 0x12, 0x0a, 0x80, 0xd1, 0x50, 0xea, 0x38, 0xa2, 0x10, 0x8c, 0xa2, 0x50, 0xbb, 0x36, 0xbc, 0x14, - 0x8c, 0x12, 0x01, 0xdb, 0x42, 0xad, 0x05, 0x09, 0x80, 0x90, 0x3a, 0xc3, 0x3b, 0xb3, 0x10, 0x10, - 0xda, 0x11, 0xba, 0x73, 0xb8, 0x01, 0x19, 0x89, 0x07, 0x0b, 0x21, 0xda, 0x86, 0x0c, 0x00, 0x02, - 0x8a, 0x01, 0xb9, 0x80, 0x7a, 0xc2, 0x2a, 0x02, 0x10, 0xb8, 0x90, 0x60, 0xfb, 0x53, 0xba, 0x11, - 0x09, 0x09, 0xa6, 0x3b, 0xa3, 0x9c, 0x43, 0x90, 0x39, 0xf1, 0x4b, 0x80, 0x18, 0xa3, 0x0c, 0x29, - 0xf0, 0x28, 0x91, 0x48, 0xc3, 0x29, 0x0b, 0xa4, 0x18, 0x89, 0x83, 0x0f, 0x23, 0xe9, 0x20, 0xa9, - 0x14, 0x9c, 0x91, 0x60, 0xa9, 0x32, 0xbb, 0x02, 0x08, 0x61, 0xe1, 0x1a, 0x01, 0x98, 0x42, 0xb9, - 0x80, 0x0e, 0x81, 0x13, 0x8d, 0x02, 0x00, 0x10, 0x88, 0x90, 0xcb, 0x33, 0x5e, 0xf2, 0x29, 0x3a, - 0xd2, 0x41, 0xaa, 0x00, 0x80, 0x29, 0x91, 0xd8, 0x79, 0xa0, 0x3a, 0xa1, 0x31, 0xa0, 0x9c, 0x63, - 0xb8, 0x5a, 0xf1, 0x38, 0xa8, 0x10, 0x80, 0x08, 0x82, 0x9a, 0x6a, 0xd9, 0x24, 0x99, 0x08, 0x92, - 0x1a, 0x0b, 0x86, 0x88, 0x0b, 0x84, 0xc8, 0x70, 0xb9, 0x85, 0x0a, 0x10, 0x98, 0x80, 0x63, 0xbd, - 0x04, 0x1c, 0x83, 0x1a, 0x81, 0x09, 0x99, 0x12, 0x1e, 0xc3, 0x39, 0x80, 0x08, 0xa2, 0x8d, 0x04, - 0x99, 0x50, 0xe2, 0x3b, 0xa6, 0x2a, 0x91, 0xa9, 0x22, 0x2b, 0x94, 0xb0, 0x1e, 0x94, 0x1b, 0x86, - 0x8c, 0x83, 0x18, 0x08, 0x91, 0x1a, 0xa1, 0x3a, 0xf3, 0x49, 0xb8, 0x00, 0x11, 0xd3, 0x09, 0x3b, - 0x84, 0xb9, 0x71, 0xe3, 0x29, 0xa1, 0x38, 0xc9, 0x30, 0x81, 0xfa, 0x69, 0xb0, 0x19, 0x01, 0x50, - 0x99, 0x92, 0x2c, 0xa1, 0x21, 0x9c, 0x21, 0xf1, 0x38, 0x98, 0xb1, 0x7b, 0xa0, 0x81, 0x39, 0xa1, - 0x8a, 0x68, 0xc1, 0x11, 0x2c, 0x81, 0x95, 0x0d, 0x81, 0x89, 0x21, 0xab, 0x25, 0xad, 0x41, 0x98, - 0x99, 0x23, 0x0a, 0x06, 0x0e, 0x81, 0x01, 0x89, 0x02, 0xba, 0x98, 0x2e, 0xa7, 0x2a, 0x80, 0x00, - 0x80, 0x10, 0x9b, 0x96, 0x4b, 0x93, 0x89, 0xd3, 0x2d, 0x85, 0x0b, 0x00, 0x91, 0x1c, 0xc2, 0x21, - 0xbb, 0x40, 0x96, 0x0a, 0x68, 0xc0, 0x31, 0xdb, 0x22, 0xa0, 0x2b, 0xc2, 0x01, 0x3e, 0xc4, 0x38, - 0xcb, 0x13, 0x19, 0x81, 0x18, 0xa3, 0x3c, 0xe1, 0x20, 0xab, 0x33, 0x0e, 0xb5, 0x3b, 0xb1, 0x18, - 0x38, 0x95, 0x09, 0x02, 0x9f, 0x85, 0x2b, 0xa3, 0x0a, 0x81, 0x10, 0x9f, 0x05, 0x0e, 0x84, 0x89, - 0x20, 0xa8, 0x09, 0x41, 0xd9, 0x22, 0x8b, 0xa4, 0x3a, 0xb8, 0x25, 0xbb, 0x30, 0x98, 0xf0, 0x52, - 0xba, 0x13, 0x9c, 0x33, 0xd1, 0x2a, 0x93, 0x9b, 0x32, 0xaa, 0x32, 0xe1, 0x58, 0xe8, 0x28, 0x80, - 0x92, 0x19, 0xca, 0x33, 0xc9, 0x69, 0xb3, 0x09, 0x31, 0xda, 0x3b, 0x95, 0x2b, 0xe3, 0x30, 0x8c, - 0x95, 0x3b, 0xb1, 0x2a, 0x21, 0xb0, 0x10, 0x02, 0x0f, 0x93, 0xc9, 0x73, 0xbb, 0x04, 0x2a, 0xc8, - 0x10, 0x00, 0x18, 0xb2, 0x59, 0x3a, 0xd6, 0x5b, 0xb1, 0x18, 0x19, 0xa0, 0x29, 0x81, 0x2c, 0xc4, - 0x58, 0xa8, 0x11, 0x19, 0xc8, 0x40, 0xa8, 0x9b, 0x24, 0xa9, 0x40, 0xa1, 0x81, 0x0d, 0xb8, 0x15, - 0x80, 0x39, 0xf3, 0x30, 0x8c, 0x9a, 0x17, 0x0c, 0x11, 0xd0, 0x29, 0x81, 0xa8, 0x71, 0xb9, 0x15, - 0x8c, 0x91, 0x12, 0x8c, 0x02, 0x8a, 0x92, 0x28, 0xa0, 0x08, 0x2b, 0x16, 0xd8, 0x48, 0xa8, 0x98, - 0x51, 0xa0, 0x29, 0xcc, 0x14, 0x20, 0xcc, 0x24, 0x8c, 0x80, 0x04, 0x2b, 0xd0, 0x21, 0xa9, 0x91, - 0x79, 0xd1, 0x38, 0x99, 0x10, 0xc0, 0x21, 0x3a, 0xf3, 0x39, 0xb1, 0x0a, 0x02, 0x12, 0x9d, 0x02, - 0x3c, 0xd4, 0x49, 0xa8, 0x83, 0x0c, 0x04, 0x8b, 0x92, 0x2c, 0xb3, 0x3a, 0x80, 0x95, 0x0e, 0x32, - 0xd1, 0x19, 0x00, 0xb2, 0x1d, 0x80, 0x30, 0xf2, 0x58, 0xb9, 0x81, 0x69, 0x90, 0x80, 0x98, 0x48, - 0xc0, 0x28, 0x98, 0x12, 0x8f, 0x84, 0x19, 0xb9, 0x42, 0xa9, 0x03, 0x39, 0xf8, 0x10, 0x28, 0xb8, - 0xa9, 0x62, 0xaa, 0x24, 0xba, 0x40, 0x9a, 0x17, 0x8b, 0xa8, 0x21, 0x9a, 0x86, 0x0b, 0x41, 0xe8, - 0x20, 0x2a, 0xd0, 0x23, 0x0d, 0x83, 0x0a, 0x92, 0x2c, 0xd8, 0x21, 0x19, 0xa3, 0x9a, 0x12, 0x1f, - 0xb5, 0x38, 0x2a, 0xe3, 0x28, 0xb9, 0x30, 0xc1, 0x01, 0x82, 0x2c, 0xa0, 0x91, 0x3a, 0xa2, 0x8e, - 0x23, 0xab, 0x27, 0x9b, 0x02, 0x09, 0xb0, 0x39, 0xfb, 0x16, 0x2e, 0xc3, 0x28, 0x0c, 0xa4, 0x29, - 0x0a, 0x94, 0x98, 0x60, 0xc9, 0x03, 0x9b, 0x31, 0x82, 0xb8, 0x41, 0xcd, 0x31, 0xb8, 0x01, 0x11, - 0x8d, 0x96, 0x1b, 0x11, 0xb0, 0x52, 0xc9, 0x38, 0xd1, 0x20, 0x19, 0xe3, 0x3a, 0xa9, 0x03, 0x3b, - 0x03, 0xf9, 0x41, 0x0b, 0xc4, 0x29, 0x08, 0xa1, 0x48, 0xa1, 0x0d, 0x87, 0x1d, 0x91, 0xa1, 0x58, - 0xa9, 0x01, 0x00, 0x1b, 0x93, 0x9a, 0x54, 0xc9, 0x40, 0xba, 0x01, 0x49, 0x00, 0xb1, 0x2a, 0xa4, - 0x1c, 0xaa, 0x33, 0x18, 0x30, 0xa9, 0xea, 0x13, 0x39, 0x1c, 0xf4, 0x28, 0x98, 0xa1, 0x68, 0xaa, - 0x87, 0x2c, 0x82, 0xb9, 0x43, 0x9c, 0x90, 0x13, 0x2d, 0x82, 0x9a, 0x20, 0xca, 0x63, 0xba, 0x24, - 0xd9, 0x38, 0xa1, 0x81, 0x6a, 0xb9, 0x13, 0x8e, 0x92, 0x20, 0x8b, 0x83, 0x90, 0x59, 0xd9, 0x34, - 0x8c, 0x83, 0x2b, 0xf8, 0x60, 0xb9, 0x11, 0x3a, 0xe1, 0x21, 0x1b, 0x90, 0x91, 0x6a, 0x90, 0x18, - 0xa0, 0x30, 0x9d, 0x94, 0x4b, 0xa1, 0x08, 0x90, 0x2a, 0x85, 0x3c, 0xf2, 0x20, 0x0b, 0xa4, 0x48, - 0xaa, 0x83, 0x8c, 0x23, 0x08, 0xf9, 0x41, 0xba, 0x32, 0xba, 0x84, 0x1b, 0x22, 0xa4, 0x0d, 0x00, - 0x0b, 0x97, 0x89, 0x5b, 0xa4, 0x89, 0x28, 0x90, 0x0b, 0x94, 0x39, 0x18, 0xb0, 0x85, 0x0f, 0xa2, - 0x32, 0x9f, 0x84, 0x2b, 0x81, 0x00, 0x8a, 0xa6, 0x3e, 0xc2, 0x10, 0x08, 0xb1, 0x5a, 0xb0, 0x28, - 0xa8, 0x13, 0x2a, 0xb3, 0x09, 0x0e, 0x95, 0x11, 0x1f, 0xa1, 0xa2, 0x5b, 0x90, 0xb1, 0x7a, 0x98, - 0x90, 0x12, 0x0a, 0x04, 0xb9, 0x50, 0xf9, 0x48, 0x98, 0x01, 0x0a, 0xa2, 0x11, 0xae, 0x43, 0xaa, - 0x22, 0x39, 0xe8, 0x00, 0x29, 0x30, 0xd9, 0x13, 0x0c, 0xc0, 0x59, 0xa2, 0x9a, 0x40, 0x80, 0xb8, - 0x21, 0x3a, 0xd8, 0x22, 0x07, 0x8f, 0x82, 0x8a, 0x03, 0x09, 0x98, 0x06, 0x0e, 0x92, 0x0a, 0x91, - 0x40, 0x81, 0x99, 0x48, 0xd1, 0x08, 0x08, 0x09, 0xa5, 0x38, 0xcb, 0x01, 0x82, 0x4d, 0xa4, 0x0c, - 0x12, 0xa9, 0x5a, 0x92, 0x0c, 0x84, 0x3b, 0xf2, 0x00, 0x2a, 0xc1, 0x41, 0xc9, 0x40, 0x99, 0x10, - 0x10, 0xc2, 0x59, 0xc0, 0x19, 0x98, 0x13, 0xab, 0x32, 0xb9, 0x2a, 0x14, 0x9d, 0x15, 0x99, 0x4a, - 0xa0, 0x05, 0x0c, 0xaa, 0x15, 0x39, 0xb8, 0x1b, 0xa0, 0xc0, 0x72, 0x98, 0x01, 0x19, 0xb3, 0x6c, - 0xc2, 0x19, 0x19, 0xc0, 0x18, 0x21, 0xf8, 0x68, 0x88, 0xa8, 0x20, 0x98, 0x20, 0x19, 0xa5, 0x1b, - 0x30, 0xfb, 0x32, 0xab, 0x02, 0x08, 0xf9, 0x78, 0xa8, 0x01, 0x19, 0x11, 0xa8, 0x41, 0xda, 0x09, - 0x03, 0x1a, 0x82, 0x8d, 0x05, 0x0c, 0xa1, 0x21, 0x1d, 0xa3, 0x98, 0x33, 0x0f, 0xa2, 0xa8, 0x70, - 0xc1, 0x49, 0x91, 0xb9, 0x48, 0x91, 0x0c, 0x85, 0x18, 0x8c, 0x91, 0x02, 0x2c, 0x91, 0x18, 0x18, - 0x12, 0xbf, 0x16, 0x8b, 0x13, 0xba, 0x3c, 0xa3, 0x28, 0x0b, 0xa9, 0x87, 0x2e, 0x03, 0x1a, 0xba, - 0x16, 0x0d, 0x95, 0x1c, 0xa2, 0x28, 0x08, 0xb1, 0x88, 0x1c, 0x17, 0xbb, 0x04, 0x19, 0x88, 0xa4, - 0x1d, 0x92, 0x09, 0x02, 0x88, 0x29, 0xbb, 0x36, 0xe8, 0x19, 0x03, 0x1c, 0xc1, 0x82, 0x3c, 0x90, - 0x25, 0xbb, 0x82, 0x0d, 0x04, 0x1b, 0x90, 0x44, 0x9f, 0x84, 0x1c, 0x81, 0x18, 0x80, 0x90, 0x4c, - 0xd2, 0x49, 0x90, 0x08, 0x81, 0xa9, 0x31, 0xb8, 0x2c, 0xc4, 0x4a, 0x92, 0x08, 0x02, 0x9c, 0x12, - 0x8b, 0x01, 0x18, 0x82, 0x60, 0xbe, 0x05, 0x1b, 0xc1, 0x12, 0x89, 0x89, 0x53, 0xf8, 0x59, 0xa0, - 0x20, 0x9a, 0x82, 0x49, 0xea, 0x32, 0xc9, 0x10, 0x11, 0x88, 0x08, 0x9d, 0x24, 0x9d, 0x14, 0x8a, - 0x08, 0x83, 0x1c, 0xc2, 0x2a, 0x23, 0xca, 0x81, 0x08, 0x5a, 0xf1, 0x30, 0x9b, 0x04, 0xa8, 0x04, - 0x0e, 0x93, 0x00, 0x0a, 0xb1, 0x5b, 0xa2, 0x2a, 0x81, 0x91, 0x8e, 0x05, 0x1d, 0x93, 0x2a, 0xc1, - 0x38, 0x81, 0xaa, 0x49, 0xb5, 0x1a, 0xb0, 0x1a, 0x84, 0x79, 0xb2, 0x1b, 0xa8, 0x25, 0x2c, 0xd4, - 0x28, 0x98, 0x88, 0xb3, 0x20, 0x1f, 0x94, 0x98, 0x9a, 0x21, 0xa2, 0x79, 0xc0, 0x22, 0x9c, 0x04, - 0x89, 0xa8, 0x48, 0xa4, 0x19, 0x8d, 0x93, 0x1a, 0x88, 0x14, 0xa0, 0x0f, 0x86, 0x09, 0x08, 0x90, - 0x01, 0xb8, 0x60, 0xb8, 0x8b, 0x07, 0x19, 0xa8, 0x08, 0x81, 0x38, 0x0c, 0x87, 0x1b, 0xa1, 0x20, - 0xe8, 0x48, 0x89, 0x03, 0x9c, 0x13, 0xaa, 0x4b, 0x14, 0xe8, 0x59, 0xb0, 0x00, 0x88, 0x31, 0xa8, - 0x1c, 0x02, 0xc0, 0x34, 0xaf, 0x03, 0x09, 0x00, 0x80, 0xc0, 0x6b, 0xb2, 0x3a, 0xe1, 0x42, 0x0b, - 0xa2, 0x0a, 0xa2, 0x7b, 0xa1, 0x01, 0x2b, 0xf0, 0x28, 0x81, 0x2b, 0x95, 0x0a, 0x88, 0x20, 0xb8, - 0x15, 0x8f, 0x04, 0x8a, 0x82, 0x1a, 0x99, 0x12, 0xb0, 0x58, 0xcb, 0x05, 0x2c, 0x08, 0x83, 0xca, - 0x61, 0xa9, 0x14, 0xab, 0x02, 0x09, 0xae, 0x16, 0x9a, 0x13, 0x8c, 0x83, 0x19, 0x1a, 0xa1, 0x2c, - 0x05, 0x98, 0x29, 0xcb, 0x43, 0x8a, 0xe8, 0x41, 0xa0, 0x49, 0xa2, 0xab, 0x28, 0xa4, 0x6d, 0xc1, - 0x31, 0x0c, 0x81, 0x8a, 0x84, 0x0c, 0x01, 0x80, 0xc8, 0x31, 0x8b, 0x97, 0x1b, 0x15, 0x9a, 0x80, - 0x10, 0xac, 0x15, 0x0b, 0xa3, 0x0d, 0x22, 0xd8, 0x10, 0x09, 0x20, 0x09, 0xa1, 0x27, 0x9c, 0x12, - 0xba, 0xa4, 0x2d, 0x93, 0x29, 0xf9, 0x78, 0x99, 0x81, 0x01, 0xa8, 0x5a, 0xb3, 0x3b, 0x89, 0x91, - 0x60, 0xd0, 0x48, 0xaa, 0x12, 0xa8, 0x1a, 0x15, 0x9c, 0x14, 0xb9, 0x38, 0xa8, 0x10, 0xa4, 0x48, - 0xc8, 0x2b, 0xc4, 0x38, 0x21, 0xda, 0x11, 0xaa, 0x3a, 0xb4, 0x51, 0x99, 0xa2, 0x1b, 0x21, 0x06, - 0x8f, 0x84, 0x1a, 0x92, 0x3c, 0xd9, 0x82, 0x4c, 0xb3, 0x4b, 0xc2, 0x29, 0x08, 0x88, 0x50, 0xc1, - 0x10, 0x1a, 0xd2, 0x00, 0x0b, 0x83, 0x80, 0xb1, 0x3c, 0xba, 0x91, 0x77, 0x98, 0x2a, 0xa2, 0x8a, - 0x15, 0x1d, 0xc1, 0x00, 0x30, 0xca, 0x20, 0xc2, 0x5a, 0xc0, 0x38, 0x93, 0xda, 0x68, 0xa0, 0x11, - 0x08, 0x98, 0xaa, 0x22, 0x83, 0x0f, 0x91, 0x88, 0x81, 0x48, 0xcc, 0x42, 0x80, 0x91, 0x5a, 0xeb, - 0x15, 0x99, 0x19, 0x82, 0xc9, 0x51, 0xaa, 0x03, 0x0e, 0x13, 0xaa, 0x20, 0x90, 0x29, 0x12, 0xae, - 0x05, 0xa9, 0x7a, 0xa1, 0x88, 0x18, 0x29, 0xc2, 0x38, 0xc1, 0x0c, 0x10, 0x83, 0x08, 0xdb, 0x51, - 0x88, 0xb3, 0x78, 0xac, 0x13, 0x0a, 0x93, 0x0d, 0x03, 0x91, 0x2f, 0xc1, 0x18, 0x03, 0x0c, 0x80, - 0x98, 0x51, 0xb0, 0x49, 0xc9, 0x42, 0xa9, 0x28, 0x99, 0xc4, 0x78, 0xa8, 0x09, 0x94, 0x08, 0x1a, - 0xa4, 0x29, 0xc8, 0x32, 0x8e, 0x94, 0x89, 0x21, 0xaa, 0x01, 0x33, 0x1b, 0xe8, 0x91, 0x00, 0x8f, - 0x35, 0xe9, 0x20, 0xb9, 0x40, 0xa1, 0x08, 0x22, 0xcd, 0x23, 0x8a, 0x04, 0x9b, 0x12, 0xc9, 0x29, - 0x93, 0x1f, 0xa5, 0x19, 0x90, 0x1a, 0x92, 0x07, 0x1c, 0x90, 0x82, 0x90, 0x0a, 0x00, 0xc1, 0x21, - 0x8b, 0x8b, 0x12, 0x27, 0xca, 0x5b, 0xb0, 0x33, 0x10, 0xbf, 0x06, 0x2b, 0x82, 0xa9, 0x38, 0xf8, - 0x29, 0x91, 0x69, 0xb0, 0x82, 0x2c, 0xb0, 0x35, 0xab, 0x48, 0xc8, 0x31, 0x08, 0x9a, 0x98, 0x02, - 0x97, 0x1e, 0xb2, 0x19, 0x81, 0x89, 0x33, 0xb2, 0x2c, 0xc9, 0x70, 0xc2, 0x28, 0x99, 0xc2, 0x70, - 0xc0, 0x39, 0xa8, 0x92, 0x49, 0xb1, 0x39, 0xab, 0x94, 0x51, 0x8a, 0x00, 0xb0, 0x11, 0x4c, 0x98, - 0x86, 0x9c, 0x33, 0xdb, 0x30, 0x88, 0x90, 0x99, 0xa0, 0x27, 0x8c, 0x20, 0xa2, 0x1b, 0x17, 0x8e, - 0x93, 0x19, 0x81, 0xc0, 0x49, 0xf3, 0x2a, 0x81, 0x80, 0x81, 0x88, 0x6b, 0xe2, 0x28, 0xa1, 0x20, - 0x89, 0xa5, 0x2b, 0xa9, 0x22, 0x99, 0x98, 0x2d, 0x01, 0xa6, 0x11, 0x1d, 0xb1, 0x04, 0x2a, 0x9a, - 0x13, 0xb8, 0x93, 0x4e, 0xe8, 0x38, 0xa8, 0x12, 0x5b, 0xe1, 0x20, 0x0c, 0x04, 0x8a, 0x91, 0x48, - 0xaa, 0x06, 0x8c, 0x82, 0x1a, 0x80, 0x82, 0xb2, 0x3e, 0x98, 0xe3, 0x58, 0x98, 0x11, 0xb0, 0x28, - 0x1b, 0xda, 0x27, 0xaa, 0x11, 0x9a, 0x81, 0x02, 0x0d, 0x04, 0xaa, 0x85, 0x1c, 0x91, 0x11, 0x8a, - 0x96, 0x2c, 0xa1, 0x91, 0x38, 0x99, 0x10, 0xd9, 0x52, 0x1b, 0x82, 0xc0, 0x19, 0x3e, 0xd3, 0x01, - 0x99, 0x20, 0x8c, 0x07, 0x1b, 0x91, 0x80, 0x09, 0x95, 0x2e, 0x93, 0x0a, 0x01, 0xda, 0x48, 0xb0, - 0x30, 0x90, 0x1a, 0x13, 0xad, 0x27, 0x9b, 0x38, 0xb3, 0x89, 0x2f, 0xe1, 0x21, 0x98, 0x20, 0xb9, - 0x88, 0x40, 0x80, 0x41, 0xf8, 0x28, 0x99, 0x02, 0x05, 0xbb, 0x50, 0xa9, 0xa1, 0x5a, 0x9a, 0x06, - 0x0a, 0x13, 0xbc, 0x28, 0x12, 0x0b, 0x86, 0x8a, 0x82, 0xdc, 0x51, 0x89, 0xa0, 0x22, 0x1a, 0x81, - 0x9f, 0x05, 0x2a, 0xb9, 0x23, 0x80, 0x0c, 0x22, 0xcd, 0x82, 0x59, 0x90, 0x10, 0xa8, 0x80, 0x1f, - 0x95, 0x10, 0x08, 0xba, 0x02, 0x0b, 0x28, 0xa3, 0x5a, 0xb2, 0x92, 0x8f, 0x10, 0x12, 0x84, 0x2f, - 0xb9, 0x84, 0x2b, 0x80, 0x00, 0xaa, 0x87, 0x4e, 0xb1, 0x29, 0xa3, 0x1b, 0x32, 0xe0, 0x39, 0xc1, - 0x3a, 0xd3, 0x1c, 0x23, 0xb9, 0x21, 0xea, 0x30, 0x80, 0x38, 0x95, 0x9c, 0x40, 0xb8, 0x00, 0x99, - 0x34, 0x9d, 0xa2, 0x03, 0x2e, 0xe1, 0x50, 0xb9, 0x21, 0x10, 0xc1, 0x39, 0xc9, 0x22, 0xab, 0x05, - 0x29, 0xab, 0xa4, 0x2a, 0x52, 0xbb, 0x24, 0xe8, 0x4a, 0x80, 0x90, 0x11, 0xe8, 0x50, 0xa9, 0x84, - 0x88, 0x89, 0x91, 0x98, 0x22, 0x38, 0x8d, 0xa6, 0x2c, 0xa4, 0x2b, 0x81, 0x04, 0x8f, 0x11, 0xa8, - 0x11, 0x18, 0xb8, 0x09, 0x18, 0x17, 0x8c, 0x20, 0xe0, 0x20, 0x88, 0x18, 0xa2, 0x1c, 0x23, 0xaf, - 0x32, 0x90, 0x89, 0xf2, 0x4b, 0x92, 0x18, 0x13, 0xfb, 0x41, 0xc9, 0x20, 0xa8, 0x10, 0x12, 0x9d, - 0x14, 0x9b, 0x20, 0xc0, 0x08, 0x22, 0x0a, 0x05, 0x0d, 0xb3, 0x0a, 0x8a, 0x07, 0x19, 0xa1, 0x3c, - 0xf1, 0x30, 0x89, 0x13, 0x8c, 0x91, 0x09, 0x98, 0x53, 0xab, 0x86, 0x1d, 0x98, 0x11, 0x10, 0x88, - 0x11, 0xe8, 0x68, 0xb0, 0x89, 0x20, 0xa1, 0x11, 0x80, 0xd8, 0x1d, 0x31, 0xf8, 0x21, 0x30, 0xaa, - 0x83, 0x9f, 0x13, 0x3a, 0xb0, 0x22, 0xaf, 0x92, 0x28, 0x99, 0x06, 0x1b, 0xa6, 0x2c, 0xa2, 0x19, - 0x00, 0x91, 0x3b, 0xc3, 0x3a, 0x92, 0xf0, 0x7a, 0x98, 0x10, 0x92, 0x8d, 0x92, 0x40, 0xab, 0x86, - 0x3a, 0xd9, 0x12, 0x89, 0xa1, 0x78, 0xd0, 0x20, 0x88, 0x92, 0x3a, 0xc0, 0x21, 0xba, 0x00, 0x18, - 0x93, 0x3c, 0xf1, 0x28, 0x2a, 0x85, 0x28, 0xfc, 0x43, 0xba, 0x82, 0x28, 0x00, 0xa0, 0x9f, 0x83, - 0x88, 0x60, 0x98, 0xb0, 0x58, 0xb1, 0x10, 0x1b, 0x84, 0x09, 0xa1, 0x10, 0xbf, 0x05, 0x1a, 0xa8, - 0x05, 0x2c, 0xa3, 0x1c, 0x81, 0x18, 0x0c, 0x06, 0x29, 0xe8, 0x28, 0xa8, 0x28, 0x82, 0x88, 0x9a, - 0x90, 0x14, 0x00, 0x8d, 0x05, 0x19, 0x0a, 0xa5, 0x8b, 0x51, 0xa0, 0xb1, 0x1c, 0x94, 0x0a, 0x38, - 0xb8, 0x53, 0xb0, 0x8f, 0x85, 0x1a, 0x82, 0x30, 0xfb, 0x48, 0xa2, 0x8b, 0x49, 0xc3, 0x2a, 0x38, - 0xc1, 0x3a, 0xe1, 0x20, 0x9a, 0x03, 0x08, 0x12, 0xba, 0x11, 0x95, 0x0f, 0x22, 0xf3, 0x4b, 0xa1, - 0x89, 0x21, 0xbc, 0x25, 0x8b, 0x10, 0x92, 0x3b, 0x21, 0xd2, 0x19, 0x9d, 0x07, 0x9a, 0x19, 0x85, - 0xaa, 0x62, 0xb8, 0x09, 0x11, 0x8b, 0x06, 0x9a, 0x11, 0xa8, 0x41, 0xaa, 0x24, 0xea, 0x21, 0x9b, - 0x93, 0x49, 0x89, 0x88, 0x27, 0xbb, 0x1a, 0x21, 0x09, 0x07, 0x0e, 0x88, 0x92, 0x29, 0x13, 0x8a, - 0x96, 0x8c, 0x09, 0x08, 0xa1, 0x61, 0xc9, 0x25, 0x9b, 0x13, 0xdb, 0x49, 0x95, 0xaa, 0x41, 0xd9, - 0x21, 0xa0, 0x0a, 0x24, 0x19, 0x99, 0xd1, 0x3a, 0xa8, 0x50, 0x95, 0x8b, 0x13, 0xf9, 0x49, 0xa0, - 0x20, 0xa1, 0x0b, 0x01, 0xaa, 0x65, 0xa8, 0x18, 0xb8, 0x32, 0xac, 0x28, 0x82, 0xc8, 0x3b, 0x07, - 0x22, 0x9f, 0x01, 0x8a, 0x01, 0x42, 0xc0, 0x8b, 0x38, 0xc5, 0x19, 0x01, 0x81, 0x29, 0xbd, 0x92, - 0x61, 0x00, 0x98, 0x81, 0x8c, 0x11, 0x90, 0x28, 0x9b, 0xa1, 0x20, 0x1d, 0x07, 0x8d, 0x14, 0x8e, - 0x94, 0x38, 0xa9, 0xa5, 0x1c, 0x02, 0xba, 0x15, 0x1a, 0x88, 0xc4, 0x2c, 0x92, 0x19, 0x01, 0xb9, - 0x53, 0x89, 0x19, 0xc3, 0x3a, 0x93, 0xbf, 0x15, 0x08, 0x9a, 0xc2, 0x59, 0x81, 0x18, 0xa0, 0x98, - 0x6b, 0xb8, 0x21, 0xa9, 0x81, 0x71, 0xc1, 0x18, 0x90, 0x8a, 0x24, 0xb8, 0x30, 0xac, 0x96, 0x4a, - 0xec, 0x33, 0x8b, 0x04, 0x89, 0x88, 0x09, 0xa8, 0x46, 0xaa, 0x21, 0xcb, 0x28, 0x81, 0x1c, 0x86, - 0xa9, 0x33, 0x8d, 0x80, 0x82, 0x1a, 0xa2, 0x3b, 0xc2, 0x51, 0xd9, 0x21, 0x0b, 0xc4, 0x4a, 0x10, - 0xc3, 0x0e, 0x13, 0xab, 0x22, 0x00, 0xd0, 0x58, 0x8b, 0xa6, 0x1b, 0x22, 0xd9, 0x20, 0x92, 0x3c, - 0xc1, 0x38, 0x90, 0xaa, 0x6a, 0xb4, 0x39, 0x80, 0x08, 0xc1, 0x19, 0x58, 0xf8, 0x11, 0x1a, 0xa1, - 0x18, 0xa4, 0x2a, 0xb1, 0x63, 0xcb, 0x90, 0x22, 0x39, 0x9a, 0x87, 0x1f, 0x00, 0xa0, 0x10, 0x01, - 0x8d, 0x23, 0xc9, 0x5a, 0xb1, 0x49, 0x80, 0xa0, 0x59, 0xfa, 0x52, 0x9b, 0x13, 0x98, 0x8a, 0x22, - 0xbd, 0x25, 0x9b, 0x11, 0x91, 0x19, 0x0a, 0xc2, 0x60, 0xb8, 0x41, 0xc9, 0x20, 0x90, 0x1a, 0x18, - 0xb3, 0x3a, 0x38, 0xfa, 0x70, 0xb8, 0x28, 0xa4, 0x3c, 0xa2, 0xae, 0x34, 0x9a, 0x28, 0xb3, 0x0c, - 0x85, 0x1d, 0x02, 0x89, 0x22, 0x9c, 0x1b, 0xa5, 0x2a, 0x02, 0xd9, 0x50, 0x98, 0x88, 0x12, 0x9b, - 0x92, 0x60, 0xc9, 0x04, 0x1a, 0x80, 0x0b, 0xa0, 0x86, 0x2e, 0x80, 0x81, 0x00, 0xca, 0x78, 0xb1, - 0x10, 0x82, 0xad, 0x30, 0xc1, 0x70, 0xa8, 0x08, 0xa1, 0x38, 0xa1, 0x1a, 0x31, 0xf1, 0x6b, 0xc0, - 0x48, 0x98, 0x81, 0x3a, 0xd1, 0x10, 0x89, 0x12, 0xba, 0x15, 0x99, 0x2c, 0xb1, 0x20, 0x14, 0xac, - 0x28, 0xb0, 0x26, 0x8d, 0x02, 0x90, 0x8c, 0x12, 0x0c, 0x07, 0x98, 0x19, 0xe0, 0x40, 0x98, 0x91, - 0x19, 0xa1, 0x31, 0x9f, 0x24, 0xab, 0x03, 0x0a, 0x11, 0x99, 0xc0, 0x3a, 0x09, 0x07, 0x80, 0xca, - 0x40, 0x01, 0x9b, 0x96, 0x2d, 0x91, 0x82, 0x2c, 0xd0, 0x40, 0xa1, 0x4a, 0xc1, 0x89, 0x12, 0x8a, - 0x12, 0xd0, 0x4b, 0x95, 0x1b, 0x81, 0x89, 0x11, 0x00, 0x1a, 0xe6, 0x6a, 0x98, 0x88, 0x21, 0xaa, - 0x30, 0x90, 0x0a, 0x34, 0xbf, 0x22, 0xa2, 0x0c, 0x24, 0xbb, 0x85, 0x90, 0x2a, 0xd0, 0x58, 0xa1, - 0x0a, 0x22, 0xfa, 0x31, 0xc9, 0x30, 0x82, 0x9a, 0x71, 0xd9, 0x10, 0x08, 0x80, 0x11, 0x8a, 0xb5, - 0x2d, 0x08, 0xa3, 0x2a, 0x22, 0x9d, 0x93, 0x89, 0x62, 0xd8, 0x1a, 0x24, 0xf9, 0x21, 0x8b, 0x81, - 0x02, 0x0d, 0x14, 0xb9, 0x31, 0xab, 0x18, 0x98, 0x12, 0x05, 0x9f, 0x83, 0xa0, 0x5a, 0xa2, 0x8a, - 0x06, 0x0c, 0x20, 0xc4, 0x1b, 0x02, 0x8c, 0x20, 0x11, 0xd9, 0x22, 0x0a, 0xb2, 0x1d, 0x84, 0x2b, - 0x92, 0xb2, 0x5c, 0xb0, 0x0a, 0x14, 0xa9, 0x3a, 0x87, 0xaa, 0x39, 0x90, 0x21, 0xa6, 0x3c, 0x90, - 0xf2, 0x31, 0x9c, 0x84, 0x89, 0x19, 0x90, 0x09, 0x17, 0xbb, 0x13, 0x91, 0x1f, 0x94, 0x09, 0x02, - 0xab, 0x22, 0xba, 0x11, 0x4c, 0xa7, 0x0a, 0x80, 0xb2, 0x5b, 0xb5, 0x3a, 0xb1, 0x18, 0x05, 0x8d, - 0x03, 0xcb, 0x51, 0xb8, 0x58, 0xb3, 0x2e, 0xa2, 0x0b, 0x12, 0xb0, 0x58, 0xc0, 0x20, 0xb0, 0x4a, - 0xb4, 0x4b, 0x91, 0xa9, 0x78, 0xb1, 0x28, 0xc0, 0x4a, 0xc0, 0x12, 0x90, 0x39, 0xd2, 0x0a, 0x14, - 0xca, 0x50, 0xc1, 0x49, 0xc0, 0x30, 0xa9, 0x20, 0x98, 0x98, 0x14, 0xac, 0x34, 0xeb, 0x32, 0xc9, - 0x20, 0x80, 0x00, 0x80, 0x0d, 0x13, 0xaf, 0x25, 0xab, 0x23, 0xbb, 0x31, 0xa3, 0x1e, 0x83, 0xaa, - 0x31, 0xaa, 0x17, 0xdb, 0x22, 0xab, 0x12, 0x22, 0x8e, 0x04, 0x9b, 0x84, 0x2c, 0x81, 0xa0, 0x20, - 0xe8, 0x58, 0xa0, 0x18, 0xb3, 0x8e, 0x12, 0x99, 0x13, 0x00, 0x1c, 0xb2, 0x7a, 0xc0, 0x49, 0xa1, - 0x0b, 0x33, 0x9e, 0x22, 0x99, 0x30, 0x9a, 0xb9, 0x20, 0x65, 0xba, 0x21, 0x98, 0xb8, 0x71, 0xf0, - 0x11, 0x98, 0x18, 0xa8, 0x31, 0xa1, 0x4b, 0x02, 0xf9, 0x30, 0xd0, 0x39, 0xa1, 0xa9, 0x36, 0x9c, - 0x94, 0x19, 0x99, 0x91, 0x41, 0x88, 0x98, 0x2c, 0xb3, 0xa0, 0x78, 0xb2, 0x9b, 0x15, 0x8a, 0x83, - 0x8f, 0x14, 0x9a, 0x31, 0xf8, 0x4a, 0x91, 0x8a, 0x14, 0xac, 0x32, 0x91, 0x8a, 0x94, 0x2a, 0x98, - 0x2b, 0x87, 0xaa, 0x41, 0xa0, 0x0c, 0x03, 0x0c, 0x31, 0xf1, 0x19, 0x00, 0xc1, 0x70, 0xc1, 0x28, - 0x98, 0x80, 0x21, 0xc9, 0x10, 0xbb, 0x21, 0x04, 0x2f, 0xa4, 0x2a, 0x11, 0xda, 0x41, 0xe0, 0x28, - 0x90, 0x00, 0x10, 0x98, 0x89, 0x89, 0x93, 0x2a, 0x40, 0xe1, 0x41, 0xaa, 0x18, 0x04, 0x10, 0x9f, - 0x20, 0xa1, 0x1d, 0x84, 0x8b, 0x31, 0xe2, 0x2a, 0x94, 0x4b, 0xb2, 0x0a, 0x10, 0xaa, 0x24, 0xba, - 0x24, 0x2a, 0xf0, 0x78, 0xaa, 0x22, 0xc9, 0x20, 0x92, 0x1b, 0xa6, 0x09, 0x0a, 0x86, 0x8a, 0x21, - 0xc8, 0x38, 0xa0, 0x18, 0x30, 0x1c, 0x87, 0xad, 0x13, 0xab, 0x43, 0xa8, 0x2d, 0x85, 0x2b, 0xb3, - 0x1c, 0x91, 0x10, 0xa0, 0xa2, 0x5e, 0xb1, 0x4a, 0xb2, 0x1a, 0x80, 0x21, 0xe8, 0x69, 0xb2, 0x0a, - 0x01, 0x1a, 0x02, 0xd0, 0x58, 0xb0, 0x18, 0x20, 0xad, 0x93, 0x7a, 0x00, 0xd0, 0x49, 0xd1, 0x28, - 0x80, 0x92, 0x5a, 0xb9, 0x04, 0x9c, 0x41, 0xa8, 0x10, 0xa0, 0x4c, 0xc1, 0x21, 0xa1, 0x0a, 0x08, - 0xa0, 0x51, 0xa8, 0x03, 0xb9, 0x59, 0xf3, 0x3b, 0xa2, 0x30, 0x94, 0x9d, 0x10, 0xba, 0x15, 0x3b, - 0xa2, 0x94, 0x2d, 0xa3, 0x0e, 0x82, 0x88, 0x20, 0xc2, 0x58, 0xe9, 0x28, 0x81, 0x88, 0x08, 0x02, - 0x0a, 0xab, 0x64, 0xba, 0x12, 0x20, 0x1c, 0xf0, 0x58, 0x91, 0x0b, 0x93, 0xab, 0x53, 0x99, 0x22, - 0xfa, 0x20, 0x93, 0x0d, 0x12, 0xbb, 0x06, 0x9b, 0x13, 0x8b, 0x22, 0x98, 0xaa, 0x95, 0x48, 0x00, - 0xa8, 0x01, 0x81, 0xfe, 0x38, 0x01, 0xa0, 0x51, 0xda, 0x80, 0x01, 0x20, 0x01, 0x80, 0x91, 0xec, - 0x78, 0xb8, 0x29, 0x82, 0x0d, 0x24, 0x8b, 0x82, 0x8c, 0x19, 0xa7, 0x4a, 0x81, 0x00, 0xa9, 0xb1, - 0x3d, 0xa8, 0x14, 0x29, 0xb0, 0x3b, 0x95, 0x8a, 0x4b, 0xa1, 0x87, 0x0a, 0x83, 0xb9, 0x2f, 0xa7, - 0x19, 0x98, 0x18, 0x11, 0xa9, 0x30, 0xc8, 0x82, 0x78, 0xb8, 0x31, 0xda, 0x12, 0x18, 0xbd, 0x44, - 0xca, 0x41, 0x89, 0x90, 0x01, 0x8b, 0x12, 0xca, 0x53, 0xa0, 0x28, 0xa9, 0xa1, 0x38, 0xcb, 0x60, - 0xd2, 0x38, 0x11, 0xc8, 0x09, 0x81, 0x1a, 0xba, 0x42, 0x07, 0x0f, 0x81, 0x08, 0x90, 0x32, 0x0c, - 0x93, 0x0e, 0xa2, 0x0a, 0x12, 0xa4, 0x3e, 0xb2, 0x90, 0x21, 0xaa, 0x7c, 0xb0, 0xa2, 0x4a, 0x98, - 0x16, 0x99, 0x1a, 0xb1, 0xb1, 0x71, 0xe1, 0x28, 0xa0, 0x4a, 0xb5, 0x1b, 0x03, 0xaa, 0x60, 0xc1, - 0x39, 0xc1, 0x28, 0x92, 0xab, 0x06, 0x0b, 0x02, 0xa8, 0x1b, 0xa3, 0x78, 0x92, 0x9b, 0x98, 0x34, - 0x1a, 0xd2, 0x2b, 0xa9, 0x02, 0x17, 0x1a, 0xad, 0x24, 0xa9, 0x18, 0x0b, 0x22, 0x87, 0x0e, 0x03, - 0xbb, 0x41, 0xc2, 0x2a, 0xb2, 0x3a, 0xa3, 0x98, 0x7a, 0xf2, 0x58, 0xa8, 0x18, 0x88, 0x08, 0x01, - 0x09, 0xa2, 0x20, 0x9f, 0x22, 0x92, 0xae, 0x53, 0x99, 0x18, 0xa2, 0x2a, 0xa8, 0x93, 0x01, 0x9f, - 0x05, 0xb9, 0x30, 0xb9, 0x25, 0x0a, 0xe3, 0x68, 0xc9, 0x41, 0xa9, 0x01, 0x09, 0xa1, 0x08, 0xa8, - 0x71, 0xa8, 0x92, 0xb0, 0x79, 0x90, 0x20, 0x98, 0xd2, 0x4c, 0xb2, 0x00, 0x0b, 0x04, 0x8b, 0x87, - 0x8c, 0x81, 0x18, 0x21, 0x80, 0x9b, 0x07, 0x8c, 0x94, 0x2c, 0xb3, 0x00, 0x8a, 0x82, 0x4b, 0xd3, - 0x38, 0xb9, 0x12, 0x2e, 0x92, 0x01, 0x1f, 0xa3, 0x09, 0x2a, 0x94, 0x18, 0xe8, 0x38, 0xb8, 0x82, - 0x3d, 0x14, 0xba, 0x28, 0x92, 0x99, 0x7a, 0xc3, 0x8a, 0x11, 0x01, 0x9d, 0x12, 0x00, 0x81, 0x98, - 0x3f, 0xc5, 0x39, 0x9a, 0x14, 0x9e, 0x84, 0x38, 0xca, 0x21, 0x88, 0x8a, 0x15, 0xaa, 0x10, 0x09, - 0x03, 0x90, 0x0b, 0x89, 0x87, 0xba, 0x28, 0x9a, 0x33, 0x77, 0xdb, 0x11, 0x09, 0x23, 0xba, 0x21, - 0xbc, 0x23, 0xaa, 0x86, 0x1a, 0xdb, 0x26, 0xbb, 0x32, 0x9b, 0x07, 0x1a, 0x80, 0xc8, 0x30, 0x81, - 0xaa, 0x22, 0xf8, 0x7a, 0x98, 0x00, 0x28, 0xb9, 0x53, 0xca, 0x21, 0x99, 0x00, 0x82, 0x39, 0xe9, - 0x11, 0x3c, 0xf1, 0x48, 0xa8, 0x21, 0xb9, 0x04, 0x9b, 0x15, 0xb9, 0x02, 0x4b, 0xe9, 0x32, 0x9c, - 0x33, 0xca, 0x12, 0x8a, 0x81, 0x89, 0x63, 0xa8, 0x8b, 0x05, 0x8e, 0x13, 0xaa, 0x30, 0xa2, 0x0b, - 0x23, 0xdf, 0x73, 0x99, 0x11, 0xab, 0x22, 0xa9, 0x80, 0x78, 0xba, 0x33, 0xaa, 0x82, 0x1c, 0x80, - 0x22, 0x21, 0xad, 0x07, 0x9c, 0x31, 0xb0, 0x1a, 0x91, 0x3c, 0xa4, 0x9c, 0x25, 0x9c, 0x14, 0xa9, - 0x10, 0x00, 0x1d, 0x87, 0x8c, 0x03, 0x0b, 0x91, 0x08, 0x29, 0xb6, 0x3b, 0xa3, 0x1a, 0x93, 0x1a, - 0x83, 0xcc, 0x5a, 0xb4, 0x28, 0x3b, 0xa5, 0x0b, 0x9a, 0x53, 0x1a, 0xa7, 0x1d, 0x91, 0x08, 0x38, - 0xb1, 0x2b, 0x14, 0x8c, 0xc2, 0x38, 0x92, 0x2c, 0x93, 0xe3, 0x3d, 0xa1, 0x18, 0xb1, 0x6a, 0xa9, - 0x04, 0x20, 0x8d, 0xd3, 0x29, 0x80, 0x22, 0x1a, 0xf2, 0x3b, 0xa4, 0x3a, 0x99, 0x83, 0x1a, 0xa2, - 0x20, 0xdf, 0x43, 0x89, 0x92, 0xab, 0x94, 0x58, 0x9a, 0x81, 0xb8, 0x54, 0x8a, 0x94, 0x8b, 0x39, - 0xd3, 0x2a, 0x96, 0x2c, 0xb8, 0x12, 0x39, 0xc2, 0x20, 0xa2, 0x2e, 0xa8, 0x00, 0x01, 0x0c, 0x07, - 0xaa, 0x01, 0x99, 0x12, 0x4a, 0x1a, 0xf3, 0x20, 0x09, 0x00, 0xb1, 0x2f, 0x05, 0x9a, 0x29, 0xd2, - 0x4b, 0xc1, 0x31, 0x99, 0x11, 0x0b, 0xb0, 0x01, 0x2a, 0x35, 0xa9, 0x20, 0xbe, 0xa1, 0x34, 0x78, - 0xf3, 0x18, 0xaa, 0x89, 0x25, 0xa8, 0x41, 0xba, 0x11, 0x8a, 0x19, 0xa6, 0x38, 0x49, 0xf1, 0x28, - 0xba, 0x42, 0xb8, 0x30, 0x08, 0xbb, 0x17, 0xac, 0x22, 0x81, 0x19, 0xa2, 0x09, 0xbc, 0x53, 0x01, - 0xca, 0x71, 0xc9, 0x11, 0x08, 0xab, 0x64, 0xa0, 0x0a, 0xa1, 0x8a, 0x33, 0x91, 0x88, 0x00, 0x1e, - 0xa7, 0x3a, 0x98, 0x91, 0x21, 0x09, 0xba, 0xf0, 0x6a, 0x20, 0xb8, 0x20, 0x08, 0xab, 0x87, 0x0c, - 0x11, 0x08, 0x05, 0x8b, 0xd0, 0x41, 0x99, 0xc8, 0x40, 0xa2, 0x3b, 0xb3, 0xaa, 0x41, 0x59, 0xf1, - 0x20, 0x9a, 0x93, 0x49, 0xc1, 0x19, 0xa2, 0x18, 0x2c, 0xa5, 0x2b, 0x82, 0xba, 0x15, 0x29, 0x9f, - 0x94, 0x39, 0xa1, 0x3a, 0xc4, 0x4b, 0xb2, 0x0a, 0x3a, 0x97, 0x3a, 0x89, 0xb9, 0x40, 0x83, 0x0f, - 0x83, 0x09, 0x12, 0xbb, 0x29, 0x87, 0xbb, 0x32, 0xb0, 0x14, 0x0e, 0xb4, 0x2c, 0xa2, 0x42, 0xbc, - 0x63, 0xb9, 0x91, 0x51, 0x9c, 0x03, 0x98, 0x5b, 0xc0, 0x21, 0x89, 0x91, 0x20, 0xdb, 0x33, 0xca, - 0x63, 0xba, 0x81, 0x20, 0x9b, 0x16, 0xd0, 0x5b, 0xa2, 0x1a, 0x92, 0x99, 0x40, 0xc0, 0x30, 0xe0, - 0x28, 0x81, 0x09, 0x91, 0x9c, 0x42, 0xb3, 0x2a, 0xa2, 0x0f, 0x91, 0x13, 0x2d, 0xc2, 0x19, 0x02, - 0x8a, 0xa9, 0x06, 0x0a, 0x08, 0x2a, 0xf3, 0x38, 0x01, 0xb1, 0x2c, 0x84, 0x99, 0x01, 0xbe, 0x13, - 0x90, 0x4e, 0x85, 0x9b, 0x28, 0x89, 0x82, 0x08, 0x63, 0xe8, 0x29, 0xa2, 0x89, 0x12, 0x10, 0x9a, - 0xf4, 0x3b, 0x19, 0xb7, 0x18, 0x30, 0xca, 0x12, 0x09, 0x10, 0xc0, 0x1b, 0x23, 0x9e, 0x25, 0xaa, - 0x89, 0x08, 0x44, 0xb9, 0xb8, 0x70, 0xe8, 0x12, 0x10, 0xc0, 0x28, 0x88, 0x89, 0x81, 0x1a, 0x03, - 0xcb, 0x74, 0xb9, 0x99, 0x04, 0x20, 0xa2, 0x9d, 0x31, 0xf9, 0x51, 0xa8, 0x18, 0x28, 0x9c, 0x05, - 0xac, 0x24, 0x8b, 0x84, 0x0a, 0x19, 0xb3, 0x1c, 0x04, 0xdb, 0x43, 0x9a, 0x92, 0x1a, 0x84, 0x1b, - 0xc3, 0x68, 0xb9, 0x20, 0x8c, 0x96, 0x4a, 0xb0, 0x18, 0x81, 0x88, 0x29, 0xb2, 0x49, 0xa6, 0x2f, - 0xc2, 0x28, 0x00, 0x88, 0x1b, 0xa4, 0x2a, 0xb2, 0x8b, 0x23, 0x2b, 0x97, 0x19, 0x11, 0xbc, 0x51, - 0xc0, 0x1a, 0x86, 0x2a, 0xd2, 0x29, 0xb8, 0x80, 0x73, 0xc9, 0x21, 0xa8, 0x49, 0xe2, 0x38, 0x90, - 0x88, 0x20, 0xd9, 0x31, 0xc9, 0x50, 0xc8, 0x10, 0x81, 0x8b, 0x86, 0x0a, 0x12, 0xaa, 0x10, 0x83, - 0x2c, 0xd1, 0x48, 0x99, 0x91, 0x38, 0xce, 0x17, 0x8a, 0x81, 0x8a, 0x03, 0x08, 0x09, 0xc1, 0x2a, - 0x06, 0x8c, 0x04, 0xac, 0x33, 0xba, 0x18, 0x13, 0x1e, 0xa5, 0x3c, 0xb1, 0x29, 0x22, 0xab, 0x12, - 0xe8, 0x3a, 0x01, 0x0a, 0x13, 0x8f, 0x87, 0x1c, 0x91, 0x29, 0x90, 0x21, 0x9b, 0xb3, 0x7a, 0xb0, - 0x18, 0x92, 0x1c, 0x92, 0x00, 0x32, 0xbe, 0x21, 0xd4, 0x6c, 0xa1, 0x2a, 0x81, 0x0a, 0x21, 0xc0, - 0x0c, 0x01, 0x10, 0x90, 0x78, 0xc2, 0x2a, 0x90, 0x90, 0x19, 0x81, 0x03, 0x9c, 0x33, 0xcf, 0x84, - 0x3b, 0x93, 0x93, 0x1f, 0xd3, 0x29, 0x91, 0x89, 0x13, 0x0c, 0x43, 0xd9, 0x0a, 0x84, 0x2d, 0x83, - 0x9b, 0x04, 0xaa, 0x58, 0xd3, 0x2b, 0x12, 0xaa, 0x24, 0xab, 0x91, 0x4a, 0x83, 0x90, 0xaf, 0x15, - 0x2a, 0xe2, 0x28, 0xba, 0x23, 0x00, 0x88, 0x99, 0x39, 0x07, 0xb8, 0x2b, 0xa2, 0x3a, 0xf1, 0x70, - 0xb8, 0x30, 0x82, 0x9e, 0x88, 0x21, 0x90, 0x50, 0x98, 0xf1, 0x30, 0xa8, 0x00, 0x08, 0x30, 0xca, - 0x84, 0x2b, 0xaa, 0x84, 0x2a, 0x14, 0xdc, 0x41, 0x91, 0x09, 0x88, 0xa0, 0x6a, 0xc2, 0x60, 0xd9, - 0x28, 0x88, 0xa3, 0x18, 0x08, 0xa8, 0x10, 0x23, 0x9d, 0x01, 0xa1, 0x03, 0xff, 0x05, 0x88, 0x18, - 0xb0, 0x2c, 0x94, 0x2a, 0x91, 0x8a, 0x24, 0xac, 0x84, 0x8c, 0x13, 0x01, 0x9b, 0x96, 0x1e, 0x82, - 0x08, 0x88, 0x80, 0x01, 0x98, 0x28, 0xe9, 0x29, 0x43, 0xca, 0xa1, 0x59, 0x01, 0xc0, 0x49, 0xb0, - 0x41, 0x9d, 0x85, 0x89, 0x3a, 0xa4, 0x9a, 0x14, 0x0d, 0xa1, 0x81, 0x78, 0xb0, 0x09, 0x82, 0x38, - 0xc9, 0x28, 0x04, 0x9d, 0x24, 0xbd, 0x30, 0x01, 0x08, 0xb1, 0x2a, 0x85, 0x8c, 0x03, 0x8d, 0x13, - 0xc1, 0x69, 0xb8, 0x8a, 0x15, 0x99, 0x80, 0xa2, 0x3a, 0xa0, 0x62, 0xe2, 0x3a, 0x80, 0x90, 0x88, - 0x90, 0x6a, 0xb2, 0x18, 0xab, 0x85, 0x4b, 0x94, 0x8b, 0x22, 0x8b, 0xa0, 0x07, 0x8e, 0x14, 0x8c, - 0x93, 0x0b, 0x12, 0xa8, 0x4b, 0xa4, 0x2b, 0x83, 0x00, 0x85, 0xaf, 0x04, 0x90, 0x8c, 0x13, 0x89, - 0xc1, 0x7a, 0xb1, 0x18, 0x21, 0x08, 0x8c, 0xc1, 0x50, 0x99, 0x90, 0x43, 0x9d, 0xb1, 0x40, 0x90, - 0x98, 0x52, 0xc0, 0x3a, 0xb2, 0x22, 0xad, 0x04, 0x0a, 0x98, 0x01, 0x40, 0x9c, 0xf2, 0x61, 0xa9, - 0x00, 0x81, 0x18, 0x2a, 0xa4, 0x01, 0xaf, 0x83, 0x88, 0x28, 0xb3, 0x3d, 0xb3, 0x0a, 0x63, 0xea, - 0x30, 0x81, 0x9b, 0x82, 0x11, 0x9a, 0x98, 0x42, 0x88, 0x2d, 0xc7, 0x59, 0xc9, 0x22, 0x8a, 0x92, - 0x19, 0x02, 0xa9, 0x5b, 0xb3, 0x0b, 0x23, 0xe8, 0x3c, 0xb0, 0x36, 0xaa, 0x08, 0xa0, 0x28, 0x18, - 0x00, 0x17, 0xbf, 0x42, 0x98, 0x99, 0x33, 0xa9, 0x94, 0x0e, 0x01, 0xc8, 0x51, 0x99, 0xa2, 0x10, - 0x18, 0xb3, 0x8f, 0x85, 0x1b, 0xa0, 0x03, 0x7b, 0xd2, 0x39, 0xa9, 0x13, 0x8b, 0x1a, 0x94, 0x89, - 0x24, 0x8b, 0xba, 0x36, 0x0b, 0xe9, 0x51, 0xa0, 0x10, 0x8b, 0xa0, 0x21, 0x81, 0x79, 0xf1, 0x28, - 0x90, 0x11, 0xac, 0x83, 0x48, 0xc8, 0x40, 0xba, 0x14, 0x1c, 0x12, 0xaa, 0x10, 0x18, 0x9c, 0x17, - 0x8d, 0x82, 0x89, 0x30, 0xc1, 0x58, 0xc9, 0x20, 0x83, 0x9d, 0x20, 0xa0, 0x40, 0x90, 0x00, 0xcb, - 0x20, 0x83, 0x3a, 0xc1, 0x0a, 0x06, 0x0d, 0x91, 0x11, 0x9d, 0x05, 0x09, 0xc1, 0x40, 0x80, 0xcb, - 0x18, 0x85, 0x28, 0xbb, 0x17, 0x8b, 0x01, 0x08, 0xb8, 0x00, 0x30, 0x13, 0xdf, 0x14, 0x9a, 0x18, - 0x08, 0x12, 0xa0, 0x1f, 0x94, 0x8b, 0x40, 0x83, 0xad, 0x11, 0x10, 0xc9, 0x41, 0x98, 0x98, 0x3a, - 0x42, 0xf0, 0x59, 0x98, 0x09, 0xc2, 0x48, 0x00, 0xc9, 0x33, 0xbb, 0x41, 0xc8, 0x20, 0xb2, 0x0e, - 0x03, 0x9a, 0x04, 0x1a, 0x30, 0xf9, 0x58, 0x09, 0x98, 0x10, 0x99, 0x1b, 0x10, 0xc2, 0x71, 0xa1, - 0x19, 0x10, 0xdc, 0x25, 0x8c, 0x80, 0x81, 0x3a, 0xb2, 0x19, 0xa0, 0x81, 0x79, 0xf1, 0x30, 0x98, - 0x08, 0x80, 0xd9, 0x30, 0x59, 0xc3, 0x8a, 0x02, 0x9a, 0x40, 0xc8, 0x23, 0x9d, 0x31, 0x85, 0xae, - 0x23, 0x0c, 0x01, 0x98, 0x30, 0xea, 0x50, 0xa1, 0x89, 0x21, 0xca, 0x22, 0xaa, 0x52, 0xba, 0x83, - 0x4a, 0xc0, 0x48, 0xa8, 0x84, 0x2f, 0xc3, 0x10, 0x99, 0x01, 0x98, 0x88, 0x14, 0xba, 0x63, 0xca, - 0x28, 0x96, 0x0b, 0x11, 0xa9, 0x68, 0xc2, 0x39, 0xd0, 0x29, 0x01, 0xa9, 0x52, 0xaa, 0x23, 0xba, - 0x48, 0xf2, 0x5b, 0x91, 0x08, 0x08, 0x81, 0x89, 0xca, 0x27, 0x0d, 0x83, 0x9a, 0x10, 0x88, 0x88, - 0x11, 0x0b, 0x87, 0x1a, 0x01, 0xbb, 0x14, 0x8c, 0x22, 0xf2, 0x4a, 0xa2, 0x0c, 0x84, 0x8a, 0x20, - 0xb0, 0x23, 0xbd, 0x71, 0xa8, 0x20, 0x93, 0x8f, 0x93, 0x89, 0x04, 0x8c, 0x10, 0xb1, 0x50, 0xc0, - 0x19, 0x82, 0x0a, 0x53, 0xbc, 0x04, 0x8b, 0x21, 0x92, 0x0c, 0xa2, 0x28, 0x08, 0x91, 0xe8, 0x2c, - 0x07, 0x2b, 0xc1, 0x18, 0x39, 0xd1, 0x30, 0xc0, 0x3a, 0x84, 0x0a, 0xb8, 0x0a, 0x73, 0xc0, 0x38, - 0xa1, 0x0e, 0x93, 0x1a, 0x01, 0x2a, 0xa5, 0x00, 0x4b, 0xc9, 0x32, 0xb0, 0x3c, 0xc1, 0x8c, 0x25, - 0x9b, 0x14, 0xba, 0x42, 0xc0, 0x59, 0xc0, 0x29, 0x02, 0x9b, 0x24, 0xfb, 0x40, 0x89, 0x80, 0x81, - 0x1c, 0x93, 0x0b, 0x13, 0x90, 0x7a, 0xb8, 0x10, 0x98, 0x8a, 0x49, 0xf3, 0x50, 0x80, 0xc1, 0x2a, - 0xb1, 0x5b, 0xa3, 0x8a, 0x52, 0xc8, 0x20, 0xc8, 0x1a, 0x05, 0x0c, 0x86, 0x8b, 0x11, 0xa0, 0x3a, - 0xb4, 0x2a, 0x80, 0x88, 0x17, 0x9c, 0x19, 0x81, 0x98, 0x42, 0x0b, 0xa3, 0x30, 0xca, 0x00, 0x8c, - 0x27, 0x9b, 0x81, 0x29, 0xc0, 0x92, 0x0f, 0x12, 0xa2, 0x7a, 0xa0, 0x8a, 0x11, 0x88, 0x31, 0xe2, - 0x4b, 0xb1, 0x09, 0x30, 0xba, 0x94, 0x2a, 0x31, 0xa1, 0xbf, 0x47, 0xbb, 0x13, 0x08, 0x8c, 0x83, - 0x20, 0xf8, 0x1a, 0x20, 0xc1, 0x38, 0x92, 0xc2, 0x5d, 0xb1, 0x82, 0x0d, 0x83, 0x2a, 0xb0, 0x68, - 0xa8, 0x01, 0x28, 0xea, 0x18, 0x11, 0x28, 0xd4, 0x3b, 0x94, 0x19, 0x9a, 0x90, 0x21, 0xf3, 0x59, - 0xaa, 0x02, 0x11, 0xa9, 0x81, 0x68, 0xd9, 0x12, 0x0b, 0x94, 0x4b, 0xf0, 0x51, 0xa8, 0x10, 0xa8, - 0x19, 0xa8, 0x29, 0x17, 0x9d, 0x23, 0x99, 0x88, 0x08, 0x10, 0x00, 0xaa, 0x16, 0x0f, 0x82, 0x88, - 0x88, 0x0a, 0x30, 0xb2, 0x03, 0x1e, 0x18, 0xb1, 0x32, 0x20, 0xcf, 0x14, 0x8b, 0x10, 0xb8, 0x11, - 0xc1, 0x3c, 0xc3, 0x20, 0x51, 0xb0, 0x80, 0xab, 0x91, 0x78, 0x90, 0xe1, 0x50, 0xb9, 0x28, 0x18, - 0x08, 0x94, 0x0f, 0x15, 0xaa, 0x22, 0xac, 0x20, 0x84, 0x9e, 0x05, 0x0c, 0x82, 0x19, 0x9a, 0x93, - 0x60, 0xa1, 0x0a, 0x92, 0x8a, 0xa8, 0x14, 0x19, 0x92, 0xb9, 0x84, 0x0f, 0xb2, 0x16, 0x9c, 0x62, - 0xa9, 0x91, 0x29, 0x99, 0x05, 0x0b, 0x12, 0xea, 0x58, 0xa0, 0x39, 0xb9, 0x31, 0x10, 0xd9, 0x71, - 0xc8, 0x01, 0x08, 0xa0, 0x08, 0x82, 0x18, 0xf0, 0x30, 0x89, 0xb3, 0x2d, 0x84, 0x1b, 0xa5, 0x39, - 0x9a, 0xf0, 0x50, 0xa0, 0x80, 0x10, 0xaa, 0x22, 0x1a, 0x96, 0x9c, 0x38, 0x12, 0xbb, 0x60, 0xb1, - 0x1c, 0x10, 0x83, 0x0d, 0x91, 0x52, 0xca, 0x21, 0x99, 0x89, 0x50, 0xc2, 0x59, 0xa8, 0x08, 0x80, - 0x8a, 0x28, 0xb5, 0x5a, 0x80, 0xa0, 0x12, 0x1b, 0xa8, 0x00, 0x04, 0xca, 0x8f, 0x07, 0xaa, 0x20, - 0x84, 0x0b, 0x21, 0x98, 0xd0, 0x38, 0x2a, 0xb6, 0x09, 0x01, 0x0b, 0xc2, 0x58, 0x92, 0x9f, 0x82, - 0x41, 0x0c, 0xa5, 0x29, 0xb9, 0x31, 0xc1, 0x12, 0x8e, 0x23, 0x98, 0x9e, 0x21, 0x00, 0x0a, 0x13, - 0xa0, 0xbe, 0x45, 0x9a, 0xa0, 0x41, 0xc0, 0x28, 0xa9, 0x15, 0x8b, 0x90, 0x21, 0x80, 0x8e, 0x03, - 0x99, 0x21, 0x08, 0xf1, 0x59, 0x0a, 0xb4, 0x5a, 0x91, 0x09, 0xd1, 0x3a, 0x98, 0x03, 0x94, 0x08, - 0x1f, 0xa3, 0x80, 0x0b, 0x38, 0xf8, 0x43, 0x19, 0xfa, 0x21, 0x88, 0x88, 0x01, 0xb9, 0x38, 0x49, - 0xf0, 0x19, 0x33, 0x0b, 0x84, 0x9c, 0x18, 0x90, 0x14, 0x8d, 0x90, 0x81, 0x78, 0xa0, 0x09, 0x95, - 0x2b, 0xb0, 0xb0, 0x79, 0xb2, 0x38, 0x92, 0x0b, 0x91, 0x79, 0xe0, 0x00, 0x3a, 0xc0, 0x18, 0x11, - 0xa0, 0x29, 0x16, 0x0b, 0xa2, 0x2c, 0xb0, 0xa0, 0x6b, 0x86, 0x8b, 0x21, 0xb3, 0x8f, 0x00, 0x88, - 0x85, 0x1b, 0x82, 0xa8, 0x62, 0xaa, 0x90, 0x11, 0x1b, 0x95, 0x1b, 0x90, 0x23, 0x8c, 0x68, 0xf0, - 0x50, 0x99, 0x80, 0x1a, 0xb3, 0x7b, 0xb2, 0x18, 0xaa, 0x86, 0x2a, 0x89, 0x02, 0xaa, 0x62, 0xd8, - 0x38, 0x98, 0x01, 0x12, 0xf9, 0x3c, 0x01, 0xab, 0x24, 0x18, 0x92, 0x0f, 0x92, 0x19, 0x1c, 0x87, - 0x9a, 0x02, 0x99, 0x81, 0x10, 0xa0, 0x16, 0x9f, 0x22, 0x89, 0x88, 0x01, 0xaa, 0x23, 0x2c, 0xa5, - 0x8b, 0x41, 0xa9, 0x11, 0xbc, 0x15, 0x2a, 0xf9, 0x42, 0x89, 0x80, 0x08, 0x98, 0x8d, 0x24, 0x91, - 0x1d, 0x01, 0xa1, 0x3a, 0xab, 0x87, 0x1a, 0xb2, 0x18, 0x99, 0x4b, 0x82, 0xc2, 0x4c, 0x95, 0x29, - 0x09, 0xf0, 0x48, 0x89, 0x81, 0xa1, 0x29, 0xe8, 0x30, 0xc8, 0x40, 0xa1, 0x21, 0x2d, 0xd1, 0x28, - 0xb8, 0x51, 0x98, 0x18, 0x88, 0x19, 0xb2, 0xeb, 0x71, 0xc8, 0x21, 0x88, 0x00, 0x91, 0x8a, 0x43, - 0xea, 0x48, 0xa8, 0x14, 0x9f, 0x12, 0x08, 0xa0, 0x11, 0x88, 0x1c, 0x92, 0x80, 0xc0, 0x79, 0x91, - 0x90, 0x1e, 0xa3, 0x10, 0x0a, 0x14, 0x9d, 0x98, 0x63, 0xa8, 0x39, 0xb8, 0x11, 0x8b, 0x33, 0xcb, - 0xb3, 0x5f, 0x93, 0x8b, 0x19, 0x07, 0x8b, 0x00, 0x88, 0xb2, 0x4c, 0x01, 0xca, 0x50, 0x80, 0xa1, - 0x80, 0x2b, 0x92, 0xb9, 0x73, 0xb0, 0x3a, 0xb2, 0x10, 0xfa, 0x49, 0x83, 0xdb, 0x41, 0xa8, 0x32, - 0x9d, 0x83, 0x21, 0x9c, 0x17, 0xbb, 0x18, 0x88, 0x92, 0x0c, 0x42, 0xb8, 0x14, 0x8a, 0xa0, 0x78, - 0xc9, 0x23, 0x18, 0xaa, 0x18, 0xe2, 0x1d, 0x10, 0xb3, 0x79, 0xb0, 0x21, 0xc9, 0x10, 0xb0, 0x52, - 0x90, 0x0a, 0xa1, 0x99, 0x5e, 0xa4, 0x2c, 0xb2, 0x1a, 0x01, 0xa1, 0x71, 0xc8, 0x18, 0x02, 0x99, - 0x28, 0xd8, 0x38, 0xa9, 0x71, 0xd1, 0x20, 0x89, 0x08, 0x12, 0xda, 0x10, 0xa1, 0x2e, 0x83, 0x28, - 0xac, 0x43, 0xb8, 0xba, 0x54, 0xa8, 0x88, 0x19, 0x13, 0x0a, 0xb2, 0xba, 0x7a, 0x90, 0x23, 0x08, - 0xf1, 0x7c, 0xb8, 0x22, 0x0b, 0x82, 0x92, 0x8f, 0x02, 0x0b, 0x82, 0x09, 0x19, 0x80, 0x72, 0xd9, - 0x41, 0x90, 0x90, 0x29, 0xd9, 0x42, 0xbb, 0x31, 0xca, 0x31, 0xcb, 0x51, 0x84, 0x0d, 0x03, 0xba, - 0x41, 0x89, 0x94, 0x8c, 0x13, 0x90, 0x9e, 0x00, 0x81, 0x20, 0x19, 0xf3, 0x3a, 0x82, 0x98, 0x41, - 0xab, 0x85, 0x2b, 0x91, 0x87, 0x8f, 0x92, 0x3a, 0xa4, 0x09, 0x29, 0xc2, 0x38, 0xa8, 0x38, 0x05, - 0x0d, 0xb1, 0x19, 0x49, 0xd4, 0x29, 0x88, 0x8a, 0x85, 0x08, 0x1a, 0x83, 0xb1, 0x2f, 0x93, 0x19, - 0xa1, 0x48, 0x0a, 0xfc, 0x32, 0xc9, 0x42, 0x99, 0xa1, 0x22, 0xaf, 0x13, 0x9a, 0x12, 0x11, 0xb8, - 0x30, 0xcb, 0x07, 0x8c, 0x11, 0xa9, 0x85, 0x3c, 0xc0, 0x00, 0x28, 0xb1, 0x58, 0xb1, 0x50, 0xd8, - 0x10, 0x88, 0xb9, 0x54, 0xba, 0x21, 0x8a, 0x22, 0x80, 0x8e, 0x04, 0x9d, 0x04, 0x29, 0xa1, 0xa0, - 0x5b, 0xc0, 0x89, 0x33, 0x1a, 0xc2, 0x02, 0xa9, 0x0f, 0x13, 0x23, 0xe8, 0x39, 0xa9, 0xe9, 0x01, - 0x60, 0xb9, 0x04, 0x1b, 0x93, 0x0a, 0x10, 0xa6, 0x2e, 0xb2, 0x1a, 0x81, 0x01, 0x20, 0xf8, 0x29, - 0x02, 0xba, 0x22, 0x8c, 0x14, 0x89, 0x00, 0x00, 0x39, 0x95, 0x8f, 0xa1, 0x00, 0x49, 0xc8, 0x83, - 0x0f, 0x04, 0x18, 0xa8, 0x90, 0x3c, 0x94, 0x0a, 0x91, 0x10, 0x1b, 0xd8, 0x20, 0x8b, 0x07, 0x1a, - 0x09, 0x83, 0x2a, 0xb1, 0x12, 0xf3, 0x4a, 0x1b, 0xf3, 0x28, 0x3c, 0xe2, 0x11, 0x2a, 0xd2, 0x38, - 0xd0, 0x21, 0x0b, 0x93, 0x60, 0xd8, 0x00, 0x8b, 0x12, 0x01, 0x3c, 0xa2, 0xba, 0x78, 0xa0, 0x02, - 0xa9, 0x30, 0x81, 0xa2, 0x3c, 0xd4, 0x2b, 0x90, 0x91, 0xbf, 0x24, 0x41, 0xf9, 0x11, 0x1b, 0x82, - 0x19, 0x82, 0x02, 0xbe, 0x13, 0xab, 0x09, 0x23, 0x2d, 0xc6, 0x49, 0x00, 0xd0, 0x30, 0xb8, 0x40, - 0x91, 0x1a, 0xb2, 0x9d, 0x42, 0xe8, 0x3b, 0x95, 0x3a, 0xd0, 0x30, 0x1a, 0xa5, 0x3a, 0xb1, 0x19, - 0x88, 0x13, 0xbb, 0x81, 0x1f, 0xb6, 0x29, 0x18, 0xa8, 0x03, 0x1c, 0xc9, 0x37, 0x8d, 0x83, 0x1a, - 0x90, 0x18, 0xc8, 0x52, 0xcb, 0x31, 0xa9, 0x52, 0x9a, 0xa0, 0x28, 0xcb, 0x46, 0xaa, 0x13, 0x89, - 0xa8, 0x42, 0xca, 0x51, 0xb9, 0x81, 0x1b, 0x80, 0x15, 0x0c, 0x88, 0x22, 0xba, 0x32, 0x2b, 0x87, - 0xab, 0x98, 0x04, 0x8e, 0x17, 0x8b, 0x81, 0x89, 0x09, 0x05, 0x0e, 0x04, 0x8a, 0x00, 0xb0, 0x29, - 0x92, 0x79, 0xd2, 0x28, 0x98, 0xa8, 0x49, 0xb3, 0x7b, 0xc1, 0x38, 0x99, 0xa2, 0x1c, 0x03, 0x80, - 0x1a, 0x94, 0x9c, 0x33, 0xbc, 0x25, 0xab, 0x21, 0x95, 0x0f, 0x92, 0x19, 0x93, 0x8c, 0x44, 0xea, - 0x38, 0x91, 0x09, 0x12, 0xba, 0x48, 0xb0, 0x28, 0x99, 0x12, 0xad, 0x32, 0xb3, 0x4e, 0x93, 0xaa, - 0x1a, 0x52, 0xe1, 0x3a, 0x83, 0xc9, 0x48, 0xaa, 0x23, 0xd9, 0x59, 0xa2, 0x8c, 0x25, 0xb9, 0x81, - 0x09, 0x41, 0xf8, 0x39, 0x81, 0x9a, 0x24, 0x9d, 0x85, 0x9a, 0x30, 0xb1, 0x0a, 0x22, 0x89, 0xb2, - 0x5a, 0x04, 0x8e, 0x12, 0xaa, 0x22, 0xb9, 0x3e, 0xc5, 0x3a, 0xa0, 0x11, 0x84, 0x2b, 0xa2, 0xcb, - 0x71, 0xc0, 0x49, 0x90, 0x9a, 0x83, 0x2b, 0xa2, 0x21, 0x28, 0x88, 0xb5, 0x0e, 0x31, 0xf3, 0x38, - 0x99, 0x8a, 0x06, 0x8b, 0x81, 0xa9, 0x45, 0xac, 0x13, 0xba, 0x41, 0x02, 0xcb, 0x24, 0x0b, 0x02, - 0xac, 0x18, 0x84, 0x1c, 0xb1, 0x7b, 0xd1, 0x29, 0x91, 0x09, 0x21, 0x85, 0x8a, 0xa2, 0x40, 0xf8, - 0x20, 0x0a, 0x81, 0xa0, 0x3c, 0xd2, 0x0a, 0x23, 0x0a, 0xb3, 0x12, 0x7b, 0xd9, 0x31, 0x88, 0x11, - 0xb9, 0x0b, 0x04, 0xce, 0x52, 0xb0, 0x20, 0x9b, 0x97, 0x8a, 0x32, 0x81, 0xad, 0x25, 0x8c, 0x01, - 0x88, 0x2a, 0xc3, 0x1d, 0x83, 0x8c, 0x11, 0x02, 0x90, 0x8b, 0x42, 0xe2, 0x30, 0x89, 0xc0, 0x19, - 0x01, 0x9b, 0x80, 0x07, 0x1e, 0x94, 0x1d, 0x03, 0x9a, 0x02, 0x00, 0x8e, 0x94, 0x3b, 0xa3, 0x89, - 0x30, 0xf8, 0x48, 0xb1, 0x1a, 0x91, 0x18, 0x62, 0xfa, 0x31, 0x8a, 0x98, 0x11, 0x1b, 0x12, 0xa1, - 0x30, 0x8e, 0xb5, 0x5a, 0xa1, 0x8a, 0x02, 0x9b, 0x21, 0xb4, 0x3f, 0xe4, 0x39, 0xa1, 0x29, 0x12, - 0xb8, 0x78, 0xe8, 0x28, 0x91, 0x89, 0x11, 0xa8, 0x20, 0xb8, 0x41, 0xd8, 0x31, 0x01, 0xab, 0xa1, - 0x22, 0x1c, 0xc9, 0x21, 0x85, 0x1a, 0x90, 0x15, 0xdf, 0x31, 0x99, 0x11, 0x08, 0x90, 0x20, 0xbe, - 0x17, 0x9b, 0x23, 0x99, 0x80, 0x09, 0xac, 0x27, 0x0c, 0x93, 0x09, 0xa8, 0x20, 0xa2, 0x39, 0xcc, - 0x33, 0x89, 0x88, 0x70, 0xc0, 0x19, 0x94, 0x1b, 0x01, 0xab, 0x97, 0x3b, 0x08, 0x95, 0x9b, 0x85, - 0x1e, 0xa4, 0x29, 0x09, 0x92, 0x4a, 0x91, 0x09, 0xc9, 0x31, 0x9b, 0x82, 0x91, 0x2f, 0xb4, 0x38, - 0x2a, 0xb6, 0x29, 0x98, 0x9b, 0x86, 0x3a, 0xa6, 0x2c, 0xb2, 0x2a, 0xc8, 0x04, 0x3c, 0xc5, 0x29, - 0x90, 0x18, 0x98, 0x32, 0x8c, 0xb2, 0x73, 0xba, 0x03, 0xa9, 0x0b, 0x80, 0x42, 0xa2, 0x4b, 0xd4, - 0x19, 0x01, 0xd9, 0x52, 0xc8, 0x38, 0x98, 0x91, 0x83, 0x1c, 0x00, 0x92, 0x3e, 0xe1, 0x18, 0x20, - 0x09, 0x89, 0xd8, 0x50, 0x9b, 0x06, 0x1a, 0x12, 0x8c, 0x81, 0x01, 0x9e, 0x13, 0x9b, 0x85, 0x19, - 0xb1, 0x9f, 0x31, 0x03, 0x1a, 0xa4, 0x9a, 0x48, 0xba, 0x06, 0x1b, 0xa2, 0x0a, 0x91, 0x1c, 0x02, - 0x37, 0x9e, 0x02, 0x9a, 0x93, 0x4c, 0xc3, 0x39, 0xa9, 0x94, 0x4c, 0xb1, 0x38, 0xa0, 0x0c, 0x43, - 0xca, 0x03, 0x8c, 0x10, 0xb3, 0x7b, 0x93, 0xab, 0x05, 0x8c, 0x00, 0x88, 0x32, 0x82, 0xae, 0x02, - 0x9a, 0x91, 0x78, 0xa1, 0x48, 0xa0, 0x80, 0x1e, 0xa3, 0x20, 0xb9, 0x00, 0x0a, 0x63, 0xe8, 0x08, - 0x30, 0xc8, 0x22, 0xab, 0x01, 0x85, 0x8f, 0x22, 0x09, 0x97, 0x0a, 0x89, 0x93, 0x2d, 0xa2, 0x1a, - 0x80, 0x22, 0xc9, 0x03, 0x3c, 0x81, 0x9a, 0x82, 0x44, 0xae, 0x31, 0xf8, 0x33, 0x9e, 0x90, 0x13, - 0x8a, 0x05, 0xb9, 0x30, 0x08, 0xb8, 0xb3, 0x6e, 0xb2, 0x09, 0x28, 0xd8, 0x48, 0xa1, 0x09, 0x92, - 0x2a, 0x63, 0xb0, 0xa9, 0x1a, 0x82, 0x1b, 0x93, 0xa4, 0x0b, 0x53, 0xba, 0xf1, 0x60, 0x9a, 0x84, - 0x88, 0x49, 0xe2, 0x91, 0x6a, 0xa0, 0x08, 0x90, 0x21, 0xad, 0x13, 0x0b, 0xa5, 0x5b, 0xa1, 0x12, - 0x0b, 0x85, 0x8c, 0x98, 0x40, 0xb0, 0x81, 0x50, 0xcb, 0x11, 0x08, 0x20, 0x82, 0x99, 0xa2, 0x18, - 0xbf, 0x32, 0x13, 0xcf, 0x13, 0x89, 0x89, 0x23, 0x9e, 0x85, 0x0b, 0x35, 0xc9, 0x4a, 0xa2, 0x8a, - 0x0a, 0xa1, 0x45, 0xbb, 0x33, 0xeb, 0x38, 0x02, 0xb1, 0x2a, 0xca, 0x64, 0xc0, 0x19, 0x29, 0xc4, - 0x3a, 0x92, 0x8b, 0x89, 0x06, 0x9a, 0x81, 0x58, 0xc0, 0x38, 0xb3, 0x1a, 0x02, 0xaa, 0x14, 0xae, - 0x89, 0x27, 0x9a, 0x81, 0xa9, 0x02, 0x4c, 0x04, 0xd9, 0x19, 0x24, 0x8d, 0xa2, 0x1a, 0x92, 0x4a, - 0x91, 0x05, 0x8f, 0x82, 0x09, 0xa1, 0x60, 0xb0, 0x28, 0x98, 0x8a, 0x31, 0x88, 0x05, 0x9c, 0x0a, - 0x87, 0x2b, 0xb4, 0x2a, 0x92, 0x0a, 0x01, 0xd0, 0x4e, 0xb3, 0x3b, 0xa1, 0x22, 0x9b, 0x96, 0x0c, - 0xa3, 0x58, 0xf2, 0x39, 0xb9, 0x23, 0x0b, 0x91, 0x43, 0xb9, 0x10, 0x8e, 0xa3, 0x29, 0x32, 0xe2, - 0x49, 0xb8, 0xab, 0x23, 0x1a, 0x16, 0xea, 0x28, 0x11, 0x92, 0x0c, 0x81, 0x93, 0x1d, 0x93, 0xf9, - 0x68, 0xa0, 0x80, 0x1a, 0x92, 0x28, 0xb8, 0x22, 0x0d, 0xb5, 0x4a, 0xa1, 0x00, 0x48, 0xc1, 0x09, - 0xa0, 0x3b, 0x96, 0x0c, 0x03, 0x9c, 0x34, 0x8b, 0x01, 0x80, 0x8f, 0x85, 0x0b, 0x13, 0x99, 0x98, - 0x98, 0x60, 0x83, 0x0c, 0xb1, 0x99, 0x19, 0x58, 0xe2, 0x11, 0x1c, 0xa5, 0x2c, 0x83, 0x11, 0x9c, - 0x82, 0x8e, 0x93, 0x2b, 0x03, 0x82, 0x8d, 0xa3, 0x3b, 0x09, 0x07, 0xa9, 0x2a, 0x26, 0xc8, 0x8b, - 0x13, 0xab, 0x01, 0x81, 0x4a, 0xe8, 0x33, 0x28, 0xad, 0x13, 0xa1, 0x3b, 0xac, 0x27, 0xb8, 0x2b, - 0xa2, 0x99, 0x4b, 0xb2, 0x69, 0xa8, 0x33, 0xb1, 0x5a, 0x01, 0xe9, 0x3c, 0x06, 0x99, 0x99, 0x90, - 0x29, 0x1e, 0x86, 0x89, 0x8a, 0x24, 0x99, 0x91, 0x6a, 0xb2, 0x31, 0xbf, 0x04, 0x8b, 0x11, 0x13, - 0xcd, 0x21, 0xa3, 0x29, 0x89, 0xb3, 0x0c, 0x88, 0x23, 0xea, 0x63, 0x99, 0xc0, 0x40, 0xa8, 0x04, - 0x0d, 0x91, 0x02, 0x9a, 0x32, 0xbd, 0x14, 0x09, 0x90, 0x91, 0x1b, 0x15, 0x9b, 0x03, 0x18, 0xc5, - 0x39, 0xbc, 0xc3, 0x0c, 0x62, 0xc2, 0x69, 0x90, 0x99, 0x10, 0x88, 0x10, 0x93, 0x2f, 0xc2, 0x1a, - 0x88, 0x10, 0x39, 0x97, 0x3b, 0xf8, 0x38, 0x99, 0x04, 0x29, 0xe2, 0x19, 0x00, 0x92, 0x3a, 0xf1, - 0x28, 0x98, 0x0a, 0x04, 0x8c, 0x21, 0xa2, 0x2b, 0x82, 0x0a, 0x82, 0x31, 0x73, 0xf0, 0x5c, 0xb9, - 0x12, 0x19, 0xc9, 0x22, 0xaa, 0x14, 0x08, 0xd0, 0x60, 0x98, 0x80, 0x39, 0xf2, 0x29, 0x90, 0x10, - 0xa8, 0x20, 0xb8, 0xaa, 0x74, 0xc8, 0x33, 0xda, 0x28, 0x80, 0x08, 0x22, 0xdb, 0x43, 0xcb, 0x21, - 0x99, 0x01, 0x10, 0xca, 0x11, 0x3a, 0xb4, 0x0a, 0x61, 0xa5, 0x0d, 0x92, 0x11, 0x1d, 0xd3, 0x3a, - 0x80, 0x08, 0x0a, 0x97, 0x0c, 0x14, 0x99, 0xa9, 0x58, 0x92, 0x09, 0x00, 0x94, 0x8f, 0x03, 0x09, - 0x89, 0xa2, 0x3a, 0xc2, 0x1c, 0x85, 0x09, 0x0a, 0x04, 0x12, 0x8f, 0x83, 0x99, 0x19, 0x00, 0xb1, - 0x91, 0x3e, 0xa5, 0x8b, 0x81, 0x7a, 0xa1, 0x39, 0x83, 0xb9, 0x2f, 0xa4, 0x2c, 0x91, 0x08, 0x18, - 0xc1, 0x59, 0xa1, 0x11, 0x8c, 0xa0, 0x12, 0x1e, 0x05, 0x9b, 0x82, 0x49, 0xbc, 0x06, 0x29, 0xa8, - 0x21, 0xa9, 0x29, 0xa0, 0xbb, 0x27, 0x0a, 0x11, 0xb8, 0x2a, 0xaa, 0x73, 0xe8, 0x22, 0x29, 0xc0, - 0x80, 0x0e, 0x04, 0x89, 0x18, 0x99, 0x90, 0x22, 0x60, 0xb8, 0x83, 0x0c, 0xca, 0x33, 0x9b, 0x17, - 0x8d, 0xa2, 0x51, 0x99, 0x98, 0x20, 0xd4, 0x4b, 0xb2, 0x1a, 0x21, 0x19, 0x92, 0xab, 0x7b, 0xb4, - 0x2c, 0xb1, 0x29, 0xb1, 0x32, 0x13, 0xbf, 0x62, 0xc8, 0x11, 0x2a, 0xb0, 0x13, 0x0f, 0xa3, 0x20, - 0xaa, 0xa1, 0x30, 0xa8, 0x52, 0xb9, 0x10, 0x0c, 0xc3, 0x1b, 0x71, 0xa4, 0x4a, 0xc1, 0x0a, 0x23, - 0xbb, 0x33, 0xdc, 0x49, 0x90, 0x18, 0x86, 0x0e, 0x92, 0x18, 0x18, 0xc2, 0x49, 0xd9, 0x21, 0x81, - 0x89, 0x11, 0xc9, 0x58, 0xd9, 0x12, 0x0a, 0xa1, 0x01, 0x1a, 0x13, 0x53, 0xba, 0xc1, 0x3a, 0xd2, - 0x18, 0x3b, 0x87, 0x89, 0x89, 0xa1, 0x2d, 0xa1, 0x70, 0x92, 0x0c, 0x83, 0xa8, 0x50, 0xa1, 0xbb, - 0x11, 0x1f, 0xa6, 0x1a, 0x91, 0x09, 0x92, 0x18, 0x62, 0xb0, 0x41, 0x9a, 0xd0, 0x19, 0x29, 0x95, - 0x0c, 0x84, 0xac, 0x22, 0x90, 0x40, 0xd0, 0x59, 0x91, 0x8a, 0x01, 0x0a, 0x85, 0x0c, 0x11, 0xe8, - 0x4a, 0x92, 0x1b, 0x94, 0x39, 0xa0, 0xb9, 0x63, 0xab, 0x02, 0x08, 0x0b, 0x93, 0x70, 0xb2, 0x18, - 0x90, 0x0a, 0xb2, 0x9f, 0x52, 0xdb, 0x24, 0xa9, 0x30, 0xc8, 0x38, 0xb2, 0x1e, 0x84, 0x0a, 0x38, - 0xf1, 0x29, 0xb1, 0x51, 0xb0, 0x09, 0x02, 0x99, 0x38, 0xb2, 0x50, 0xf8, 0x38, 0xc8, 0x00, 0x29, - 0x01, 0xb8, 0x38, 0x07, 0x9f, 0x14, 0x89, 0x01, 0xa9, 0x28, 0xd8, 0x29, 0x01, 0x89, 0x33, 0xfb, - 0x43, 0xbb, 0x41, 0xa9, 0x09, 0x24, 0x99, 0x02, 0xbd, 0x03, 0x0b, 0x83, 0x92, 0x1f, 0x95, 0x0b, - 0x95, 0x3a, 0xc1, 0x28, 0xb0, 0x3a, 0x09, 0xa3, 0x78, 0xfb, 0x50, 0x98, 0x08, 0x82, 0x1a, 0x93, - 0x0a, 0x84, 0xad, 0x30, 0xd8, 0x40, 0xb8, 0x20, 0x82, 0xad, 0x43, 0xc9, 0x50, 0x91, 0x51, 0xf9, - 0x18, 0x90, 0x08, 0x10, 0x98, 0x28, 0xd0, 0x41, 0xa9, 0x18, 0x13, 0x19, 0xc0, 0x2a, 0xb1, 0xca, - 0x71, 0xb0, 0x40, 0x99, 0x01, 0xaa, 0x52, 0xa2, 0x1a, 0xac, 0x94, 0x60, 0xca, 0x32, 0x9c, 0x83, - 0x1a, 0x91, 0x20, 0xf9, 0x31, 0x9a, 0x21, 0x9a, 0x97, 0x3c, 0xa2, 0xb2, 0x4c, 0x02, 0xda, 0x11, - 0x19, 0xb9, 0x32, 0xd9, 0x2b, 0x16, 0x08, 0x9a, 0x93, 0x0f, 0x23, 0xa0, 0x18, 0xbb, 0x91, 0x5c, - 0x83, 0xb0, 0x0f, 0x04, 0x0d, 0x84, 0x0b, 0x11, 0x83, 0x8b, 0x00, 0x8c, 0x15, 0x89, 0xb9, 0x1a, - 0x04, 0x08, 0x8d, 0x94, 0x19, 0x13, 0x9f, 0x03, 0x19, 0x02, 0x18, 0xfa, 0x3a, 0x02, 0xb9, 0x34, - 0xbb, 0x0d, 0x86, 0x3a, 0xe3, 0x39, 0x81, 0x99, 0x09, 0xb2, 0x5a, 0xba, 0x32, 0x99, 0x91, 0x46, - 0xd8, 0x19, 0x29, 0xd2, 0x30, 0xc1, 0x2a, 0xa2, 0xac, 0x47, 0xb9, 0x10, 0xc1, 0x3b, 0xd2, 0x20, - 0x02, 0xa9, 0x72, 0xc8, 0x2a, 0xa2, 0x38, 0xa3, 0x8e, 0x04, 0x99, 0x0a, 0x94, 0x8a, 0x01, 0x11, - 0xfb, 0x41, 0x01, 0x9a, 0x19, 0x23, 0xa0, 0x2b, 0xe1, 0xac, 0x55, 0xba, 0x10, 0x08, 0x40, 0xa4, - 0x0c, 0x82, 0x99, 0x40, 0xc8, 0x00, 0x90, 0x60, 0xf0, 0x18, 0x90, 0x08, 0x11, 0x01, 0x89, 0x2a, - 0x84, 0xac, 0x25, 0x9b, 0x12, 0x9c, 0x11, 0xb2, 0xbf, 0x05, 0x09, 0x11, 0xc0, 0x20, 0x99, 0x73, - 0xb0, 0x0b, 0x32, 0xaa, 0x10, 0xaa, 0x31, 0xd2, 0x1d, 0x03, 0xb1, 0x3b, 0x99, 0x91, 0x31, 0x25, - 0x39, 0xf1, 0x29, 0x90, 0xbb, 0x31, 0xd1, 0x3c, 0xa5, 0x30, 0xc1, 0x3a, 0x94, 0x9e, 0x21, 0xa0, - 0x30, 0xaa, 0x01, 0x99, 0x5b, 0xa3, 0x9b, 0x44, 0x90, 0x59, 0xb0, 0x3a, 0xf1, 0x0c, 0x11, 0xa0, - 0x70, 0x91, 0x99, 0xa9, 0x38, 0xb2, 0x63, 0x01, 0x90, 0x9b, 0x92, 0x9c, 0xd9, 0x41, 0x9a, 0x33, - 0xbb, 0x93, 0x4b, 0x99, 0x27, 0xbb, 0x12, 0x8c, 0x05, 0x99, 0x09, 0x03, 0xa9, 0x1d, 0xa2, 0xa8, - 0x29, 0x43, 0xbb, 0x35, 0x2a, 0xa0, 0x91, 0x1b, 0xc2, 0x2a, 0x03, 0xac, 0x04, 0x3d, 0xa4, 0x0b, - 0x0b, 0x15, 0x19, 0x94, 0x1d, 0xa2, 0x29, 0x92, 0xb8, 0x2c, 0xb8, 0x30, 0xc0, 0x30, 0x03, 0xbd, - 0x32, 0xb9, 0x30, 0x11, 0x13, 0x30, 0xca, 0x01, 0x0a, 0xd9, 0x30, 0xb3, 0x9d, 0x13, 0xb9, 0x09, - 0x21, 0x32, 0xba, 0x52, 0xb1, 0x9b, 0x04, 0x1a, 0x12, 0x9a, 0x43, 0xca, 0x00, 0x00, 0x10, 0xa3, - 0x1b, 0x93, 0x9a, 0x32, 0xb9, 0x39, 0x01, 0x2a, 0xb2, 0xab, 0x04, 0x0a, 0x11, 0x91, 0x39, 0xa1, - 0x10, 0x9a, 0x01, 0x19, 0x00, 0x92, 0x0c, 0x04, 0x1b, 0x92, 0x9a, 0x10, 0x9b, 0x33, 0xa0, 0x1a, - 0x92, 0x0b, 0x04, 0x0a, 0x12, 0x99, 0x99, 0x90, 0x2a, 0xb0, 0x31, 0x93, 0x09, 0x99, 0xa0, 0x11, - 0x09, 0x23, 0x90, 0xa9, 0x11, 0x9a, 0x91, 0x29, 0x91, 0x99, 0x11, 0xa0, 0x20, 0x01, 0x10, 0x91, - 0x09, 0x90, 0x99, 0x10, 0x99, 0x11, 0x91, 0x10, 0x90, 0x10, 0x09, 0x91, 0x19, 0x91, 0x10, 0x09, - 0x91, 0x09, 0x10, 0x00, 0x00, 0x90, 0x10, 0x90, 0x10, 0x00, 0x09, 0x01, 0x90, 0x10, 0x09, 0x10, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x02, 0x00, 0x00, 0x7d, 0x0b, 0x02, 0x01, 0x00, - 0x34, 0x06, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x77, 0x7f, 0x77, 0x4c, 0xf5, 0x19, 0xb5, 0x2f, - 0x92, 0x10, 0xa8, 0xcc, 0x75, 0xf8, 0x48, 0x81, 0x99, 0x28, 0xa8, 0x69, 0xc0, 0x12, 0x89, 0x99, - 0x82, 0x31, 0x06, 0x9e, 0x31, 0xba, 0x23, 0x9b, 0xa8, 0x52, 0xb8, 0x50, 0xb9, 0x93, 0x1a, 0x4a, - 0xb4, 0x0b, 0x93, 0x28, 0x11, 0xf9, 0x11, 0x3c, 0x94, 0x0c, 0x83, 0x9b, 0x12, 0x80, 0x28, 0x95, - 0x8f, 0x86, 0x8b, 0x12, 0x9b, 0x43, 0xc9, 0x19, 0x93, 0x88, 0x49, 0xb9, 0x84, 0x3d, 0xd1, 0x51, - 0xd9, 0x21, 0xa8, 0x31, 0xf8, 0x30, 0x98, 0x90, 0x20, 0x99, 0xa1, 0x2b, 0x85, 0x5a, 0xc1, 0x0a, - 0x30, 0xa8, 0xc1, 0x50, 0x89, 0xa0, 0x21, 0xd8, 0x7a, 0xa2, 0x10, 0x89, 0xc0, 0x5b, 0xa2, 0x00, - 0x88, 0x28, 0xac, 0x17, 0x8d, 0x04, 0x0c, 0x93, 0x8b, 0x31, 0xb1, 0x4b, 0xd1, 0x59, 0xb1, 0x29, - 0x88, 0x81, 0x98, 0x79, 0xc1, 0x10, 0x1a, 0x28, 0xd3, 0x19, 0x32, 0xbf, 0x13, 0xa1, 0x31, 0x0f, - 0xa3, 0x89, 0x28, 0x00, 0x9c, 0x86, 0x9a, 0x22, 0xca, 0x33, 0x0f, 0x82, 0x1a, 0x82, 0x98, 0x08, - 0x40, 0xa8, 0x1a, 0xc3, 0x59, 0xd1, 0x89, 0x52, 0x99, 0x41, 0xcb, 0x93, 0x1b, 0x42, 0xe1, 0x28, - 0xa8, 0x68, 0xe1, 0x29, 0x93, 0x3b, 0xe3, 0x38, 0xb8, 0x19, 0x82, 0x18, 0x11, 0x9f, 0x13, 0x8b, - 0x92, 0x92, 0x2b, 0x1b, 0x87, 0xcb, 0x51, 0x88, 0x98, 0x87, 0x8c, 0x31, 0xa8, 0x12, 0x89, 0xc8, - 0x28, 0x09, 0x83, 0xcb, 0x34, 0x60, 0xd0, 0x08, 0xcb, 0x34, 0xa8, 0x49, 0xf1, 0x28, 0x90, 0x18, - 0x98, 0x32, 0x8d, 0x02, 0xca, 0x40, 0xb1, 0x28, 0x81, 0xa8, 0x3a, 0x32, 0xf8, 0x0b, 0x34, 0x93, - 0x1b, 0xbc, 0xd2, 0x52, 0x80, 0x29, 0xc8, 0x0c, 0x05, 0x8a, 0x82, 0x19, 0xa8, 0x16, 0xbd, 0x28, - 0x21, 0x01, 0xb9, 0x87, 0x9f, 0x04, 0x88, 0x09, 0x92, 0x11, 0x8b, 0xc2, 0x7b, 0xa2, 0xa8, 0x52, - 0xa0, 0x1c, 0x80, 0x82, 0x09, 0x10, 0x9a, 0x0a, 0x87, 0x0e, 0x03, 0x8b, 0x01, 0x84, 0x9d, 0x29, - 0x85, 0x99, 0x53, 0xca, 0x10, 0x8a, 0x33, 0x0c, 0xc1, 0x61, 0xa9, 0x91, 0x4b, 0xb2, 0x40, 0xaa, - 0x83, 0x0d, 0x01, 0x80, 0x82, 0xca, 0x20, 0x24, 0xcb, 0x11, 0xab, 0x48, 0x86, 0x0a, 0xaa, 0x03, - 0x20, 0x14, 0xbf, 0x22, 0x12, 0x0d, 0xd0, 0x49, 0x85, 0x1b, 0xc1, 0x1a, 0x82, 0x18, 0x24, 0xba, - 0xea, 0x51, 0xb0, 0x4b, 0x92, 0x90, 0x5a, 0xb0, 0x29, 0xa0, 0x71, 0xc1, 0x89, 0x81, 0x08, 0x13, - 0x1b, 0x14, 0xcf, 0x12, 0x80, 0x99, 0x61, 0xb9, 0x31, 0xc0, 0x1b, 0x85, 0x09, 0x88, 0x13, 0x8e, - 0x91, 0x48, 0xc3, 0x3c, 0x89, 0x97, 0x2b, 0x90, 0x10, 0xc0, 0x38, 0x83, 0xcb, 0x08, 0x34, 0x0e, - 0x82, 0x9b, 0x51, 0xd0, 0x38, 0xa0, 0x10, 0x98, 0x60, 0xcb, 0x12, 0xa8, 0x70, 0xc0, 0x30, 0xd8, - 0x20, 0x88, 0x08, 0x80, 0x88, 0x24, 0xbd, 0x01, 0x10, 0x82, 0x20, 0xe9, 0x2a, 0xa3, 0x4b, 0xa2, - 0xf0, 0x61, 0x09, 0xc8, 0x10, 0x0a, 0x05, 0x0b, 0x92, 0x8a, 0x19, 0x83, 0x23, 0xad, 0x30, 0x11, - 0xfa, 0x1c, 0x16, 0xb9, 0x42, 0xda, 0x21, 0x8b, 0x04, 0x00, 0x9b, 0x80, 0x52, 0xe9, 0x38, 0xb0, - 0x48, 0xa1, 0x38, 0xea, 0x30, 0xb1, 0x20, 0x89, 0x89, 0xa8, 0x32, 0x81, 0x9c, 0xa5, 0x7c, 0xc2, - 0x08, 0xa1, 0x49, 0x03, 0xa8, 0x8d, 0x80, 0x00, 0x51, 0xd8, 0x11, 0x09, 0xa0, 0x31, 0xcf, 0x86, - 0x18, 0xa8, 0x00, 0x90, 0x48, 0xb0, 0x30, 0xca, 0x14, 0x08, 0xbb, 0x33, 0xbd, 0x17, 0x3b, 0xc9, - 0x20, 0xa1, 0x5b, 0x02, 0xba, 0x91, 0x6b, 0xb0, 0x20, 0x80, 0x38, 0xf1, 0x10, 0x0f, 0x84, 0x88, - 0x00, 0xa0, 0x19, 0x13, 0x8b, 0x89, 0x07, 0x8d, 0x13, 0x9d, 0x83, 0x19, 0x08, 0xb2, 0x30, 0x8d, - 0x22, 0xb8, 0x02, 0x0d, 0x42, 0xf2, 0x4c, 0xc1, 0x20, 0xb1, 0x69, 0xb8, 0x10, 0xb0, 0x4a, 0x02, - 0x99, 0x90, 0x48, 0xd3, 0x3e, 0xb4, 0x3a, 0xa1, 0x28, 0xc9, 0x00, 0x38, 0x12, 0xf0, 0x28, 0xa9, - 0x21, 0x0c, 0x87, 0x8a, 0x18, 0x13, 0xcb, 0x0a, 0x53, 0xb8, 0x31, 0xfa, 0x22, 0xab, 0x34, 0xd9, - 0x01, 0x19, 0x13, 0xbe, 0x42, 0xb9, 0x43, 0xcb, 0x31, 0xca, 0x31, 0x80, 0x80, 0xad, 0x53, 0xc8, - 0x30, 0x9c, 0x05, 0x89, 0x02, 0x9a, 0x01, 0x98, 0x20, 0xa4, 0x1c, 0x00, 0x42, 0xdd, 0x22, 0x9a, - 0x33, 0xfa, 0x40, 0xa9, 0x00, 0x81, 0x10, 0x9d, 0x05, 0x9a, 0x92, 0x0c, 0x15, 0x99, 0x00, 0x9a, - 0x24, 0xbb, 0x53, 0xa8, 0x10, 0x89, 0x03, 0xc8, 0x4c, 0xc2, 0x41, 0xb8, 0x3a, 0xd3, 0x1c, 0xa2, - 0x38, 0x9a, 0x23, 0xf1, 0x29, 0x98, 0x72, 0xd0, 0x20, 0x9a, 0x20, 0x9a, 0x02, 0x42, 0x1b, 0xfa, - 0x52, 0x8d, 0x02, 0x90, 0x10, 0xba, 0x52, 0x99, 0x90, 0x39, 0x87, 0x9b, 0x03, 0x9b, 0x81, 0x40, - 0x10, 0xfa, 0x21, 0x2b, 0xc8, 0x82, 0x21, 0x09, 0xa3, 0x9f, 0x84, 0x8a, 0x79, 0xb0, 0x18, 0x91, - 0x2b, 0x93, 0x8a, 0x23, 0x34, 0x9c, 0x99, 0xf3, 0x70, 0xa8, 0x10, 0x81, 0x9c, 0x11, 0x82, 0x0f, - 0x83, 0x2b, 0xb4, 0x9c, 0x22, 0xa0, 0x42, 0x0d, 0xa1, 0x88, 0x19, 0x11, 0xa2, 0x4d, 0x92, 0xc0, - 0x5a, 0xb1, 0x31, 0x19, 0xa1, 0xc9, 0x58, 0x02, 0x0a, 0xd9, 0x48, 0xa8, 0x59, 0xb0, 0x2a, 0xf3, - 0x5a, 0x91, 0x99, 0x3a, 0xb4, 0x40, 0xa9, 0x32, 0x8c, 0x13, 0xbe, 0x33, 0xcb, 0x54, 0xca, 0x32, - 0xbb, 0x11, 0x02, 0x8c, 0x84, 0x20, 0xba, 0x0a, 0x33, 0xdb, 0x84, 0x79, 0xb0, 0x00, 0xb9, 0x59, - 0x95, 0x0d, 0x03, 0xb9, 0x20, 0x80, 0x18, 0xc8, 0x34, 0x9f, 0x94, 0x8a, 0x22, 0x00, 0xbb, 0x04, - 0x1d, 0x83, 0xa9, 0x73, 0xab, 0x85, 0x1a, 0x81, 0x8a, 0x05, 0x8b, 0x93, 0x0d, 0x03, 0x8a, 0x14, - 0xbe, 0x42, 0xb8, 0x30, 0xc9, 0x28, 0x12, 0xf8, 0x40, 0x99, 0x92, 0x38, 0xc9, 0x38, 0xc2, 0x61, - 0xa9, 0x88, 0x18, 0xa1, 0x20, 0xc2, 0x4b, 0xa4, 0x8c, 0x01, 0x20, 0xd8, 0x02, 0x3b, 0x92, 0x9f, - 0x04, 0x81, 0x1d, 0x83, 0x9a, 0x81, 0x4b, 0x97, 0x08, 0xb9, 0x21, 0x00, 0x9a, 0x83, 0x19, 0xad, - 0x30, 0x07, 0x9e, 0x21, 0x88, 0x38, 0xd0, 0x38, 0x90, 0xc9, 0x71, 0xc0, 0x20, 0xa1, 0x10, 0xba, - 0x42, 0x98, 0x01, 0xbd, 0x42, 0xa8, 0x18, 0x03, 0x8f, 0xa2, 0x51, 0x9a, 0xab, 0x16, 0x1a, 0xb3, - 0x2c, 0xb2, 0x71, 0x99, 0x00, 0x11, 0x9d, 0x05, 0x89, 0x8b, 0x11, 0x84, 0x9a, 0x10, 0x90, 0x8a, - 0x53, 0xda, 0xa2, 0x59, 0xb0, 0x21, 0xf8, 0x3a, 0x86, 0x09, 0x98, 0x92, 0x4b, 0xb4, 0x38, 0xca, - 0x11, 0xa2, 0x79, 0xd9, 0x11, 0x88, 0x10, 0xa1, 0x3a, 0xe1, 0x1a, 0x03, 0x80, 0xac, 0x63, 0x90, - 0x0a, 0x81, 0x08, 0xc4, 0x7b, 0xd1, 0x08, 0x21, 0x0b, 0x85, 0xbb, 0x51, 0xb0, 0x28, 0x88, 0x93, - 0x8e, 0x05, 0x0b, 0xa1, 0x09, 0x35, 0x9a, 0x80, 0xbb, 0x16, 0x3a, 0xc1, 0x00, 0x89, 0xa0, 0x42, - 0xdb, 0x20, 0x41, 0xc0, 0x89, 0x8a, 0x30, 0x93, 0x72, 0xf0, 0x5b, 0xa1, 0x09, 0x83, 0x1b, 0x13, - 0x9c, 0xb3, 0x3c, 0xb2, 0x70, 0xa1, 0x1b, 0xb1, 0x6a, 0x91, 0x1a, 0x91, 0x99, 0x51, 0xc0, 0xab, - 0x72, 0xa1, 0x28, 0xd8, 0x19, 0x13, 0x0a, 0x96, 0x0c, 0x13, 0x8c, 0x82, 0xaa, 0x73, 0xb8, 0x10, - 0x1b, 0xc3, 0x99, 0x25, 0x1b, 0xd0, 0x18, 0x33, 0xac, 0x90, 0x22, 0xc8, 0x38, 0xa2, 0x9b, 0xc1, - 0x7a, 0x94, 0x89, 0x2a, 0x96, 0x08, 0x0b, 0x93, 0x0b, 0x05, 0x19, 0xb0, 0xae, 0x26, 0x9a, 0x11, - 0xca, 0x41, 0x8a, 0xb5, 0x58, 0x99, 0x81, 0x18, 0x99, 0xa3, 0x5b, 0xa3, 0x9c, 0x93, 0x2d, 0x81, - 0x20, 0xb3, 0x8e, 0x19, 0x12, 0x86, 0x8e, 0x12, 0xa0, 0x98, 0x6b, 0xb2, 0x29, 0x22, 0x9c, 0x86, - 0x0e, 0x13, 0x9a, 0xa1, 0x20, 0xa0, 0x9b, 0x06, 0x1b, 0x93, 0xa9, 0x72, 0xdb, 0x02, 0x1c, 0x04, - 0x9b, 0x30, 0x95, 0x1d, 0x90, 0x22, 0x98, 0x9a, 0x43, 0xca, 0x00, 0x22, 0x0a, 0x0a, 0xa8, 0x07, - 0x0f, 0x91, 0x40, 0xc1, 0x1b, 0x02, 0x09, 0xb2, 0x48, 0xe9, 0x40, 0xb8, 0x13, 0xbc, 0x62, 0x98, - 0x20, 0xb8, 0x48, 0xc1, 0x2d, 0x84, 0x1a, 0xd3, 0x3a, 0xb2, 0x1c, 0x04, 0x1a, 0xb0, 0x20, 0x01, - 0xbd, 0x23, 0x00, 0x9d, 0x06, 0x8b, 0x93, 0x1c, 0x23, 0xb8, 0x20, 0x9f, 0x24, 0xc8, 0x28, 0x0a, - 0xa5, 0x3a, 0xa8, 0x92, 0x81, 0x7b, 0xa0, 0x90, 0x8a, 0x25, 0x08, 0xfa, 0x30, 0x90, 0x11, 0xc8, - 0x5a, 0xd0, 0x22, 0x8a, 0x08, 0xc3, 0x3b, 0x23, 0xdd, 0x02, 0x18, 0x93, 0x8d, 0x11, 0x8a, 0x10, - 0x12, 0xc8, 0x59, 0x90, 0x90, 0x53, 0xbb, 0x23, 0xc9, 0x2a, 0x82, 0xd2, 0x5c, 0xa2, 0x2a, 0xe1, - 0x40, 0xda, 0x31, 0x89, 0x11, 0xe9, 0x18, 0x22, 0x1a, 0xe1, 0x40, 0xa9, 0x00, 0x10, 0x9b, 0x95, - 0x3c, 0x96, 0x1c, 0x91, 0x58, 0xb1, 0x8c, 0x04, 0x8a, 0x12, 0xaa, 0x31, 0xb8, 0x08, 0x2a, 0xa6, - 0x1c, 0x15, 0xba, 0x80, 0x21, 0x10, 0x89, 0xb0, 0x83, 0x2f, 0xf3, 0x18, 0x11, 0x9c, 0x33, 0xba, - 0x2b, 0xa3, 0x4d, 0xa6, 0x4b, 0xb0, 0x38, 0xe3, 0x4b, 0x92, 0x29, 0xb1, 0x29, 0xfa, 0x51, 0x88, - 0x90, 0x80, 0x1c, 0xa4, 0x49, 0xc1, 0x3a, 0xa1, 0x38, 0xa1, 0x0e, 0x09, 0x15, 0x2a, 0xba, 0x20, - 0xaa, 0x52, 0x91, 0x49, 0xd9, 0x40, 0xb1, 0x1c, 0x81, 0x04, 0xc0, 0x2c, 0x02, 0xca, 0x53, 0x9b, - 0x06, 0x9c, 0x11, 0x88, 0x98, 0x33, 0xc8, 0x1a, 0x84, 0x1c, 0x93, 0x09, 0x98, 0x24, 0xbc, 0x1a, - 0x84, 0x20, 0x9a, 0x87, 0x9a, 0x68, 0xb1, 0x98, 0x1c, 0x25, 0x8c, 0x93, 0x8c, 0x03, 0x0b, 0x07, - 0xa9, 0x00, 0x09, 0x82, 0x91, 0x0f, 0x14, 0x9a, 0x91, 0x39, 0x98, 0x15, 0x8d, 0x91, 0x09, 0x09, - 0x10, 0x83, 0x89, 0x5b, 0xa4, 0x0b, 0x91, 0x64, 0xb0, 0x3c, 0xc3, 0x99, 0x30, 0xe8, 0x31, 0x90, - 0x08, 0xb9, 0x38, 0xed, 0x64, 0xb8, 0x29, 0x88, 0xb3, 0x2c, 0x02, 0x30, 0xad, 0x14, 0x9a, 0x09, - 0xb2, 0x70, 0xf2, 0x28, 0x81, 0xaa, 0x41, 0x88, 0x01, 0xab, 0x62, 0xac, 0x83, 0x1a, 0x23, 0xcc, - 0x32, 0xaa, 0xa8, 0x63, 0x18, 0xba, 0x05, 0x8d, 0x12, 0xaa, 0x44, 0xb8, 0x38, 0xab, 0x86, 0x0c, - 0x11, 0x81, 0x8a, 0x80, 0xa9, 0x41, 0x1a, 0x07, 0x0c, 0xa0, 0x39, 0x93, 0xab, 0x1a, 0x27, 0x88, - 0xd9, 0x50, 0xc0, 0x39, 0x94, 0x1c, 0xb2, 0x4a, 0xc2, 0x48, 0xd1, 0x39, 0xb2, 0x2c, 0xa6, 0x1c, - 0x83, 0x89, 0x80, 0x18, 0x81, 0x09, 0x88, 0x88, 0x90, 0x24, 0x2c, 0xf9, 0x41, 0xb8, 0x48, 0xca, - 0x43, 0xb9, 0x39, 0xd3, 0x39, 0x01, 0xb8, 0x28, 0xaa, 0x25, 0xa8, 0x2a, 0x90, 0x27, 0x9f, 0x04, - 0x9c, 0x32, 0xb8, 0x31, 0xf9, 0x49, 0x91, 0x28, 0xb9, 0x10, 0xa1, 0x4b, 0xb2, 0x0a, 0x01, 0x09, - 0x27, 0x9f, 0x12, 0xa8, 0x51, 0xb9, 0x80, 0x20, 0x31, 0xac, 0x93, 0x6a, 0xc8, 0x42, 0xc8, 0x29, - 0x91, 0x90, 0x81, 0x0b, 0x32, 0xe5, 0x2b, 0x20, 0xd8, 0x30, 0x9a, 0x05, 0x8e, 0x12, 0xa9, 0x21, - 0x99, 0x63, 0xf9, 0x30, 0x99, 0x12, 0xb8, 0x0a, 0x84, 0x4c, 0xb2, 0x39, 0xb8, 0x49, 0x05, 0xcb, - 0x21, 0x98, 0xa9, 0x20, 0x51, 0xf8, 0x48, 0x90, 0x8a, 0x02, 0x2b, 0xa4, 0x0a, 0x1d, 0x06, 0x8b, - 0x81, 0x30, 0xc8, 0x39, 0x89, 0x86, 0x0d, 0x22, 0xc9, 0x10, 0x11, 0x89, 0xd0, 0x58, 0x98, 0x22, - 0xfa, 0x58, 0xb0, 0x39, 0xa1, 0x3c, 0xb1, 0x38, 0xb0, 0x4a, 0x90, 0x10, 0x02, 0x0e, 0xa8, 0x20, - 0x04, 0x2c, 0xc3, 0x3b, 0xa8, 0x34, 0xb0, 0x1b, 0x20, 0x22, 0xcf, 0x37, 0xad, 0x32, 0xc9, 0x00, - 0x80, 0x80, 0x09, 0xc1, 0x4d, 0xa3, 0x0a, 0x04, 0x8c, 0x13, 0xbb, 0x16, 0x0b, 0x00, 0xb0, 0x41, - 0x8a, 0x12, 0xd1, 0x59, 0xbb, 0x15, 0x09, 0x38, 0xf9, 0x30, 0xb8, 0x49, 0xc1, 0x48, 0xa8, 0x82, - 0x2b, 0xf1, 0x08, 0x51, 0xb1, 0x9b, 0x41, 0xb8, 0x41, 0x9a, 0x23, 0xba, 0x30, 0xc9, 0x38, 0x98, - 0x22, 0x1a, 0xe9, 0x3b, 0x86, 0x21, 0x8b, 0x81, 0x00, 0xa0, 0xaf, 0x35, 0xca, 0x51, 0xc8, 0x20, - 0xb9, 0x44, 0xad, 0x13, 0x1a, 0xa1, 0x0d, 0x13, 0x9a, 0x32, 0x9b, 0x82, 0x0c, 0x90, 0x06, 0x2e, - 0x93, 0x2a, 0xc8, 0x09, 0x60, 0x98, 0x03, 0xb8, 0x8a, 0x28, 0x14, 0xaa, 0x84, 0x7b, 0xc2, 0x9a, - 0x38, 0xd0, 0x32, 0xaa, 0x09, 0x85, 0x8e, 0x03, 0x3a, 0xf4, 0x38, 0x90, 0xa8, 0x32, 0x8b, 0x12, - 0xb8, 0x80, 0x11, 0x5c, 0xcf, 0x26, 0xaa, 0x08, 0x03, 0x9b, 0x80, 0x51, 0xd2, 0x1b, 0x84, 0x19, - 0x89, 0x91, 0x59, 0xc8, 0x10, 0x18, 0xd1, 0x18, 0x40, 0xb2, 0x1c, 0x84, 0x09, 0x99, 0x29, 0xd4, - 0x5b, 0x91, 0x88, 0xb0, 0x21, 0x02, 0x9f, 0xa7, 0x4a, 0xb2, 0x8a, 0x04, 0x1b, 0xa5, 0x1b, 0x84, - 0x0a, 0x11, 0xb8, 0x08, 0x4a, 0xb1, 0xa0, 0x50, 0xea, 0x52, 0xc8, 0x38, 0x91, 0x89, 0x28, 0x99, - 0x02, 0x9c, 0x27, 0xca, 0x29, 0x92, 0x19, 0x04, 0xa8, 0x0a, 0x00, 0x14, 0x8e, 0xa1, 0x58, 0xb8, - 0x53, 0xf9, 0x28, 0xa0, 0x40, 0xb1, 0x1a, 0xa8, 0x00, 0x25, 0x0a, 0xd2, 0x1b, 0x04, 0x9a, 0x60, - 0xa8, 0x11, 0x0c, 0x12, 0xcc, 0x58, 0x92, 0x09, 0x9a, 0x01, 0x10, 0x80, 0xb9, 0x79, 0xe2, 0x38, - 0x18, 0xc8, 0x49, 0x02, 0x91, 0x8e, 0x12, 0xb8, 0x58, 0xa1, 0x08, 0x9d, 0x32, 0xb4, 0x0c, 0x90, - 0x22, 0x29, 0xe0, 0x00, 0x0e, 0x84, 0x49, 0xb1, 0x0b, 0x01, 0x28, 0xc1, 0x2b, 0x08, 0x04, 0x30, - 0xbd, 0x13, 0x39, 0x07, 0xd9, 0x2b, 0x80, 0x22, 0xd3, 0x0e, 0x12, 0x8a, 0x04, 0xab, 0x12, 0x0d, - 0x07, 0x0b, 0x88, 0x08, 0x04, 0x89, 0xa8, 0x09, 0x33, 0xa9, 0xa0, 0x0e, 0x52, 0xa1, 0x0c, 0xa2, - 0x2c, 0x05, 0x09, 0xb2, 0x2d, 0x84, 0x8b, 0x33, 0xaf, 0x21, 0x91, 0x20, 0x8f, 0x92, 0x21, 0x08, - 0xaa, 0x02, 0x2b, 0x96, 0x0d, 0x93, 0xad, 0x61, 0x90, 0x90, 0x18, 0x0b, 0x84, 0x98, 0x12, 0x0d, - 0x12, 0xc0, 0x3a, 0xb2, 0x73, 0x99, 0x93, 0x9f, 0x02, 0x92, 0x4a, 0xb1, 0x9c, 0x44, 0xd8, 0x28, - 0x00, 0x90, 0x1b, 0x05, 0xcb, 0x18, 0x32, 0xb5, 0x1e, 0xa1, 0x39, 0x85, 0x8b, 0x01, 0x8b, 0x04, - 0x10, 0xd8, 0x18, 0x81, 0x19, 0x20, 0xbb, 0xa4, 0x9c, 0x72, 0xb4, 0x0d, 0x03, 0x88, 0x88, 0x9a, - 0x15, 0x88, 0x09, 0xc3, 0x0d, 0x15, 0x8c, 0x95, 0x0b, 0x81, 0x51, 0xc9, 0x29, 0xa2, 0x3b, 0x95, - 0x2b, 0x91, 0x09, 0x82, 0x59, 0xe8, 0x48, 0x81, 0x9a, 0x91, 0x4a, 0xc3, 0x1c, 0x06, 0x8c, 0x11, - 0xa9, 0x42, 0xc9, 0x31, 0xca, 0x21, 0x99, 0x21, 0x8d, 0x04, 0x1a, 0xc3, 0x3b, 0x80, 0x02, 0xaa, - 0x68, 0xa0, 0x80, 0x21, 0x12, 0xdf, 0x21, 0x81, 0x88, 0xab, 0x02, 0x01, 0x38, 0xe0, 0x79, 0xd1, - 0x39, 0xc3, 0x1a, 0x80, 0x32, 0xcb, 0x08, 0x12, 0x0e, 0x97, 0x2b, 0x93, 0x0c, 0x05, 0x9a, 0x91, - 0x3b, 0x87, 0x8b, 0x92, 0x2a, 0x93, 0x1b, 0x97, 0x8b, 0x11, 0xb0, 0x20, 0xb0, 0x78, 0x80, 0x88, - 0x1a, 0x81, 0x1b, 0xf3, 0x51, 0xab, 0x11, 0xa0, 0x00, 0x19, 0x33, 0x9d, 0x86, 0x9c, 0x32, 0xd0, - 0x31, 0x98, 0x0d, 0x04, 0x9c, 0x85, 0x29, 0xaa, 0x94, 0x0a, 0x38, 0xb3, 0x1d, 0x85, 0x1d, 0xa3, - 0x0d, 0x03, 0x08, 0x91, 0x0c, 0xb2, 0x2b, 0x27, 0x9b, 0xa0, 0x40, 0x92, 0x11, 0xcb, 0x10, 0x4b, - 0x87, 0x8d, 0x82, 0x0a, 0x14, 0xb8, 0x5b, 0xd1, 0x30, 0xb8, 0x20, 0xaa, 0x10, 0x11, 0x02, 0xce, - 0x41, 0xb1, 0x38, 0xd3, 0x2c, 0x92, 0x90, 0x1a, 0x43, 0xd9, 0x50, 0xc0, 0x39, 0xb1, 0x31, 0xa9, - 0x08, 0x91, 0xdb, 0x52, 0xa1, 0x3b, 0xc1, 0x39, 0xf1, 0x58, 0xa8, 0x28, 0xb2, 0x3e, 0xb1, 0x20, - 0x91, 0x2b, 0x82, 0xcc, 0x37, 0xdb, 0x32, 0xba, 0x30, 0xb8, 0x42, 0xca, 0x31, 0x9d, 0x25, 0xc9, - 0x30, 0xb8, 0x01, 0x8c, 0x23, 0x88, 0x11, 0xca, 0x10, 0xa9, 0x26, 0x8c, 0xa0, 0x31, 0xbc, 0x07, - 0x0a, 0x81, 0x8a, 0x14, 0xbb, 0x41, 0xca, 0x40, 0x93, 0x09, 0x99, 0x39, 0xe2, 0x44, 0xbb, 0x59, - 0xb5, 0x2d, 0xa3, 0x1b, 0x85, 0x8a, 0x13, 0xac, 0x82, 0x09, 0x14, 0x9e, 0x02, 0x88, 0x08, 0x08, - 0x14, 0xda, 0x41, 0xa8, 0x08, 0x80, 0x28, 0xc2, 0x08, 0x21, 0x9f, 0x05, 0x9a, 0x10, 0x13, 0xbc, - 0x14, 0x0e, 0xa2, 0x59, 0xb0, 0x40, 0xd9, 0x31, 0xb0, 0x2c, 0xa4, 0x08, 0x21, 0x9e, 0x82, 0x20, - 0xa9, 0x18, 0x05, 0x9c, 0x12, 0x8c, 0x05, 0x0b, 0x81, 0x08, 0x80, 0x9b, 0x54, 0xbc, 0x36, 0xc9, - 0x10, 0x89, 0x91, 0x28, 0x82, 0x0c, 0x99, 0x23, 0xcc, 0x35, 0xac, 0x43, 0xda, 0x39, 0xa1, 0x21, - 0x8b, 0x31, 0xf0, 0x09, 0x04, 0x2a, 0xa1, 0x39, 0xfa, 0x51, 0xb0, 0x3a, 0xb2, 0x59, 0xb1, 0x19, - 0xc3, 0x5b, 0xb4, 0x2b, 0xd3, 0x1a, 0x31, 0xc2, 0x1a, 0x8a, 0x04, 0x19, 0xf1, 0x39, 0xb1, 0x00, - 0x52, 0xc8, 0x2b, 0xa4, 0x38, 0xa1, 0x1d, 0x00, 0x12, 0xad, 0x88, 0x25, 0xb0, 0x3a, 0xa5, 0x0e, - 0x82, 0x18, 0xa9, 0x42, 0xdc, 0x32, 0x90, 0x8a, 0x03, 0x29, 0xb8, 0x82, 0x9e, 0x61, 0xb1, 0x2c, - 0x85, 0x0b, 0xb0, 0x31, 0xa2, 0x2b, 0x12, 0x9c, 0x07, 0x0e, 0x91, 0x88, 0x43, 0xcb, 0x11, 0x29, - 0xb1, 0x70, 0xd8, 0x11, 0x88, 0x99, 0x00, 0x80, 0x30, 0x89, 0xa6, 0x4c, 0x98, 0x93, 0x9c, 0x15, - 0x9a, 0x10, 0x02, 0xcc, 0x12, 0x6b, 0xa2, 0x19, 0xd8, 0x39, 0x80, 0x14, 0xac, 0x21, 0x81, 0x99, - 0xf2, 0x2f, 0x84, 0x0a, 0x93, 0x1b, 0xc9, 0x52, 0x90, 0x88, 0x19, 0x98, 0x05, 0x8b, 0x81, 0x3b, - 0x07, 0x9a, 0x0b, 0x01, 0x33, 0x89, 0x92, 0xc0, 0xcf, 0x31, 0x85, 0x8c, 0x00, 0x12, 0x8a, 0xd0, - 0x48, 0x90, 0x88, 0x33, 0xdc, 0x31, 0xc9, 0x40, 0x99, 0x22, 0xea, 0x32, 0x8b, 0x98, 0x83, 0x32, - 0xac, 0x81, 0xf0, 0x4a, 0x23, 0xad, 0x85, 0x1c, 0x81, 0x00, 0x92, 0x1d, 0x92, 0x88, 0x01, 0x8c, - 0x22, 0x12, 0xa0, 0x8f, 0xb2, 0x2a, 0x08, 0x23, 0xbc, 0x03, 0x79, 0xa1, 0xfa, 0x21, 0x10, 0xc0, - 0x00, 0xa8, 0x7a, 0xa5, 0x29, 0xb9, 0x21, 0x80, 0xd2, 0x69, 0xd0, 0x48, 0xa0, 0x28, 0x9b, 0x01, - 0x43, 0xba, 0xa8, 0x58, 0xa2, 0x68, 0xda, 0x08, 0x40, 0x90, 0x00, 0xb1, 0x0d, 0x31, 0xa2, 0xf2, - 0x3a, 0x00, 0x99, 0x05, 0x0c, 0xa3, 0x60, 0xa9, 0x08, 0x98, 0x11, 0x93, 0x1c, 0xba, 0x80, 0x17, - 0x0a, 0x23, 0xdb, 0x21, 0xdb, 0x04, 0x9b, 0x43, 0xa8, 0xa2, 0x3d, 0xe1, 0x30, 0x18, 0xb1, 0x2b, - 0xf9, 0x24, 0x1a, 0xa0, 0x01, 0xb0, 0x71, 0xaa, 0x82, 0x0c, 0x33, 0xb9, 0x88, 0xa0, 0x48, 0x2b, - 0x87, 0x1b, 0x01, 0xd8, 0x31, 0x9a, 0x8a, 0x07, 0x8c, 0x94, 0x2d, 0x93, 0xca, 0x52, 0x90, 0x8a, - 0x21, 0xb0, 0x3b, 0xd4, 0x78, 0xa0, 0x09, 0x12, 0xad, 0x43, 0xb8, 0x01, 0x9b, 0x25, 0x9e, 0x94, - 0x49, 0x99, 0x02, 0xa9, 0x10, 0x29, 0xe1, 0x31, 0xba, 0x19, 0x22, 0x90, 0x9c, 0x03, 0x60, 0xc2, - 0x2c, 0xc1, 0x59, 0xa0, 0x28, 0x82, 0x99, 0x9d, 0x26, 0xba, 0x20, 0x81, 0x8a, 0x97, 0x2e, 0xa1, - 0x10, 0x80, 0x20, 0xc8, 0x19, 0x98, 0x22, 0x1a, 0xb1, 0x01, 0x8f, 0x02, 0x19, 0x82, 0x33, 0x8d, - 0xc9, 0x80, 0x2a, 0x27, 0x48, 0xdd, 0x22, 0x9a, 0x22, 0x09, 0xd8, 0x32, 0xd8, 0x18, 0x88, 0x88, - 0x45, 0xd8, 0x08, 0x8a, 0x13, 0xab, 0x74, 0xc8, 0x29, 0xc3, 0x28, 0xc0, 0x41, 0xb8, 0x11, 0xb9, - 0x4a, 0x85, 0x9a, 0x25, 0x9d, 0x93, 0x2a, 0x90, 0x18, 0x88, 0x02, 0x9c, 0x84, 0x0e, 0x03, 0x98, - 0x3a, 0xd1, 0x2a, 0x95, 0x00, 0x88, 0x0b, 0x07, 0x9a, 0x1a, 0x54, 0xea, 0x22, 0x99, 0x29, 0xc8, - 0x24, 0x9b, 0x00, 0xa1, 0x19, 0x81, 0x59, 0xf0, 0x40, 0xaa, 0x02, 0xa0, 0x59, 0x90, 0x0b, 0x96, - 0x3a, 0xa1, 0x19, 0xa2, 0x3d, 0x96, 0x1a, 0x80, 0x10, 0xf9, 0x48, 0xb0, 0x29, 0xa3, 0x29, 0x99, - 0x32, 0xf9, 0x40, 0xaa, 0x22, 0xf1, 0x38, 0xa0, 0x11, 0x9b, 0x14, 0xba, 0x29, 0x00, 0x22, 0xd9, - 0x71, 0xb8, 0x30, 0xf9, 0x41, 0xd0, 0x38, 0xb0, 0x3a, 0xa3, 0x1e, 0x94, 0x19, 0xb0, 0x69, 0xc1, - 0x39, 0xa2, 0x19, 0x99, 0x30, 0xa1, 0x2b, 0x97, 0x2b, 0x88, 0x18, 0xf1, 0x40, 0x98, 0x09, 0xa4, - 0x1a, 0x92, 0x01, 0x9f, 0x84, 0x18, 0x00, 0xda, 0x48, 0xc0, 0x20, 0x08, 0x38, 0xc9, 0x21, 0x91, - 0x1b, 0x5b, 0xa4, 0x90, 0x9c, 0x18, 0x62, 0xe1, 0x48, 0xc8, 0x21, 0xa9, 0x12, 0x83, 0x1d, 0xd8, - 0x32, 0xeb, 0x60, 0xa0, 0x89, 0x02, 0x08, 0xb1, 0x29, 0xb1, 0x49, 0x03, 0xcb, 0x41, 0xad, 0x04, - 0x22, 0xbd, 0x10, 0x12, 0xaa, 0x31, 0xa8, 0x8d, 0x27, 0x9a, 0x01, 0xc0, 0x1a, 0x37, 0xbc, 0x82, - 0x30, 0xe9, 0x30, 0x98, 0xa1, 0x30, 0xc8, 0x09, 0x02, 0x0f, 0x04, 0xa0, 0x2b, 0xb8, 0x35, 0xd9, - 0x28, 0x91, 0x19, 0xb3, 0x2a, 0x21, 0xea, 0x53, 0xc9, 0x48, 0xe2, 0x2a, 0x91, 0x02, 0x1a, 0xb2, - 0x3a, 0xd8, 0x11, 0x90, 0x70, 0xb9, 0x08, 0x34, 0xbc, 0x29, 0x15, 0xac, 0x23, 0x9d, 0x22, 0x0b, - 0xa1, 0x63, 0xb1, 0x9f, 0x23, 0xd9, 0x58, 0x91, 0x98, 0x90, 0x00, 0x80, 0x02, 0xa0, 0x8a, 0x54, - 0xab, 0x24, 0xca, 0x08, 0x13, 0x1b, 0xb8, 0x85, 0x1f, 0x06, 0x0c, 0x98, 0x03, 0x0d, 0x82, 0x98, - 0x90, 0x52, 0xba, 0x10, 0x90, 0x15, 0x8c, 0x92, 0x01, 0x8e, 0x25, 0xab, 0xa6, 0x4b, 0x91, 0x09, - 0x91, 0x08, 0x98, 0x40, 0xc1, 0x08, 0x21, 0x9d, 0x32, 0xf0, 0x4a, 0x91, 0x18, 0xa8, 0x92, 0x3c, - 0xc1, 0x33, 0xa9, 0x88, 0x89, 0x95, 0x2b, 0xc4, 0x7a, 0xa0, 0x08, 0x00, 0x9e, 0x33, 0xc2, 0x29, - 0xa9, 0x39, 0xa4, 0x21, 0x98, 0x1d, 0xd2, 0x20, 0x08, 0x0a, 0xf2, 0x70, 0xc8, 0x19, 0x22, 0xc0, - 0x29, 0x90, 0x19, 0xa2, 0x49, 0x94, 0x9d, 0x11, 0x12, 0x8b, 0x95, 0x1c, 0x23, 0xc9, 0x5b, 0xe2, - 0x38, 0x90, 0x19, 0xb8, 0x03, 0x3e, 0x90, 0x83, 0x9b, 0x18, 0x34, 0xd8, 0xb9, 0x53, 0x1c, 0xa3, - 0xaa, 0x59, 0x89, 0x33, 0x90, 0xcb, 0x98, 0x70, 0xb1, 0x04, 0xba, 0x3e, 0x96, 0x88, 0x9a, 0x04, - 0x29, 0xa9, 0x01, 0x8a, 0xa3, 0x3a, 0x47, 0xec, 0x28, 0x11, 0x88, 0xa1, 0x89, 0x4b, 0xa5, 0x09, - 0x3a, 0x86, 0xac, 0x53, 0xc0, 0x19, 0x29, 0xc2, 0x39, 0xc0, 0x29, 0x85, 0x0a, 0x08, 0x8a, 0x03, - 0x1e, 0x84, 0x0a, 0x00, 0xc0, 0x52, 0x89, 0xb8, 0x31, 0xc1, 0x39, 0x89, 0xb0, 0x04, 0x38, 0xaf, - 0x05, 0x19, 0xa9, 0x20, 0xda, 0x34, 0x9d, 0x02, 0x99, 0x48, 0x83, 0xc9, 0x3a, 0xb1, 0x38, 0x83, - 0x22, 0x2d, 0xdb, 0x07, 0x2b, 0xb3, 0x0c, 0x13, 0xaa, 0xd1, 0x7a, 0xb1, 0x29, 0x92, 0xba, 0x51, - 0xb8, 0x32, 0xba, 0x62, 0xd9, 0x31, 0xa9, 0x48, 0x93, 0x8c, 0x48, 0xe3, 0x2b, 0x84, 0x8c, 0x33, - 0x9e, 0x11, 0x90, 0x18, 0x09, 0x92, 0x8a, 0x22, 0xac, 0x86, 0x0d, 0x83, 0x29, 0xa4, 0xbb, 0x34, - 0x9c, 0x93, 0x50, 0xb9, 0x80, 0x21, 0x2c, 0xe4, 0x3a, 0x84, 0x9c, 0x01, 0x80, 0x88, 0x31, 0xa7, - 0x1c, 0x90, 0x00, 0x83, 0x8d, 0x41, 0xaa, 0x85, 0x8a, 0x18, 0xb9, 0x46, 0x99, 0xa0, 0x4c, 0xb1, - 0x21, 0x09, 0x88, 0x81, 0xa9, 0x49, 0x1a, 0xc5, 0x7b, 0x92, 0xab, 0x38, 0x91, 0x82, 0x09, 0x93, - 0x1e, 0x18, 0xf2, 0x40, 0x0a, 0x92, 0x11, 0xd9, 0x09, 0x32, 0xe0, 0x52, 0x9c, 0x83, 0x0a, 0xb1, - 0x71, 0xc9, 0x00, 0x12, 0x9d, 0x04, 0x99, 0x00, 0x08, 0x10, 0x89, 0xf1, 0x59, 0xa2, 0x1b, 0x03, - 0x88, 0xc1, 0x4c, 0x91, 0xb1, 0x30, 0x31, 0xfb, 0x80, 0x11, 0x09, 0x13, 0xbf, 0x17, 0xaa, 0x28, - 0xb8, 0x30, 0x91, 0xb0, 0x79, 0xc8, 0x10, 0x11, 0x98, 0x81, 0x3a, 0xf2, 0x1a, 0x04, 0x1a, 0x90, - 0x14, 0xad, 0x30, 0xd3, 0x40, 0x89, 0x9b, 0x14, 0x9b, 0x38, 0x04, 0xbd, 0x34, 0xab, 0x98, 0x24, - 0x1d, 0xa2, 0x02, 0xad, 0x71, 0xa0, 0x2c, 0x95, 0x0a, 0x08, 0x92, 0x5a, 0xa8, 0x91, 0x3c, 0x87, - 0x8d, 0x02, 0x00, 0x8b, 0x83, 0x19, 0x91, 0x90, 0x4c, 0xa3, 0x8c, 0x11, 0x85, 0x8b, 0x0a, 0x06, - 0x8b, 0x22, 0xa0, 0x89, 0xa0, 0x36, 0x9e, 0xb0, 0x71, 0xb0, 0x18, 0x18, 0xc0, 0x49, 0x09, 0x95, - 0x1d, 0x80, 0x10, 0x20, 0xbc, 0x23, 0x08, 0xd8, 0x68, 0xa0, 0x1a, 0x95, 0x0a, 0x81, 0x08, 0x92, - 0x9b, 0x68, 0xc1, 0x40, 0xdb, 0x32, 0x1a, 0xc1, 0x38, 0x93, 0x8e, 0x00, 0x21, 0x8b, 0xb4, 0x4a, - 0xa2, 0x99, 0x43, 0x98, 0xbb, 0x60, 0x92, 0xda, 0x48, 0xb3, 0x2d, 0x92, 0x48, 0xda, 0x81, 0x40, - 0x98, 0xd1, 0x79, 0xb2, 0x0b, 0x13, 0xa9, 0x30, 0x0b, 0x13, 0xd8, 0x9a, 0x43, 0x10, 0xce, 0x41, - 0x89, 0xa2, 0x2c, 0x01, 0xf3, 0x59, 0xa0, 0x08, 0x98, 0x49, 0x92, 0x09, 0xa8, 0x42, 0xbb, 0x34, - 0xa9, 0x09, 0x13, 0x2e, 0xc5, 0x0b, 0x22, 0x00, 0x1a, 0xf1, 0x28, 0xa8, 0x88, 0x15, 0x0d, 0x03, - 0x89, 0xc8, 0x3a, 0x91, 0x44, 0x9c, 0x81, 0xa0, 0x1a, 0x15, 0x98, 0x18, 0xa9, 0x75, 0xbb, 0x04, - 0x1b, 0x23, 0xcd, 0x32, 0xb9, 0x18, 0xc1, 0x50, 0xa0, 0x2a, 0x93, 0x0c, 0x92, 0x89, 0x27, 0x9e, - 0x20, 0x82, 0x9c, 0x32, 0xa0, 0x5a, 0x90, 0xaa, 0x32, 0x9e, 0x03, 0x00, 0x1c, 0x82, 0x91, 0x9d, - 0x23, 0x18, 0xa3, 0xbb, 0x1c, 0x16, 0x9b, 0x73, 0xf1, 0x20, 0x8a, 0x11, 0xa9, 0x92, 0x08, 0x29, - 0xf3, 0x4b, 0xc1, 0x28, 0x81, 0x10, 0xc8, 0x4c, 0xe3, 0x49, 0x98, 0x01, 0x01, 0x8e, 0x94, 0x28, - 0xa9, 0x32, 0xb9, 0x5b, 0xb3, 0x2d, 0x92, 0x88, 0x18, 0x93, 0x1e, 0xd0, 0x28, 0x11, 0xe0, 0x31, - 0xab, 0x21, 0x11, 0xba, 0x09, 0x78, 0xc4, 0x18, 0x0b, 0x04, 0xda, 0x53, 0xb8, 0x11, 0xac, 0x30, - 0x95, 0x8c, 0x22, 0x09, 0xd0, 0x28, 0x91, 0x58, 0xc0, 0x38, 0xc8, 0x28, 0xa2, 0x5c, 0xb2, 0x0a, - 0x12, 0xc9, 0x40, 0x88, 0xa1, 0x68, 0xc1, 0x0b, 0x82, 0x38, 0x00, 0xaa, 0x09, 0x04, 0x0b, 0x63, - 0xaa, 0x94, 0xcc, 0x70, 0xc1, 0x28, 0x98, 0x18, 0x82, 0x2b, 0xa1, 0x09, 0x11, 0x71, 0xf8, 0x4a, - 0x80, 0x18, 0xca, 0x50, 0x81, 0x0c, 0x93, 0x28, 0xd9, 0x58, 0xa0, 0x18, 0x9a, 0x42, 0xc1, 0x18, - 0x80, 0x2a, 0xa1, 0x8b, 0x26, 0xbb, 0x18, 0x26, 0xac, 0x20, 0xa1, 0x88, 0x2b, 0x44, 0xf1, 0x5a, - 0x09, 0xa3, 0x8d, 0x41, 0x80, 0x98, 0xa9, 0x52, 0xb8, 0x29, 0xa6, 0x1a, 0xa9, 0x23, 0x89, 0xa9, - 0x80, 0x37, 0xad, 0x82, 0x2b, 0x05, 0xaa, 0x34, 0xd9, 0x39, 0x98, 0x04, 0xa8, 0x3d, 0x92, 0x0a, - 0xb0, 0x43, 0x3b, 0xe0, 0x20, 0xb1, 0x1d, 0x51, 0xd0, 0x00, 0x0b, 0x03, 0xa1, 0x1e, 0x95, 0x1b, - 0x81, 0x95, 0x0c, 0x91, 0x11, 0x08, 0xb8, 0x34, 0x8d, 0x01, 0x89, 0x12, 0x9b, 0x6a, 0xe2, 0x21, - 0x9e, 0x13, 0xa9, 0x20, 0xa8, 0x39, 0x83, 0xb1, 0x7c, 0xc3, 0x1b, 0x21, 0xd8, 0x49, 0x90, 0x81, - 0x89, 0x33, 0x9d, 0x90, 0x34, 0x9e, 0x21, 0x88, 0xac, 0x24, 0xa9, 0x01, 0x3b, 0xd3, 0x80, 0x3a, - 0x90, 0xf3, 0x7a, 0xa3, 0x8c, 0x24, 0xbb, 0x62, 0xb9, 0x11, 0x09, 0xa2, 0x1a, 0x88, 0x81, 0x31, - 0xeb, 0x03, 0x8f, 0x23, 0xda, 0x33, 0x9c, 0x02, 0x01, 0x1f, 0xa2, 0x09, 0x68, 0xa1, 0x99, 0x2b, - 0x97, 0x3a, 0x91, 0x9a, 0x32, 0xb9, 0x40, 0xaa, 0x15, 0x0b, 0x09, 0xb5, 0x2d, 0xc2, 0x5a, 0x92, - 0x0a, 0x91, 0x0b, 0x07, 0x0a, 0xa2, 0x0e, 0x05, 0x8c, 0x12, 0x8a, 0x92, 0x19, 0x91, 0x89, 0x4c, - 0xd0, 0x52, 0xa9, 0x20, 0x8a, 0x91, 0x30, 0x2b, 0xa5, 0x29, 0x8a, 0xb2, 0xbc, 0x62, 0x21, 0xc8, - 0x4a, 0xd2, 0x09, 0x20, 0x31, 0xfb, 0x38, 0x00, 0x0b, 0xc6, 0x5c, 0xa2, 0x29, 0xd8, 0x30, 0xa8, - 0x20, 0xb2, 0x4b, 0xc1, 0x09, 0x05, 0x8c, 0x02, 0x80, 0x10, 0xaa, 0x23, 0xdb, 0x69, 0x92, 0x9a, - 0x88, 0x33, 0xab, 0x30, 0xf0, 0x79, 0xb0, 0x18, 0x28, 0xc8, 0x34, 0xda, 0x30, 0x89, 0x11, 0xe0, - 0x3a, 0xc1, 0x30, 0xb1, 0x3c, 0xb2, 0x1c, 0x91, 0x64, 0x9b, 0x80, 0x12, 0x0e, 0x95, 0x1b, 0x94, - 0x09, 0x09, 0x94, 0x8a, 0x19, 0x15, 0x9c, 0x02, 0xac, 0x25, 0xa9, 0x11, 0x8c, 0x06, 0x9c, 0x12, - 0xa1, 0x1a, 0x82, 0x10, 0xab, 0x98, 0x35, 0xa8, 0x12, 0x8e, 0x84, 0x2a, 0x09, 0xf4, 0x28, 0x98, - 0x4b, 0xc2, 0x18, 0x08, 0x20, 0xf1, 0x40, 0xca, 0x32, 0xb1, 0x2d, 0xa3, 0x2a, 0xa4, 0x2e, 0x82, - 0xba, 0x45, 0x8c, 0x82, 0x1a, 0x88, 0x11, 0xc8, 0x28, 0x01, 0xb9, 0x24, 0x0e, 0x91, 0xa8, 0x22, - 0x9a, 0x06, 0xaa, 0x39, 0xa3, 0xac, 0x37, 0x8b, 0xa1, 0x0b, 0x16, 0x2b, 0xc4, 0x28, 0x9a, 0x08, - 0x00, 0x93, 0x4d, 0xf1, 0x3a, 0x93, 0x19, 0x09, 0xb0, 0x80, 0x73, 0xc9, 0x38, 0x98, 0x20, 0xf3, - 0x6b, 0xb8, 0x21, 0x00, 0x9a, 0x11, 0x9a, 0x22, 0x0b, 0xd4, 0x4c, 0x81, 0x82, 0x2a, 0xd8, 0x38, - 0x91, 0x7a, 0xe2, 0x2b, 0x83, 0x90, 0x2b, 0x92, 0x18, 0xc1, 0x1c, 0x16, 0xbc, 0x43, 0x89, 0x98, - 0x81, 0x29, 0x20, 0xf0, 0x5a, 0xa8, 0x40, 0xb8, 0x88, 0x71, 0xb8, 0x92, 0x5a, 0xc0, 0x32, 0xac, - 0x32, 0x9b, 0xb2, 0x41, 0x0d, 0xa4, 0x0a, 0x28, 0x93, 0x8a, 0x94, 0x0e, 0x23, 0x9a, 0x13, 0xbb, - 0xb9, 0x73, 0xa0, 0x21, 0x80, 0xb8, 0x40, 0xae, 0xa3, 0x59, 0x2b, 0xa7, 0x0b, 0x81, 0x89, 0x41, - 0xe3, 0x2a, 0x04, 0xab, 0x48, 0xd1, 0x30, 0xa0, 0x39, 0xc1, 0x89, 0x39, 0xb3, 0x44, 0xfb, 0x39, - 0xb0, 0x83, 0x2c, 0xc2, 0x40, 0x90, 0x88, 0x1c, 0xa1, 0x34, 0x19, 0xf8, 0x5a, 0x98, 0x01, 0x98, - 0x12, 0xb8, 0x28, 0x84, 0xfa, 0x38, 0x38, 0xb1, 0x04, 0xaf, 0x31, 0xc8, 0x20, 0x01, 0x99, 0x80, - 0x1e, 0x84, 0x99, 0x38, 0xa3, 0x1f, 0x92, 0xb9, 0x53, 0x2b, 0xb4, 0x29, 0x1c, 0xc4, 0x30, 0x9a, - 0x22, 0xb0, 0x82, 0x9e, 0x40, 0xd8, 0x30, 0x91, 0x9a, 0x18, 0x81, 0xb9, 0x47, 0x8c, 0x32, 0xf8, - 0x09, 0x20, 0x99, 0x49, 0xb5, 0x29, 0xc8, 0x58, 0xd2, 0x28, 0x88, 0x80, 0x08, 0x9a, 0x23, 0x0b, - 0x12, 0x05, 0xdb, 0x2d, 0x93, 0x13, 0x1c, 0xa2, 0xb0, 0x4d, 0xb0, 0x18, 0x10, 0x22, 0x95, 0xaf, - 0x11, 0x9a, 0x33, 0xf2, 0x29, 0x9a, 0x12, 0x91, 0x38, 0x28, 0xf9, 0x60, 0xd0, 0x28, 0x98, 0x58, - 0xa2, 0x10, 0xab, 0x08, 0x01, 0x10, 0x01, 0x8e, 0x96, 0x0e, 0x82, 0x88, 0x88, 0x32, 0x9a, 0xb5, - 0x1e, 0x83, 0x09, 0x11, 0x88, 0x0b, 0x95, 0x1f, 0x93, 0x8a, 0x01, 0x01, 0x18, 0x9f, 0x82, 0x41, - 0x9b, 0x96, 0x8a, 0x08, 0x18, 0x83, 0x3d, 0xd2, 0xa0, 0x79, 0xb1, 0x19, 0x83, 0x29, 0xd1, 0x19, - 0x10, 0xb8, 0x38, 0xa0, 0x20, 0x19, 0xd5, 0x2a, 0xbc, 0x52, 0x14, 0xad, 0x31, 0xfa, 0x21, 0x98, - 0x11, 0x19, 0xb3, 0x0e, 0xa2, 0x30, 0x2b, 0x97, 0x2b, 0xa1, 0x2b, 0xa2, 0x59, 0x94, 0x8d, 0x03, - 0xca, 0x41, 0xc9, 0x41, 0xb8, 0x29, 0x90, 0x28, 0x89, 0x27, 0xaa, 0x11, 0x9f, 0x84, 0x28, 0xbb, - 0x27, 0x9b, 0x92, 0x29, 0x90, 0x19, 0x8a, 0x16, 0x8a, 0xa8, 0x31, 0xca, 0x52, 0xbb, 0x15, 0x8d, - 0x32, 0xb8, 0x08, 0x05, 0x9d, 0x12, 0x98, 0x0a, 0x33, 0xd0, 0x39, 0xb1, 0x0e, 0x84, 0x2a, 0x81, - 0x8a, 0x42, 0xf0, 0x4b, 0xd2, 0x39, 0x11, 0xc8, 0x20, 0xab, 0x23, 0x00, 0x81, 0x20, 0xfb, 0x40, - 0x9c, 0x04, 0x89, 0x98, 0x03, 0x8f, 0x82, 0x80, 0x88, 0x40, 0xa8, 0x08, 0x8e, 0x03, 0x1c, 0x87, - 0x1a, 0x10, 0x99, 0xa9, 0x79, 0xa3, 0x1d, 0x04, 0xab, 0x02, 0xa0, 0x7b, 0x92, 0x19, 0x89, 0x00, - 0xbb, 0x17, 0x8a, 0x02, 0xbb, 0x30, 0x80, 0x1c, 0x94, 0x49, 0xd3, 0x28, 0x8a, 0xa0, 0x78, 0xb3, - 0x2c, 0x92, 0xca, 0x60, 0x98, 0x81, 0x29, 0xb4, 0x7b, 0xc0, 0x08, 0x01, 0x09, 0x03, 0xca, 0x38, - 0xaa, 0x04, 0x28, 0xc8, 0x88, 0xa2, 0x7d, 0xb1, 0x18, 0x42, 0xac, 0x23, 0xdc, 0x30, 0x08, 0x91, - 0x01, 0x0c, 0xa1, 0x14, 0x8d, 0x12, 0xb8, 0x24, 0x9f, 0x02, 0x88, 0x10, 0x99, 0x42, 0xa8, 0xaa, - 0x78, 0xa1, 0x19, 0x12, 0xcc, 0x42, 0xf8, 0x5a, 0xa1, 0x18, 0x08, 0xa1, 0x09, 0x92, 0x4a, 0xb8, - 0x14, 0x09, 0xa9, 0x62, 0xcb, 0x33, 0x98, 0x91, 0x9e, 0x91, 0x71, 0xa0, 0x80, 0x10, 0xe8, 0x20, - 0x99, 0x11, 0x10, 0xd2, 0x59, 0xb0, 0x1a, 0x82, 0x3b, 0x06, 0xc9, 0x22, 0xbd, 0x24, 0x9a, 0x23, - 0xa9, 0x82, 0xdb, 0x3a, 0x88, 0x47, 0x8c, 0x02, 0xea, 0x30, 0x08, 0x99, 0x13, 0x9b, 0x14, 0x99, - 0xaa, 0x71, 0x80, 0x81, 0x8d, 0x91, 0x30, 0xb0, 0x71, 0xda, 0x13, 0xab, 0x31, 0xc9, 0x40, 0x83, - 0x0e, 0xa2, 0x00, 0x08, 0x48, 0xc9, 0x14, 0xab, 0x81, 0x84, 0x0f, 0x02, 0xa1, 0x19, 0x81, 0x8d, - 0x92, 0x83, 0x2c, 0x32, 0xbc, 0x05, 0x8c, 0x80, 0x30, 0x83, 0xbb, 0x70, 0xd0, 0x08, 0x15, 0xaa, - 0x29, 0xc2, 0x32, 0xbc, 0x02, 0x3d, 0x95, 0x8b, 0x80, 0xd1, 0x58, 0x81, 0x20, 0xbc, 0x14, 0xab, - 0x42, 0x9a, 0x24, 0x98, 0x8a, 0xc1, 0x3a, 0xc9, 0x45, 0x90, 0xab, 0x84, 0x8b, 0x24, 0xa8, 0x90, - 0x2a, 0xd2, 0x3b, 0xf8, 0x22, 0x13, 0xab, 0x19, 0xf1, 0x4b, 0x05, 0x99, 0x11, 0xbb, 0x02, 0x1b, - 0x63, 0xda, 0x24, 0x8c, 0x00, 0x98, 0x11, 0x98, 0x19, 0x9a, 0x16, 0xba, 0x5b, 0xa4, 0x8c, 0x25, - 0x88, 0xa9, 0x92, 0x0f, 0x84, 0x08, 0x10, 0xb9, 0x28, 0xd1, 0x40, 0xb8, 0x38, 0x03, 0xb9, 0x2b, - 0xbb, 0x37, 0x02, 0xcc, 0x18, 0xa3, 0x9e, 0x44, 0xd1, 0x2a, 0xb3, 0x3b, 0xa2, 0x3b, 0x17, 0xaa, - 0x08, 0x91, 0x8d, 0x32, 0x22, 0xf1, 0x3b, 0xb2, 0x29, 0x09, 0x97, 0x9a, 0x34, 0xba, 0x80, 0x80, - 0x2c, 0x17, 0x8b, 0xb1, 0x49, 0xd0, 0x31, 0x8c, 0x05, 0x9a, 0x91, 0x19, 0x99, 0x05, 0x29, 0xb3, - 0x1d, 0x92, 0x98, 0x7b, 0xd2, 0x18, 0x12, 0x9b, 0x08, 0x03, 0xad, 0x23, 0xa9, 0x1a, 0xc3, 0x44, - 0x9f, 0x12, 0x18, 0x98, 0x08, 0x89, 0x08, 0x5b, 0xa4, 0x8a, 0x32, 0x9d, 0xa3, 0x3e, 0x33, 0xfa, - 0x30, 0xb8, 0x10, 0x5b, 0xb4, 0x5b, 0xa1, 0x18, 0x9c, 0x80, 0x42, 0xc0, 0x28, 0xa2, 0x8a, 0x8a, - 0x87, 0x2b, 0x99, 0x85, 0xa9, 0x30, 0x01, 0x02, 0x39, 0xfa, 0x0d, 0x93, 0x3a, 0x06, 0x09, 0x1a, - 0xf2, 0x38, 0x91, 0x0b, 0x90, 0x49, 0x94, 0x8a, 0x8f, 0x02, 0x00, 0x20, 0xa9, 0x0d, 0x85, 0x3b, - 0xa4, 0x2b, 0xb2, 0x58, 0xb8, 0x81, 0x9a, 0x42, 0x00, 0xdc, 0x26, 0xbb, 0x23, 0x9a, 0x04, 0xac, - 0x70, 0xb2, 0x8a, 0xa0, 0x51, 0x99, 0x12, 0x99, 0xa8, 0x60, 0x81, 0xab, 0x89, 0x68, 0xc0, 0x21, - 0xf9, 0x78, 0x90, 0x19, 0x90, 0x88, 0x58, 0xb1, 0x29, 0x99, 0x08, 0x20, 0xd2, 0x39, 0xc0, 0x29, - 0x11, 0xd8, 0x38, 0xc0, 0x25, 0xcc, 0x11, 0x21, 0x98, 0x8a, 0x00, 0x98, 0x91, 0x72, 0x90, 0x9d, - 0x23, 0x9a, 0x35, 0x9d, 0x91, 0x32, 0xcb, 0x15, 0x9b, 0x09, 0x53, 0x90, 0xbd, 0x11, 0x40, 0x91, - 0x0f, 0x93, 0x99, 0x30, 0xa3, 0x0e, 0x83, 0x2c, 0x85, 0xa9, 0x18, 0x82, 0x4a, 0xe0, 0x49, 0xb0, - 0x20, 0x98, 0x91, 0x3a, 0xa3, 0x1a, 0x98, 0xfb, 0x70, 0xc3, 0x8a, 0x83, 0x9d, 0x32, 0xa0, 0x81, - 0x4b, 0xc1, 0x31, 0xb0, 0x99, 0x51, 0xa2, 0x0f, 0xc2, 0x12, 0x2c, 0xb3, 0x8b, 0x81, 0x59, 0x90, - 0x02, 0x9f, 0x20, 0x13, 0xa9, 0x29, 0xd8, 0x50, 0xa2, 0x0a, 0xb1, 0x1f, 0x86, 0x19, 0xa8, 0xa2, - 0x70, 0xb9, 0x38, 0xb2, 0x2a, 0x38, 0xb4, 0x1b, 0x89, 0xa1, 0x54, 0xdb, 0x28, 0x93, 0x9a, 0x71, - 0xa9, 0x28, 0xa4, 0x32, 0x8f, 0xa1, 0x19, 0x85, 0x1a, 0xb8, 0x07, 0x0b, 0x92, 0x01, 0xea, 0x31, - 0xa8, 0x39, 0x91, 0xba, 0x36, 0xda, 0x29, 0xb1, 0x03, 0x1a, 0x00, 0x90, 0x29, 0x06, 0xbd, 0x02, - 0x38, 0x06, 0xb9, 0x10, 0xad, 0x06, 0x4b, 0x82, 0xcb, 0x11, 0x10, 0x9c, 0x82, 0x50, 0x90, 0x9d, - 0xa1, 0x62, 0x98, 0x08, 0x83, 0x9e, 0x30, 0x90, 0x03, 0xad, 0x34, 0xac, 0x22, 0x8c, 0x83, 0x90, - 0x4a, 0x99, 0x11, 0xc1, 0x51, 0xba, 0x24, 0x30, 0x9c, 0xe1, 0x1a, 0x13, 0x99, 0x0d, 0x85, 0x89, - 0x11, 0xca, 0x23, 0x18, 0x18, 0xcc, 0xa1, 0x3f, 0x94, 0x3b, 0xa3, 0x31, 0xaf, 0x13, 0xc8, 0x40, - 0x90, 0x2b, 0xb5, 0x2d, 0x95, 0x1a, 0xa3, 0x1b, 0x01, 0xab, 0x44, 0xa8, 0x10, 0x8c, 0x04, 0x8d, - 0x83, 0x8b, 0x14, 0x9c, 0x02, 0x91, 0x2b, 0xb1, 0x60, 0xa8, 0x13, 0xbd, 0x12, 0x0c, 0xc0, 0x52, - 0x80, 0x98, 0x59, 0xa9, 0x81, 0x83, 0x51, 0xab, 0xf3, 0x40, 0x09, 0xd9, 0x21, 0x1b, 0x93, 0x89, - 0x89, 0x01, 0x40, 0xb2, 0x99, 0x8b, 0x23, 0xdf, 0x07, 0x8c, 0x84, 0x9a, 0x52, 0xc9, 0x01, 0x10, - 0x80, 0x99, 0x01, 0xac, 0x23, 0x19, 0x17, 0xb8, 0x39, 0xc9, 0x13, 0x0c, 0x83, 0x99, 0x24, 0xac, - 0x03, 0xa9, 0x61, 0xb8, 0x29, 0x11, 0xd8, 0x20, 0xfb, 0x09, 0x82, 0x32, 0xd9, 0x2a, 0x35, 0xbd, - 0x23, 0xb2, 0x1b, 0x1c, 0x05, 0xb3, 0x5d, 0xa1, 0x18, 0x89, 0x23, 0xb9, 0xa5, 0x1f, 0x92, 0x0b, - 0x32, 0xe1, 0x49, 0xb9, 0x12, 0xbb, 0x07, 0x08, 0xaa, 0x00, 0x8b, 0x27, 0x1b, 0xa2, 0x08, 0xb9, - 0x50, 0xa0, 0x34, 0xba, 0x09, 0x8f, 0x03, 0xa3, 0x3c, 0xc2, 0x2a, 0xc8, 0x43, 0x0b, 0x82, 0xe8, - 0x40, 0xb9, 0x39, 0xa7, 0x29, 0x99, 0x83, 0x3c, 0xc1, 0x39, 0x14, 0xac, 0x13, 0xe8, 0x72, 0x9a, - 0x00, 0x88, 0x01, 0x39, 0xa8, 0xd1, 0x1a, 0x82, 0x79, 0xd1, 0x48, 0xb9, 0x30, 0xc8, 0x11, 0x20, - 0xd1, 0x38, 0xa1, 0x90, 0x58, 0xb1, 0x8b, 0x83, 0x29, 0x32, 0xac, 0xda, 0x29, 0x47, 0x8b, 0x18, - 0xf0, 0x39, 0xa1, 0x88, 0x80, 0x81, 0x2a, 0x86, 0x89, 0x9a, 0x22, 0x00, 0x07, 0xaf, 0x03, 0x08, - 0x21, 0xa9, 0x0d, 0x05, 0x19, 0xa8, 0x38, 0xf9, 0x22, 0x0d, 0x02, 0xa9, 0x22, 0x9b, 0x18, 0xa5, - 0x3c, 0xa5, 0x0c, 0x02, 0x9a, 0x48, 0xa1, 0x11, 0x2d, 0x84, 0x9a, 0xe1, 0x29, 0x40, 0x02, 0x89, - 0xd1, 0x2a, 0xb8, 0x49, 0x25, 0xbc, 0x23, 0x8d, 0x93, 0x18, 0x8a, 0x72, 0xc1, 0x08, 0x90, 0x98, - 0x48, 0xb9, 0x73, 0xb9, 0x28, 0x18, 0x91, 0x42, 0xbd, 0x05, 0x8c, 0x83, 0x2a, 0xb2, 0x49, 0xab, - 0x04, 0xb8, 0x89, 0x36, 0x9e, 0x43, 0x9b, 0x01, 0xb1, 0x0c, 0x28, 0x01, 0x24, 0xbc, 0x19, 0x07, - 0x9b, 0x21, 0x90, 0x90, 0xb4, 0x3e, 0xb1, 0x88, 0x21, 0x91, 0xa9, 0xbf, 0x47, 0xb8, 0x19, 0x80, - 0x08, 0x21, 0xbc, 0x83, 0x59, 0x84, 0x19, 0xfa, 0x1a, 0x01, 0x20, 0x88, 0x90, 0x59, 0xb0, 0x91, - 0x8b, 0x32, 0x17, 0xcd, 0x40, 0xa0, 0x08, 0x21, 0xb9, 0x02, 0x0c, 0x38, 0x97, 0xab, 0x14, 0x1b, - 0x82, 0x89, 0x80, 0x20, 0x31, 0xfa, 0x7a, 0xb8, 0x51, 0xa8, 0x20, 0xa9, 0x8a, 0x27, 0x0a, 0xfa, - 0x40, 0x88, 0x08, 0x81, 0xbb, 0x48, 0x91, 0x11, 0x89, 0x08, 0x38, 0x17, 0x8f, 0x01, 0x89, 0x41, - 0xb8, 0x30, 0xbc, 0x25, 0xa9, 0x18, 0x00, 0xe0, 0x11, 0x38, 0xe2, 0x18, 0xba, 0x42, 0x1c, 0xd3, - 0x29, 0x88, 0x80, 0x89, 0x23, 0xe8, 0x29, 0x20, 0xc0, 0x72, 0x98, 0xb8, 0x5b, 0x92, 0x21, 0xa1, - 0xce, 0x28, 0x02, 0x10, 0xbb, 0x84, 0x0a, 0x24, 0x9b, 0x17, 0xbc, 0x20, 0x20, 0x89, 0x0a, 0x47, - 0xac, 0x21, 0x91, 0x8b, 0x32, 0xb8, 0xab, 0x21, 0x43, 0xdb, 0x02, 0x0d, 0xa1, 0x71, 0x81, 0xb8, - 0x8b, 0x42, 0x20, 0xa9, 0xa9, 0x87, 0x2c, 0x21, 0xe3, 0x5b, 0x80, 0x01, 0xa9, 0x0b, 0x32, 0x0a, - 0x86, 0x9b, 0x89, 0x31, 0xf2, 0x31, 0x9d, 0xb2, 0x69, 0x84, 0xbb, 0x20, 0x91, 0x39, 0xfa, 0x48, - 0xc2, 0x20, 0xb8, 0x79, 0xb8, 0x30, 0xa2, 0xb8, 0x48, 0x29, 0xb3, 0x68, 0xc9, 0x1a, 0x81, 0x01, - 0x90, 0x7b, 0xc0, 0x81, 0x8c, 0x08, 0x33, 0x99, 0x14, 0x1a, 0xf2, 0x2b, 0x22, 0xc4, 0x1c, 0x95, - 0x0c, 0x81, 0x80, 0x48, 0xa9, 0x51, 0xb1, 0x38, 0xcc, 0x41, 0x98, 0x98, 0x20, 0xc1, 0x2a, 0x08, - 0x02, 0x09, 0x31, 0x12, 0xff, 0x30, 0x0b, 0x25, 0xc9, 0x38, 0xb9, 0x10, 0x82, 0x20, 0xf9, 0x60, - 0xb1, 0x9b, 0x14, 0x0b, 0x13, 0x3a, 0xea, 0x01, 0x20, 0x98, 0xa2, 0x20, 0x20, 0xc1, 0xb9, 0xff, - 0x51, 0x80, 0x10, 0xcb, 0x18, 0x10, 0x91, 0x30, 0xfb, 0x30, 0x00, 0xc0, 0x18, 0x59, 0xa0, 0x11, - 0x9c, 0x50, 0xc0, 0x09, 0x22, 0xa9, 0x19, 0x82, 0xb8, 0x4c, 0x89, 0x55, 0xc8, 0x49, 0xa8, 0x90, - 0x1c, 0xa2, 0x31, 0x9e, 0x14, 0x9d, 0x12, 0x09, 0x23, 0x08, 0xaa, 0x40, 0xf9, 0x88, 0x52, 0x98, - 0xa0, 0x49, 0xd9, 0x10, 0x22, 0x98, 0x2b, 0x94, 0x8c, 0x12, 0x8c, 0x33, 0xf0, 0x48, 0xb8, 0x08, - 0x10, 0x25, 0x9f, 0x01, 0x00, 0x1c, 0xa2, 0x39, 0x92, 0x3a, 0xe2, 0x5b, 0x81, 0x08, 0x80, 0x89, - 0xb9, 0x20, 0xa0, 0x75, 0xb8, 0x68, 0xa0, 0xbb, 0x62, 0x98, 0x11, 0xaa, 0x18, 0x01, 0x90, 0x35, - 0xdc, 0x08, 0x48, 0x84, 0x8c, 0x01, 0x98, 0x11, 0x8a, 0x11, 0xe0, 0x29, 0x08, 0x84, 0xfc, 0x40, - 0x82, 0x0c, 0x91, 0x28, 0xa9, 0x20, 0x89, 0x99, 0x98, 0x61, 0xa1, 0x0e, 0x85, 0x1a, 0x91, 0x9c, - 0x16, 0x89, 0x20, 0xa1, 0x9c, 0x32, 0x9a, 0x08, 0x87, 0x09, 0x10, 0xbc, 0x73, 0xc8, 0x30, 0xb8, - 0x19, 0x99, 0x4b, 0x07, 0x99, 0x01, 0x8b, 0x82, 0x98, 0x01, 0x23, 0xcb, 0x0b, 0x17, 0x99, 0x22, - 0xa0, 0x78, 0xe9, 0x29, 0x23, 0xa8, 0x00, 0x80, 0xae, 0x21, 0x93, 0x2a, 0xe3, 0x3a, 0x94, 0xbc, - 0x33, 0x9b, 0x05, 0x2a, 0x05, 0xaf, 0x11, 0x10, 0x91, 0x99, 0x38, 0x90, 0xb9, 0x19, 0x86, 0x0e, - 0x15, 0xbb, 0x81, 0x3c, 0x05, 0x90, 0x99, 0x29, 0x91, 0xa3, 0xaf, 0x42, 0x8a, 0x23, 0xbb, 0x92, - 0x99, 0x79, 0x12, 0x89, 0xa0, 0x78, 0xc1, 0x0a, 0x30, 0xa9, 0x43, 0xfb, 0x3b, 0x04, 0x11, 0xae, - 0x11, 0x01, 0x0c, 0x04, 0x9c, 0x21, 0x80, 0x23, 0xa2, 0xdf, 0x11, 0x00, 0x81, 0x08, 0x1b, 0x81, - 0xc3, 0x0b, 0x59, 0xd2, 0x18, 0x42, 0xa8, 0x9c, 0x51, 0xa3, 0x8e, 0x02, 0x8a, 0x13, 0x09, 0x24, - 0xcc, 0x8a, 0x33, 0x38, 0xb4, 0x9d, 0x32, 0xc9, 0x0a, 0x98, 0x07, 0x1d, 0x94, 0x99, 0x29, 0x91, - 0x32, 0xe9, 0x11, 0x0a, 0x02, 0xa8, 0x5a, 0xd2, 0x39, 0xb2, 0x9a, 0x3b, 0x27, 0xb8, 0x1d, 0xc1, - 0x31, 0xa1, 0x39, 0xca, 0x10, 0xd1, 0x51, 0xb8, 0xba, 0x71, 0xa3, 0x0c, 0x83, 0x09, 0x18, 0xb0, - 0x6a, 0xd1, 0x49, 0x88, 0x90, 0x08, 0x23, 0x0c, 0xe2, 0x39, 0x90, 0x21, 0xb1, 0x8f, 0x84, 0x39, - 0xa4, 0xba, 0x9d, 0x44, 0x80, 0x99, 0x00, 0xa9, 0x40, 0x38, 0xa6, 0x9d, 0x02, 0x4a, 0xb2, 0x30, - 0x8a, 0xb0, 0x0e, 0x11, 0x05, 0x0a, 0x91, 0x9c, 0x23, 0x98, 0x02, 0x08, 0x9f, 0x12, 0x29, 0xeb, - 0x30, 0x84, 0x1a, 0xba, 0xb2, 0x25, 0x1e, 0x85, 0xa9, 0x48, 0xb1, 0x3c, 0xb4, 0x38, 0x90, 0xba, - 0x12, 0x89, 0x43, 0xdb, 0x2a, 0xc4, 0x8d, 0x02, 0x99, 0x93, 0x73, 0xb0, 0xa9, 0x30, 0xb0, 0x59, - 0x93, 0x2c, 0xa7, 0x0a, 0x90, 0x20, 0x54, 0xf0, 0x08, 0x81, 0x98, 0x88, 0x11, 0x90, 0x18, 0x9c, - 0xb1, 0x70, 0x91, 0x08, 0xb0, 0x1a, 0x99, 0x59, 0xc2, 0x5a, 0x91, 0x33, 0x21, 0xcf, 0x02, 0x18, - 0x08, 0x31, 0xf3, 0x3d, 0xb2, 0x4b, 0xb2, 0x1c, 0x12, 0x88, 0xb2, 0x8f, 0x31, 0xc8, 0x41, 0xa0, - 0x88, 0x9a, 0x32, 0x94, 0x2b, 0xb0, 0x61, 0x0a, 0x87, 0x0a, 0x00, 0xc9, 0x29, 0x43, 0xd8, 0x2b, - 0x83, 0x89, 0x30, 0xca, 0xa5, 0x4b, 0x81, 0x80, 0xb8, 0x0c, 0x99, 0x68, 0x93, 0x3a, 0xb5, 0x4a, - 0x80, 0xba, 0x37, 0xac, 0x88, 0x10, 0x81, 0x51, 0xd0, 0x8b, 0x92, 0x3b, 0x87, 0x0a, 0x30, 0xe8, - 0x18, 0x90, 0x72, 0xd0, 0x18, 0x80, 0x08, 0x90, 0x02, 0x39, 0xd4, 0x1a, 0x11, 0xa8, 0x9d, 0x24, - 0x08, 0x01, 0xae, 0x38, 0xa3, 0x2c, 0x00, 0x18, 0xd0, 0x60, 0xa1, 0x0d, 0x38, 0x84, 0x80, 0x99, - 0x9b, 0x20, 0x43, 0x9a, 0x04, 0xbf, 0x23, 0xa0, 0x29, 0x98, 0x91, 0x41, 0xa0, 0xbd, 0x27, 0xba, - 0x21, 0x82, 0x08, 0xdf, 0x40, 0x92, 0x89, 0x30, 0xa8, 0xa1, 0x3a, 0x80, 0x41, 0xc1, 0x20, 0xec, - 0x29, 0x23, 0x2a, 0xf4, 0x8b, 0x81, 0x53, 0xb8, 0x20, 0xba, 0x51, 0xa0, 0xb0, 0x8f, 0x13, 0x12, - 0xc0, 0x09, 0x0c, 0x88, 0x17, 0x8a, 0xb8, 0x8b, 0x47, 0xa8, 0x09, 0x81, 0x01, 0x88, 0xb1, 0x0a, - 0x62, 0x99, 0x13, 0xae, 0x20, 0x03, 0x89, 0xfb, 0x69, 0xb0, 0x12, 0xcb, 0x32, 0xb9, 0x43, 0x90, - 0xc9, 0x2a, 0x05, 0x09, 0x19, 0x08, 0xc3, 0x6b, 0x01, 0xcb, 0x25, 0x9b, 0x23, 0xac, 0x20, 0x22, - 0xa9, 0x99, 0xa8, 0xcb, 0x7a, 0xc4, 0x38, 0xa0, 0x0d, 0x84, 0x0a, 0x3a, 0x04, 0x98, 0xb2, 0x3f, - 0xa5, 0x1a, 0x23, 0xcc, 0x20, 0x81, 0x09, 0x34, 0xbc, 0x1a, 0xa4, 0x0c, 0x34, 0xbb, 0x41, 0xaa, - 0x93, 0x0e, 0x30, 0xe3, 0x1a, 0x80, 0x02, 0x2b, 0x11, 0xa9, 0x08, 0xb0, 0x77, 0xc0, 0x10, 0xba, - 0x41, 0x21, 0xd0, 0x1b, 0xa2, 0x8c, 0x83, 0x8c, 0x33, 0x01, 0xd9, 0x10, 0xab, 0x62, 0x05, 0xbc, - 0x04, 0x0b, 0xa3, 0x59, 0x91, 0x1b, 0x96, 0x8b, 0x10, 0xa1, 0x31, 0xb8, 0x9a, 0x9b, 0x67, 0xaa, - 0x43, 0xb9, 0x18, 0x80, 0x00, 0xa1, 0x19, 0x29, 0xf0, 0x30, 0x80, 0x3b, 0xc2, 0x17, 0x0a, 0xea, - 0x40, 0xb8, 0x21, 0x19, 0xbb, 0x64, 0xc0, 0x19, 0x92, 0x0a, 0x01, 0x00, 0x21, 0xc9, 0x91, 0x8c, - 0x35, 0xbf, 0x26, 0xa8, 0x1a, 0x80, 0x21, 0x80, 0xb2, 0xaf, 0x14, 0xa9, 0x13, 0x82, 0x9e, 0x9a, - 0x62, 0xa1, 0x20, 0xca, 0x21, 0xb0, 0x1a, 0xa9, 0x26, 0x8b, 0x04, 0xba, 0x30, 0xa5, 0x0d, 0x24, - 0xba, 0x11, 0x9b, 0x14, 0x11, 0xce, 0x24, 0x9c, 0x83, 0x1c, 0xa2, 0x0b, 0x03, 0x2b, 0xb1, 0x8b, - 0x17, 0x0a, 0x23, 0x9f, 0x13, 0x0b, 0x21, 0xe9, 0x18, 0x0b, 0xa3, 0x5a, 0xd0, 0x19, 0x82, 0xba, - 0x8a, 0x93, 0x49, 0x09, 0x30, 0xf1, 0x5a, 0xb1, 0x0b, 0x84, 0xc8, 0x4a, 0xb1, 0x39, 0xe9, 0x1a, - 0x31, 0xa1, 0x81, 0x9e, 0x81, 0x8d, 0x11, 0x02, 0xba, 0x1b, 0xb0, 0x2b, 0xc1, 0x53, 0xb2, 0xaf, - 0x89, 0x11, 0x99, 0x81, 0xab, 0xb0, 0x23, 0x0f, 0xb3, 0x9c, 0x10, 0x9a, 0x9b, 0xb3, 0x0b, 0x8d, - 0x00, 0xb8, 0x9b, 0xb9, 0x0b, 0xa9, 0x9b, 0x7f, 0x02, 0x00, 0x00, 0x7d, 0x0b, 0x02, 0x01, 0x00, - 0xd0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0xe0, 0x71, 0x89, 0x83, 0xfc, 0x2e, 0x47, 0xaf, - 0x14, 0x98, 0x89, 0x11, 0xab, 0x16, 0x0c, 0xa3, 0x88, 0x2a, 0x00, 0x54, 0xe1, 0x2b, 0x84, 0x1b, - 0xa3, 0x8a, 0x0a, 0x86, 0x0a, 0x83, 0x2c, 0xb8, 0xa2, 0x63, 0xba, 0x38, 0x98, 0x12, 0x00, 0x0f, - 0xb2, 0x71, 0xb8, 0x28, 0xc2, 0x19, 0x01, 0x88, 0x31, 0xf0, 0x69, 0xc0, 0x29, 0xa2, 0x2a, 0x03, - 0x9e, 0x30, 0xa0, 0x90, 0x83, 0x2c, 0xe1, 0x22, 0x8c, 0x86, 0x0c, 0x83, 0x0a, 0x13, 0x9f, 0x04, - 0x89, 0x88, 0x82, 0x19, 0xb9, 0x50, 0xb0, 0x43, 0xbc, 0x01, 0x12, 0x1c, 0xaa, 0x87, 0x19, 0x0a, - 0x82, 0xba, 0x55, 0x89, 0x91, 0x08, 0xda, 0x52, 0x8a, 0x81, 0x88, 0x91, 0x4d, 0xe3, 0x39, 0xd3, - 0x49, 0xb8, 0x18, 0x22, 0xbb, 0x32, 0xbc, 0x26, 0xab, 0x02, 0x19, 0x88, 0xb8, 0x37, 0x8d, 0x91, - 0x00, 0x41, 0x9c, 0x20, 0xd3, 0x2c, 0x12, 0x8a, 0xc4, 0x59, 0x99, 0x08, 0x01, 0xa0, 0x6b, 0xa0, - 0x19, 0x92, 0x2d, 0xd3, 0x38, 0xa8, 0x30, 0x80, 0x8a, 0x00, 0x05, 0xba, 0x40, 0xba, 0x25, 0xad, - 0x00, 0x06, 0x0a, 0x94, 0x1d, 0xb1, 0x28, 0x22, 0xbc, 0x04, 0x8b, 0x35, 0xbe, 0x33, 0xc8, 0x42, - 0x9c, 0x03, 0x9b, 0x30, 0x88, 0x10, 0xe2, 0x4b, 0xa2, 0x2a, 0x18, 0xb8, 0xa2, 0x79, 0xb0, 0x8b, - 0x07, 0x09, 0x59, 0xf1, 0x18, 0x11, 0x0a, 0x92, 0x08, 0x8b, 0x92, 0x38, 0xb0, 0x2d, 0x05, 0x23, - 0x9f, 0xa1, 0x2d, 0x84, 0x99, 0x32, 0xae, 0x23, 0x9a, 0x01, 0x2b, 0xb6, 0x28, 0x90, 0x0e, 0x22, - 0x9b, 0x12, 0x80, 0xb9, 0x22, 0x13, 0xbf, 0x48, 0x23, 0xc0, 0xa1, 0x2c, 0x0b, 0x07, 0x98, 0x11, - 0xdb, 0x48, 0xb2, 0x39, 0x98, 0x00, 0x6b, 0xc2, 0x8d, 0x11, 0x02, 0x80, 0x3c, 0xf3, 0x4d, 0x80, - 0x98, 0x20, 0x88, 0xa2, 0x3a, 0xea, 0x53, 0x99, 0x09, 0x15, 0xca, 0x10, 0x18, 0xa1, 0x18, 0xa1, - 0x9a, 0x79, 0xe1, 0x28, 0xb2, 0x19, 0x40, 0xd0, 0x8a, 0x51, 0x90, 0x2a, 0x96, 0x8b, 0xa2, 0x39, - 0xa3, 0x4a, 0x8c, 0x87, 0x0a, 0xb0, 0x42, 0x9a, 0x94, 0x3b, 0xd0, 0x10, 0x80, 0x10, 0x98, 0x9b, - 0x53, 0xb3, 0x0c, 0xa2, 0x8c, 0x63, 0xa0, 0x99, 0x3a, 0x91, 0x42, 0xf3, 0x1c, 0x22, 0xc1, 0x18, - 0xac, 0x73, 0xc1, 0x10, 0xc9, 0x21, 0x98, 0x21, 0xa3, 0x9b, 0x0f, 0x15, 0xcb, 0x32, 0x09, 0xa9, - 0x33, 0xad, 0x12, 0x0a, 0x17, 0xab, 0x18, 0x88, 0x20, 0xb3, 0x58, 0xf3, 0x1c, 0x02, 0x89, 0x1a, - 0x86, 0x0b, 0x13, 0xcc, 0x31, 0xa0, 0x80, 0x38, 0xf3, 0x19, 0x88, 0x62, 0xe9, 0x01, 0x59, 0xc8, - 0x11, 0x89, 0x11, 0xab, 0x34, 0xb0, 0x8c, 0x20, 0xb5, 0x5a, 0xa8, 0x09, 0x14, 0x9d, 0x13, 0x8a, - 0x02, 0x8a, 0x96, 0x1e, 0x81, 0x89, 0x06, 0x0c, 0x03, 0x8d, 0x02, 0x88, 0x08, 0x88, 0x30, 0xc5, - 0x0c, 0x81, 0x21, 0x88, 0x02, 0xbd, 0x32, 0xd8, 0x22, 0x89, 0x0d, 0x07, 0x19, 0x8d, 0x91, 0x48, - 0xb1, 0x28, 0xb0, 0x98, 0x48, 0x18, 0xa4, 0x0c, 0x22, 0x90, 0xbe, 0x70, 0x92, 0x1b, 0x84, 0x0e, - 0x92, 0x39, 0x01, 0xb0, 0x1c, 0x00, 0x05, 0x9e, 0x13, 0x9b, 0x33, 0xab, 0x85, 0x8d, 0x23, 0x8b, - 0x82, 0x89, 0x09, 0x1a, 0x13, 0xc0, 0x5b, 0xf0, 0x25, 0x9c, 0x01, 0x99, 0x33, 0x81, 0xda, 0x19, - 0x88, 0x10, 0x15, 0x0f, 0x81, 0x08, 0x88, 0xe4, 0x5b, 0xa1, 0x02, 0x8b, 0x00, 0x98, 0x15, 0x0c, - 0x92, 0x2b, 0x84, 0xb0, 0x1c, 0xa4, 0x5c, 0xb1, 0x83, 0x0d, 0x11, 0xc8, 0x32, 0x90, 0x0c, 0xb8, - 0x24, 0x8c, 0x02, 0x88, 0x32, 0x8f, 0xf3, 0x48, 0x90, 0x08, 0x00, 0x99, 0x30, 0xb2, 0x99, 0x79, - 0xd1, 0x39, 0xc2, 0x3b, 0xa1, 0x81, 0x30, 0xaa, 0xb5, 0x4a, 0x82, 0x1b, 0xd2, 0x28, 0x34, 0xcf, - 0x42, 0xab, 0x24, 0xba, 0x15, 0x8d, 0x02, 0xba, 0x33, 0x80, 0x0a, 0x99, 0x44, 0xfa, 0x61, 0xbb, - 0x23, 0xa9, 0x83, 0x8d, 0x81, 0x21, 0x11, 0x9e, 0x02, 0x0b, 0xb4, 0x7a, 0xb1, 0x88, 0x40, 0xa1, - 0x9c, 0x10, 0x05, 0x0b, 0x93, 0x1e, 0xa3, 0x2b, 0x86, 0x0c, 0x91, 0x30, 0xb1, 0x0f, 0x84, 0x1b, - 0x95, 0x0c, 0x93, 0x0c, 0x12, 0x08, 0xb8, 0x3c, 0x05, 0x8c, 0xb3, 0x6b, 0x91, 0x29, 0xa1, 0x1a, - 0x92, 0x89, 0x43, 0xd9, 0x10, 0x10, 0xb4, 0x0f, 0xa3, 0x29, 0x84, 0x8f, 0x84, 0x0a, 0x00, 0x80, - 0xb1, 0x5c, 0xb2, 0x19, 0xe0, 0x48, 0x92, 0x0a, 0xa1, 0x39, 0xb4, 0x1b, 0x05, 0x8a, 0x82, 0x39, - 0x80, 0xfb, 0x23, 0x0b, 0x05, 0xbb, 0x43, 0xfb, 0x30, 0xa9, 0x93, 0x2a, 0x12, 0xbc, 0x03, 0x2a, - 0x27, 0x8e, 0x82, 0x0b, 0x92, 0x3b, 0x10, 0x96, 0x08, 0x0f, 0xb6, 0x3a, 0x81, 0x09, 0x91, 0x0c, - 0x85, 0x0a, 0x98, 0x71, 0xc1, 0x29, 0x90, 0x09, 0x08, 0x03, 0x80, 0x8f, 0xa4, 0x01, 0x1c, 0x00, - 0x92, 0x10, 0xe8, 0x49, 0xb0, 0x98, 0x16, 0x8c, 0x11, 0xa9, 0x30, 0xa8, 0x28, 0x22, 0xa5, 0x89, - 0x2a, 0xab, 0x47, 0x8c, 0x12, 0xc8, 0x1a, 0x31, 0xf0, 0x59, 0xb0, 0x40, 0xc9, 0x29, 0x11, 0x0a, - 0xb4, 0x29, 0x99, 0x98, 0x20, 0x21, 0xf8, 0x42, 0x09, 0xcb, 0x24, 0x0b, 0x94, 0x20, 0x99, 0x9b, - 0x35, 0xa0, 0x08, 0x9d, 0x13, 0xac, 0x15, 0xbb, 0x42, 0xdc, 0x24, 0xa9, 0xa9, 0x62, 0x99, 0x83, - 0x1b, 0xa5, 0x29, 0xb2, 0x1f, 0x93, 0x2c, 0x95, 0x0c, 0x94, 0x0a, 0x10, 0xb1, 0x38, 0x80, 0xa3, - 0xac, 0x20, 0x83, 0x2f, 0xa0, 0x16, 0x9b, 0x81, 0xab, 0x74, 0xc8, 0x38, 0x80, 0x8b, 0x12, 0x89, - 0x01, 0x2d, 0xc7, 0x39, 0xb0, 0x29, 0x12, 0xb0, 0x2d, 0xd2, 0x48, 0x90, 0x19, 0xa5, 0x4c, 0xb1, - 0x10, 0xa0, 0x59, 0xb1, 0x39, 0xd8, 0x38, 0x90, 0x39, 0xe3, 0x1d, 0x13, 0x8c, 0x82, 0x9b, 0x32, - 0x01, 0x9f, 0x85, 0x19, 0xa0, 0x03, 0x9c, 0x23, 0x0b, 0x87, 0x9a, 0x88, 0x12, 0x9a, 0x23, 0xdb, - 0x43, 0xe8, 0x18, 0x00, 0x00, 0x1c, 0xb1, 0x32, 0xe8, 0x5b, 0x01, 0xd0, 0x30, 0xa0, 0x09, 0xc1, - 0x71, 0x98, 0x80, 0x8a, 0x03, 0x90, 0x3b, 0x90, 0xc1, 0x0c, 0x72, 0xd1, 0x1a, 0x02, 0x98, 0x22, - 0xad, 0x14, 0x99, 0x8a, 0x27, 0x9d, 0x13, 0x89, 0x91, 0x1b, 0x85, 0x19, 0xb8, 0x1c, 0x85, 0x8a, - 0x21, 0xe1, 0x29, 0x08, 0x94, 0xba, 0x5b, 0xa4, 0x38, 0xd9, 0x21, 0x8a, 0x87, 0x0a, 0x01, 0xc2, - 0x5b, 0x92, 0xb9, 0x29, 0x40, 0xc1, 0x08, 0x00, 0xa8, 0x18, 0x85, 0x1e, 0xa8, 0x23, 0x0c, 0x02, - 0xaf, 0x62, 0xa0, 0x80, 0x18, 0xb8, 0x62, 0xa9, 0x93, 0x1c, 0x11, 0xb8, 0x06, 0x0e, 0x81, 0x18, - 0x18, 0xa8, 0x21, 0xbc, 0x40, 0x01, 0xb9, 0x3b, 0x17, 0xa9, 0x28, 0x88, 0x30, 0xfa, 0x24, 0x9e, - 0x10, 0xa3, 0x59, 0xb0, 0x0c, 0x05, 0x9a, 0x82, 0x28, 0xe0, 0x59, 0xa0, 0x18, 0xa8, 0x48, 0x94, - 0x09, 0xa8, 0x4b, 0xb3, 0x31, 0x8c, 0x91, 0x08, 0x0a, 0xa6, 0x0c, 0x12, 0x22, 0xad, 0x90, 0x09, - 0x32, 0x88, 0x27, 0xcf, 0x14, 0xa9, 0x30, 0xb8, 0x30, 0xc3, 0x3a, 0xca, 0x32, 0x8b, 0x27, 0xab, - 0x20, 0xbb, 0x26, 0xba, 0x31, 0xa9, 0x19, 0x14, 0xcc, 0x0a, 0x17, 0x8a, 0x02, 0xac, 0x31, 0xa2, - 0x79, 0xc0, 0x38, 0xb1, 0x39, 0xb8, 0x1a, 0x27, 0x8d, 0xb2, 0x30, 0xaa, 0x49, 0xa4, 0x18, 0x8d, - 0x21, 0xa4, 0x8b, 0x10, 0x82, 0xbb, 0x35, 0xba, 0x19, 0xd9, 0x35, 0xa8, 0xa8, 0x71, 0x98, 0xa0, - 0x48, 0xb8, 0x48, 0x91, 0x10, 0xeb, 0x5a, 0xa3, 0x1a, 0x92, 0x0e, 0xa3, 0x68, 0xaa, 0x05, 0x2b, - 0x98, 0x92, 0x3a, 0xc8, 0x42, 0xb8, 0x3b, 0xe0, 0x20, 0x08, 0x22, 0xd9, 0x89, 0x30, 0x50, 0xf1, - 0x29, 0x11, 0xa9, 0xc9, 0x44, 0xba, 0x22, 0xa2, 0x7b, 0xe0, 0x38, 0xa2, 0x09, 0x89, 0x03, 0xc9, - 0x49, 0xb1, 0x58, 0x99, 0x08, 0xa6, 0x1d, 0xb1, 0x50, 0xa0, 0x0a, 0x62, 0xd8, 0x20, 0x0a, 0x83, - 0xa8, 0x29, 0x94, 0x8b, 0x20, 0xa3, 0x98, 0x28, 0x7c, 0xf1, 0x18, 0x88, 0x23, 0xcc, 0x21, 0x90, - 0x28, 0xa9, 0x03, 0x8f, 0x04, 0x2c, 0xb2, 0x1c, 0x04, 0x0a, 0x02, 0x8c, 0x33, 0xfc, 0x31, 0xb0, - 0x40, 0xbb, 0x43, 0xbb, 0x50, 0xa1, 0x28, 0x9b, 0x13, 0xb0, 0x1e, 0x03, 0xc0, 0x6b, 0xc2, 0x39, - 0xb8, 0x30, 0x01, 0x8a, 0xe3, 0x5b, 0x83, 0xab, 0xa3, 0x79, 0xb8, 0x02, 0x1a, 0x08, 0xc1, 0x33, - 0x8b, 0xe8, 0x48, 0x82, 0x88, 0x8f, 0x04, 0x09, 0x01, 0xbb, 0x24, 0x0e, 0x94, 0x09, 0x28, 0xc9, - 0x22, 0xa1, 0x1f, 0x91, 0x21, 0xc8, 0x29, 0x91, 0x09, 0x10, 0x12, 0xbc, 0x34, 0x09, 0x2b, 0x97, - 0x1b, 0x12, 0xbc, 0x21, 0x38, 0xfa, 0x52, 0xba, 0x22, 0x9c, 0x84, 0x0f, 0x93, 0x18, 0x91, 0x8c, - 0x11, 0x93, 0x30, 0x8f, 0x85, 0x0b, 0x01, 0xa0, 0x3a, 0xf1, 0x51, 0xc8, 0x38, 0x99, 0x24, 0xda, - 0x39, 0xb2, 0x39, 0x91, 0x0b, 0x04, 0x9b, 0x91, 0x41, 0xda, 0x50, 0xa2, 0x0b, 0x98, 0x14, 0x91, - 0x19, 0x09, 0xf1, 0x41, 0x9c, 0x11, 0xc2, 0x4b, 0x93, 0xab, 0x40, 0xc9, 0x72, 0xb9, 0x23, 0x9c, - 0x32, 0xfb, 0x22, 0xa8, 0x22, 0xba, 0x02, 0x8f, 0x06, 0x88, 0x09, 0xc0, 0x40, 0xa9, 0x33, 0xbd, - 0x23, 0x99, 0x31, 0xe9, 0x08, 0x49, 0xa2, 0xa2, 0x1d, 0x91, 0x09, 0x23, 0x98, 0x02, 0x8f, 0x24, - 0xea, 0x10, 0x28, 0x82, 0xcc, 0x31, 0x90, 0x1c, 0x96, 0x3a, 0xd2, 0x1a, 0x82, 0x0a, 0x29, 0x05, - 0xbb, 0x50, 0xb0, 0x40, 0x99, 0x00, 0x3a, 0xc4, 0x9b, 0x30, 0x91, 0x82, 0x7a, 0xc0, 0x88, 0x34, - 0x9b, 0xfa, 0x31, 0xb3, 0x4c, 0xc0, 0x28, 0xa1, 0x59, 0xa2, 0x0b, 0xa1, 0x38, 0x10, 0xf8, 0x6a, - 0xa2, 0x09, 0xa0, 0x02, 0x4a, 0xc2, 0x29, 0xab, 0x91, 0x00, 0x50, 0xa0, 0x98, 0x44, 0xbb, 0x30, - 0x29, 0x27, 0xfb, 0x41, 0xa9, 0x09, 0x03, 0x8d, 0x13, 0x89, 0x88, 0x99, 0xa2, 0x1f, 0x27, 0x9d, - 0x01, 0x28, 0xb9, 0x30, 0x00, 0xc3, 0x4c, 0xa2, 0x9a, 0x20, 0x9a, 0x47, 0x9d, 0x12, 0x88, 0x8b, - 0x05, 0x08, 0x98, 0x1a, 0xa7, 0x2c, 0xa1, 0x38, 0xa1, 0x1d, 0x93, 0x0a, 0x0a, 0x07, 0x90, 0x3b, - 0xd1, 0x28, 0xa1, 0x3a, 0x15, 0x9c, 0x83, 0x3d, 0xd0, 0x28, 0x10, 0x90, 0x89, 0x08, 0xa8, 0x13, - 0x70, 0xe1, 0x28, 0xa9, 0x31, 0xb8, 0x89, 0x30, 0x04, 0x89, 0x9f, 0x06, 0xab, 0x63, 0xd0, 0x38, - 0xa9, 0x22, 0x9b, 0x15, 0xac, 0x33, 0xdb, 0x51, 0xd8, 0x48, 0xa1, 0x08, 0x09, 0x11, 0x09, 0x90, - 0x98, 0x11, 0x2c, 0xb5, 0x10, 0x0e, 0x13, 0xac, 0x04, 0x0d, 0x85, 0x9a, 0x31, 0xca, 0x32, 0x88, - 0xaa, 0x03, 0x2c, 0x85, 0x8a, 0x81, 0x49, 0xf3, 0x5a, 0xd1, 0x29, 0x83, 0x0b, 0x83, 0x9f, 0x23, - 0x98, 0x00, 0x8b, 0x02, 0xba, 0x44, 0xab, 0x18, 0x80, 0x70, 0xe2, 0x2a, 0x82, 0x99, 0x05, 0x8c, - 0x10, 0x81, 0x81, 0x1a, 0xa8, 0x06, 0x0e, 0x04, 0xba, 0x22, 0x09, 0x98, 0xa1, 0x09, 0x45, 0xfb, - 0x11, 0x91, 0x0b, 0x83, 0x3b, 0xe4, 0x39, 0x90, 0x1b, 0x94, 0x39, 0x94, 0x8f, 0x95, 0x19, 0x82, - 0x9b, 0x20, 0xb8, 0x44, 0xca, 0x12, 0x9a, 0x43, 0xb0, 0x8c, 0x12, 0x90, 0x0d, 0x93, 0x32, 0xaf, - 0x15, 0xa9, 0x2a, 0xa1, 0x51, 0xb9, 0xb8, 0x70, 0xc2, 0x18, 0x90, 0x83, 0xab, 0x03, 0x7a, 0xd0, - 0x28, 0x94, 0x0c, 0x01, 0x00, 0x80, 0xab, 0x07, 0x2a, 0x92, 0x8f, 0x04, 0xaa, 0x32, 0xda, 0x22, - 0x9b, 0x13, 0xab, 0x13, 0x1a, 0x82, 0xc8, 0x08, 0x9a, 0x72, 0xb0, 0x25, 0xbc, 0x22, 0x2b, 0x93, - 0x99, 0x82, 0x6c, 0xd2, 0x6a, 0xc3, 0x2c, 0x94, 0x0b, 0x81, 0x08, 0xa0, 0x39, 0xf9, 0x41, 0xa9, - 0x30, 0xd2, 0x39, 0xb2, 0x3c, 0xa3, 0x09, 0x18, 0x0b, 0xa5, 0x49, 0x11, 0x9d, 0x94, 0x2d, 0x93, - 0x98, 0x04, 0x8e, 0x13, 0xab, 0x23, 0x9c, 0x04, 0x3b, 0xe8, 0x21, 0x9c, 0x11, 0x43, 0xeb, 0x08, - 0x12, 0x8b, 0x85, 0x0a, 0x03, 0xab, 0x04, 0x9a, 0x00, 0x38, 0xa1, 0xa0, 0xaa, 0x78, 0x01, 0xd3, - 0x29, 0x82, 0x88, 0xc0, 0x3e, 0x86, 0x9b, 0x14, 0x9c, 0x82, 0x2a, 0xb7, 0x3b, 0xb3, 0x28, 0xc9, - 0x39, 0xa4, 0x3b, 0xa6, 0x29, 0x9a, 0x82, 0x3a, 0xf3, 0x79, 0x88, 0x88, 0x89, 0x08, 0x84, 0x39, - 0x80, 0xbb, 0x81, 0x02, 0x41, 0xab, 0x94, 0x63, 0xcb, 0xa8, 0x42, 0x8c, 0xb4, 0x3a, 0x38, 0xf0, - 0x3a, 0xa3, 0x40, 0x9d, 0x14, 0xa8, 0x3a, 0xc4, 0x29, 0x82, 0x1b, 0x88, 0xa4, 0xb0, 0x4f, 0xa5, - 0x8a, 0x38, 0xe0, 0x10, 0x80, 0x22, 0xfa, 0x38, 0xa2, 0x88, 0x10, 0xa9, 0x12, 0x9b, 0x94, 0x2a, - 0xdb, 0x43, 0x04, 0xbc, 0x62, 0x90, 0x88, 0x09, 0x29, 0xd9, 0x51, 0xc0, 0x39, 0x9b, 0x16, 0xc9, - 0x68, 0xc9, 0x33, 0xca, 0x30, 0xb0, 0x58, 0xc8, 0x21, 0xa8, 0x28, 0x82, 0x9b, 0xa0, 0x33, 0x0e, - 0xa1, 0x02, 0x0f, 0x15, 0x9c, 0x32, 0xaa, 0x10, 0x90, 0x29, 0xd0, 0x48, 0x94, 0xac, 0x31, 0x98, - 0x28, 0x40, 0xe0, 0x08, 0x30, 0xd0, 0x29, 0x9a, 0x06, 0x0b, 0x05, 0x9e, 0x12, 0x0a, 0x23, 0xcb, - 0x82, 0x1b, 0x12, 0x91, 0x32, 0xcd, 0x48, 0xa2, 0x0c, 0x05, 0x0c, 0xa4, 0x1a, 0x92, 0xac, 0x45, - 0x9a, 0x81, 0x0a, 0x81, 0x09, 0x83, 0x8c, 0x42, 0xcb, 0x32, 0x82, 0x9f, 0x24, 0x89, 0xb1, 0x2a, - 0x04, 0x9e, 0x14, 0x0a, 0xb1, 0x1e, 0x23, 0xd9, 0x00, 0x18, 0xc3, 0x10, 0x2b, 0xf2, 0x49, 0xa0, - 0x32, 0xca, 0x19, 0x01, 0x28, 0xf8, 0x20, 0x89, 0x02, 0x92, 0x1c, 0x92, 0x51, 0x98, 0xd9, 0x08, - 0x29, 0x42, 0xf9, 0x39, 0x92, 0x3b, 0xb6, 0x3c, 0xc1, 0x79, 0xc1, 0x29, 0xa0, 0x30, 0xb2, 0x1b, - 0xa1, 0x0a, 0x15, 0xaa, 0xb8, 0x51, 0x10, 0xc0, 0x19, 0xb8, 0x72, 0xb1, 0x28, 0xa8, 0x50, 0xd1, - 0x38, 0xe3, 0x1c, 0x83, 0x28, 0xf1, 0x28, 0x19, 0x92, 0xa0, 0x19, 0x92, 0x09, 0x80, 0x3b, 0xf0, - 0x9c, 0x36, 0x98, 0x1d, 0xb2, 0x38, 0x89, 0x38, 0xc2, 0x20, 0x00, 0x9f, 0x85, 0x3a, 0xa4, 0x3c, - 0xf2, 0x3a, 0x10, 0x99, 0x21, 0xca, 0x38, 0x04, 0x9d, 0x02, 0x10, 0xc9, 0x40, 0xc1, 0x0c, 0x13, - 0x20, 0xe9, 0x10, 0x89, 0x23, 0xb8, 0x1b, 0xb3, 0x69, 0x88, 0x94, 0x9c, 0x22, 0x0b, 0xb5, 0x48, - 0x8d, 0x03, 0xad, 0x36, 0xcb, 0x21, 0x91, 0x1a, 0xa0, 0x58, 0x90, 0x81, 0x1a, 0xdb, 0x51, 0xc1, - 0x48, 0xd8, 0x20, 0x89, 0x04, 0xac, 0x31, 0xc8, 0x50, 0xa8, 0x21, 0xaa, 0x30, 0xa8, 0x15, 0xac, - 0x24, 0xa9, 0x1a, 0x94, 0x29, 0xe9, 0x50, 0xb1, 0x1b, 0x03, 0x8c, 0x85, 0x0c, 0x93, 0x1d, 0xa3, - 0x29, 0xc1, 0x49, 0xb2, 0x48, 0xb9, 0x02, 0x39, 0xb4, 0x1d, 0x93, 0x2b, 0x93, 0x39, 0xb7, 0x0f, - 0x83, 0x19, 0xc1, 0x3a, 0x90, 0x80, 0x01, 0x8c, 0x16, 0x9b, 0x43, 0xe9, 0x08, 0x10, 0x82, 0x8b, - 0x19, 0xe3, 0x79, 0xc0, 0x30, 0xb0, 0x5a, 0xa1, 0x09, 0x98, 0x61, 0xb1, 0x2a, 0xc9, 0x43, 0x8a, - 0x28, 0xc1, 0x0a, 0x32, 0xba, 0x03, 0x8d, 0x25, 0xa8, 0x89, 0x80, 0x99, 0x02, 0x1f, 0x96, 0x8c, - 0x03, 0x1b, 0xb1, 0x22, 0x11, 0x3b, 0xf3, 0x2b, 0x24, 0xad, 0x53, 0xc8, 0x49, 0xc1, 0x3a, 0xa3, - 0x08, 0x2b, 0xf2, 0x08, 0x30, 0xc0, 0x39, 0xd3, 0x38, 0xc9, 0x2a, 0x84, 0x18, 0xa0, 0x88, 0xcc, - 0x71, 0x92, 0x09, 0x0c, 0x15, 0x89, 0xa1, 0x19, 0xb0, 0x70, 0xd1, 0x39, 0xc0, 0x38, 0x02, 0xac, - 0x13, 0x8c, 0x14, 0x9c, 0x82, 0x89, 0x48, 0xb0, 0x03, 0x8f, 0x13, 0x0a, 0x12, 0xf9, 0x39, 0x01, - 0xab, 0x21, 0x14, 0xac, 0x15, 0xbb, 0x23, 0x1b, 0xa6, 0x2a, 0x98, 0x20, 0xae, 0x25, 0xaa, 0x41, - 0xba, 0x24, 0xbc, 0x23, 0x8c, 0x33, 0xfb, 0x20, 0x88, 0x38, 0xc1, 0x08, 0x00, 0x3d, 0x96, 0x0c, - 0x02, 0x9b, 0x04, 0x1b, 0x96, 0x0c, 0x83, 0x2c, 0x83, 0x8c, 0x14, 0x8c, 0xa1, 0x39, 0x02, 0x0a, - 0xa2, 0x4a, 0xeb, 0x41, 0xa0, 0x89, 0x28, 0xc4, 0x4b, 0xb2, 0x19, 0x88, 0x31, 0xa2, 0x8d, 0x83, - 0x9e, 0x72, 0xa0, 0x08, 0x90, 0x20, 0x89, 0x85, 0x9c, 0x53, 0xd9, 0x30, 0xc0, 0x3a, 0xa3, 0x4b, - 0xc4, 0x1a, 0xa8, 0x31, 0xe2, 0x39, 0x98, 0x83, 0x8b, 0x10, 0x15, 0x8b, 0xa2, 0x08, 0x82, 0x0f, - 0x33, 0xfb, 0x20, 0x89, 0x10, 0xa2, 0x0b, 0x51, 0xb1, 0x08, 0xb3, 0x2f, 0xc8, 0x24, 0x8c, 0x03, - 0x0d, 0x23, 0xea, 0x58, 0xa9, 0x21, 0x90, 0x8c, 0x33, 0xd9, 0x00, 0x49, 0xd2, 0x18, 0x00, 0x89, - 0xa3, 0x8e, 0x14, 0x98, 0x00, 0x98, 0x04, 0x0f, 0x06, 0x9b, 0x01, 0x18, 0x89, 0x81, 0x19, 0xb2, - 0x1c, 0x04, 0x0f, 0xb4, 0x3a, 0x93, 0xac, 0x03, 0x3b, 0xd2, 0x83, 0x5a, 0xd0, 0x28, 0x81, 0x20, - 0xd9, 0x30, 0x8b, 0x86, 0x89, 0x30, 0xd9, 0x32, 0x9c, 0x31, 0xea, 0x42, 0xba, 0x30, 0xda, 0x21, - 0x13, 0x8f, 0x82, 0x1b, 0x02, 0xa1, 0x2b, 0xd2, 0x29, 0x92, 0x43, 0xcd, 0x53, 0xba, 0x32, 0xc9, - 0x30, 0x89, 0x81, 0x9c, 0x22, 0x03, 0xad, 0x52, 0xe9, 0x41, 0xaa, 0x93, 0x2b, 0x95, 0x1d, 0x94, - 0x1a, 0x01, 0x8b, 0x13, 0xcb, 0x22, 0x8b, 0x06, 0x9d, 0x21, 0x91, 0x2a, 0x88, 0x05, 0xad, 0x40, - 0xa2, 0x29, 0x98, 0x39, 0xe2, 0x4b, 0xa5, 0x2a, 0x09, 0x84, 0x0b, 0x81, 0x8d, 0x16, 0xa9, 0xb9, - 0x60, 0x90, 0x89, 0x03, 0x0c, 0xa5, 0x4b, 0xb1, 0x3b, 0xa3, 0x11, 0x8a, 0x82, 0x0a, 0x04, 0x83, - 0x0e, 0x86, 0x9c, 0x12, 0xb8, 0x10, 0x80, 0x38, 0xf3, 0x70, 0xca, 0x21, 0xa0, 0x19, 0x93, 0x0b, - 0xad, 0x45, 0xa9, 0x20, 0xb9, 0x22, 0x0a, 0xb2, 0x20, 0x11, 0x78, 0xf9, 0x18, 0x48, 0xb0, 0x32, - 0xc9, 0xab, 0x41, 0xa2, 0x4a, 0xa8, 0x28, 0x87, 0x8d, 0x04, 0xaa, 0x33, 0xab, 0x03, 0x9f, 0x14, - 0x8b, 0x82, 0x9b, 0x36, 0xcb, 0x22, 0xb8, 0x4a, 0x80, 0xa2, 0x1a, 0x18, 0xf9, 0x62, 0x98, 0x00, - 0xa9, 0x82, 0x3a, 0xa1, 0xb2, 0x7b, 0xa7, 0x1c, 0x92, 0x18, 0x00, 0x80, 0x8d, 0xa3, 0x1c, 0x03, - 0x3a, 0xf2, 0x6b, 0x90, 0x09, 0x92, 0x3a, 0xb4, 0x2b, 0x94, 0x9c, 0x12, 0x10, 0x10, 0xfb, 0x41, - 0x89, 0x83, 0x8e, 0x05, 0x8c, 0x12, 0xa8, 0x08, 0x88, 0x49, 0xb3, 0x88, 0x0e, 0x85, 0x0a, 0x93, - 0x09, 0xba, 0x43, 0x01, 0x99, 0x8d, 0x14, 0xc0, 0x40, 0xbc, 0x42, 0xc8, 0x41, 0xb8, 0x10, 0x08, - 0x14, 0xa8, 0x9d, 0x32, 0x1a, 0xc4, 0x0d, 0x02, 0x0b, 0x96, 0x39, 0xd1, 0x2a, 0x85, 0x1b, 0xb1, - 0x19, 0x22, 0x9a, 0x99, 0x32, 0xbb, 0x49, 0x17, 0xcd, 0x20, 0x21, 0xc0, 0x31, 0x0c, 0xb3, 0x6b, - 0xb3, 0x1b, 0x91, 0x2a, 0x92, 0xc9, 0x8a, 0x71, 0xa2, 0x09, 0x8a, 0x95, 0x5d, 0xb4, 0x1a, 0xa1, - 0x39, 0xc1, 0x4a, 0xd0, 0x31, 0x88, 0x8c, 0x04, 0x1b, 0x90, 0x63, 0xc8, 0x19, 0x88, 0x13, 0x91, - 0x8f, 0x05, 0xab, 0x24, 0xac, 0x82, 0x28, 0x82, 0x9c, 0x82, 0x88, 0x72, 0xb8, 0x88, 0x39, 0xd3, - 0x5b, 0xc2, 0x19, 0x90, 0x32, 0xdb, 0x30, 0x98, 0x62, 0xc1, 0x19, 0x9a, 0x24, 0x99, 0x88, 0xa2, - 0x0b, 0x50, 0xb2, 0x9d, 0x41, 0xa0, 0x70, 0xd9, 0x28, 0x20, 0x98, 0xb1, 0x30, 0xb9, 0x2c, 0x27, - 0xbc, 0x11, 0x1a, 0xa5, 0x1b, 0x31, 0x80, 0xa0, 0x7b, 0xa3, 0xac, 0x28, 0x04, 0x0a, 0xc1, 0x3c, - 0x93, 0x88, 0x3a, 0xa5, 0x0b, 0x12, 0x9b, 0x9a, 0x18, 0x37, 0x4b, 0xf1, 0x3b, 0xb0, 0x63, 0xb9, - 0x41, 0xeb, 0x40, 0x80, 0x90, 0x2a, 0x03, 0x0a, 0x8a, 0xb2, 0x39, 0x31, 0x08, 0xf3, 0x0f, 0x11, - 0x89, 0x83, 0x8d, 0x33, 0xad, 0x22, 0xa8, 0x1c, 0x83, 0x21, 0xcb, 0x99, 0x43, 0x42, 0xb8, 0xb8, - 0x7b, 0xc1, 0x81, 0x5b, 0x86, 0x0d, 0x93, 0x0b, 0x11, 0xb9, 0x34, 0xa9, 0xb8, 0x09, 0x21, 0xa2, - 0x78, 0xc0, 0x09, 0x11, 0x00, 0xd8, 0x39, 0xb5, 0x5a, 0xc9, 0x22, 0x90, 0x2a, 0x86, 0x1a, 0xc0, - 0x40, 0xa8, 0x28, 0xca, 0x41, 0xb8, 0x4a, 0xb3, 0x9a, 0x79, 0x96, 0x2b, 0xd8, 0x38, 0x82, 0x0c, - 0x92, 0x59, 0xd9, 0x12, 0x90, 0x89, 0x00, 0x80, 0x93, 0xaf, 0x54, 0xa0, 0x19, 0xa8, 0x51, 0xb8, - 0x22, 0xcc, 0x33, 0xda, 0x48, 0xa1, 0x88, 0x1a, 0x06, 0xab, 0x51, 0xb0, 0x10, 0xaa, 0x13, 0x8d, - 0x01, 0x18, 0x90, 0x52, 0xcc, 0x11, 0x01, 0x98, 0x30, 0xab, 0x85, 0x69, 0xc0, 0x19, 0x22, 0x09, - 0x91, 0xcf, 0x33, 0x1b, 0xb2, 0x2d, 0x93, 0x0c, 0x14, 0xc8, 0x88, 0x69, 0xa2, 0xa9, 0x2b, 0x04, - 0xc0, 0x58, 0xb0, 0x09, 0x81, 0x60, 0xa0, 0x80, 0x1b, 0x06, 0xaa, 0x81, 0x59, 0xd0, 0x39, 0x84, - 0x99, 0x89, 0x02, 0x89, 0x10, 0xaa, 0x00, 0x12, 0xc9, 0x54, 0xcc, 0x30, 0xb5, 0x4c, 0xc8, 0x20, - 0x18, 0xbb, 0x45, 0x98, 0x29, 0xa0, 0x20, 0xa9, 0x44, 0xab, 0xc2, 0x1e, 0x03, 0x08, 0x10, 0xba, - 0x45, 0xda, 0x00, 0x30, 0xe9, 0x31, 0xb8, 0x09, 0x09, 0x15, 0x0c, 0xb4, 0x2d, 0x86, 0x9b, 0x03, - 0x8b, 0x15, 0x9b, 0x04, 0x8c, 0x93, 0x49, 0xa0, 0x19, 0x9a, 0x02, 0x39, 0xc1, 0x19, 0x43, 0x09, - 0xc1, 0x38, 0x8a, 0x93, 0x87, 0x9f, 0x82, 0x1c, 0xc3, 0x60, 0x9a, 0x03, 0x8b, 0x00, 0x92, 0x8b, - 0x51, 0x91, 0x8e, 0x05, 0x8b, 0x13, 0x99, 0xa0, 0x6c, 0xd2, 0x30, 0xc8, 0x48, 0x90, 0x08, 0x80, - 0x29, 0x88, 0xa3, 0x9c, 0x18, 0x01, 0xe8, 0x2b, 0xb0, 0x57, 0xab, 0x23, 0xba, 0x59, 0x82, 0x01, - 0x9d, 0x10, 0x91, 0x18, 0x9a, 0x01, 0x21, 0xc8, 0x4a, 0xa6, 0x6b, 0xb0, 0x10, 0xa9, 0x29, 0x42, - 0x81, 0xfb, 0x58, 0xb9, 0x02, 0x4a, 0xf1, 0x39, 0xc2, 0x58, 0xa8, 0x10, 0x18, 0x80, 0x99, 0x20, - 0xda, 0x22, 0x0c, 0x96, 0xab, 0x15, 0x8b, 0x05, 0x89, 0xa1, 0x1b, 0x94, 0x88, 0x24, 0x9f, 0x12, - 0x01, 0xcb, 0x48, 0xa1, 0x89, 0x21, 0x84, 0xbf, 0x33, 0x98, 0x80, 0x18, 0x10, 0xd1, 0x1a, 0xa3, - 0x4a, 0xd9, 0x83, 0x68, 0xdb, 0x22, 0x30, 0xe9, 0x30, 0xa9, 0x04, 0x8b, 0x82, 0x8a, 0x82, 0x18, - 0x80, 0xbc, 0x59, 0x07, 0x8b, 0xb2, 0x1b, 0x17, 0xbc, 0x52, 0xa9, 0x11, 0x29, 0xb0, 0x09, 0x72, - 0xb8, 0x09, 0x82, 0x08, 0x31, 0xf9, 0x29, 0x81, 0x31, 0xf0, 0x29, 0xb9, 0x04, 0x89, 0x88, 0x19, - 0x04, 0x8c, 0x34, 0xf0, 0x18, 0x11, 0xd1, 0x18, 0xa8, 0x00, 0x2a, 0xa5, 0x4b, 0xa3, 0x2b, 0xb2, - 0x2a, 0xf1, 0x79, 0xb0, 0x11, 0xa0, 0x1c, 0x83, 0x3a, 0xa1, 0x08, 0x9b, 0x87, 0x3d, 0xb3, 0x0b, - 0x01, 0x36, 0xea, 0x2a, 0x84, 0x1a, 0xc0, 0x29, 0x80, 0x01, 0x0e, 0x84, 0x1c, 0xa3, 0x59, 0xb0, - 0x4a, 0xd2, 0x59, 0xb0, 0x49, 0xa1, 0x0a, 0x81, 0x38, 0xb1, 0x30, 0xab, 0xa0, 0x79, 0xc1, 0x21, - 0x99, 0x92, 0x98, 0x19, 0xf0, 0x5a, 0x91, 0x02, 0x9f, 0x03, 0x8a, 0x51, 0xa9, 0x02, 0x5a, 0xc2, - 0x1a, 0x02, 0x9b, 0x15, 0x8a, 0xe2, 0x1c, 0x92, 0x73, 0xd8, 0x10, 0xa8, 0x31, 0xa8, 0x19, 0x98, - 0x30, 0xc0, 0x4b, 0xb3, 0x1c, 0x23, 0xb2, 0x1d, 0x9e, 0x16, 0x8a, 0x82, 0x1a, 0x93, 0x0c, 0x02, - 0x83, 0x9e, 0x42, 0xf8, 0x29, 0x91, 0x20, 0xa0, 0x09, 0x08, 0x30, 0xe3, 0x3a, 0x89, 0xd5, 0x59, - 0xb0, 0x01, 0x0a, 0x81, 0x18, 0x58, 0xf2, 0x1a, 0x01, 0x99, 0x02, 0x88, 0x21, 0xc9, 0x6a, 0xa3, - 0x39, 0xe8, 0x4a, 0x93, 0xac, 0x24, 0x89, 0xb8, 0x58, 0xc2, 0x38, 0x08, 0xdb, 0x32, 0xa8, 0x08, - 0x82, 0xbd, 0x25, 0x88, 0x8a, 0xd3, 0x48, 0x00, 0xba, 0x20, 0x83, 0x8c, 0x32, 0xa5, 0x1f, 0xb3, - 0x2a, 0x60, 0xb1, 0x19, 0x89, 0x19, 0xb0, 0x2d, 0x07, 0x0c, 0x81, 0x0a, 0x83, 0x49, 0xe9, 0x32, - 0xca, 0x30, 0x80, 0xca, 0x59, 0x85, 0x8b, 0x02, 0x98, 0xac, 0x62, 0xa2, 0x2c, 0xc3, 0x3b, 0x82, - 0x11, 0x8d, 0x14, 0xbb, 0x59, 0xb1, 0x8d, 0x24, 0x98, 0x09, 0xb2, 0x48, 0x90, 0x8a, 0x32, 0x91, - 0x9a, 0x1a, 0xa6, 0x1e, 0x84, 0x90, 0x8b, 0x89, 0x86, 0x48, 0xb9, 0xa3, 0x5c, 0xe0, 0x50, 0xa8, - 0x20, 0xa8, 0x11, 0xa9, 0x38, 0xf2, 0x48, 0x99, 0x80, 0x88, 0x61, 0xa8, 0x80, 0x81, 0x2b, 0x06, - 0xbc, 0x32, 0x9a, 0x99, 0x16, 0x9c, 0x11, 0x11, 0x18, 0xc9, 0x1b, 0x06, 0x80, 0x99, 0x40, 0xc3, - 0x19, 0x0c, 0xb4, 0x1b, 0x14, 0xc8, 0x09, 0x80, 0x70, 0xc8, 0x82, 0x3c, 0x96, 0x0a, 0x91, 0x09, - 0x10, 0x85, 0x9c, 0x00, 0x88, 0x92, 0x69, 0xd2, 0x29, 0x02, 0xd8, 0x11, 0x0a, 0x93, 0x0a, 0x94, - 0x1d, 0x80, 0x00, 0xc9, 0x29, 0x16, 0x0a, 0xc2, 0x1b, 0xa8, 0x64, 0x89, 0x01, 0xa9, 0x10, 0x50, - 0xf0, 0x19, 0x81, 0x88, 0x38, 0xd2, 0x4b, 0x91, 0x18, 0x84, 0x8c, 0xe0, 0x60, 0xb0, 0x21, 0xb8, - 0x3b, 0xa4, 0x3b, 0xb1, 0x2a, 0x07, 0xa8, 0x8c, 0x10, 0x03, 0x2c, 0x85, 0x9c, 0x31, 0xd0, 0x18, - 0x80, 0x11, 0xa0, 0x81, 0x8e, 0x84, 0x2a, 0x82, 0x69, 0xe1, 0x1a, 0x02, 0x2a, 0xb3, 0x1d, 0xa0, - 0x98, 0x51, 0x92, 0x0e, 0x84, 0x0c, 0x82, 0x8a, 0x18, 0x14, 0x9b, 0x02, 0xb9, 0x4a, 0x33, 0xc4, - 0x2a, 0xa9, 0x72, 0xe0, 0x4a, 0x91, 0x08, 0x00, 0x9b, 0x09, 0x13, 0x23, 0xad, 0x0a, 0x92, 0x62, - 0xac, 0x33, 0xa1, 0x0e, 0x18, 0x92, 0x8d, 0x52, 0xb1, 0x2b, 0x1b, 0x07, 0x0c, 0x20, 0xb8, 0x32, - 0xab, 0x24, 0x9a, 0xb8, 0x1d, 0x17, 0x0e, 0x91, 0x30, 0xb8, 0x38, 0x90, 0x8b, 0x04, 0x49, 0xa3, - 0xbd, 0x3b, 0x17, 0x8a, 0xb0, 0x33, 0x9f, 0x12, 0x90, 0x88, 0x8b, 0x25, 0xb0, 0x2a, 0x04, 0x19, - 0xd8, 0x51, 0xc8, 0x28, 0x0c, 0xc3, 0x2b, 0x25, 0x19, 0xe0, 0x2b, 0xa3, 0x5a, 0x82, 0x0c, 0xa1, - 0x4a, 0x88, 0x11, 0xb9, 0x48, 0x13, 0xfb, 0x29, 0x29, 0x81, 0x10, 0xb2, 0x2e, 0xe0, 0x70, 0xa0, - 0x09, 0x01, 0x8a, 0x81, 0x09, 0x08, 0x70, 0xc4, 0x0c, 0x03, 0xa9, 0x33, 0xbc, 0x05, 0x1c, 0x84, - 0x89, 0xc9, 0x41, 0x89, 0x02, 0x99, 0x1b, 0x80, 0x16, 0x0b, 0xc0, 0x19, 0x22, 0xb1, 0x1c, 0x14, - 0xad, 0x05, 0x9a, 0x01, 0x68, 0xd3, 0x2b, 0xa1, 0x19, 0x03, 0x09, 0xd8, 0x62, 0xa9, 0x09, 0x02, - 0x2a, 0xe2, 0x3a, 0xb2, 0x10, 0x8b, 0x06, 0x99, 0x1a, 0xc2, 0x6b, 0xa3, 0x29, 0x08, 0xf8, 0x48, - 0x80, 0x82, 0x1d, 0x93, 0x2c, 0xb0, 0x10, 0x08, 0x10, 0xd9, 0x20, 0x38, 0xf3, 0x30, 0x9c, 0x01, - 0x99, 0x72, 0xb0, 0x2b, 0xb2, 0x72, 0xc9, 0x00, 0x49, 0xd2, 0x1b, 0x02, 0x08, 0x90, 0x41, 0xab, - 0x40, 0x97, 0x1c, 0xb1, 0x69, 0xa2, 0x0c, 0xa3, 0x1a, 0x83, 0x08, 0x90, 0x1c, 0xb2, 0x68, 0xb1, - 0x0b, 0x52, 0x93, 0xae, 0x11, 0x09, 0xd8, 0x61, 0xa8, 0x02, 0x0c, 0x84, 0x1c, 0x91, 0x02, 0x00, - 0xbc, 0x33, 0x01, 0xf0, 0x5a, 0xb1, 0x88, 0x08, 0xa0, 0x31, 0x11, 0xaf, 0x12, 0x20, 0x88, 0x96, - 0x0d, 0x88, 0x23, 0xbc, 0x00, 0x29, 0x02, 0x33, 0xae, 0x93, 0x1f, 0x04, 0xa8, 0x8a, 0x33, 0x82, - 0x9e, 0x04, 0x1d, 0xa2, 0x10, 0x1b, 0x99, 0x85, 0x1c, 0xb3, 0x1b, 0x23, 0x88, 0x05, 0xaf, 0x31, - 0x91, 0x9b, 0x21, 0xc9, 0x13, 0x3d, 0xd3, 0x28, 0x8e, 0x15, 0x99, 0x19, 0x10, 0x81, 0x0a, 0x84, - 0x0d, 0x85, 0x9d, 0x14, 0x9b, 0x02, 0x2b, 0xa5, 0x1b, 0xa2, 0x28, 0x33, 0xcc, 0x02, 0x9f, 0x12, - 0x31, 0xca, 0xb0, 0x78, 0xb1, 0x10, 0x2a, 0x90, 0x01, 0xc8, 0x6b, 0xb3, 0x2d, 0x85, 0x8b, 0x01, - 0x99, 0x63, 0xda, 0x21, 0x98, 0x00, 0x1c, 0x85, 0xaa, 0x30, 0xb1, 0x08, 0x00, 0x61, 0xc8, 0x08, - 0x0b, 0x23, 0x0c, 0x95, 0x19, 0xb8, 0x9c, 0x37, 0x99, 0x81, 0x0d, 0x85, 0x8b, 0x04, 0x9b, 0x12, - 0x88, 0x81, 0x9d, 0x05, 0x2a, 0xb5, 0x0b, 0x02, 0x18, 0xd9, 0x18, 0x20, 0x81, 0x01, 0xea, 0x38, - 0x89, 0x37, 0x8d, 0x98, 0x00, 0x14, 0xbc, 0x22, 0x99, 0x13, 0x2b, 0xa5, 0xae, 0x12, 0x41, 0xe8, - 0x19, 0x04, 0x9a, 0x01, 0x90, 0x20, 0x8c, 0x02, 0x89, 0xca, 0x00, 0x73, 0xb0, 0x18, 0x89, 0x85, - 0x1e, 0x84, 0x98, 0x19, 0x83, 0x8c, 0x99, 0x00, 0x71, 0xa4, 0x8d, 0x03, 0x0d, 0x93, 0x2a, 0xa3, - 0x1b, 0x42, 0xeb, 0x02, 0x0c, 0x05, 0x8a, 0x08, 0xa1, 0x49, 0xc1, 0x08, 0x01, 0x02, 0x9a, 0x10, - 0x90, 0x68, 0x85, 0xad, 0x40, 0xd0, 0x18, 0x12, 0x9d, 0x14, 0x9b, 0x13, 0x8d, 0x04, 0x0a, 0xa1, - 0x18, 0x83, 0xaf, 0x05, 0x0b, 0x83, 0x89, 0x12, 0xaa, 0xab, 0x74, 0xa8, 0x08, 0x41, 0xb0, 0x99, - 0x09, 0x16, 0x0a, 0xa2, 0x98, 0x0c, 0xa9, 0x37, 0xad, 0x33, 0x9a, 0x95, 0x0c, 0x82, 0x20, 0x08, - 0xda, 0x21, 0xbb, 0x43, 0x08, 0xb0, 0x6b, 0xa3, 0x09, 0x9c, 0x00, 0x16, 0x8c, 0x01, 0x82, 0x8c, - 0x01, 0x16, 0xad, 0x12, 0x18, 0xb0, 0x8b, 0x34, 0xba, 0x15, 0x1d, 0x95, 0x0d, 0x12, 0x99, 0x88, - 0x89, 0x52, 0xd0, 0x29, 0x90, 0x91, 0x28, 0x31, 0xdc, 0x92, 0x40, 0x98, 0xa2, 0x3d, 0x83, 0x98, - 0x98, 0x29, 0x09, 0x17, 0x19, 0xd8, 0x0f, 0x13, 0x8a, 0x80, 0x0a, 0x27, 0xac, 0x80, 0x39, 0x85, - 0xa9, 0x40, 0xd0, 0x88, 0x30, 0x93, 0xcb, 0x50, 0xa1, 0x2a, 0xf9, 0x42, 0xa9, 0x10, 0x88, 0x28, - 0xc9, 0x34, 0x8a, 0xa3, 0x0f, 0x13, 0xca, 0x28, 0xa1, 0x21, 0x9a, 0xa1, 0x28, 0x29, 0xa6, 0x68, - 0xc8, 0x09, 0x90, 0x7b, 0xa2, 0x98, 0x2a, 0x04, 0xa8, 0x1b, 0x20, 0x03, 0xd8, 0x4c, 0xb9, 0x26, - 0x1a, 0x05, 0xac, 0x01, 0x00, 0xa0, 0x1b, 0x10, 0xb8, 0x34, 0xff, 0x33, 0xaa, 0x22, 0x9a, 0xa1, - 0x1b, 0x52, 0xd2, 0x09, 0x88, 0x22, 0xab, 0x33, 0x80, 0xda, 0x22, 0x8e, 0x85, 0x19, 0x91, 0x15, - 0xad, 0x52, 0xdb, 0x32, 0x09, 0xc8, 0x19, 0x04, 0xab, 0x03, 0xab, 0x36, 0xba, 0x11, 0xa8, 0x09, - 0x65, 0xd0, 0x08, 0x88, 0x11, 0x08, 0x98, 0x80, 0x49, 0xa1, 0x31, 0xce, 0x12, 0x61, 0xc9, 0x19, - 0x08, 0x04, 0xab, 0x21, 0xb1, 0x71, 0xda, 0x30, 0xc8, 0x58, 0x80, 0x89, 0x89, 0x11, 0x21, 0xf9, - 0x48, 0xa0, 0x00, 0x8a, 0x83, 0x19, 0x9b, 0x55, 0x80, 0xba, 0x29, 0x14, 0xca, 0x51, 0xc0, 0x20, - 0xad, 0x31, 0x02, 0x0b, 0x90, 0x22, 0xe9, 0x3b, 0xe0, 0x42, 0xb9, 0x02, 0x8e, 0x14, 0x0a, 0xb3, - 0x4b, 0xa8, 0x15, 0x9a, 0xb0, 0x7b, 0x01, 0x91, 0x1b, 0x08, 0x96, 0x1c, 0xc1, 0x38, 0x98, 0x22, - 0xaa, 0x80, 0x3b, 0x07, 0x1a, 0xb2, 0x1e, 0x82, 0xac, 0x33, 0x99, 0x59, 0xb3, 0xbb, 0x6b, 0x90, - 0x83, 0x71, 0xe1, 0x19, 0x88, 0x12, 0x0c, 0x86, 0x8a, 0x80, 0x91, 0x89, 0x3a, 0x83, 0x84, 0x09, - 0xde, 0x41, 0x98, 0x24, 0xac, 0x01, 0x80, 0x38, 0xf2, 0x2c, 0x83, 0x99, 0x01, 0xae, 0x33, 0x02, - 0x98, 0xac, 0x23, 0x1a, 0xb3, 0x98, 0x1f, 0x96, 0x1a, 0x92, 0x8a, 0x22, 0x92, 0x0a, 0xbf, 0x43, - 0x90, 0x12, 0xbd, 0x73, 0xa9, 0x91, 0x40, 0xaa, 0x81, 0x9a, 0x00, 0x3a, 0xa6, 0x68, 0xb0, 0xa9, - 0x72, 0x90, 0x98, 0x10, 0x81, 0xab, 0x08, 0x45, 0xf9, 0x38, 0xb1, 0x28, 0xc0, 0x38, 0x02, 0x9b, - 0xb9, 0x73, 0xc9, 0x41, 0x00, 0xb9, 0x28, 0x01, 0xb9, 0x2b, 0xf1, 0x61, 0x88, 0xa8, 0x29, 0x02, - 0x28, 0x96, 0x9f, 0x11, 0x82, 0x8c, 0x94, 0x2a, 0xa1, 0x40, 0xc8, 0x29, 0x02, 0x91, 0xda, 0x50, - 0xb8, 0x22, 0x0a, 0x93, 0x9a, 0x89, 0x00, 0x7a, 0xe2, 0x2a, 0x01, 0xb1, 0x2b, 0x28, 0x92, 0xfc, - 0x72, 0xc0, 0x10, 0x1a, 0x95, 0x1b, 0x81, 0x20, 0xca, 0x22, 0x8d, 0x04, 0x8a, 0x52, 0xf8, 0x19, - 0x01, 0x01, 0xbb, 0x21, 0x80, 0x48, 0xb9, 0x11, 0x0a, 0x06, 0xc9, 0x1a, 0xb3, 0x70, 0x99, 0xa0, - 0x70, 0xa1, 0x29, 0x08, 0xe9, 0x70, 0xb0, 0x10, 0x9a, 0x13, 0x29, 0xb8, 0x89, 0x18, 0x95, 0x2e, - 0xd3, 0x1a, 0x02, 0x81, 0x89, 0x88, 0x10, 0x05, 0x9a, 0x09, 0x94, 0xbc, 0x60, 0x92, 0x9a, 0x21, - 0x2c, 0xa7, 0x09, 0x39, 0xe3, 0x49, 0xa0, 0x82, 0x0f, 0x13, 0x98, 0xaa, 0x09, 0x63, 0xb0, 0x2a, - 0xb1, 0x39, 0xa9, 0x27, 0xac, 0x81, 0x61, 0x91, 0xba, 0x2c, 0x85, 0x98, 0x09, 0x22, 0xbb, 0x62, - 0xa0, 0x8a, 0x31, 0x81, 0x40, 0xe9, 0x98, 0x34, 0xbb, 0x13, 0x8f, 0x01, 0x80, 0x1a, 0xc4, 0x59, - 0xb9, 0x42, 0xc8, 0x21, 0x9d, 0x13, 0x18, 0xc9, 0x01, 0x28, 0x80, 0x2a, 0xf1, 0x51, 0x98, 0x88, - 0x88, 0xb8, 0x52, 0x24, 0xf0, 0x1c, 0x01, 0x03, 0xbd, 0x30, 0x80, 0x00, 0xb8, 0x19, 0x90, 0x41, - 0x21, 0x95, 0xdf, 0x12, 0x11, 0xd8, 0x39, 0x83, 0x88, 0x99, 0x19, 0x22, 0xc9, 0x53, 0xac, 0xa0, - 0x2a, 0x27, 0xaa, 0x2a, 0x96, 0x2b, 0xd2, 0x39, 0xb8, 0x72, 0xb8, 0x10, 0x0a, 0x00, 0x85, 0x0a, - 0x9a, 0x33, 0xbd, 0x16, 0x8a, 0xa0, 0x48, 0x81, 0x92, 0x0e, 0xa1, 0x48, 0xa8, 0x13, 0x99, 0x8f, - 0x33, 0xb9, 0x89, 0x42, 0x21, 0xea, 0x89, 0x30, 0xb1, 0x35, 0x8d, 0xa3, 0x9c, 0x13, 0x0c, 0x81, - 0xb2, 0x60, 0xe9, 0x21, 0xa9, 0x32, 0x98, 0x11, 0xf9, 0x49, 0x92, 0x1a, 0xa5, 0x3b, 0xc1, 0x8a, - 0x23, 0x81, 0xbd, 0x52, 0xc8, 0x38, 0xd3, 0x4a, 0x81, 0x80, 0x8b, 0x88, 0x1a, 0x05, 0x91, 0x0e, - 0x84, 0x19, 0xa0, 0x88, 0x52, 0xc1, 0x9a, 0x62, 0x98, 0x21, 0xa9, 0xa9, 0x7b, 0xd1, 0x19, 0x82, - 0x1b, 0x93, 0x0e, 0x13, 0xba, 0x72, 0x92, 0x8b, 0x98, 0x23, 0xbb, 0x61, 0x80, 0xa0, 0xa8, 0x49, - 0xa0, 0x28, 0x01, 0x4b, 0xf1, 0x3d, 0x58, 0xb0, 0xa1, 0x7b, 0xb8, 0x38, 0x81, 0x10, 0xc8, 0x1a, - 0x02, 0x89, 0x28, 0x81, 0x27, 0x9e, 0x01, 0x31, 0xdd, 0x22, 0x90, 0xb0, 0x3c, 0x02, 0x90, 0x89, - 0x09, 0x23, 0xab, 0x07, 0x2e, 0xb0, 0x21, 0x12, 0x8f, 0xb0, 0x34, 0x9a, 0xa0, 0x79, 0x83, 0xac, - 0x28, 0x98, 0x22, 0x88, 0xa8, 0x2e, 0xa5, 0x2b, 0x93, 0x08, 0x2a, 0x96, 0x99, 0x0d, 0x02, 0x20, - 0xc0, 0x8a, 0x31, 0x35, 0xdd, 0x12, 0x2a, 0xf0, 0x50, 0xb8, 0x20, 0x2b, 0xa3, 0x30, 0xda, 0x10, - 0x9b, 0x14, 0x8a, 0x2c, 0xb5, 0x28, 0x2a, 0xa5, 0xcb, 0x71, 0x90, 0x81, 0x8b, 0x91, 0x32, 0xa9, - 0x81, 0x48, 0xe0, 0x31, 0xab, 0xc9, 0x62, 0x80, 0x22, 0xcf, 0x21, 0x10, 0x91, 0x0d, 0xa2, 0x20, - 0x99, 0x88, 0x80, 0x08, 0x71, 0xe2, 0x88, 0x1a, 0x04, 0x12, 0xbd, 0x32, 0xaa, 0x84, 0x8c, 0x12, - 0x91, 0x2a, 0x92, 0xea, 0x3b, 0x37, 0xb9, 0x98, 0x59, 0x92, 0xb9, 0x59, 0xc1, 0x20, 0x19, 0xc0, - 0x29, 0xe9, 0x31, 0x23, 0xdd, 0x29, 0x02, 0x18, 0x84, 0x9c, 0x82, 0x80, 0x29, 0xb1, 0x8a, 0x52, - 0x84, 0xcf, 0x32, 0x90, 0x29, 0xa1, 0x1a, 0xc1, 0x33, 0x1c, 0xf8, 0x81, 0x39, 0x82, 0x8d, 0x02, - 0x08, 0x90, 0xab, 0x70, 0xe1, 0x4a, 0x13, 0xbb, 0x20, 0x11, 0xc9, 0x30, 0x3a, 0xc7, 0x0a, 0x00, - 0x04, 0x9d, 0x22, 0x10, 0xe9, 0x11, 0x99, 0x81, 0x28, 0xc0, 0x01, 0x0f, 0x93, 0x18, 0x10, 0xaa, - 0x17, 0x0e, 0x92, 0x1a, 0x01, 0x12, 0xa9, 0x8d, 0x90, 0x75, 0xa8, 0x99, 0x30, 0xb2, 0x0c, 0x03, - 0x1a, 0x19, 0xa5, 0x89, 0xbc, 0x73, 0xa3, 0x9b, 0xa8, 0x78, 0x91, 0x99, 0x42, 0xa8, 0x00, 0x1b, - 0xb4, 0x1a, 0x09, 0x17, 0xaa, 0xa9, 0x4a, 0x87, 0x88, 0x19, 0x00, 0x90, 0x2b, 0x05, 0x10, 0xfc, - 0x30, 0xa0, 0x29, 0xa0, 0x08, 0x42, 0xe9, 0x0a, 0x61, 0xc8, 0x31, 0x8b, 0xa3, 0x3a, 0x90, 0x53, - 0xbe, 0x52, 0x90, 0x09, 0xaa, 0x20, 0x33, 0xdb, 0x80, 0x50, 0xc1, 0x4a, 0x84, 0x9b, 0x09, 0x03, - 0x88, 0xbc, 0x31, 0x43, 0xe9, 0x09, 0x20, 0x93, 0x2c, 0xa3, 0x8c, 0x18, 0x07, 0x1d, 0xc2, 0x4a, - 0x01, 0xa8, 0x09, 0xa0, 0x60, 0xc8, 0x21, 0xa9, 0x13, 0x1c, 0x05, 0xba, 0x58, 0xd2, 0x5b, 0x91, - 0x8a, 0x08, 0x12, 0x01, 0xbc, 0x38, 0x82, 0x49, 0xa1, 0x28, 0xc8, 0x2d, 0xa6, 0x0d, 0x13, 0x1a, - 0x91, 0xb8, 0x3c, 0x94, 0x01, 0x0f, 0x04, 0x8c, 0x01, 0x20, 0xd8, 0x40, 0x99, 0x83, 0x8e, 0x02, - 0x90, 0x0a, 0x14, 0x99, 0xc0, 0x68, 0x90, 0x88, 0x30, 0xd8, 0x08, 0x88, 0x05, 0x0c, 0xa0, 0x41, - 0xa0, 0x80, 0x1d, 0x84, 0x09, 0x09, 0x04, 0x8b, 0xd0, 0x61, 0xb8, 0x08, 0x30, 0x02, 0xbc, 0x08, - 0x51, 0xd8, 0x22, 0x8c, 0x92, 0x1a, 0x84, 0x09, 0x49, 0xe2, 0x4a, 0xa0, 0x98, 0x3a, 0xb4, 0x69, - 0x88, 0x91, 0x9b, 0x73, 0x90, 0x09, 0x9a, 0xc1, 0x78, 0xb2, 0x0a, 0x32, 0x09, 0xc4, 0x2c, 0x81, - 0x80, 0xaa, 0x70, 0xb0, 0x0b, 0x63, 0xc8, 0x28, 0x88, 0x28, 0xc1, 0x1d, 0x04, 0x88, 0x98, 0x58, - 0xd0, 0x38, 0x91, 0x90, 0x18, 0xa9, 0x11, 0xc9, 0x7b, 0x93, 0x1a, 0xd2, 0x6a, 0xa2, 0x9a, 0x28, - 0x06, 0xbb, 0x01, 0x09, 0x01, 0x22, 0xdc, 0x00, 0x32, 0xba, 0x43, 0xfa, 0x40, 0x08, 0xc0, 0x29, - 0x08, 0x12, 0x21, 0xec, 0x88, 0x21, 0x28, 0xc4, 0x0c, 0x00, 0x04, 0x29, 0xe9, 0x00, 0x39, 0x94, - 0x99, 0x8a, 0x12, 0x0b, 0xc6, 0x2c, 0x92, 0x19, 0x31, 0xa6, 0x8b, 0x1a, 0x17, 0x9a, 0x89, 0x12, - 0x88, 0x22, 0xbc, 0x01, 0x0b, 0x35, 0xa2, 0xbe, 0x88, 0x71, 0xa3, 0x9e, 0x01, 0x04, 0x8b, 0x82, - 0x0a, 0xa0, 0x61, 0xb2, 0x9d, 0x09, 0x35, 0xa1, 0x0b, 0x80, 0x21, 0xb9, 0x48, 0x9b, 0x87, 0x2a, - 0xb1, 0x0a, 0x10, 0x83, 0x72, 0xfb, 0x18, 0x12, 0x99, 0xb9, 0x14, 0x1d, 0x04, 0x98, 0x1c, 0xb1, - 0x71, 0xb0, 0x19, 0x0a, 0xa5, 0x59, 0xc0, 0x18, 0x10, 0x91, 0x8a, 0x10, 0x90, 0x0b, 0x17, 0x1a, - 0xf0, 0x39, 0x93, 0x08, 0x8b, 0x05, 0x1a, 0xba, 0x05, 0x0e, 0x02, 0x88, 0x08, 0xb9, 0x2a, 0x07, - 0x58, 0xe8, 0x28, 0x90, 0x81, 0x2b, 0xc3, 0x4b, 0x92, 0x10, 0x99, 0x0a, 0x17, 0x9b, 0x82, 0xa8, - 0x3a, 0x26, 0xad, 0x03, 0x2b, 0xb2, 0x90, 0x28, 0xa8, 0xf1, 0x4a, 0x12, 0xcd, 0x31, 0x13, 0xaa, - 0x80, 0x8c, 0x07, 0x4b, 0xb0, 0x38, 0xf8, 0x49, 0xb3, 0x29, 0x89, 0x28, 0xa3, 0xad, 0x48, 0x02, - 0xd9, 0x11, 0x08, 0xe0, 0x40, 0xb2, 0x2d, 0x92, 0x01, 0xab, 0x98, 0x44, 0x19, 0xc0, 0x29, 0xa0, - 0x24, 0xac, 0x35, 0xdb, 0x08, 0x40, 0xd0, 0x29, 0x00, 0x02, 0x1d, 0xc2, 0x49, 0x80, 0xb8, 0x62, - 0xc9, 0x30, 0x98, 0x91, 0x0c, 0x24, 0xb8, 0x08, 0x08, 0x98, 0x28, 0xd1, 0x28, 0x42, 0xfc, 0x00, - 0x50, 0xa0, 0x99, 0x28, 0x13, 0xd0, 0x0a, 0x18, 0x12, 0x06, 0x9b, 0x10, 0xd8, 0x48, 0x82, 0x1b, - 0xdc, 0x61, 0xb0, 0x89, 0x20, 0x04, 0x99, 0xa1, 0x0b, 0x92, 0x61, 0x99, 0x98, 0x00, 0x5b, 0x94, - 0xba, 0x20, 0x52, 0xc2, 0xcb, 0x78, 0x90, 0x11, 0x9b, 0x32, 0xd9, 0x2a, 0x43, 0xc9, 0xb8, 0x72, - 0xa8, 0x90, 0x09, 0x93, 0x5b, 0xa5, 0x0c, 0x13, 0x98, 0x99, 0x88, 0x23, 0x8b, 0x26, 0xdd, 0x01, - 0x1b, 0x07, 0x80, 0x8a, 0x90, 0x3a, 0x85, 0x8a, 0x19, 0x93, 0x2b, 0x84, 0x8f, 0x00, 0x32, 0x81, - 0xdf, 0x21, 0x81, 0x08, 0x0b, 0x85, 0x0b, 0x22, 0xb1, 0x9e, 0x11, 0x30, 0xf3, 0x2b, 0x98, 0x32, - 0x99, 0x18, 0x14, 0xeb, 0x31, 0x88, 0xc0, 0x59, 0x81, 0x94, 0xaf, 0x14, 0x0a, 0x90, 0x39, 0x95, - 0x9c, 0x10, 0x18, 0xa3, 0x0d, 0x13, 0xba, 0x80, 0x61, 0xa8, 0x10, 0x89, 0xa3, 0x0c, 0x21, 0x05, - 0x0d, 0xb2, 0x69, 0xb1, 0x98, 0x61, 0xd0, 0x28, 0xb8, 0x30, 0xa8, 0x22, 0xab, 0xc1, 0x78, 0xa2, - 0x9a, 0x42, 0xd2, 0x1b, 0x01, 0xc1, 0x2b, 0x84, 0x23, 0xbc, 0x80, 0x40, 0xb3, 0x00, 0x8e, 0x84, - 0x0c, 0x12, 0xa0, 0x0a, 0x31, 0x13, 0xed, 0x1b, 0x85, 0x21, 0x8e, 0x93, 0x2b, 0xb2, 0x5b, 0x23, - 0xe8, 0x2a, 0x91, 0xc8, 0x5b, 0x83, 0x09, 0x02, 0x8d, 0x92, 0x39, 0x18, 0x04, 0x9d, 0xa0, 0x39, - 0xa3, 0x0a, 0x58, 0xa4, 0x1b, 0x99, 0xa2, 0x71, 0xc8, 0x44, 0xdb, 0x10, 0x18, 0x93, 0x19, 0xbb, - 0x88, 0x47, 0xeb, 0x21, 0x99, 0x03, 0xaa, 0x41, 0xa8, 0xa0, 0x51, 0x09, 0xb1, 0x3c, 0x15, 0xb9, - 0x9b, 0x22, 0x21, 0x1c, 0xb6, 0x2a, 0x9b, 0x45, 0x92, 0xdc, 0x2a, 0x84, 0x10, 0xfa, 0x38, 0x01, - 0xa0, 0x39, 0xb0, 0xaa, 0x70, 0x97, 0x8a, 0x98, 0x41, 0x91, 0x8a, 0x00, 0x10, 0x00, 0xd9, 0x09, - 0xca, 0x45, 0x18, 0xc8, 0x18, 0x29, 0x95, 0x0a, 0xaa, 0x16, 0xac, 0x24, 0xab, 0x10, 0x00, 0x33, - 0xca, 0x9b, 0x15, 0x10, 0xab, 0x13, 0xae, 0x32, 0x80, 0x8d, 0x85, 0x1d, 0x94, 0x29, 0xc8, 0x20, - 0xa8, 0x52, 0xa0, 0xa9, 0x20, 0xa8, 0x24, 0xcb, 0x10, 0x34, 0xfa, 0x19, 0x0a, 0x15, 0x19, 0xc1, - 0x9c, 0x42, 0x10, 0xd0, 0x2a, 0x22, 0xc9, 0x8a, 0x22, 0xc8, 0x5a, 0x93, 0x20, 0x9d, 0x82, 0x44, - 0xca, 0x18, 0x39, 0xa5, 0xad, 0x30, 0xa1, 0x50, 0xc9, 0x03, 0x8d, 0x02, 0x38, 0xe1, 0x0a, 0x22, - 0x80, 0x9a, 0x13, 0x99, 0x04, 0xae, 0x11, 0xa1, 0x4b, 0x14, 0xa8, 0x9a, 0x01, 0x35, 0xc0, 0x4a, - 0xfa, 0x11, 0x91, 0x0f, 0x04, 0x9a, 0x81, 0x28, 0xa0, 0x31, 0xa8, 0x90, 0xb0, 0x4a, 0x69, 0xb2, - 0x91, 0x1f, 0x92, 0x8b, 0x11, 0x25, 0xeb, 0x40, 0xb9, 0x11, 0x20, 0xa0, 0x13, 0x9f, 0x86, 0x08, - 0xa9, 0x08, 0x20, 0xc0, 0x23, 0xaf, 0x22, 0x89, 0x03, 0x82, 0x8d, 0x99, 0x02, 0x01, 0x1c, 0x00, - 0xd3, 0x2c, 0xc3, 0x7b, 0xa3, 0x2c, 0x84, 0xaa, 0x18, 0x08, 0x94, 0x2a, 0x95, 0x0e, 0x02, 0x0b, - 0x82, 0x01, 0xbc, 0x60, 0xc1, 0x1b, 0x23, 0x19, 0xc1, 0x2c, 0xa4, 0x4a, 0xb0, 0x21, 0xb8, 0x8e, - 0x04, 0x2b, 0x96, 0x1b, 0x03, 0xa0, 0x18, 0xab, 0x92, 0x49, 0x88, 0x21, 0xfa, 0x6a, 0xa2, 0x19, - 0xc9, 0x44, 0xba, 0x13, 0x8d, 0x80, 0x12, 0x80, 0xc2, 0x3c, 0xa8, 0x11, 0x01, 0xaa, 0x68, 0xa0, - 0x13, 0xbf, 0x33, 0x38, 0xc2, 0x8b, 0x91, 0x0b, 0x17, 0x1d, 0xd3, 0x3a, 0xb4, 0x5b, 0xb2, 0x2d, - 0x85, 0x19, 0xa9, 0x1b, 0x86, 0x89, 0x00, 0x0a, 0x92, 0x30, 0xa8, 0xb0, 0x4d, 0x84, 0x80, 0xbb, - 0x3a, 0x11, 0x07, 0x29, 0xb1, 0x8d, 0x80, 0x48, 0xe3, 0x0a, 0x33, 0x09, 0xfa, 0x38, 0xa3, 0x5a, - 0xa8, 0x02, 0xbb, 0x49, 0x02, 0xd9, 0x09, 0x49, 0xb3, 0x70, 0xd9, 0x21, 0x88, 0x20, 0xc1, 0x0b, - 0x33, 0x0b, 0x97, 0x8d, 0xa2, 0x58, 0xb1, 0x80, 0x0a, 0x21, 0x84, 0x9d, 0x01, 0x00, 0x88, 0x22, - 0xfa, 0x31, 0xf0, 0x39, 0x90, 0xad, 0x35, 0x98, 0xa8, 0x3a, 0x96, 0x19, 0x88, 0x11, 0x88, 0xca, - 0x14, 0x8b, 0xb2, 0x68, 0xb2, 0xac, 0x71, 0x80, 0xb1, 0x2a, 0x02, 0xc1, 0x0b, 0x49, 0x87, 0x0c, - 0x91, 0x28, 0xca, 0x43, 0x88, 0xbb, 0x01, 0x5a, 0x84, 0x89, 0x0a, 0x33, 0xfb, 0x51, 0xb8, 0x48, - 0x9a, 0x11, 0xb9, 0x40, 0x92, 0x6a, 0xd0, 0x28, 0x88, 0x10, 0xba, 0x42, 0xd9, 0x30, 0x92, 0x0d, - 0xb1, 0x62, 0xd9, 0x21, 0x98, 0x19, 0x82, 0x89, 0x02, 0x0e, 0x15, 0xab, 0x01, 0x28, 0x91, 0x89, - 0x88, 0x08, 0xf0, 0x6c, 0x95, 0x8a, 0x88, 0x30, 0x90, 0xaa, 0x31, 0x93, 0x9f, 0x11, 0xb3, 0x1d, - 0x84, 0x48, 0xe9, 0x20, 0x80, 0x81, 0x9b, 0x10, 0x03, 0xaf, 0x33, 0x81, 0xcc, 0x31, 0x00, 0xb1, - 0x80, 0x3c, 0xd1, 0x50, 0xb9, 0x61, 0xc9, 0x41, 0xa8, 0x19, 0xa9, 0x16, 0x9a, 0x81, 0xa0, 0x18, - 0x02, 0x70, 0xe8, 0x20, 0x0a, 0x92, 0x0c, 0x81, 0x80, 0x2b, 0x93, 0x43, 0x9e, 0x14, 0x88, 0x9a, - 0x11, 0x39, 0xd1, 0x3a, 0xd2, 0x2c, 0xa2, 0x61, 0xb0, 0x8a, 0x30, 0x08, 0x48, 0xf0, 0x1a, 0x28, - 0xa3, 0x42, 0xac, 0x02, 0x3a, 0xf3, 0x1e, 0x81, 0x81, 0x20, 0xb8, 0x38, 0xbd, 0x36, 0xb8, 0x08, - 0x01, 0xb2, 0x09, 0xad, 0x52, 0xa2, 0x2c, 0x93, 0xeb, 0x31, 0x89, 0x06, 0xbb, 0x51, 0x90, 0x80, - 0xac, 0x71, 0xa0, 0x28, 0x9a, 0x82, 0x8d, 0x05, 0x80, 0x88, 0xb0, 0x38, 0xc8, 0x22, 0x40, 0xa4, - 0x1d, 0xe0, 0x39, 0x91, 0x10, 0xa2, 0x8a, 0x91, 0x1f, 0x84, 0x11, 0x0a, 0xa9, 0x12, 0xbe, 0x10, - 0x43, 0x98, 0x23, 0xcd, 0x39, 0xc0, 0x79, 0xa2, 0x0a, 0x90, 0x18, 0x02, 0x8c, 0x12, 0x40, 0xc4, - 0x1d, 0x81, 0xa8, 0x39, 0xa3, 0x41, 0xcb, 0x11, 0x90, 0x82, 0xac, 0x64, 0xa8, 0x9b, 0x32, 0xba, - 0x33, 0x3a, 0xf2, 0x90, 0x2a, 0x12, 0x98, 0x02, 0x9c, 0x72, 0xf0, 0x29, 0x90, 0x38, 0x83, 0x1a, - 0xa4, 0xaf, 0x33, 0x8b, 0x07, 0x9d, 0x02, 0x91, 0x0c, 0x93, 0x48, 0xb1, 0x5a, 0xc0, 0x1b, 0x04, - 0x19, 0x80, 0x91, 0x2b, 0xa8, 0x86, 0x3c, 0xc2, 0x29, 0x00, 0xc0, 0x2b, 0x92, 0x69, 0x93, 0xba, - 0x68, 0xc0, 0x48, 0x90, 0x90, 0x19, 0xb1, 0x1b, 0x9e, 0x27, 0x9a, 0x22, 0xca, 0x19, 0x43, 0x9a, - 0x94, 0x1c, 0x92, 0x38, 0xc2, 0x0e, 0x12, 0x8c, 0x14, 0xbd, 0x43, 0x9a, 0x02, 0x18, 0xa9, 0x22, - 0x8a, 0x86, 0x0d, 0xa1, 0x12, 0xab, 0x05, 0xab, 0x08, 0x73, 0xb1, 0x0b, 0x04, 0x1b, 0xa5, 0x0c, - 0x15, 0x99, 0x00, 0xd9, 0x08, 0x24, 0x1b, 0xe1, 0x40, 0xda, 0x21, 0x98, 0x20, 0x08, 0x98, 0x31, - 0x89, 0xf1, 0x59, 0xa0, 0x09, 0x89, 0x33, 0xbe, 0x25, 0xa9, 0x28, 0xb1, 0x62, 0xb9, 0x18, 0x18, - 0xe2, 0x48, 0xb8, 0x21, 0x98, 0xcb, 0x54, 0x98, 0x08, 0x8a, 0xa5, 0x0f, 0x85, 0x1a, 0xa1, 0x28, - 0x02, 0xda, 0x11, 0x1b, 0x85, 0x8b, 0x92, 0xa9, 0x2a, 0x27, 0x08, 0x9b, 0x14, 0xca, 0x29, 0x18, - 0x07, 0xab, 0x13, 0x0a, 0xd8, 0x10, 0x21, 0xa1, 0x29, 0x8d, 0x97, 0x8f, 0x02, 0x12, 0x8b, 0x82, - 0x8a, 0xa9, 0x32, 0x52, 0xf1, 0x2a, 0x92, 0x19, 0xc9, 0x62, 0x98, 0x88, 0x0a, 0x14, 0xab, 0x22, - 0x15, 0x9f, 0x01, 0x2b, 0x82, 0xba, 0x73, 0xa0, 0x2b, 0x91, 0xa1, 0x2d, 0x95, 0x2b, 0xb2, 0x1a, - 0x44, 0xda, 0x22, 0x8a, 0x94, 0x1d, 0x81, 0xa8, 0x09, 0x70, 0xb1, 0x1a, 0x21, 0x91, 0xbb, 0x22, - 0x28, 0x9a, 0xa7, 0x4d, 0xc2, 0x3a, 0x02, 0xb0, 0x8b, 0x30, 0x97, 0x8d, 0x81, 0x30, 0x8a, 0x21, - 0xd1, 0x19, 0x99, 0x72, 0xa1, 0xbb, 0x54, 0xa9, 0xa8, 0x18, 0x04, 0x19, 0xc3, 0x48, 0xda, 0x29, - 0x15, 0x09, 0x99, 0x18, 0x19, 0x91, 0xaa, 0x92, 0x4a, 0x33, 0xa9, 0xff, 0x20, 0x20, 0xc5, 0x2b, - 0xa2, 0x28, 0xa0, 0x20, 0xf1, 0x39, 0x93, 0x89, 0xba, 0x68, 0x94, 0x8c, 0x53, 0xbb, 0x84, 0x3a, - 0x93, 0x0d, 0x92, 0x38, 0xf1, 0x1c, 0x01, 0x01, 0x89, 0x00, 0x82, 0x9d, 0xb0, 0x71, 0xc3, 0x09, - 0x13, 0xac, 0x12, 0x8a, 0x32, 0xb9, 0x44, 0x9b, 0xcc, 0x21, 0x08, 0x16, 0x8b, 0x01, 0xb8, 0x68, - 0xa0, 0x29, 0x90, 0x79, 0xf2, 0x3b, 0xa2, 0x48, 0xc1, 0x30, 0xd8, 0x1c, 0x85, 0x1b, 0xa2, 0x49, - 0x90, 0x89, 0x19, 0x01, 0x12, 0x0c, 0x86, 0xab, 0xa0, 0x78, 0x91, 0x88, 0x31, 0xb9, 0x10, 0xac, - 0x33, 0x1a, 0x17, 0x9e, 0x83, 0x8e, 0x12, 0x80, 0x20, 0xba, 0x82, 0x8f, 0x02, 0x89, 0x24, 0x08, - 0xe9, 0x80, 0x0a, 0x63, 0x80, 0x00, 0xb8, 0x1a, 0xb3, 0x7a, 0xb1, 0x2a, 0x84, 0x9b, 0xb8, 0x0d, - 0x47, 0x99, 0x00, 0x89, 0xc8, 0x49, 0x93, 0x28, 0x9d, 0x22, 0xc8, 0x29, 0xc3, 0x58, 0xb2, 0x1a, - 0xb0, 0x2a, 0x82, 0x72, 0xb3, 0x0d, 0x02, 0x9b, 0x83, 0x8c, 0x01, 0x08, 0x83, 0xaa, 0xab, 0x37, - 0x23, 0xba, 0xb8, 0x1d, 0x95, 0x39, 0xd8, 0x08, 0x00, 0x78, 0xf3, 0x1b, 0x03, 0x0c, 0x06, 0x8b, - 0x01, 0x99, 0x38, 0x90, 0x13, 0x9a, 0x12, 0xc9, 0x9d, 0x41, 0x00, 0x83, 0x9f, 0x04, 0x9c, 0x41, - 0x80, 0x00, 0x9c, 0x22, 0xd8, 0x39, 0xd1, 0x28, 0x22, 0xeb, 0x01, 0x09, 0x20, 0x14, 0xca, 0x11, - 0x9c, 0x24, 0x98, 0x89, 0x88, 0x50, 0xb5, 0x1c, 0xc0, 0x48, 0x92, 0x1a, 0xe2, 0x3a, 0x94, 0x89, - 0x81, 0x0c, 0x16, 0x9a, 0x98, 0x08, 0x11, 0x01, 0x88, 0xf0, 0x3b, 0x85, 0x11, 0xaa, 0x99, 0x63, - 0x98, 0x98, 0xac, 0x21, 0x24, 0x82, 0x9e, 0x10, 0x90, 0x28, 0xc2, 0x0a, 0x69, 0xa4, 0x8a, 0xba, - 0x71, 0x01, 0x80, 0xa8, 0xdb, 0x60, 0xa1, 0x28, 0xd9, 0x41, 0xa0, 0x00, 0xb9, 0x6a, 0x83, 0x3a, - 0xf8, 0x2a, 0x01, 0x00, 0x28, 0x9a, 0x13, 0xbb, 0x62, 0xd0, 0x2a, 0x82, 0x02, 0xad, 0x88, 0x42, - 0xd0, 0x5a, 0xa8, 0x32, 0xc9, 0x3b, 0xa7, 0x2a, 0x81, 0x20, 0xac, 0x81, 0x38, 0x12, 0xb8, 0x73, - 0xcc, 0x01, 0x3a, 0x95, 0x1c, 0x92, 0x2a, 0x94, 0x9b, 0x20, 0xa2, 0x2b, 0xa3, 0xaa, 0xbf, 0x71, - 0xa2, 0x29, 0x01, 0x99, 0x31, 0xf0, 0x2a, 0x80, 0x20, 0xb1, 0xac, 0x59, 0x05, 0x9b, 0xa1, 0x61, - 0xa0, 0x80, 0x0d, 0x84, 0x0b, 0x13, 0x93, 0x1e, 0xa0, 0x19, 0x84, 0x2e, 0x92, 0x9c, 0x40, 0x98, - 0x21, 0xdb, 0x52, 0xb0, 0x18, 0x80, 0xa9, 0x48, 0xa0, 0x03, 0x9f, 0x01, 0x22, 0x9b, 0x24, 0xc9, - 0x72, 0x99, 0xa8, 0x89, 0x64, 0xa9, 0x20, 0xba, 0x42, 0xa8, 0xa8, 0x18, 0x48, 0xb5, 0x2d, 0xd3, - 0x1b, 0x11, 0x03, 0x1a, 0xa0, 0x1a, 0x81, 0xac, 0x05, 0x40, 0x8c, 0xc2, 0x30, 0xbb, 0x47, 0xa8, - 0x10, 0x09, 0xa9, 0x9b, 0x82, 0x70, 0x84, 0xbb, 0x18, 0x30, 0xf8, 0x58, 0x80, 0x98, 0x81, 0x9f, - 0x13, 0x0b, 0x25, 0xa9, 0x00, 0xa8, 0x09, 0x02, 0x39, 0xf0, 0x6a, 0xb0, 0x41, 0xdb, 0x52, 0xa0, - 0x18, 0xb0, 0x19, 0x91, 0x3b, 0x87, 0x18, 0xdb, 0x48, 0xa1, 0x18, 0x80, 0x12, 0xbb, 0x20, 0xdc, - 0x23, 0x8c, 0x34, 0xa2, 0xbf, 0x14, 0x89, 0x00, 0x19, 0x13, 0x8a, 0xf1, 0x3a, 0xb2, 0x2a, 0x37, - 0xb9, 0xca, 0x48, 0x02, 0x8a, 0xa0, 0x62, 0xdb, 0x22, 0xba, 0x31, 0x03, 0x01, 0xce, 0x08, 0x00, - 0x00, 0x22, 0x89, 0xc0, 0x30, 0x0a, 0x73, 0xf8, 0x68, 0xb0, 0x2a, 0x90, 0x38, 0x01, 0x98, 0xba, - 0x52, 0xd8, 0x72, 0xc8, 0x19, 0x90, 0x42, 0xcb, 0x21, 0x88, 0x01, 0xb0, 0x32, 0xdc, 0x40, 0x90, - 0x90, 0x9c, 0x53, 0x91, 0x88, 0xa8, 0x20, 0x01, 0xa9, 0xc8, 0x38, 0x04, 0x0f, 0xd3, 0x2c, 0x15, - 0x00, 0xaa, 0x89, 0x81, 0x31, 0xa0, 0x98, 0x2c, 0x03, 0x00, 0xdf, 0x39, 0x14, 0xa8, 0x8a, 0x0a, - 0x02, 0x2a, 0x06, 0x88, 0xa0, 0x2e, 0xa5, 0x2c, 0x04, 0xaa, 0x23, 0xab, 0x19, 0x83, 0x5a, 0xb2, - 0x34, 0xcf, 0x14, 0x89, 0x92, 0x9c, 0x02, 0x09, 0xc0, 0x08, 0x19, 0xd3, 0x70, 0xa2, 0x99, 0x08, - 0x20, 0x88, 0xc1, 0x6b, 0x91, 0x03, 0x1b, 0xf9, 0x69, 0x92, 0x8a, 0x00, 0x99, 0x84, 0x1d, 0x83, - 0x3a, 0xb3, 0x2c, 0xc0, 0x0d, 0x23, 0x92, 0x9c, 0x10, 0xbb, 0x22, 0x72, 0x81, 0x0a, 0xa0, 0x0b, - 0x86, 0x0f, 0x13, 0xa0, 0x0b, 0x93, 0x1c, 0xa3, 0x20, 0x48, 0xb6, 0x8f, 0x03, 0x80, 0x09, 0x89, - 0x12, 0x21, 0xaa, 0xf9, 0x69, 0x9a, 0x15, 0xbc, 0x32, 0x99, 0x12, 0xa8, 0x01, 0x1b, 0x01, 0xb4, - 0x9f, 0xa0, 0x73, 0xb3, 0x0d, 0x91, 0x68, 0x90, 0x18, 0x98, 0x80, 0x18, 0x83, 0xcb, 0x2b, 0x27, - 0xb9, 0x9d, 0x52, 0xa1, 0x0a, 0x80, 0x01, 0x9d, 0x23, 0x11, 0xfa, 0x2a, 0x22, 0x01, 0xd9, 0x4a, - 0x93, 0x0d, 0x03, 0x0b, 0xa8, 0x25, 0x10, 0xdc, 0x20, 0x80, 0x13, 0xdb, 0x21, 0xcc, 0x21, 0x10, - 0x89, 0xd1, 0x70, 0xa1, 0x99, 0x09, 0x23, 0x20, 0xdc, 0x11, 0x9a, 0x13, 0x32, 0xce, 0x20, 0x01, - 0x81, 0xeb, 0x39, 0x05, 0x8a, 0x01, 0x9a, 0xc1, 0x7b, 0x97, 0x8a, 0x81, 0x10, 0xa8, 0x09, 0x01, - 0x11, 0x09, 0xb1, 0x8d, 0x12, 0x42, 0x8b, 0xe4, 0x1a, 0x10, 0x99, 0x90, 0x40, 0xa6, 0x5a, 0xc8, - 0x01, 0x9a, 0x44, 0x91, 0xbb, 0x31, 0x0b, 0xc3, 0x40, 0x99, 0x40, 0xd8, 0x19, 0x90, 0x09, 0x53, - 0x99, 0xc1, 0x70, 0xbc, 0x24, 0x99, 0x12, 0xb9, 0x28, 0xfa, 0x40, 0x08, 0x00, 0x84, 0x8c, 0x81, - 0x28, 0xa1, 0x29, 0x81, 0xe9, 0x8b, 0x38, 0x86, 0x30, 0xba, 0x90, 0x2c, 0xc3, 0x1c, 0x14, 0x98, - 0x5b, 0xe1, 0x28, 0x92, 0x5b, 0x94, 0x8b, 0x8a, 0x21, 0x0a, 0x07, 0x8b, 0x88, 0x22, 0x2a, 0xc4, - 0x0c, 0x32, 0xc0, 0x0a, 0x81, 0x38, 0xc2, 0x8a, 0x00, 0x10, 0x11, 0x18, 0x00, 0xbf, 0x92, 0x79, - 0xc5, 0x8a, 0x28, 0x21, 0xe5, 0x2b, 0x82, 0x11, 0xb1, 0x2b, 0xe2, 0x68, 0xa0, 0x88, 0x28, 0x8b, - 0x17, 0x9a, 0x21, 0x9c, 0xb1, 0x52, 0xab, 0x06, 0x8b, 0x04, 0x9a, 0x22, 0xaa, 0x24, 0xcc, 0x91, - 0x1c, 0x04, 0xb0, 0x40, 0x99, 0x04, 0xab, 0x72, 0xb8, 0x40, 0xc9, 0x31, 0xbb, 0x16, 0x8c, 0x13, - 0x9a, 0x81, 0x99, 0x41, 0xcb, 0x25, 0xb9, 0x10, 0x9b, 0x83, 0x79, 0xb2, 0x09, 0x9c, 0x14, 0x08, - 0xab, 0x34, 0x89, 0x90, 0x8b, 0x23, 0x2a, 0x17, 0x10, 0xfb, 0x3a, 0x93, 0x39, 0xc9, 0x18, 0x09, - 0x95, 0x09, 0x9c, 0x10, 0x81, 0x37, 0xde, 0x30, 0x11, 0xc0, 0x1a, 0x98, 0x06, 0x0a, 0x11, 0xb8, - 0x8d, 0x35, 0x89, 0xcb, 0x32, 0x82, 0x0c, 0x91, 0x0a, 0x34, 0xad, 0x24, 0xae, 0x12, 0x02, 0xa9, - 0x9c, 0x43, 0x11, 0xb0, 0x0d, 0x83, 0xbb, 0x60, 0xe0, 0x28, 0x88, 0x42, 0xb0, 0x0c, 0x03, 0x18, - 0xa8, 0x01, 0x0e, 0xa1, 0x79, 0x92, 0xba, 0x70, 0x91, 0x89, 0x99, 0x32, 0x80, 0x8e, 0x11, 0xa1, - 0x0e, 0x14, 0x88, 0xc8, 0x3b, 0x12, 0xe1, 0x29, 0x18, 0xb2, 0x39, 0x95, 0x9d, 0x22, 0x10, 0xa2, - 0xad, 0x12, 0x48, 0xb2, 0x0c, 0x03, 0xbc, 0x51, 0xd0, 0x31, 0x8a, 0x84, 0x9c, 0x81, 0x1a, 0x04, - 0xa8, 0x88, 0x2a, 0xc3, 0x73, 0xa0, 0xad, 0x34, 0x8a, 0xc1, 0x10, 0x30, 0xa9, 0xa1, 0x48, 0x91, - 0xac, 0x33, 0x19, 0xe1, 0x1c, 0x92, 0x02, 0x20, 0x2b, 0x07, 0x9f, 0x04, 0x0b, 0xc0, 0x68, 0xb1, - 0x39, 0xd8, 0x30, 0x99, 0x14, 0x89, 0x9a, 0x05, 0x1b, 0xd3, 0x2b, 0x83, 0x28, 0xac, 0x00, 0x10, - 0x17, 0x90, 0x9e, 0x82, 0x58, 0xb2, 0x8b, 0x33, 0xb0, 0x1e, 0x83, 0x8c, 0xa1, 0x31, 0x0d, 0xd1, - 0x28, 0x31, 0xc1, 0x39, 0xd1, 0x49, 0xb1, 0x39, 0xc0, 0x2a, 0x26, 0xad, 0x02, 0x80, 0x29, 0x82, - 0xca, 0x73, 0xc9, 0x21, 0x09, 0xa8, 0x13, 0x9f, 0x34, 0xca, 0x08, 0x28, 0xb1, 0x70, 0xc8, 0x3a, - 0x90, 0x02, 0x80, 0x9c, 0x34, 0x80, 0xa9, 0x80, 0x0c, 0x15, 0x99, 0x0b, 0xb8, 0x70, 0x95, 0x19, - 0xc9, 0x50, 0x90, 0xa0, 0x1b, 0x13, 0x09, 0x94, 0x9e, 0x11, 0x91, 0x70, 0xd1, 0x1a, 0x00, 0x93, - 0x1c, 0x81, 0x98, 0x52, 0xa9, 0x98, 0xad, 0x26, 0xa8, 0x01, 0x8b, 0x83, 0x28, 0x04, 0x9f, 0x12, - 0x90, 0x38, 0xc8, 0x19, 0x20, 0x21, 0xf1, 0x0f, 0x82, 0x10, 0x90, 0xa1, 0x0b, 0x22, 0x41, 0xfa, - 0x8a, 0x42, 0x92, 0x8e, 0x02, 0x89, 0x22, 0x89, 0xa2, 0x9a, 0x5b, 0x15, 0xda, 0x88, 0x42, 0x99, - 0x93, 0x09, 0xda, 0x43, 0x80, 0xc9, 0x08, 0x89, 0x33, 0xa4, 0x9c, 0x50, 0xb0, 0x85, 0x0e, 0xa1, - 0x28, 0x03, 0x9d, 0x23, 0xea, 0x30, 0x82, 0x01, 0xaf, 0x42, 0x98, 0xa8, 0x18, 0x58, 0xd3, 0x2b, - 0xc3, 0x49, 0xa0, 0x12, 0x9c, 0x91, 0x19, 0x73, 0xb8, 0x2a, 0xa1, 0x32, 0xea, 0x29, 0x81, 0x09, - 0x14, 0xbb, 0x8e, 0x35, 0x99, 0x88, 0x20, 0x01, 0xcc, 0x32, 0x3a, 0xf0, 0x4c, 0x81, 0xa0, 0x29, - 0x81, 0xa9, 0x10, 0x16, 0xba, 0x20, 0x38, 0xe1, 0x9a, 0x31, 0x13, 0xcc, 0x9d, 0x17, 0xb9, 0x30, - 0x91, 0x81, 0xad, 0x31, 0x83, 0xb9, 0x1a, 0x37, 0xac, 0x12, 0x8b, 0x96, 0x3b, 0xa6, 0x9b, 0x21, - 0x90, 0x21, 0xab, 0x24, 0xa9, 0x80, 0x8b, 0x13, 0xcb, 0x38, 0x87, 0x29, 0xdd, 0x52, 0x88, 0xb8, - 0x31, 0xb8, 0x8c, 0x02, 0x58, 0xa3, 0x5a, 0xa4, 0xbd, 0x32, 0x11, 0xd9, 0x28, 0xa1, 0x40, 0xfa, - 0x50, 0xa0, 0x19, 0x80, 0x11, 0xdb, 0x38, 0x90, 0x03, 0x9c, 0x13, 0x9a, 0x35, 0xca, 0x80, 0x8a, - 0x43, 0xa3, 0xcd, 0x4a, 0x85, 0x89, 0xb0, 0x48, 0x98, 0x31, 0xd1, 0x18, 0xb0, 0x61, 0xc2, 0x0b, - 0x01, 0x18, 0xa4, 0x3b, 0xd1, 0x1a, 0x04, 0xb0, 0x09, 0x0a, 0x06, 0x90, 0x9c, 0x62, 0xe0, 0x29, - 0x11, 0x09, 0xd1, 0x48, 0xa8, 0x0a, 0x84, 0x38, 0xb1, 0x88, 0x78, 0xc1, 0x8a, 0x53, 0xb8, 0x09, - 0x81, 0xbb, 0x41, 0x32, 0xa1, 0xfd, 0x38, 0x11, 0xb9, 0x09, 0x14, 0x19, 0xb1, 0x28, 0xcd, 0x53, - 0x81, 0x91, 0xbd, 0x10, 0x18, 0x11, 0x30, 0xf8, 0x48, 0x21, 0xa0, 0x9f, 0x18, 0x12, 0xda, 0x41, - 0xb8, 0x11, 0x99, 0x40, 0xd2, 0x1a, 0x12, 0x03, 0xee, 0x49, 0x03, 0x9a, 0xa1, 0x3a, 0xc1, 0x1a, - 0x34, 0xa0, 0xce, 0x41, 0x82, 0xab, 0x31, 0x12, 0xa0, 0x8f, 0x12, 0xea, 0x30, 0x23, 0xc8, 0xad, - 0x22, 0x80, 0xd2, 0x49, 0x02, 0xc9, 0x21, 0xa9, 0x00, 0x10, 0x90, 0x93, 0xcf, 0x04, 0x18, 0xa1, - 0x1a, 0x12, 0xaa, 0x1a, 0xb2, 0xa0, 0x7c, 0x17, 0xbc, 0x21, 0x18, 0x92, 0x2b, 0x89, 0x06, 0xad, - 0x38, 0x10, 0xa9, 0x63, 0xb0, 0x8b, 0x81, 0x48, 0xc4, 0x2c, 0x82, 0x08, 0xda, 0x61, 0x90, 0x0b, - 0x03, 0x28, 0xf8, 0x29, 0x92, 0x39, 0xb2, 0x1d, 0xa4, 0x0c, 0x23, 0x11, 0xbd, 0x11, 0x11, 0x8e, - 0x94, 0x9a, 0x11, 0x25, 0xda, 0x88, 0x49, 0xa2, 0x18, 0xa0, 0x09, 0x32, 0xd0, 0x0b, 0x81, 0x72, - 0x98, 0xa1, 0x2b, 0x91, 0x3b, 0xa5, 0xc9, 0x4a, 0x40, 0x95, 0x8b, 0x82, 0x1b, 0x12, 0x08, 0xfa, - 0x3b, 0x22, 0xf0, 0x0b, 0x22, 0x06, 0x8d, 0x02, 0xa8, 0x2a, 0x04, 0x80, 0x9a, 0x09, 0x83, 0x1a, - 0x04, 0x1d, 0x87, 0x8b, 0xb0, 0x8d, 0x33, 0x24, 0xf3, 0x2c, 0xb2, 0x39, 0x02, 0x80, 0xba, 0x2a, - 0x83, 0xaf, 0x30, 0xb1, 0x71, 0xb0, 0x99, 0x1b, 0x25, 0x00, 0xa2, 0x9f, 0x23, 0xa9, 0x13, 0xdd, - 0x41, 0x84, 0x0b, 0xd8, 0x18, 0x11, 0x92, 0x3a, 0xb1, 0x9e, 0x53, 0xa0, 0xa9, 0x39, 0x04, 0x00, - 0xdd, 0x18, 0x82, 0x48, 0xb2, 0x8b, 0x90, 0x71, 0x91, 0x88, 0xb9, 0x71, 0xc0, 0x10, 0xc9, 0x42, - 0x00, 0x99, 0xa9, 0x3b, 0x07, 0x1a, 0x80, 0xab, 0x31, 0x24, 0xf8, 0x0b, 0x23, 0x21, 0xc1, 0x9f, - 0x12, 0x98, 0x20, 0x90, 0x09, 0x09, 0x04, 0x00, 0xac, 0x3a, 0x27, 0xaa, 0xa0, 0x0d, 0x21, 0x24, - 0xac, 0x11, 0x10, 0x99, 0x80, 0x9b, 0x11, 0x09, 0x67, 0xfa, 0x18, 0x01, 0x23, 0xca, 0x0a, 0x81, - 0xa9, 0x61, 0xb0, 0x49, 0xd8, 0x61, 0xa8, 0x08, 0x09, 0x11, 0x94, 0x0f, 0x82, 0x18, 0x99, 0x42, - 0xb0, 0x9d, 0x40, 0x83, 0xac, 0x00, 0x23, 0xc8, 0x09, 0xa9, 0x34, 0x9a, 0x42, 0xd0, 0x9a, 0x61, - 0x94, 0x9c, 0x02, 0x0a, 0x92, 0x19, 0x92, 0xaf, 0x64, 0x98, 0x80, 0x8b, 0x24, 0x8a, 0xa2, 0x8e, - 0x02, 0x18, 0x83, 0x9a, 0xaa, 0x30, 0x13, 0xdd, 0x50, 0x82, 0xba, 0x11, 0x88, 0x29, 0x27, 0xb0, - 0x89, 0xbd, 0x68, 0x01, 0xa8, 0x29, 0x89, 0x84, 0x8c, 0x24, 0xb0, 0x2a, 0x81, 0x80, 0xcc, 0x5a, - 0x84, 0x19, 0xb0, 0x58, 0xf8, 0x3a, 0x94, 0x29, 0xd2, 0x39, 0xb3, 0x8f, 0x23, 0xa8, 0x09, 0x30, - 0xc2, 0x0f, 0x02, 0x2b, 0xa3, 0x1b, 0x94, 0x9a, 0x32, 0x81, 0xa8, 0x38, 0x84, 0xaf, 0x88, 0x12, - 0x71, 0xc9, 0x20, 0x99, 0x19, 0x80, 0x13, 0xa8, 0x9b, 0x52, 0xa0, 0xb0, 0x8f, 0x37, 0x8c, 0x82, - 0x99, 0x81, 0x1d, 0x15, 0xa9, 0x28, 0x90, 0x88, 0xc8, 0x6a, 0xa4, 0x0c, 0x03, 0x98, 0x09, 0x18, - 0x96, 0xab, 0x3b, 0x07, 0x88, 0x8a, 0x85, 0x8b, 0x23, 0x80, 0xf8, 0x2c, 0x04, 0x1a, 0xc1, 0x6a, - 0xa2, 0x0a, 0x02, 0x8a, 0xca, 0x60, 0x82, 0x9a, 0x8a, 0x32, 0x83, 0x8e, 0x03, 0x8c, 0x81, 0x88, - 0x21, 0xca, 0x72, 0x82, 0xc9, 0x9c, 0x42, 0x91, 0x88, 0x08, 0x09, 0x8b, 0x47, 0xa9, 0x09, 0x88, - 0x44, 0xb8, 0xad, 0x30, 0x13, 0x90, 0xb0, 0x9d, 0x98, 0x73, 0x91, 0x8b, 0x31, 0x15, 0xca, 0x3a, - 0xe0, 0x40, 0x80, 0x09, 0xf9, 0x49, 0x02, 0x99, 0x99, 0x42, 0xa1, 0x8c, 0x12, 0x0b, 0xa1, 0x73, - 0xb5, 0x9d, 0x22, 0x08, 0x89, 0x09, 0xa3, 0x0a, 0x28, 0xa1, 0x02, 0x09, 0x65, 0xa0, 0xbc, 0x0c, - 0x27, 0xa0, 0x09, 0x80, 0x9b, 0x39, 0x84, 0x11, 0xa8, 0x61, 0xa1, 0xcd, 0x48, 0x02, 0x20, 0xdb, - 0x00, 0x09, 0x88, 0x35, 0xe9, 0x0a, 0x23, 0x9a, 0xa8, 0x30, 0x09, 0x07, 0x00, 0xaa, 0x09, 0x11, - 0x72, 0xd8, 0x09, 0x20, 0xc0, 0x0b, 0x15, 0x28, 0xc8, 0x32, 0xec, 0x39, 0x03, 0x09, 0xa8, 0x10, - 0x99, 0x09, 0x14, 0x9b, 0x43, 0xab, 0xa5, 0x1e, 0x82, 0x29, 0x17, 0xdb, 0x08, 0x09, 0x26, 0xb9, - 0x21, 0xbb, 0x30, 0xb9, 0x53, 0xca, 0x38, 0x02, 0x94, 0xaf, 0x04, 0x01, 0x9a, 0x01, 0x8b, 0x51, - 0x92, 0xa9, 0x8c, 0x25, 0x10, 0xf1, 0x1b, 0x00, 0x80, 0xa2, 0x2b, 0xf1, 0x48, 0x23, 0xbc, 0x18, - 0x98, 0x23, 0x18, 0xba, 0xb9, 0x72, 0x86, 0x9b, 0x08, 0x40, 0x94, 0x8c, 0x88, 0x49, 0xa4, 0x09, - 0xa9, 0x08, 0x26, 0xbb, 0x22, 0xca, 0x31, 0xa8, 0x22, 0xdf, 0x32, 0x98, 0x31, 0xad, 0x01, 0x31, - 0x85, 0x0b, 0xf9, 0x58, 0xa1, 0x1b, 0x02, 0x9b, 0x24, 0xa9, 0xb8, 0x3a, 0x17, 0x89, 0x0a, 0x09, - 0x07, 0x0b, 0x10, 0xa1, 0x28, 0xb0, 0x48, 0xf2, 0x0f, 0x23, 0xaa, 0x88, 0x20, 0x81, 0x90, 0x30, - 0x9b, 0xa7, 0x3c, 0xa1, 0x80, 0x0b, 0x12, 0x86, 0x8f, 0x14, 0x99, 0x28, 0x82, 0xc9, 0x1a, 0x32, - 0xaa, 0x88, 0x07, 0x1d, 0xa3, 0x3b, 0xf0, 0x1b, 0x17, 0x9a, 0x81, 0x0b, 0x82, 0x58, 0xa1, 0x88, - 0x08, 0x09, 0x07, 0xac, 0x12, 0x19, 0x85, 0xaa, 0x81, 0x8b, 0x27, 0xa0, 0x8c, 0x93, 0x2b, 0x02, - 0x02, 0xdc, 0x30, 0xa0, 0x19, 0xb9, 0x74, 0xb8, 0x31, 0xf8, 0x2b, 0x14, 0x98, 0x88, 0x09, 0x10, - 0x92, 0x11, 0x0b, 0xf8, 0x58, 0xa2, 0xaa, 0x69, 0xa1, 0x88, 0x18, 0x48, 0xc2, 0x8c, 0x44, 0xd9, - 0x09, 0x31, 0xc1, 0x18, 0x80, 0x11, 0xab, 0x22, 0x21, 0xfb, 0x2a, 0x88, 0xb3, 0x8f, 0x17, 0x89, - 0xb8, 0x60, 0xa1, 0x0b, 0x14, 0x99, 0x99, 0x28, 0x84, 0x19, 0xa0, 0xaa, 0x45, 0xbd, 0x35, 0xcb, - 0x30, 0xa8, 0x41, 0xd8, 0x29, 0x84, 0x8a, 0xb1, 0x48, 0xc8, 0x10, 0x90, 0x42, 0xe9, 0x41, 0xa8, - 0xa8, 0x21, 0x14, 0x99, 0x9a, 0x38, 0xd8, 0x2a, 0x25, 0xc0, 0x9c, 0x33, 0xaa, 0x80, 0x3c, 0x17, - 0x9a, 0x0c, 0x02, 0x80, 0x38, 0x91, 0xc2, 0x8e, 0x41, 0xb0, 0x90, 0x71, 0xb0, 0x0b, 0x11, 0x80, - 0x53, 0xda, 0x40, 0xc8, 0x58, 0xb8, 0x21, 0xac, 0x31, 0x91, 0x8a, 0x00, 0x31, 0xa8, 0x32, 0xbe, - 0x55, 0xda, 0x48, 0xc0, 0x39, 0x01, 0x10, 0xcd, 0x41, 0x88, 0x91, 0x1b, 0x04, 0xcb, 0x51, 0x90, - 0x99, 0x20, 0x11, 0xa2, 0xae, 0x20, 0x01, 0xa8, 0x11, 0x0a, 0x21, 0x90, 0x25, 0xce, 0x29, 0x16, - 0xa9, 0xa9, 0x10, 0x18, 0x12, 0xbc, 0x38, 0x84, 0x5a, 0xd3, 0x0c, 0x00, 0x23, 0x88, 0x91, 0x8d, - 0x91, 0x60, 0x84, 0xae, 0x22, 0x89, 0x82, 0x9c, 0x23, 0xcb, 0x44, 0xda, 0x30, 0xdb, 0x63, 0x98, - 0x80, 0xbb, 0x25, 0x8a, 0x80, 0x28, 0x83, 0xac, 0x60, 0xc0, 0x28, 0x12, 0xa1, 0xbc, 0x08, 0x23, - 0xa3, 0x1e, 0xa3, 0xab, 0x51, 0x81, 0x90, 0xd9, 0x6a, 0xa4, 0x9c, 0x42, 0xa9, 0x20, 0x82, 0xc9, - 0x29, 0x82, 0x08, 0x98, 0x8b, 0x74, 0xd3, 0x0a, 0x82, 0x2b, 0x94, 0x4a, 0xc3, 0x8f, 0x22, 0x99, - 0x81, 0x19, 0x80, 0x02, 0xb8, 0x1b, 0x14, 0x1c, 0x07, 0xdb, 0x08, 0x28, 0x16, 0xb9, 0x08, 0x88, - 0x00, 0x08, 0x22, 0xbb, 0x24, 0x11, 0xf8, 0x9f, 0x34, 0xa8, 0x39, 0xb9, 0x11, 0x30, 0xaa, 0x04, - 0x9e, 0x51, 0x81, 0xc9, 0x1c, 0x04, 0x00, 0x99, 0x08, 0xa8, 0x1b, 0x16, 0xab, 0x04, 0x9a, 0x30, - 0x85, 0xae, 0x34, 0xb0, 0x89, 0x20, 0xc9, 0x38, 0x13, 0xa0, 0x09, 0x9a, 0x97, 0x3b, 0xf0, 0x4a, - 0x96, 0x8a, 0x80, 0x20, 0x91, 0x2a, 0xf1, 0x3a, 0x90, 0x18, 0x84, 0x9d, 0x11, 0x02, 0x18, 0xc8, - 0x21, 0xcc, 0x72, 0x90, 0xb8, 0x48, 0xb1, 0x28, 0x89, 0x82, 0x5b, 0xb2, 0x2b, 0xeb, 0x71, 0xa2, - 0x0b, 0x98, 0x41, 0x80, 0x1a, 0xe1, 0x38, 0x98, 0x13, 0xaa, 0x8a, 0x22, 0x2b, 0xe7, 0x3c, 0x94, - 0x10, 0x98, 0xc9, 0x30, 0x89, 0x50, 0xb1, 0x80, 0x9c, 0x52, 0xa0, 0x08, 0x00, 0x10, 0xc9, 0x49, - 0xd0, 0x40, 0x92, 0xbb, 0x09, 0x02, 0x72, 0xb2, 0xea, 0x40, 0xa8, 0x20, 0xe8, 0x30, 0x08, 0x82, - 0xa8, 0xac, 0x73, 0xb8, 0x51, 0xa1, 0x9b, 0x39, 0x03, 0xe8, 0x59, 0x80, 0x82, 0xdb, 0x29, 0x02, - 0x1a, 0x87, 0x8d, 0x92, 0x4b, 0x96, 0x1a, 0x89, 0x20, 0xc0, 0x18, 0x01, 0xab, 0x34, 0x10, 0xf9, - 0x0a, 0x24, 0x88, 0x91, 0xac, 0x42, 0xc8, 0x12, 0x88, 0xba, 0x62, 0xa0, 0x8a, 0x2a, 0x94, 0x33, - 0xbf, 0x14, 0xa9, 0x31, 0x89, 0x88, 0x10, 0x99, 0x84, 0xaa, 0x0f, 0x86, 0x38, 0xd0, 0x0a, 0xb1, - 0x71, 0xa0, 0x30, 0xcb, 0x33, 0xd9, 0x28, 0x81, 0x8a, 0x90, 0x48, 0xb3, 0x1a, 0x89, 0x06, 0x29, - 0xbb, 0x05, 0x8b, 0xc2, 0x71, 0xe3, 0x1b, 0x22, 0x90, 0x9c, 0x22, 0x90, 0x9b, 0x93, 0x2e, 0x95, - 0x39, 0x93, 0xbb, 0x01, 0x39, 0x01, 0xf8, 0x79, 0xa9, 0x02, 0x2a, 0xb8, 0x31, 0x81, 0x88, 0xda, - 0x89, 0x45, 0x0a, 0xb4, 0x1c, 0xa1, 0x78, 0xc0, 0x29, 0x80, 0x30, 0xb1, 0xad, 0x63, 0x80, 0x88, - 0xac, 0x24, 0x98, 0x39, 0xe0, 0x89, 0x32, 0x88, 0x48, 0xf9, 0x49, 0xa1, 0x19, 0x88, 0x33, 0xea, - 0x29, 0x02, 0x0a, 0xb0, 0x7a, 0xb2, 0x1f, 0x82, 0x28, 0xb0, 0x3a, 0x87, 0x8c, 0x00, 0x02, 0xa0, - 0x1d, 0x84, 0xaa, 0x31, 0x89, 0x90, 0x2a, 0x03, 0x4a, 0xf2, 0x1f, 0x84, 0x1a, 0x91, 0x38, 0xc8, - 0x00, 0x19, 0x90, 0xd0, 0x6a, 0x82, 0x89, 0x9a, 0x24, 0x1a, 0xa1, 0x40, 0xd8, 0x8c, 0x34, 0xb9, - 0x28, 0xcb, 0x36, 0xba, 0x22, 0xb0, 0xab, 0x73, 0xb1, 0xa9, 0x51, 0x98, 0x01, 0xb8, 0x4a, 0x93, - 0x0e, 0x94, 0x9b, 0x08, 0x73, 0xa2, 0xab, 0x19, 0x36, 0xea, 0x20, 0xb2, 0x0c, 0x14, 0x99, 0x90, - 0x2b, 0x15, 0x90, 0x9c, 0x19, 0x05, 0x19, 0xa0, 0x28, 0xba, 0x2c, 0x87, 0x89, 0x99, 0x13, 0x11, - 0xd9, 0x2a, 0x12, 0xa3, 0x1b, 0xa6, 0x2d, 0xb2, 0x38, 0xd1, 0x1c, 0x27, 0xb8, 0x0b, 0xb0, 0x20, - 0x42, 0x91, 0xa1, 0xbf, 0x23, 0x39, 0x93, 0xa8, 0xcd, 0x21, 0x48, 0xe8, 0x48, 0x89, 0x15, 0xd8, - 0x1b, 0x13, 0x18, 0xa2, 0x8c, 0xa1, 0x1b, 0x27, 0x99, 0xaa, 0x34, 0xb8, 0x9c, 0x13, 0x2a, 0x95, - 0x5b, 0xd1, 0x89, 0x20, 0x05, 0x99, 0x8c, 0x03, 0x28, 0x90, 0xaf, 0x03, 0x29, 0x05, 0xbb, 0x10, - 0x98, 0x45, 0xb8, 0x99, 0x0b, 0x27, 0xb9, 0x38, 0xa1, 0x09, 0x01, 0x88, 0xba, 0x32, 0x54, 0xe2, - 0x0f, 0x02, 0x39, 0xc0, 0x10, 0xab, 0x42, 0x88, 0x22, 0xf9, 0x3b, 0xa4, 0x2a, 0x90, 0x98, 0x31, - 0x03, 0x98, 0x0d, 0xc0, 0x72, 0xd2, 0x2a, 0xc1, 0x40, 0x98, 0x81, 0x1d, 0xa2, 0x58, 0xb1, 0x8b, - 0x12, 0x91, 0x0c, 0x02, 0x9c, 0x27, 0x0b, 0x82, 0xcb, 0x41, 0x09, 0xa2, 0x0b, 0x98, 0x54, 0x90, - 0x9c, 0x12, 0x88, 0x21, 0x8e, 0x85, 0xab, 0x31, 0x02, 0xe0, 0x1c, 0x13, 0x10, 0xf8, 0x28, 0x80, - 0xb8, 0x62, 0xc9, 0x08, 0x53, 0x99, 0xc1, 0x2b, 0x22, 0x01, 0xdb, 0x08, 0x49, 0xd2, 0x48, 0xb8, - 0x18, 0x01, 0x24, 0xba, 0x88, 0x8b, 0x61, 0x93, 0xc9, 0x0f, 0x33, 0xa0, 0x9b, 0x11, 0x48, 0xc3, - 0x19, 0xe9, 0x39, 0x93, 0x20, 0xc9, 0x0a, 0x45, 0xbb, 0x01, 0x1e, 0x06, 0x8b, 0x81, 0x1b, 0x83, - 0x4a, 0x93, 0x8b, 0x09, 0x61, 0xb3, 0x8b, 0x8c, 0x06, 0xaa, 0x18, 0x28, 0x82, 0x89, 0x24, 0xff, - 0x31, 0x81, 0x8a, 0xaa, 0x72, 0xb0, 0x10, 0x88, 0x88, 0x41, 0xc2, 0x8a, 0x99, 0x2a, 0x27, 0x9c, - 0x12, 0x29, 0xd3, 0x2a, 0xa1, 0x98, 0x38, 0x93, 0x99, 0xaf, 0x17, 0x9c, 0x23, 0x09, 0x89, 0xa2, - 0x2c, 0x07, 0x8d, 0x83, 0x09, 0x8a, 0x22, 0x90, 0x9c, 0x23, 0x18, 0xaa, 0x9f, 0x16, 0x99, 0x28, - 0xc2, 0x39, 0xa0, 0x41, 0xa8, 0xa0, 0x79, 0xa4, 0x8b, 0xc9, 0x20, 0x43, 0xb8, 0x49, 0xe0, 0x38, - 0xa8, 0x21, 0xda, 0x41, 0x88, 0xa0, 0x9a, 0x61, 0x82, 0x09, 0xa8, 0xaa, 0x38, 0x06, 0x1b, 0xc2, - 0x51, 0xb9, 0x1a, 0x03, 0x00, 0x71, 0xd9, 0x91, 0x8d, 0x43, 0x98, 0xa8, 0x5a, 0x12, 0xbc, 0x11, - 0x19, 0x96, 0x1c, 0x82, 0x99, 0x9a, 0x27, 0x89, 0x98, 0x01, 0x08, 0x01, 0x8e, 0x05, 0x89, 0x89, - 0xa0, 0x0a, 0x01, 0x54, 0xb1, 0x8b, 0x29, 0x23, 0xc9, 0x0a, 0x01, 0x73, 0xf9, 0x39, 0xa2, 0x21, - 0xaf, 0x06, 0x9a, 0x12, 0xa0, 0x09, 0xa8, 0x64, 0xba, 0x43, 0xba, 0x21, 0x9c, 0x02, 0x21, 0x9c, - 0x02, 0x08, 0xea, 0x18, 0x16, 0x8a, 0x82, 0xe8, 0x30, 0xb0, 0x22, 0xda, 0x48, 0xa0, 0xa8, 0x21, - 0x99, 0x25, 0xa9, 0x29, 0xda, 0x88, 0x61, 0x12, 0xdb, 0x32, 0x9a, 0x23, 0xdb, 0x42, 0xc9, 0x2a, - 0x95, 0x8e, 0x10, 0x33, 0xb9, 0x53, 0xbe, 0x32, 0x9b, 0x21, 0x90, 0x39, 0xfc, 0x41, 0xb0, 0x08, - 0x20, 0x05, 0xbd, 0x31, 0x98, 0x21, 0x90, 0x00, 0xc9, 0x0c, 0x34, 0xd3, 0x0c, 0x11, 0x80, 0x99, - 0x31, 0xa0, 0x9e, 0x15, 0x98, 0xab, 0x42, 0x01, 0xa3, 0x8d, 0x91, 0x39, 0xe1, 0x20, 0xb9, 0x08, - 0x37, 0xb0, 0x0b, 0x90, 0x32, 0x83, 0xaf, 0xa1, 0x8a, 0x72, 0x83, 0x9f, 0x20, 0x05, 0x9b, 0x08, - 0x89, 0x33, 0xb8, 0x89, 0x00, 0x80, 0x72, 0x04, 0xbf, 0x20, 0x01, 0x09, 0xbb, 0x24, 0x99, 0x11, - 0x8c, 0x07, 0x0e, 0x13, 0x98, 0xb9, 0x49, 0x14, 0xc8, 0x1b, 0x04, 0x98, 0x38, 0xa0, 0x89, 0x8b, - 0x07, 0x1a, 0xd8, 0x28, 0x10, 0xb1, 0x49, 0xb1, 0x0b, 0x04, 0x10, 0xbd, 0x21, 0x42, 0xc8, 0x38, - 0xf9, 0x39, 0x22, 0x08, 0xf1, 0x49, 0x8a, 0x23, 0x9d, 0x83, 0x2b, 0xa1, 0x24, 0xca, 0x0c, 0x94, - 0x48, 0xda, 0x01, 0x40, 0xb8, 0x22, 0xea, 0x30, 0x1b, 0x07, 0x8b, 0x91, 0x0a, 0x43, 0xb9, 0xd9, - 0x3a, 0x26, 0xb9, 0x30, 0xb8, 0x12, 0x10, 0xc9, 0x9d, 0x43, 0x90, 0x04, 0xaf, 0x13, 0x88, 0x01, - 0xa9, 0x88, 0x0b, 0x65, 0xc8, 0x2a, 0x90, 0x34, 0xc8, 0x08, 0xaa, 0x42, 0x92, 0xbc, 0x18, 0x43, - 0x8b, 0x84, 0x8d, 0x04, 0x18, 0x90, 0xa9, 0x89, 0x78, 0x94, 0x1b, 0xc8, 0x4a, 0x85, 0x8a, 0x90, - 0x29, 0xa2, 0x30, 0xc9, 0x2d, 0x04, 0xa8, 0x2a, 0xd8, 0x72, 0x90, 0xa0, 0x9a, 0x63, 0xab, 0x04, - 0x29, 0xa0, 0xab, 0x44, 0x90, 0x8b, 0x12, 0x30, 0xf9, 0x2f, 0x93, 0x08, 0xa9, 0x42, 0xd8, 0x28, - 0x00, 0x00, 0xa9, 0x11, 0xba, 0x0a, 0x71, 0x13, 0xbd, 0x24, 0x8c, 0x01, 0x98, 0x58, 0x91, 0x88, - 0x9c, 0x83, 0x0d, 0x04, 0x38, 0xc8, 0x00, 0x99, 0x01, 0x39, 0xf8, 0x40, 0x20, 0xf9, 0x18, 0x12, - 0x99, 0x11, 0xdc, 0x58, 0xa0, 0x19, 0x12, 0xb0, 0x3a, 0xa4, 0x0c, 0x25, 0xda, 0x21, 0xc8, 0x1a, - 0x83, 0x28, 0x98, 0x02, 0xac, 0x42, 0x2a, 0xb6, 0x8b, 0x73, 0xc8, 0x19, 0x81, 0x32, 0xac, 0x98, - 0x11, 0x30, 0xea, 0x42, 0xdb, 0x30, 0x02, 0xad, 0x28, 0x13, 0x18, 0xe3, 0x4b, 0xd1, 0x21, 0x0a, - 0x91, 0xac, 0x32, 0x85, 0x0e, 0xa2, 0x41, 0x89, 0xa1, 0xaa, 0x11, 0x18, 0x94, 0x89, 0x8c, 0x31, - 0xa4, 0x9e, 0x72, 0xa1, 0x8a, 0x19, 0xa8, 0x81, 0x73, 0x88, 0xc1, 0x10, 0x19, 0x81, 0xfc, 0x38, - 0x03, 0x9c, 0x28, 0x14, 0x9b, 0x80, 0x40, 0x98, 0xaa, 0x06, 0x1a, 0x9d, 0x04, 0x40, 0xe8, 0x0a, - 0x05, 0x99, 0x29, 0x92, 0x98, 0x2b, 0x02, 0xa0, 0x99, 0x56, 0x98, 0xaa, 0x08, 0x33, 0xa8, 0x29, - 0xca, 0x31, 0xd4, 0x5c, 0x90, 0x98, 0x24, 0x8c, 0x00, 0x98, 0x85, 0x3b, 0xc0, 0x98, 0x8a, 0x36, - 0xb9, 0xa8, 0x61, 0x8a, 0x83, 0xbc, 0x38, 0x85, 0x1b, 0x33, 0xe0, 0x82, 0x4b, 0x92, 0x9d, 0x16, - 0x8a, 0x88, 0xbb, 0x27, 0xa9, 0x10, 0xa0, 0x22, 0xac, 0x21, 0xa4, 0x0e, 0xa0, 0x62, 0xca, 0x31, - 0x01, 0xca, 0x08, 0x15, 0xab, 0x32, 0xd9, 0x31, 0xb8, 0x00, 0x10, 0x09, 0x23, 0xa2, 0xd9, 0x0d, - 0x84, 0x0e, 0xa0, 0x40, 0xa0, 0x43, 0xba, 0x92, 0x0b, 0x20, 0x01, 0xf4, 0x4a, 0x90, 0x98, 0x22, - 0x0f, 0x85, 0x1a, 0xa2, 0x9d, 0x22, 0x10, 0xa1, 0x0d, 0x83, 0x1b, 0x86, 0x28, 0xd8, 0x98, 0x5c, - 0xb4, 0x1a, 0x10, 0x10, 0xd3, 0x0c, 0x08, 0x02, 0xa0, 0x58, 0xa0, 0x1d, 0x05, 0x88, 0xcb, 0x41, - 0x81, 0xa9, 0x88, 0x79, 0xb2, 0x3a, 0x93, 0x9b, 0xaa, 0x55, 0xb0, 0x2b, 0xa2, 0x44, 0xd9, 0x39, - 0xd0, 0x20, 0x91, 0x88, 0xb9, 0x29, 0x22, 0x05, 0xcb, 0x41, 0xb0, 0x19, 0x21, 0xc9, 0xd9, 0x51, - 0x01, 0x88, 0x09, 0x15, 0x9a, 0x9c, 0x82, 0x83, 0x0e, 0x24, 0xba, 0x08, 0x41, 0x83, 0x9e, 0xa0, - 0x0d, 0x16, 0x0c, 0x83, 0xac, 0x12, 0x48, 0xb3, 0x9d, 0x32, 0x98, 0x98, 0x4b, 0x95, 0x1d, 0x03, - 0x80, 0xba, 0x8a, 0x26, 0xb8, 0xa9, 0x61, 0x91, 0x0a, 0x13, 0xcb, 0x39, 0x02, 0xf3, 0x2b, 0x1a, - 0x33, 0xc6, 0x2d, 0xa2, 0x08, 0x0a, 0xa2, 0x58, 0xa1, 0x38, 0xb1, 0x0c, 0xa1, 0x73, 0xb0, 0x1a, - 0xc8, 0x68, 0x91, 0x00, 0x99, 0x0a, 0x86, 0x0a, 0x09, 0x02, 0xaa, 0x33, 0xae, 0x34, 0x99, 0x04, - 0x8b, 0xf9, 0x10, 0x81, 0xb8, 0x29, 0x42, 0xa2, 0x89, 0x24, 0xaf, 0x34, 0xbc, 0x42, 0xd9, 0x40, - 0x01, 0xbb, 0x08, 0x35, 0xcb, 0x12, 0x0a, 0xd3, 0x2a, 0x11, 0xc9, 0x31, 0x08, 0x00, 0xdc, 0x51, - 0x98, 0x88, 0xd9, 0x71, 0x98, 0x18, 0xa1, 0x18, 0x09, 0x32, 0xc1, 0x2a, 0x12, 0xea, 0x29, 0xa9, - 0x15, 0x18, 0xbc, 0x31, 0x81, 0xa0, 0x1d, 0xf1, 0x20, 0x80, 0x30, 0xf8, 0x20, 0x08, 0x2b, 0x96, - 0x8b, 0x21, 0x99, 0x03, 0x9e, 0x21, 0x13, 0x9b, 0xbd, 0x36, 0x88, 0x08, 0x19, 0xc1, 0xb8, 0x7c, - 0x93, 0xdb, 0x50, 0xa2, 0x9b, 0x81, 0x51, 0x99, 0xb1, 0x30, 0x8a, 0x9a, 0x15, 0x10, 0xea, 0x40, - 0x22, 0xe9, 0x09, 0x14, 0xba, 0x09, 0x90, 0x14, 0x39, 0xbb, 0x16, 0x18, 0x9a, 0x19, 0xf0, 0x1c, - 0x34, 0xc1, 0x1a, 0x08, 0x00, 0x98, 0x10, 0x9c, 0x15, 0x98, 0x0d, 0xa8, 0x17, 0x5a, 0xb8, 0x09, - 0x21, 0xa0, 0x29, 0xd9, 0x11, 0x4b, 0xa5, 0x2a, 0x89, 0x21, 0x42, 0xfb, 0x08, 0x22, 0xac, 0x24, - 0xab, 0x81, 0x29, 0x12, 0xcf, 0x11, 0x11, 0x81, 0xbc, 0x33, 0xb2, 0x2d, 0x90, 0x24, 0xab, 0x22, - 0x19, 0xc8, 0x72, 0xa1, 0xae, 0x23, 0xbb, 0x42, 0xa2, 0x1b, 0x85, 0xbb, 0x72, 0xb2, 0x8b, 0x04, - 0xac, 0x12, 0x8a, 0x11, 0x16, 0x9c, 0x89, 0x06, 0x09, 0xa1, 0x09, 0x88, 0x01, 0x89, 0x84, 0x71, - 0xf1, 0x18, 0x98, 0x90, 0x2a, 0x15, 0xa9, 0x48, 0xfa, 0x32, 0xa9, 0x18, 0x13, 0xa8, 0x9b, 0x20, - 0xaa, 0x11, 0x52, 0x97, 0x9f, 0x22, 0x89, 0xa1, 0x6a, 0x92, 0x9c, 0x80, 0x32, 0x98, 0xaa, 0x45, - 0xaa, 0x0a, 0x93, 0x71, 0xd9, 0x13, 0x99, 0x99, 0x88, 0x17, 0x09, 0x91, 0xab, 0x49, 0x83, 0x99, - 0x81, 0x1c, 0x93, 0x10, 0xf9, 0x3e, 0x03, 0x89, 0xb0, 0x1d, 0x04, 0x10, 0x99, 0x8b, 0x91, 0x73, - 0xc3, 0x39, 0xd9, 0x20, 0x04, 0xba, 0x9c, 0x42, 0x88, 0x82, 0x9f, 0x22, 0x18, 0x96, 0x9c, 0x20, - 0x80, 0x10, 0xb9, 0x80, 0xaa, 0x74, 0xd2, 0x08, 0x89, 0x42, 0xb0, 0x8a, 0x98, 0x43, 0x0a, 0x07, - 0xca, 0x39, 0x05, 0x99, 0xba, 0x21, 0x91, 0x60, 0xf8, 0x38, 0x88, 0x03, 0xab, 0x01, 0x0b, 0x84, - 0x34, 0x9d, 0xb0, 0x39, 0x92, 0xb9, 0x41, 0x1c, 0xa4, 0x38, 0xe9, 0x30, 0x89, 0x86, 0x1b, 0x98, - 0x18, 0x07, 0x8a, 0x91, 0x9a, 0x21, 0x15, 0xab, 0xa8, 0x41, 0xa8, 0x09, 0x95, 0x1b, 0x08, 0x17, - 0x8c, 0xd0, 0x49, 0x80, 0x80, 0x0b, 0x86, 0xaa, 0x70, 0xb3, 0xba, 0x48, 0x85, 0x98, 0xb9, 0x61, - 0xb0, 0x40, 0x98, 0x90, 0x89, 0x32, 0xa9, 0xd9, 0x2a, 0x27, 0xcb, 0x08, 0x12, 0x09, 0x31, 0xa8, - 0xbd, 0x42, 0x28, 0x13, 0xef, 0x28, 0x32, 0xb8, 0x1a, 0x00, 0x98, 0x30, 0xd9, 0x89, 0x12, 0x50, - 0xb1, 0xbd, 0x53, 0x02, 0x9a, 0xb2, 0x0f, 0x82, 0x10, 0xb2, 0x1d, 0x80, 0x63, 0xa8, 0xca, 0x40, - 0x90, 0x08, 0x12, 0xba, 0x0b, 0x74, 0xd3, 0x0c, 0x21, 0x80, 0xa9, 0x10, 0x09, 0x04, 0x8b, 0x37, - 0xcd, 0x18, 0x22, 0x92, 0x8d, 0x13, 0x9c, 0x81, 0x09, 0x24, 0xbc, 0x43, 0xad, 0x03, 0x09, 0x31, - 0x31, 0xfa, 0x1b, 0x01, 0x9a, 0x23, 0xa8, 0x10, 0xba, 0x46, 0xa9, 0x18, 0x02, 0x01, 0x8d, 0xa1, - 0x0c, 0x43, 0x88, 0x84, 0xbb, 0x0f, 0x03, 0x0a, 0x13, 0x9f, 0x05, 0x8a, 0x39, 0xd8, 0x41, 0x01, - 0x9b, 0xa9, 0x51, 0xa8, 0x02, 0x40, 0xad, 0x03, 0xad, 0x73, 0xb9, 0x13, 0x89, 0x80, 0x9a, 0x63, - 0xd9, 0x50, 0xa8, 0x80, 0x2a, 0x03, 0x9b, 0x00, 0x11, 0x98, 0xa9, 0x20, 0x11, 0xc5, 0x0e, 0x21, - 0x13, 0xb8, 0xac, 0x88, 0xe8, 0x73, 0x98, 0x88, 0x80, 0x80, 0x40, 0xfa, 0x43, 0x88, 0xa9, 0x4b, - 0xc4, 0x39, 0x88, 0x21, 0xbc, 0x38, 0x04, 0x90, 0x9e, 0x23, 0xc1, 0x29, 0xad, 0x13, 0x00, 0x31, - 0xd1, 0x9c, 0x03, 0x48, 0xc1, 0x28, 0x80, 0x89, 0x0a, 0xca, 0x41, 0x45, 0xb0, 0x9a, 0xab, 0x37, - 0x9b, 0x12, 0x8c, 0x94, 0x1b, 0x94, 0xab, 0x32, 0x16, 0x8c, 0xea, 0x39, 0x03, 0x01, 0x9b, 0x02, - 0x2b, 0xa7, 0x2a, 0x12, 0xdc, 0x43, 0x98, 0xa9, 0x09, 0x42, 0xc1, 0x8b, 0x43, 0x88, 0xfa, 0x61, - 0xc8, 0x10, 0x91, 0x08, 0x88, 0xa8, 0x54, 0xc9, 0x20, 0x80, 0x99, 0x29, 0x92, 0x91, 0x1e, 0xb4, - 0x3b, 0x01, 0x44, 0xda, 0x38, 0x80, 0x89, 0xc1, 0x1e, 0x02, 0x10, 0x88, 0x93, 0x9f, 0x15, 0x08, - 0xba, 0x1b, 0x27, 0xb9, 0x00, 0x98, 0x38, 0x01, 0x02, 0xdd, 0x39, 0x81, 0xb2, 0x1c, 0x22, 0x81, - 0xc1, 0x3c, 0xa5, 0x6a, 0xc2, 0x29, 0xe8, 0x30, 0x80, 0x01, 0xac, 0x10, 0x12, 0x9a, 0x82, 0x1d, - 0x05, 0xaa, 0x90, 0x2b, 0x10, 0x36, 0xe0, 0x9b, 0x61, 0x92, 0xa9, 0x1a, 0x11, 0x81, 0x20, 0xdd, - 0x21, 0x30, 0x95, 0x8d, 0xa3, 0x2c, 0x92, 0x13, 0xbd, 0x09, 0x51, 0xa3, 0x0b, 0x9d, 0x33, 0x14, - 0x9e, 0x02, 0x9a, 0x00, 0x05, 0x9a, 0x9a, 0x63, 0xa2, 0x9b, 0x08, 0x24, 0xd8, 0x38, 0xa9, 0x02, - 0xaa, 0x64, 0xb8, 0x9b, 0x34, 0x01, 0xc8, 0x8a, 0x09, 0x26, 0xba, 0x38, 0xf9, 0x61, 0x88, 0x18, - 0xb8, 0x09, 0x58, 0xc3, 0x0c, 0x94, 0x39, 0xc1, 0x18, 0x9a, 0x05, 0x2b, 0xb4, 0x8c, 0x13, 0x18, - 0x90, 0xa9, 0x29, 0x17, 0x08, 0x8a, 0xe0, 0x4b, 0x95, 0x8a, 0x18, 0x08, 0x14, 0xbb, 0x84, 0x1f, - 0xa1, 0x51, 0xa0, 0x9a, 0x10, 0x32, 0xa9, 0x8b, 0x10, 0xa1, 0x1f, 0x17, 0xbb, 0x40, 0x81, 0xa0, - 0x9c, 0x22, 0x18, 0x15, 0xfb, 0x39, 0xa2, 0x61, 0xb9, 0x89, 0x90, 0x61, 0x80, 0xc8, 0x2a, 0x13, - 0x92, 0x0f, 0xa2, 0x39, 0xa1, 0x31, 0xc8, 0x9e, 0x32, 0x01, 0xbb, 0x52, 0xb0, 0x39, 0xd8, 0x18, - 0x91, 0x78, 0x96, 0xac, 0x21, 0x08, 0x03, 0x9a, 0xaa, 0x42, 0x9a, 0x91, 0x4a, 0xc2, 0x52, 0xb9, - 0x09, 0x1a, 0x33, 0x05, 0x0e, 0xb1, 0x9f, 0x42, 0x92, 0x09, 0xa0, 0x1c, 0x93, 0x30, 0x98, 0x8a, - 0x59, 0x94, 0xab, 0x80, 0x61, 0x90, 0xe0, 0x49, 0xa1, 0x99, 0x03, 0x19, 0xd0, 0x58, 0x10, 0xc0, - 0x9c, 0x50, 0x82, 0x81, 0xcc, 0x40, 0xa1, 0x1a, 0x06, 0xac, 0x11, 0x11, 0x91, 0x8d, 0x12, 0x01, - 0xc8, 0x39, 0xc9, 0x39, 0x04, 0x99, 0x18, 0x9d, 0x25, 0x91, 0x9e, 0x12, 0x90, 0x89, 0x33, 0xcd, - 0x33, 0x98, 0x91, 0xbd, 0x62, 0x91, 0x8b, 0x82, 0x19, 0xb1, 0x64, 0x98, 0xb9, 0x4a, 0x86, 0x89, - 0x89, 0x98, 0x22, 0x8e, 0x83, 0x39, 0xf3, 0x5a, 0xa1, 0x08, 0x89, 0x20, 0x92, 0x0a, 0xc9, 0x24, - 0xcb, 0x6a, 0x92, 0xa9, 0x20, 0x32, 0xf0, 0x2b, 0x94, 0x1a, 0xb3, 0x69, 0xd1, 0x09, 0x02, 0x08, - 0xa8, 0x19, 0x33, 0xda, 0x18, 0x29, 0xa5, 0x1d, 0x85, 0x0c, 0x81, 0x98, 0x32, 0xb2, 0x9f, 0x83, - 0x99, 0x63, 0xa9, 0x08, 0x9a, 0x26, 0xa0, 0x9b, 0x03, 0x2b, 0x07, 0x9d, 0x02, 0x18, 0xc1, 0x39, - 0x98, 0x23, 0x08, 0xcb, 0x8a, 0x01, 0x47, 0x9a, 0xb0, 0x40, 0x9d, 0x86, 0x09, 0x89, 0x81, 0x20, - 0xc0, 0x3b, 0x84, 0x68, 0xa0, 0x08, 0xaa, 0x8a, 0x64, 0xa0, 0xba, 0x78, 0xa3, 0x0d, 0x01, 0x29, - 0xb1, 0x21, 0x9c, 0x92, 0x30, 0x01, 0xc8, 0x1c, 0x81, 0x40, 0xf1, 0x1a, 0x23, 0xad, 0x43, 0xab, - 0x04, 0x0b, 0x86, 0x1a, 0xa1, 0x8e, 0x02, 0x40, 0xa0, 0xa9, 0x28, 0xa9, 0x33, 0x89, 0xa9, 0x37, - 0xbc, 0x73, 0xc8, 0x01, 0x19, 0x81, 0xb8, 0x8c, 0x24, 0x89, 0xa8, 0x25, 0x8f, 0x12, 0xb0, 0x09, - 0x8a, 0x45, 0x91, 0xac, 0x88, 0x44, 0xa8, 0x00, 0x91, 0x8f, 0x02, 0x18, 0xd2, 0x5a, 0x91, 0x28, - 0xd0, 0x29, 0x88, 0x20, 0x92, 0xcc, 0x00, 0x39, 0x86, 0x98, 0x0a, 0x03, 0xc8, 0x1b, 0x35, 0xab, - 0x24, 0xa9, 0x9a, 0x48, 0x89, 0x17, 0x9b, 0x02, 0x9f, 0x14, 0x88, 0x8b, 0x83, 0x20, 0xa1, 0xca, - 0x1b, 0x15, 0x1b, 0x85, 0xba, 0x00, 0x21, 0x13, 0xbf, 0x43, 0xc8, 0x81, 0x1c, 0x14, 0x89, 0x82, - 0x9c, 0xaa, 0x84, 0x79, 0xa6, 0x0a, 0x88, 0x10, 0x10, 0xc8, 0x30, 0xab, 0x86, 0x1a, 0xb0, 0x19, - 0x24, 0x28, 0xf1, 0x1d, 0x22, 0x89, 0xa1, 0x0c, 0x91, 0x52, 0x8a, 0xb3, 0x0f, 0x05, 0x99, 0x8a, - 0x15, 0xa9, 0x01, 0x19, 0xa8, 0x30, 0x53, 0xf0, 0x19, 0x00, 0x09, 0xa5, 0x0c, 0x91, 0x88, 0x32, - 0x48, 0xf0, 0x3b, 0x83, 0x0a, 0xd1, 0x29, 0x10, 0xa0, 0x8a, 0x62, 0x92, 0x9c, 0x00, 0x83, 0x9f, - 0x35, 0xb8, 0x2a, 0x82, 0xa0, 0x40, 0xda, 0x30, 0xa1, 0x9b, 0x20, 0x80, 0xfa, 0x78, 0xb3, 0xa9, - 0x0c, 0x34, 0xa8, 0x20, 0x9c, 0x91, 0x53, 0x9b, 0x85, 0x9e, 0x42, 0x90, 0x8a, 0x88, 0x31, 0x90, - 0x12, 0xb8, 0x8b, 0x88, 0x53, 0xfd, 0x30, 0x83, 0x02, 0xce, 0x28, 0x80, 0x21, 0x92, 0xac, 0x18, - 0x39, 0x86, 0x18, 0xec, 0x42, 0xb0, 0x1b, 0x92, 0x48, 0xb0, 0x48, 0xb1, 0x0e, 0x12, 0x81, 0x00, - 0xc9, 0x3b, 0x06, 0xaa, 0x19, 0x16, 0xbb, 0x44, 0xd8, 0x2a, 0x82, 0x08, 0x88, 0x8a, 0x24, 0xc9, - 0x3a, 0xb4, 0x1b, 0x22, 0x10, 0xf8, 0x0d, 0x21, 0x85, 0x0b, 0x83, 0xcb, 0x59, 0x02, 0x28, 0xfb, - 0x41, 0xb9, 0x11, 0xaa, 0x35, 0x9a, 0x81, 0xac, 0x32, 0xa8, 0x41, 0xc8, 0x18, 0xca, 0x73, 0xb8, - 0x88, 0x01, 0x28, 0x91, 0x08, 0x9a, 0x44, 0x01, 0xd1, 0x0c, 0x91, 0x39, 0x15, 0x9a, 0xaa, 0x90, - 0x35, 0x98, 0xce, 0x48, 0x03, 0xba, 0x30, 0x9a, 0x30, 0x93, 0x14, 0xbc, 0x8d, 0x36, 0xd9, 0x8a, - 0x21, 0x15, 0xa8, 0x8d, 0x25, 0xbb, 0x58, 0xa2, 0x09, 0x9b, 0x26, 0xab, 0x91, 0x29, 0x86, 0x0c, - 0x83, 0xbb, 0x32, 0x80, 0x82, 0x08, 0x98, 0x41, 0xc0, 0x9a, 0x37, 0xdc, 0x12, 0x0d, 0x83, 0x0a, - 0x02, 0x8b, 0x22, 0x89, 0x59, 0xb2, 0x8f, 0x12, 0x00, 0x8b, 0x04, 0xd0, 0x8a, 0x20, 0x13, 0x08, - 0x60, 0xe8, 0xb8, 0x78, 0x91, 0x01, 0xcb, 0x31, 0x98, 0x8b, 0x40, 0x84, 0x9b, 0x80, 0xa0, 0xa9, - 0x72, 0x15, 0x99, 0xbc, 0x15, 0x0a, 0x12, 0x89, 0x82, 0x9f, 0x02, 0x2a, 0xe0, 0x49, 0x83, 0x8b, - 0x92, 0x0d, 0x16, 0xbb, 0x42, 0x9b, 0x12, 0x88, 0x0a, 0xa2, 0x3b, 0x26, 0xa0, 0xcc, 0x40, 0x93, - 0x8c, 0x14, 0x8a, 0xc9, 0x52, 0x91, 0x0a, 0x89, 0x81, 0x8a, 0xa8, 0x53, 0xa8, 0x11, 0x0c, 0x87, - 0x0d, 0x21, 0x94, 0x9f, 0x21, 0x81, 0x8a, 0x81, 0x80, 0x18, 0x0b, 0x07, 0x99, 0x1c, 0x03, 0x89, - 0x99, 0x83, 0x3b, 0x13, 0xbb, 0x13, 0xff, 0x70, 0x92, 0xaa, 0x02, 0x8c, 0x24, 0x89, 0x99, 0x8a, - 0x14, 0x9b, 0x80, 0x61, 0xc2, 0x4a, 0xd1, 0x99, 0x51, 0x80, 0x08, 0xc9, 0x29, 0x83, 0x43, 0xea, - 0x19, 0x00, 0x82, 0x82, 0x0e, 0x02, 0x48, 0xb0, 0x39, 0xfc, 0x30, 0x93, 0x8b, 0xb0, 0x4b, 0xb2, - 0x41, 0x80, 0xbb, 0x32, 0xc3, 0x8d, 0x18, 0x25, 0xd9, 0x52, 0xc0, 0x19, 0x10, 0x90, 0x98, 0x4a, - 0xc2, 0x38, 0xa9, 0x14, 0x88, 0x8c, 0x16, 0x88, 0xdd, 0x41, 0xa1, 0x0a, 0x90, 0x08, 0x82, 0x10, - 0x18, 0xf2, 0x4a, 0x10, 0x80, 0xb8, 0x59, 0x12, 0xc9, 0xaa, 0x52, 0xb9, 0x72, 0xd1, 0x0b, 0x14, - 0x0a, 0xb0, 0x28, 0x02, 0x21, 0xdb, 0x10, 0x9a, 0x37, 0xba, 0x90, 0x0a, 0x06, 0x9a, 0x22, 0xcb, - 0x18, 0x23, 0x8b, 0xa7, 0x1d, 0x11, 0x81, 0xd8, 0x1a, 0x22, 0x21, 0xf0, 0x1b, 0x23, 0x10, 0x99, - 0xe8, 0x20, 0x89, 0x25, 0xcd, 0x20, 0x84, 0x19, 0xa0, 0x90, 0x0d, 0x11, 0xb4, 0x0e, 0x90, 0x42, - 0x81, 0xb9, 0x0b, 0x53, 0xa9, 0x24, 0xcb, 0x88, 0x71, 0xc3, 0x09, 0x18, 0x11, 0xba, 0x03, 0xab, - 0x31, 0xed, 0x53, 0xba, 0x40, 0x01, 0x90, 0xae, 0x20, 0x11, 0x10, 0xc1, 0x09, 0xa9, 0x42, 0x93, - 0x8a, 0x99, 0xab, 0x27, 0x89, 0xb1, 0x6a, 0x06, 0xcc, 0x22, 0x8a, 0x81, 0x41, 0xc2, 0x8d, 0x01, - 0x01, 0x9c, 0x02, 0x02, 0x18, 0xca, 0x80, 0x60, 0x00, 0x03, 0x8b, 0xfb, 0x58, 0x91, 0x9c, 0x32, - 0x99, 0xa0, 0x31, 0xbe, 0x01, 0x68, 0x05, 0xaa, 0x8c, 0x13, 0x08, 0x12, 0x3a, 0xc2, 0xbc, 0x48, - 0x02, 0xad, 0x63, 0x91, 0xba, 0x9a, 0x33, 0x12, 0x03, 0x8d, 0x88, 0xd1, 0x5a, 0x82, 0xba, 0xca, - 0x72, 0xc4, 0x0b, 0x13, 0x10, 0xa8, 0x58, 0xc8, 0x0b, 0x34, 0x00, 0xd9, 0x2b, 0x06, 0x8a, 0x90, - 0x0b, 0x04, 0x2b, 0x94, 0xbb, 0x48, 0x42, 0xb2, 0x9c, 0x22, 0x0a, 0xb0, 0x10, 0xcb, 0x40, 0x37, - 0xb9, 0x9e, 0x28, 0x21, 0x82, 0xbc, 0x41, 0x80, 0x90, 0x11, 0xc8, 0x9e, 0x44, 0xb1, 0x9b, 0x09, - 0x34, 0x00, 0x81, 0xaa, 0x0c, 0xe1, 0x70, 0xb0, 0x09, 0x22, 0x01, 0xda, 0x1c, 0x07, 0x09, 0xa9, - 0x18, 0x91, 0x3c, 0x86, 0x09, 0xb0, 0x5a, 0x92, 0x89, 0x99, 0x31, 0xc1, 0x50, 0xa0, 0xc8, 0x69, - 0x81, 0xa9, 0x39, 0x88, 0x01, 0xb8, 0x78, 0xd2, 0x2b, 0x03, 0xa8, 0x09, 0x08, 0x92, 0xa0, 0x78, - 0xd3, 0x00, 0x9a, 0x42, 0xfa, 0x41, 0x91, 0x89, 0x0a, 0x21, 0x98, 0x08, 0x21, 0x8b, 0xb1, 0xbb, - 0x27, 0x8f, 0x93, 0x30, 0x10, 0xec, 0x09, 0x12, 0x38, 0x88, 0x22, 0xf0, 0x3a, 0xb4, 0x5b, 0xd1, - 0x48, 0xc1, 0x8a, 0x21, 0x91, 0x9b, 0x73, 0xd1, 0x2a, 0x82, 0x1b, 0x94, 0x2a, 0xa3, 0x8c, 0x81, - 0x18, 0xb0, 0x70, 0x82, 0xca, 0x88, 0x28, 0x03, 0x8a, 0x71, 0xd8, 0x18, 0x00, 0xa4, 0x0b, 0x1b, - 0x07, 0xa9, 0x98, 0x8a, 0x71, 0x83, 0x89, 0x00, 0xba, 0x4a, 0x17, 0x99, 0x8a, 0x02, 0x1a, 0xd0, - 0x3a, 0x91, 0x73, 0xe1, 0x09, 0xb9, 0x63, 0x91, 0x90, 0x9d, 0x24, 0x90, 0x09, 0x98, 0x28, 0x90, - 0x42, 0xf9, 0x1a, 0x13, 0x81, 0x9b, 0x01, 0xaa, 0x36, 0x8a, 0xb2, 0x9f, 0x31, 0x33, 0xfb, 0x0c, - 0x23, 0xa1, 0x8d, 0x12, 0x98, 0x93, 0x78, 0xc8, 0x08, 0x10, 0x80, 0x01, 0x8f, 0x13, 0x1b, 0x84, - 0x8c, 0x10, 0x98, 0x28, 0xa1, 0xae, 0x32, 0x20, 0x06, 0xad, 0x00, 0x10, 0x10, 0x99, 0x88, 0x0a, - 0x80, 0x66, 0xb9, 0x18, 0x30, 0xc2, 0x8a, 0xdb, 0x51, 0x12, 0xb9, 0x99, 0x48, 0x11, 0xb1, 0x0b, - 0x04, 0xbc, 0x74, 0xc8, 0x8a, 0x20, 0x52, 0xa2, 0xbc, 0x19, 0x25, 0x88, 0x89, 0xf3, 0x4a, 0x82, - 0x99, 0x99, 0x99, 0x37, 0x9a, 0x02, 0x9f, 0x12, 0x80, 0x00, 0x9b, 0x22, 0x30, 0xd1, 0x2c, 0x92, - 0x39, 0x84, 0xcc, 0x99, 0x59, 0x14, 0xa8, 0x9e, 0x32, 0xa0, 0x19, 0x94, 0x1b, 0x00, 0x85, 0x0c, - 0xe8, 0x29, 0x25, 0xa9, 0x80, 0xaa, 0x42, 0x82, 0x8a, 0x98, 0x30, 0x83, 0xa0, 0xcf, 0x12, 0x18, - 0x23, 0xfb, 0x8a, 0x21, 0xa8, 0x19, 0x19, 0x07, 0x3e, 0xb4, 0x0a, 0x10, 0x22, 0xa1, 0x9d, 0xb9, - 0x60, 0x00, 0x01, 0xb8, 0x29, 0x11, 0xc0, 0x99, 0x61, 0x93, 0xbd, 0x71, 0xc0, 0x18, 0x21, 0xb1, - 0x9b, 0x1a, 0x07, 0x0b, 0x88, 0x20, 0xa8, 0x30, 0xd2, 0x49, 0x18, 0x84, 0xc9, 0x3b, 0x93, 0x1a, - 0xc3, 0x40, 0x9f, 0x03, 0x39, 0xa2, 0x9f, 0x11, 0x82, 0x3a, 0xc4, 0x1d, 0x82, 0x11, 0xaf, 0x21, - 0x12, 0xc1, 0x39, 0xca, 0x80, 0x43, 0xca, 0x08, 0x52, 0xd0, 0x4a, 0xa1, 0x2a, 0xa2, 0x3a, 0x86, - 0xab, 0x88, 0x60, 0x91, 0x8c, 0x14, 0x99, 0x98, 0x48, 0xb3, 0x0c, 0x81, 0x28, 0xb2, 0x8e, 0x33, - 0x89, 0x1a, 0x27, 0xcd, 0x29, 0x11, 0xb2, 0x29, 0xb9, 0x36, 0xfb, 0x38, 0x82, 0x08, 0x19, 0x90, - 0xab, 0x51, 0x92, 0x1b, 0xb0, 0x72, 0xf0, 0x08, 0x00, 0x91, 0x01, 0x9b, 0x16, 0xbb, 0x48, 0x85, - 0x1a, 0xba, 0x43, 0xc0, 0x9b, 0x21, 0x17, 0xaa, 0x28, 0xa8, 0x98, 0x49, 0x35, 0xd8, 0x0b, 0x25, - 0xb9, 0x8a, 0x32, 0x91, 0x0d, 0xb2, 0x38, 0xe9, 0x49, 0x05, 0xa9, 0x09, 0x00, 0x92, 0x2a, 0x02, - 0xb8, 0x08, 0x9e, 0x27, 0xb8, 0x0a, 0x21, 0xc9, 0x0a, 0x88, 0x37, 0x0a, 0x92, 0x89, 0x9b, 0x34, - 0xdc, 0x28, 0x98, 0x35, 0xaa, 0x92, 0x0c, 0x90, 0x54, 0x83, 0xac, 0x8a, 0x05, 0x09, 0x8b, 0x01, - 0x32, 0xf9, 0x1a, 0x00, 0xac, 0x44, 0xa3, 0x0e, 0x91, 0x12, 0x1b, 0x94, 0x39, 0x90, 0xae, 0x14, - 0x2a, 0x98, 0x10, 0x85, 0x8e, 0x20, 0xb8, 0x08, 0x42, 0xa8, 0xb3, 0x8e, 0x30, 0xa1, 0x5a, 0xf2, - 0x3a, 0x91, 0x10, 0xd1, 0x1a, 0x24, 0x0a, 0xa3, 0x8d, 0x02, 0x1a, 0x07, 0x8a, 0xaa, 0x69, 0x83, - 0xba, 0x29, 0x12, 0x88, 0xb2, 0xbf, 0x31, 0x02, 0x73, 0xda, 0x00, 0x09, 0x85, 0xab, 0x01, 0x10, - 0xa4, 0x0f, 0x05, 0x9a, 0x82, 0x09, 0x12, 0xbb, 0x88, 0x36, 0xda, 0x2a, 0x83, 0x49, 0xa2, 0x29, - 0xc9, 0x0b, 0x07, 0x89, 0xaa, 0x26, 0xa9, 0x98, 0x20, 0x01, 0x99, 0x01, 0xda, 0x31, 0xaa, 0x46, - 0xb8, 0x88, 0x8b, 0x46, 0xf0, 0x3a, 0xb1, 0x58, 0x98, 0x01, 0xca, 0x41, 0x82, 0xa9, 0x1a, 0x33, - 0xd8, 0x00, 0x0b, 0x17, 0xca, 0x30, 0x88, 0xbb, 0x20, 0x33, 0x98, 0x9d, 0x98, 0x27, 0xb8, 0x30, - 0x88, 0xb9, 0x6a, 0xa4, 0x99, 0x4c, 0x87, 0x0a, 0xb9, 0x33, 0xb9, 0x18, 0x22, 0x89, 0xfb, 0x63, - 0x98, 0xa9, 0x00, 0x11, 0x2b, 0x95, 0xae, 0x11, 0x38, 0x94, 0x9d, 0x22, 0x81, 0x39, 0xfa, 0x10, - 0x1a, 0x96, 0x2a, 0xc2, 0x2b, 0x01, 0x02, 0x98, 0xaf, 0x53, 0xa8, 0x80, 0x0a, 0x16, 0xaa, 0x20, - 0xb8, 0x49, 0x93, 0x2b, 0xf1, 0x80, 0x1a, 0x15, 0xa0, 0x89, 0x18, 0x81, 0x01, 0xad, 0x88, 0x34, - 0x1a, 0xb4, 0x1d, 0xba, 0x36, 0x11, 0xcd, 0x38, 0x92, 0x80, 0x29, 0xb8, 0x22, 0xd8, 0x72, 0xd0, - 0x8a, 0x42, 0x01, 0xac, 0x00, 0x20, 0xa1, 0x29, 0x9a, 0xe3, 0x7a, 0xb3, 0x8c, 0x00, 0x11, 0x03, - 0x8e, 0x82, 0x9a, 0x62, 0xa0, 0x09, 0x91, 0x49, 0xa1, 0x21, 0xbf, 0x53, 0x99, 0x88, 0xba, 0x12, - 0x32, 0x48, 0xf1, 0x1a, 0x39, 0xa7, 0x0c, 0x02, 0x88, 0x30, 0xc8, 0x2a, 0x99, 0x70, 0xa2, 0x89, - 0x8d, 0x14, 0x89, 0x91, 0x2a, 0x03, 0x0a, 0x91, 0xcd, 0x38, 0x80, 0x23, 0xb9, 0xad, 0x75, 0xa1, - 0x98, 0x18, 0x0a, 0x87, 0x8c, 0x02, 0x09, 0x81, 0x02, 0xcf, 0x32, 0xa8, 0x20, 0x89, 0xa8, 0x34, - 0x9e, 0x23, 0x98, 0x1a, 0xa1, 0xb8, 0x72, 0xd0, 0x10, 0x81, 0x09, 0xa4, 0x1e, 0x82, 0x18, 0xa1, - 0x0a, 0x11, 0x95, 0x2c, 0xd0, 0x01, 0x1b, 0xc0, 0x59, 0xa2, 0x0a, 0x40, 0xa3, 0x0f, 0xa3, 0x40, - 0x99, 0xa0, 0x28, 0x28, 0x13, 0x9f, 0xa1, 0x79, 0xb1, 0x3b, 0xc0, 0x41, 0x88, 0xa9, 0x33, 0xac, - 0x06, 0x0c, 0xa2, 0x2c, 0x85, 0x1b, 0xc8, 0x41, 0x98, 0x08, 0x88, 0x22, 0x90, 0x3a, 0xe2, 0x8a, - 0x81, 0x61, 0xa8, 0x8c, 0x03, 0x11, 0xad, 0x02, 0x07, 0x3b, 0xea, 0x32, 0x98, 0x99, 0x12, 0x0a, - 0x00, 0xa2, 0xad, 0x41, 0xc1, 0x30, 0xf8, 0x20, 0x99, 0x15, 0x99, 0x01, 0xcc, 0x20, 0x91, 0x4a, - 0xc2, 0x52, 0xc9, 0x09, 0x11, 0x43, 0xc8, 0x2a, 0xa3, 0x2c, 0x18, 0x87, 0x8d, 0x28, 0xb3, 0x0b, - 0xaa, 0x72, 0xc3, 0x89, 0x30, 0xc0, 0x8a, 0x43, 0x80, 0xb8, 0x0e, 0x15, 0x98, 0x1a, 0x95, 0x1a, - 0xa8, 0x10, 0x1a, 0xb0, 0x73, 0xb2, 0x8c, 0x23, 0x98, 0x04, 0x9f, 0x02, 0xaa, 0x49, 0x82, 0x8b, - 0x91, 0x73, 0xa0, 0xb9, 0x10, 0x61, 0xc9, 0x32, 0xcb, 0x11, 0x10, 0x2a, 0xd0, 0x08, 0x34, 0xba, - 0xbc, 0x36, 0x98, 0x8a, 0x42, 0xf8, 0x20, 0x08, 0xa1, 0x8b, 0x19, 0x47, 0xba, 0x20, 0x88, 0x09, - 0x82, 0xb0, 0x0a, 0x09, 0x15, 0x8d, 0xa2, 0x3a, 0x05, 0x9d, 0x92, 0x41, 0x98, 0x31, 0xe1, 0x0a, - 0x99, 0x47, 0xa9, 0x98, 0x51, 0xba, 0xa2, 0x3b, 0x04, 0x29, 0xb9, 0x84, 0x9f, 0x43, 0xa9, 0x81, - 0x08, 0x19, 0xfb, 0x71, 0xa8, 0x21, 0xba, 0x13, 0x9c, 0x14, 0x8b, 0x13, 0xd9, 0x51, 0x99, 0x03, - 0x9a, 0x39, 0xb2, 0x10, 0xdf, 0x20, 0x88, 0x32, 0xe8, 0x28, 0xb0, 0x61, 0xaa, 0x03, 0x1b, 0xc9, - 0x43, 0xc0, 0x49, 0x80, 0x91, 0x88, 0x8e, 0x04, 0x18, 0x91, 0x0a, 0x98, 0x58, 0x95, 0xaa, 0x09, - 0x02, 0x81, 0x8f, 0x91, 0x51, 0xa8, 0x08, 0x80, 0x08, 0x28, 0x84, 0x91, 0x8f, 0xa2, 0x63, 0xaa, - 0xa0, 0x38, 0x40, 0xf8, 0x3a, 0x88, 0x42, 0xc0, 0x19, 0xc9, 0x44, 0xa9, 0x80, 0x91, 0x3d, 0x95, - 0x0a, 0x83, 0x1d, 0x90, 0x12, 0x0e, 0xa4, 0x2a, 0xa3, 0x1a, 0x93, 0x8d, 0x05, 0x9b, 0xb8, 0x4a, - 0x13, 0xba, 0x16, 0x2b, 0xa4, 0x9a, 0x34, 0xcb, 0x22, 0x9e, 0x14, 0x1b, 0x94, 0x1e, 0x83, 0x0b, - 0x80, 0x89, 0x03, 0x0d, 0x05, 0x9c, 0x02, 0x1a, 0x91, 0x58, 0xc0, 0x98, 0x3b, 0x85, 0x00, 0x8d, - 0x14, 0x88, 0x98, 0x08, 0x81, 0x30, 0xb1, 0x01, 0xaf, 0x42, 0xb1, 0x28, 0xac, 0x11, 0x39, 0xe1, - 0x18, 0x9a, 0x28, 0x38, 0x37, 0xef, 0x31, 0x00, 0xb8, 0x18, 0x2b, 0x97, 0x1a, 0x12, 0xab, 0x19, - 0x17, 0x89, 0x9d, 0x23, 0xa0, 0x2a, 0xa0, 0x08, 0x86, 0x0d, 0x85, 0x8b, 0x11, 0x82, 0xb9, 0x0c, - 0x25, 0x00, 0xc9, 0x3a, 0x93, 0xcc, 0x51, 0xba, 0x12, 0x1b, 0x25, 0xc0, 0x2b, 0x84, 0x08, 0x8a, - 0x93, 0x1c, 0xe1, 0x60, 0x90, 0xa9, 0x52, 0xa0, 0x09, 0x0b, 0x24, 0xd8, 0x2a, 0x12, 0xe0, 0x3a, - 0x12, 0x98, 0xfb, 0x10, 0x10, 0xd8, 0x21, 0x39, 0xc0, 0x58, 0x91, 0x9b, 0x12, 0x41, 0xb1, 0x8f, - 0x02, 0x20, 0xb0, 0x2a, 0x93, 0xad, 0x30, 0xba, 0x17, 0x1a, 0xa3, 0x0b, 0xb8, 0x68, 0x81, 0xab, - 0x91, 0x7a, 0xb8, 0x15, 0xa8, 0x0d, 0x07, 0x1a, 0xb8, 0x11, 0x12, 0x99, 0xa9, 0x21, 0x82, 0x8f, - 0x02, 0x09, 0xb1, 0x5b, 0xa0, 0x89, 0x23, 0x72, 0xb8, 0x1c, 0x95, 0x1b, 0xc9, 0x61, 0xc0, 0x20, - 0xaa, 0x13, 0x1b, 0x86, 0x08, 0x0b, 0xa4, 0x4b, 0xd1, 0x29, 0x91, 0x01, 0x1d, 0x91, 0x18, 0x05, - 0xb8, 0x1e, 0xa3, 0x71, 0xb9, 0x29, 0x04, 0xc8, 0x29, 0x91, 0x2a, 0xc8, 0x92, 0x6a, 0xd8, 0x20, - 0x12, 0xc9, 0x30, 0xc0, 0x48, 0xb9, 0x31, 0x98, 0x18, 0x85, 0x0e, 0x01, 0x90, 0x39, 0xa1, 0x8c, - 0x37, 0xac, 0x02, 0x18, 0x88, 0xc2, 0x0e, 0x15, 0xab, 0x80, 0x30, 0xba, 0x46, 0xda, 0x10, 0x08, - 0x01, 0x90, 0x1c, 0x05, 0x98, 0x08, 0x88, 0x1a, 0x94, 0x9a, 0x18, 0xba, 0x73, 0x93, 0x90, 0xad, - 0x26, 0x8a, 0xc1, 0x49, 0x91, 0x19, 0xb0, 0x1b, 0x11, 0xb8, 0x77, 0xd9, 0x28, 0x00, 0xa0, 0x28, - 0x80, 0x89, 0x13, 0x9c, 0xb3, 0x8f, 0x05, 0x89, 0xa2, 0x3b, 0x93, 0x18, 0x94, 0x8f, 0x03, 0x99, - 0x32, 0xca, 0x10, 0x28, 0x33, 0xf9, 0x1f, 0x91, 0x11, 0x08, 0xa0, 0x0b, 0x21, 0x03, 0xbe, 0x2a, - 0x35, 0xd2, 0x0c, 0x92, 0x18, 0x83, 0x29, 0xa8, 0xd8, 0x7a, 0x82, 0x9a, 0x10, 0x85, 0x1c, 0xa0, - 0x20, 0xba, 0x33, 0x12, 0xaf, 0x01, 0x8c, 0x24, 0xa8, 0x09, 0x31, 0x9c, 0xa7, 0x4b, 0xa8, 0x30, - 0x92, 0x1c, 0x14, 0xaf, 0x31, 0x10, 0x92, 0x9f, 0x14, 0x9a, 0x98, 0x01, 0x78, 0xc0, 0x3a, 0xb0, - 0x41, 0x0a, 0xa3, 0x2b, 0xd1, 0x19, 0x35, 0xcb, 0x30, 0xa8, 0x23, 0xcd, 0x31, 0xa9, 0x18, 0x84, - 0xa0, 0x0e, 0x14, 0x99, 0x1a, 0x13, 0x80, 0xad, 0x03, 0x58, 0xfa, 0x59, 0x80, 0x90, 0x18, 0x88, - 0x99, 0x40, 0x86, 0x8a, 0x80, 0x28, 0x98, 0xba, 0x31, 0x07, 0xac, 0x1b, 0x16, 0xab, 0x31, 0x20, - 0xe2, 0x8b, 0x41, 0x82, 0xca, 0x38, 0x85, 0x0c, 0x81, 0x3b, 0xb6, 0x5b, 0xb2, 0x8a, 0x20, 0x09, - 0x03, 0x9c, 0x33, 0xa9, 0x98, 0x88, 0x32, 0xfc, 0x2b, 0x07, 0x80, 0xac, 0x14, 0x09, 0x98, 0x23, - 0xca, 0x1b, 0xa2, 0x72, 0xa0, 0x30, 0xc2, 0x9f, 0x22, 0x00, 0x9c, 0x22, 0x9a, 0x23, 0xcf, 0x25, - 0x99, 0x08, 0x08, 0x02, 0xcb, 0x21, 0x88, 0x93, 0x0d, 0x02, 0x89, 0x25, 0xca, 0x99, 0x29, 0x52, - 0xb2, 0xdc, 0x41, 0xa1, 0x0a, 0xb0, 0x52, 0xa9, 0x52, 0xb0, 0x0a, 0x88, 0x63, 0xc2, 0x0a, 0x01, - 0x29, 0xe1, 0x40, 0xa9, 0x29, 0x21, 0xd8, 0x99, 0x3c, 0x05, 0x90, 0x9c, 0x42, 0xcb, 0x32, 0x00, - 0x38, 0xfa, 0x21, 0xc8, 0x2a, 0x94, 0x40, 0x90, 0xb8, 0x69, 0xc0, 0x29, 0x14, 0xba, 0x09, 0xa2, - 0x8c, 0x10, 0x45, 0xb0, 0xcb, 0x22, 0x01, 0xca, 0x40, 0x93, 0x2b, 0xc8, 0x42, 0xac, 0x22, 0x32, - 0xc1, 0xaf, 0x01, 0x10, 0x08, 0x43, 0xea, 0x20, 0x10, 0xb1, 0xad, 0x2a, 0x06, 0xab, 0x43, 0x89, - 0x91, 0x9b, 0x72, 0xb1, 0x08, 0x29, 0x94, 0xdd, 0x68, 0x82, 0x8a, 0xa0, 0x20, 0xba, 0x29, 0x35, - 0xb1, 0xaf, 0x53, 0xa0, 0x0a, 0x12, 0x00, 0xe1, 0x2a, 0x83, 0xad, 0x21, 0x24, 0xc8, 0x8d, 0x02, - 0x18, 0xc0, 0x60, 0x81, 0xab, 0x22, 0x99, 0x81, 0x88, 0x29, 0xc6, 0x1d, 0x82, 0x18, 0x98, 0x30, - 0x03, 0xad, 0x28, 0x80, 0xc8, 0x71, 0x94, 0xac, 0x02, 0x28, 0xb1, 0x2a, 0x31, 0xe3, 0xad, 0x31, - 0x10, 0x99, 0x35, 0xea, 0x18, 0x90, 0x31, 0xf9, 0x28, 0x81, 0x80, 0xac, 0x44, 0xb8, 0x29, 0x93, - 0x00, 0xfb, 0x58, 0xa1, 0x18, 0xb1, 0x59, 0xd1, 0x1a, 0x12, 0x82, 0xac, 0x01, 0x82, 0x1e, 0x83, - 0x8a, 0x18, 0x17, 0xbb, 0x80, 0x59, 0xa0, 0x10, 0xa8, 0x11, 0x23, 0xfa, 0x1a, 0x80, 0x43, 0x8b, - 0xc0, 0x51, 0xb8, 0x29, 0xa0, 0x82, 0x28, 0x79, 0xb3, 0x3b, 0xc1, 0x2a, 0x03, 0x00, 0xcf, 0x23, - 0x98, 0xeb, 0x38, 0x43, 0xe2, 0x1b, 0x12, 0xd9, 0x38, 0x02, 0xc0, 0x19, 0x10, 0xe0, 0x3a, 0x04, - 0x39, 0xe2, 0x0a, 0xa8, 0x1b, 0x45, 0x22, 0xf8, 0x5b, 0xa0, 0x10, 0x08, 0x01, 0xba, 0x2a, 0xb2, - 0x8c, 0x33, 0xa9, 0x27, 0xcb, 0xb0, 0x58, 0x02, 0x18, 0xc2, 0x0e, 0x03, 0x0b, 0x83, 0xae, 0x73, - 0xa1, 0x09, 0xc9, 0x11, 0x30, 0xb1, 0x31, 0xf8, 0x8a, 0x24, 0xa9, 0xa8, 0x40, 0x81, 0xb0, 0xbd, - 0x51, 0x91, 0x42, 0xc8, 0x09, 0x88, 0x24, 0x88, 0x98, 0xca, 0x35, 0x9e, 0x12, 0xab, 0x16, 0x88, - 0x98, 0xba, 0x79, 0xa3, 0x10, 0xb8, 0x89, 0x21, 0x32, 0xf9, 0x1c, 0x12, 0x12, 0xd8, 0x0c, 0x13, - 0x99, 0x11, 0x98, 0x89, 0x3a, 0x23, 0xb5, 0x9f, 0x48, 0x83, 0xaa, 0xd0, 0x1a, 0x42, 0x94, 0x8b, - 0x02, 0x01, 0x99, 0x93, 0x9c, 0x12, 0x29, 0x16, 0xff, 0x20, 0x80, 0x13, 0xba, 0x29, 0x90, 0xab, - 0x54, 0xd9, 0x41, 0xbb, 0x35, 0xaa, 0x80, 0x89, 0x51, 0xc2, 0x2d, 0x92, 0x81, 0x0b, 0x35, 0xc9, - 0x9b, 0x61, 0x81, 0x9c, 0x18, 0x13, 0xb9, 0x08, 0x2b, 0x86, 0x0b, 0x33, 0xc0, 0xac, 0x73, 0xb2, - 0x0b, 0xa2, 0x4a, 0xa2, 0x28, 0xc2, 0x9f, 0x25, 0x89, 0xa1, 0x0b, 0x14, 0x18, 0xf0, 0x1a, 0x01, - 0x20, 0xa0, 0x09, 0xbb, 0x41, 0x04, 0xbb, 0x63, 0x80, 0xaa, 0x31, 0xb0, 0x6b, 0x23, 0xaa, 0xb2, - 0xef, 0x31, 0x10, 0xa9, 0x88, 0x29, 0xb3, 0x3c, 0x16, 0xb9, 0x19, 0x21, 0xb3, 0xbf, 0x40, 0x91, - 0x11, 0xb9, 0x30, 0xfb, 0x7a, 0xa2, 0x20, 0xca, 0x51, 0xc1, 0x0b, 0x33, 0xc8, 0x88, 0x30, 0xf2, - 0x1a, 0xa2, 0x40, 0xc0, 0x39, 0xa1, 0x28, 0x81, 0x29, 0xb0, 0x38, 0xc4, 0x8e, 0x99, 0x32, 0x26, - 0xac, 0x01, 0x99, 0x20, 0x1a, 0x04, 0x89, 0x99, 0x40, 0x12, 0xf9, 0x2f, 0x84, 0x1b, 0x91, 0x1b, - 0xb3, 0x6b, 0x82, 0x99, 0x20, 0x08, 0xa2, 0xbd, 0x71, 0xc1, 0x2a, 0x82, 0x90, 0x99, 0x78, 0xb2, - 0xac, 0x58, 0x83, 0xa0, 0x2c, 0x94, 0x1a, 0x01, 0x18, 0xfa, 0x5c, 0x91, 0x18, 0xd8, 0x40, 0x91, - 0x0a, 0x82, 0x0a, 0xd9, 0x41, 0x81, 0xa9, 0x0a, 0x51, 0xb3, 0x0e, 0x83, 0x09, 0x88, 0x89, 0x32, - 0x9c, 0x34, 0x02, 0xfc, 0x09, 0x23, 0xa9, 0x88, 0x12, 0xa0, 0x1f, 0x05, 0x99, 0x09, 0x19, 0x25, - 0xca, 0x9d, 0x23, 0x01, 0x08, 0xa8, 0x9c, 0x9a, 0x47, 0xb0, 0x0a, 0x32, 0x93, 0xeb, 0x58, 0xa8, - 0x12, 0x89, 0x81, 0xbf, 0x50, 0x83, 0x9b, 0x09, 0x35, 0xc8, 0x0a, 0x83, 0x19, 0xb9, 0x57, 0xd8, - 0x09, 0x11, 0x90, 0x98, 0x28, 0xa2, 0x99, 0x28, 0x10, 0x94, 0x8a, 0x35, 0xaa, 0xfc, 0x39, 0x16, - 0xaa, 0x18, 0x80, 0xba, 0x59, 0x12, 0x02, 0x9b, 0x41, 0xc1, 0x9f, 0x41, 0x81, 0x81, 0x9c, 0x82, - 0x0a, 0x09, 0x16, 0xba, 0x1a, 0x12, 0x0a, 0xa8, 0x33, 0x4a, 0xc2, 0x33, 0x9d, 0xa9, 0x90, 0x67, - 0xaa, 0x98, 0x21, 0xc9, 0x49, 0x13, 0x20, 0xaf, 0x84, 0xab, 0x41, 0x82, 0x98, 0x0b, 0x02, 0xdb, - 0x39, 0x84, 0x38, 0xb2, 0x8f, 0x92, 0x30, 0x84, 0x2a, 0x95, 0xaf, 0x00, 0x18, 0x06, 0x8a, 0x02, - 0x9d, 0x01, 0x1a, 0x84, 0x9a, 0x20, 0x10, 0xc5, 0x2d, 0x02, 0x80, 0x9a, 0x03, 0x0b, 0x21, 0x92, - 0xc8, 0x1c, 0x25, 0x40, 0xfa, 0x09, 0x10, 0x80, 0xb1, 0x38, 0xfb, 0x30, 0x04, 0x9c, 0x02, 0x8b, - 0x85, 0x00, 0x0a, 0xca, 0x64, 0xa1, 0x9a, 0x00, 0x41, 0xd0, 0x19, 0x90, 0x58, 0xc2, 0x08, 0x98, - 0x08, 0x04, 0x8d, 0x02, 0xab, 0x33, 0x8b, 0x86, 0x9d, 0x04, 0x0a, 0x13, 0x9b, 0x91, 0x40, 0x95, - 0x2b, 0xbd, 0x73, 0xb0, 0x1a, 0x83, 0x9b, 0x04, 0x9a, 0x98, 0x51, 0x92, 0xb8, 0x3a, 0x30, 0x97, - 0x8a, 0x30, 0xd0, 0x08, 0x80, 0x32, 0xfc, 0x3b, 0x07, 0x9a, 0x99, 0x43, 0x99, 0x98, 0x22, 0x2b, - 0xe4, 0x38, 0xa0, 0x91, 0x0b, 0x22, 0xf1, 0x4a, 0x05, 0x9a, 0x20, 0x30, 0xea, 0x09, 0x12, 0x99, - 0x29, 0xa6, 0x1c, 0xb1, 0x40, 0xe9, 0x3a, 0x04, 0x0b, 0xc2, 0x39, 0xb1, 0x50, 0x80, 0xa1, 0x8a, - 0x4a, 0x86, 0x8c, 0x92, 0x49, 0xa3, 0x0b, 0xb2, 0x2d, 0x05, 0xb8, 0x2a, 0xf2, 0x28, 0x01, 0x01, - 0xbe, 0x32, 0x89, 0x00, 0x9c, 0x16, 0x9a, 0x32, 0xfa, 0x49, 0x01, 0x88, 0x98, 0x0a, 0x20, 0x80, - 0x02, 0x89, 0xdc, 0x50, 0x01, 0xb9, 0x51, 0x99, 0xab, 0x11, 0x73, 0xe2, 0x0a, 0x14, 0xb9, 0x89, - 0x52, 0xb8, 0x20, 0x09, 0x02, 0xab, 0x11, 0x34, 0xfb, 0x99, 0x40, 0xc0, 0x4b, 0x84, 0x19, 0xca, - 0x63, 0xb8, 0x2a, 0x03, 0x88, 0xa8, 0x49, 0xb2, 0x41, 0x9b, 0x8b, 0x27, 0x9f, 0x15, 0x9c, 0x11, - 0x88, 0x11, 0xc8, 0x39, 0xa3, 0x2b, 0xb8, 0x43, 0xbc, 0x12, 0x8b, 0x17, 0xac, 0x15, 0x89, 0x9a, - 0x31, 0x04, 0x89, 0x9a, 0x38, 0xf8, 0x39, 0x32, 0xd0, 0x9d, 0x13, 0x99, 0xa1, 0x7a, 0x82, 0xb8, - 0x3b, 0x83, 0x99, 0x21, 0x31, 0xf0, 0x8f, 0x31, 0x98, 0x88, 0x42, 0xc9, 0x29, 0x90, 0x02, 0x20, - 0xab, 0x46, 0xfa, 0x20, 0x99, 0x04, 0x9d, 0x11, 0x81, 0x8a, 0x10, 0x21, 0xa8, 0x10, 0x2a, 0x37, - 0xcf, 0x41, 0xb8, 0x28, 0x11, 0x91, 0xaf, 0x33, 0x88, 0xd0, 0x39, 0x84, 0x9d, 0x22, 0x80, 0x9a, - 0x10, 0x33, 0xc1, 0xad, 0x21, 0x18, 0xa8, 0x21, 0x00, 0x19, 0x10, 0x17, 0xbf, 0x48, 0x84, 0x9a, - 0xa8, 0x20, 0x80, 0x88, 0x2a, 0x03, 0xf9, 0x58, 0xa0, 0x9a, 0x40, 0x13, 0x8a, 0xa1, 0x4a, 0xc1, - 0x68, 0xa3, 0x8f, 0x82, 0x28, 0xa1, 0x8d, 0x14, 0xaa, 0x14, 0x9f, 0x12, 0x9b, 0x34, 0x99, 0xa2, - 0x9f, 0x05, 0x0a, 0x90, 0x21, 0x92, 0xbb, 0x71, 0xc8, 0x31, 0x10, 0xa8, 0xbb, 0x39, 0x34, 0xc9, - 0x39, 0x92, 0x9f, 0x21, 0x01, 0x88, 0xea, 0x78, 0xb1, 0x0b, 0x23, 0xaa, 0x51, 0x81, 0xb9, 0x39, - 0xa0, 0x39, 0xc3, 0x2a, 0x47, 0xda, 0x29, 0x92, 0x39, 0xa0, 0x31, 0xf8, 0x0d, 0x04, 0x09, 0x91, - 0x09, 0x19, 0x02, 0xaa, 0x18, 0x15, 0x1a, 0x86, 0xae, 0x90, 0x50, 0x84, 0xaa, 0x00, 0x88, 0x98, - 0x28, 0x14, 0x9b, 0x28, 0x03, 0xfa, 0x0f, 0x24, 0xb9, 0x21, 0x9b, 0x13, 0x80, 0x1a, 0xa5, 0x0c, - 0x43, 0x98, 0xf9, 0x4b, 0x82, 0x80, 0xa9, 0x02, 0xb9, 0x1a, 0x83, 0x2e, 0x94, 0x9b, 0x51, 0x93, - 0x0f, 0x23, 0xaa, 0x00, 0x28, 0xc8, 0x3a, 0x13, 0xa2, 0x30, 0xbb, 0xc1, 0x53, 0xbf, 0x70, 0xc2, - 0x19, 0x89, 0x12, 0xb0, 0x39, 0xda, 0x24, 0x8a, 0x18, 0xf3, 0x1a, 0x12, 0x00, 0x10, 0x8b, 0x96, - 0x9f, 0x34, 0x09, 0xb9, 0x48, 0xb8, 0x20, 0x0a, 0x93, 0x59, 0xc0, 0x18, 0x9c, 0x73, 0xb0, 0x08, - 0x89, 0x22, 0x92, 0x1e, 0xc0, 0x22, 0x8c, 0x05, 0x99, 0x00, 0xc8, 0x59, 0xd2, 0x48, 0xb0, 0x20, - 0x89, 0xaa, 0x13, 0x8b, 0x41, 0x01, 0xb1, 0x8f, 0x33, 0x0a, 0xb8, 0x28, 0x81, 0xe8, 0x70, 0xc0, - 0x21, 0xb8, 0x99, 0x10, 0xa0, 0x65, 0x99, 0x99, 0x33, 0x9e, 0x31, 0xdb, 0x11, 0x10, 0x00, 0xc0, - 0x9a, 0x35, 0xad, 0x35, 0x98, 0xaa, 0x38, 0x00, 0xc0, 0x72, 0x98, 0x91, 0xbc, 0x40, 0x92, 0x29, - 0xe3, 0x1a, 0xb1, 0x7a, 0xa4, 0x19, 0x98, 0x31, 0xda, 0x10, 0x81, 0x9c, 0x24, 0x20, 0xeb, 0x19, - 0x12, 0x00, 0xb1, 0x8a, 0x35, 0x9e, 0x12, 0x88, 0x8b, 0x43, 0xc0, 0xaa, 0x38, 0x80, 0x97, 0x1d, - 0x03, 0x9a, 0x04, 0x8a, 0x88, 0x82, 0x3a, 0xc3, 0xb9, 0x7b, 0xa1, 0x62, 0xca, 0x28, 0xc9, 0x41, - 0xa8, 0x22, 0x9d, 0x25, 0x9b, 0x10, 0x91, 0x99, 0xba, 0x71, 0xa3, 0xa8, 0x0a, 0x12, 0x04, 0x0c, - 0x84, 0x8a, 0x9b, 0x57, 0xd9, 0x29, 0x02, 0x88, 0x9d, 0x13, 0x80, 0x9b, 0x82, 0x48, 0xb0, 0x52, - 0x82, 0xac, 0x91, 0x58, 0x88, 0xab, 0x37, 0x8c, 0x91, 0x18, 0x98, 0x00, 0x81, 0x80, 0x9c, 0xaa, - 0x37, 0x4a, 0xc1, 0x2a, 0xa8, 0x51, 0xc9, 0x21, 0x89, 0x32, 0xc8, 0x99, 0x62, 0xa8, 0x01, 0x8f, - 0x15, 0xb9, 0x59, 0xb8, 0x29, 0x82, 0x09, 0x14, 0xcd, 0x40, 0xb0, 0x11, 0x08, 0x82, 0xbc, 0x30, - 0x14, 0x99, 0xcc, 0x70, 0xc1, 0x3a, 0x92, 0x30, 0xf9, 0x49, 0x91, 0x0a, 0x10, 0x11, 0xf0, 0x2a, - 0x81, 0x9a, 0x13, 0x09, 0x88, 0x08, 0x31, 0x82, 0xf8, 0x2f, 0xa5, 0x19, 0x90, 0x22, 0x9b, 0xb1, - 0x59, 0x91, 0xbc, 0x71, 0x81, 0x99, 0x1b, 0x86, 0x29, 0xb0, 0x41, 0xd9, 0x1a, 0x05, 0xa9, 0x80, - 0x0a, 0x17, 0x8b, 0x21, 0xa8, 0xaa, 0x73, 0x90, 0x9a, 0x12, 0x08, 0xa0, 0xbb, 0x74, 0xb0, 0x2b, - 0xa3, 0x9b, 0x08, 0x67, 0xb0, 0x0a, 0x18, 0x86, 0xab, 0x41, 0xc1, 0x19, 0x04, 0x9a, 0xa1, 0x3a, - 0x24, 0xd9, 0x9a, 0x38, 0x85, 0x19, 0x89, 0x12, 0xf9, 0x3b, 0x93, 0x98, 0x1b, 0x32, 0x84, 0xbe, - 0x50, 0x10, 0x99, 0x20, 0xc2, 0x39, 0xda, 0x21, 0xd8, 0x59, 0x14, 0xdb, 0x18, 0xa8, 0x22, 0x01, - 0x19, 0xe2, 0x0c, 0x03, 0x30, 0x90, 0xa9, 0xad, 0x13, 0x52, 0xdb, 0x02, 0x2d, 0x07, 0xba, 0x29, - 0x02, 0x01, 0xb0, 0x2b, 0xc2, 0x4b, 0x14, 0x98, 0x8d, 0x14, 0xb8, 0x1b, 0x92, 0x69, 0xa1, 0x40, - 0xd9, 0x88, 0x40, 0x92, 0xa8, 0x1e, 0x82, 0x01, 0x90, 0x8f, 0x84, 0x29, 0xa2, 0x0c, 0x82, 0x1b, - 0x16, 0xb9, 0x90, 0x3b, 0x17, 0xab, 0x32, 0xa9, 0x88, 0x18, 0x08, 0xab, 0x68, 0x05, 0xe8, 0x1c, - 0x83, 0x30, 0xbb, 0x93, 0xad, 0x43, 0x1a, 0x14, 0xea, 0x28, 0xa2, 0x20, 0x99, 0xaa, 0x22, 0x05, - 0x9a, 0x28, 0xfb, 0x54, 0xc9, 0x30, 0xa9, 0x02, 0x1a, 0xc3, 0x2d, 0xa1, 0x52, 0xc8, 0x09, 0x00, - 0xa2, 0x1a, 0x03, 0x0f, 0x85, 0x0a, 0x81, 0xa9, 0x23, 0x29, 0x94, 0x9d, 0x98, 0x63, 0x98, 0x0b, - 0x14, 0x99, 0x91, 0x2f, 0x93, 0x9b, 0x23, 0x40, 0xf9, 0x1a, 0x12, 0x22, 0xdc, 0x12, 0x99, 0x8a, - 0x24, 0x9b, 0x91, 0x44, 0x09, 0xf9, 0x1a, 0x12, 0x03, 0xbc, 0x92, 0x6a, 0xc8, 0x24, 0xca, 0x10, - 0x88, 0x14, 0x1b, 0xc1, 0x2b, 0x33, 0x03, 0xfa, 0x1f, 0x12, 0xa0, 0x1a, 0x81, 0x2a, 0xa1, 0x08, - 0xba, 0x70, 0x90, 0x83, 0xad, 0x28, 0x02, 0x8c, 0x95, 0x4c, 0x93, 0x1c, 0xb0, 0x4a, 0xc2, 0x68, - 0x98, 0x00, 0x8a, 0x42, 0x91, 0x9a, 0x0a, 0x82, 0xca, 0x01, 0x70, 0xb8, 0x29, 0x94, 0xaf, 0x34, - 0x90, 0x8a, 0xb9, 0x45, 0xb9, 0x11, 0x88, 0xa0, 0x70, 0xc1, 0x08, 0x99, 0x20, 0x95, 0x8b, 0x05, - 0x19, 0xd0, 0x30, 0xa8, 0x99, 0x30, 0x01, 0xa8, 0x1f, 0x86, 0x8c, 0x02, 0x00, 0x19, 0xc0, 0x58, - 0xc3, 0x1d, 0x83, 0x89, 0x88, 0x31, 0xd0, 0x8b, 0x11, 0x22, 0xc1, 0x1f, 0x84, 0x99, 0x10, 0x91, - 0x38, 0xb8, 0x52, 0xbb, 0x80, 0x71, 0xb4, 0x8a, 0xac, 0x12, 0x33, 0xc9, 0x32, 0xec, 0x11, 0x89, - 0x13, 0xae, 0x33, 0xa8, 0xa9, 0x0b, 0x34, 0xa2, 0x38, 0xb8, 0xac, 0x20, 0x27, 0x2a, 0xc9, 0x25, - 0xab, 0x08, 0x89, 0x03, 0x44, 0x1c, 0xf3, 0x0d, 0x31, 0x88, 0xc0, 0x38, 0x93, 0x9d, 0x01, 0x48, - 0xf0, 0x38, 0x91, 0x88, 0x8b, 0x16, 0x09, 0x99, 0x10, 0x10, 0x90, 0x2d, 0x87, 0x0a, 0x88, 0x00, - 0xa9, 0x29, 0x71, 0xb0, 0x08, 0x8a, 0x24, 0xc9, 0x18, 0x21, 0x22, 0xcf, 0x50, 0xa0, 0xa0, 0x2e, - 0x84, 0x89, 0x02, 0xa9, 0x09, 0x19, 0x27, 0x8c, 0x81, 0xa9, 0x23, 0x9d, 0x11, 0x83, 0x0d, 0x12, - 0x81, 0xbd, 0x29, 0x07, 0x19, 0x98, 0x99, 0x35, 0xba, 0x11, 0xda, 0x31, 0xa8, 0xbb, 0x23, 0x1a, - 0x27, 0xbb, 0x01, 0x1b, 0xd1, 0x71, 0x81, 0x0b, 0x83, 0x09, 0x82, 0x8f, 0x43, 0xa8, 0x1c, 0xc1, - 0x0b, 0x62, 0x03, 0xbb, 0x15, 0x9f, 0x13, 0x9b, 0x21, 0x90, 0x01, 0xaf, 0x34, 0xa9, 0x88, 0x31, - 0x94, 0x9f, 0x21, 0x88, 0x01, 0x19, 0x92, 0xd9, 0x2b, 0x14, 0xd0, 0x19, 0x11, 0x91, 0x8c, 0x23, - 0xb2, 0x1e, 0x92, 0xa0, 0x0b, 0x13, 0x70, 0xe2, 0x1a, 0xa1, 0x49, 0xa2, 0x20, 0xc9, 0x0c, 0x26, - 0xa8, 0x09, 0x18, 0x88, 0x91, 0x1d, 0xd1, 0x08, 0x41, 0xb3, 0x8f, 0x30, 0x87, 0x8a, 0x80, 0x09, - 0x12, 0x99, 0x89, 0x00, 0x90, 0x48, 0x07, 0xaf, 0x11, 0x00, 0x81, 0x9b, 0x30, 0xd8, 0x21, 0x2b, - 0xb6, 0x1d, 0x14, 0x98, 0xaa, 0x31, 0x22, 0xfb, 0x49, 0x81, 0x89, 0x13, 0x9b, 0x80, 0x2c, 0x86, - 0x88, 0xcb, 0x11, 0x01, 0x98, 0x21, 0xa0, 0x0d, 0x90, 0x34, 0xbb, 0x15, 0x20, 0xca, 0x51, 0xcd, - 0x10, 0x23, 0x29, 0xfa, 0x11, 0x3b, 0x95, 0x29, 0xe0, 0x10, 0x09, 0x93, 0x9b, 0x4b, 0x92, 0x20, - 0xad, 0x93, 0x60, 0x89, 0x13, 0xbf, 0x02, 0x79, 0x92, 0x0a, 0xb8, 0x3a, 0x15, 0xb9, 0xbc, 0x51, - 0x02, 0xb9, 0x11, 0x0c, 0x83, 0x62, 0xc8, 0x0a, 0x01, 0x18, 0x96, 0x0e, 0x01, 0x88, 0x01, 0x89, - 0xb0, 0x3a, 0x37, 0xdb, 0x18, 0x19, 0x34, 0xb8, 0x99, 0x9b, 0x41, 0xa3, 0xae, 0x41, 0x82, 0x1c, - 0x93, 0x0e, 0x91, 0x32, 0x11, 0xcb, 0xbb, 0x72, 0xa2, 0x08, 0xda, 0x50, 0xa1, 0x80, 0x89, 0x48, - 0x02, 0x02, 0xfa, 0x2a, 0x81, 0x98, 0x31, 0xbc, 0x05, 0x1b, 0x91, 0x0c, 0x17, 0x0c, 0x83, 0x00, - 0xc9, 0x0c, 0x25, 0x98, 0x09, 0xa0, 0x30, 0xe8, 0x49, 0xa1, 0x00, 0x8a, 0x34, 0xdc, 0x10, 0x10, - 0x12, 0x9a, 0x98, 0xa9, 0x2a, 0x37, 0x08, 0xaf, 0x04, 0x0b, 0x90, 0x11, 0x43, 0x90, 0xca, 0x2a, - 0xc8, 0x60, 0x98, 0x12, 0xcb, 0x10, 0x80, 0x93, 0x09, 0xcb, 0x47, 0x08, 0xcb, 0x40, 0x02, 0x09, - 0x99, 0xab, 0x51, 0xc8, 0x39, 0x02, 0xb8, 0x2a, 0xa5, 0x3c, 0x94, 0x9d, 0x24, 0xca, 0x2a, 0x23, - 0x18, 0x88, 0xc3, 0x8f, 0x13, 0x20, 0xc8, 0x99, 0x55, 0xa8, 0x8a, 0x01, 0x12, 0x9c, 0x80, 0xb0, - 0x21, 0xae, 0x36, 0xaa, 0x88, 0x84, 0x8d, 0x12, 0x01, 0x18, 0xf0, 0x58, 0xa9, 0x11, 0x19, 0x92, - 0x8f, 0x11, 0x93, 0x1e, 0xa0, 0x23, 0x08, 0x9a, 0xa0, 0x11, 0x8b, 0x14, 0xea, 0x1a, 0x41, 0xb2, - 0x0d, 0x34, 0xe9, 0x89, 0x00, 0x28, 0x82, 0x33, 0x2d, 0xca, 0x91, 0x68, 0x80, 0xcd, 0x32, 0x90, - 0x89, 0x28, 0x07, 0xab, 0x80, 0x31, 0x88, 0x1a, 0xd4, 0x98, 0x4b, 0x93, 0x25, 0xdc, 0x3a, 0x03, - 0xa9, 0x59, 0xa1, 0xb8, 0x39, 0x12, 0xb1, 0x9c, 0x37, 0x99, 0xab, 0x00, 0x33, 0xbb, 0x24, 0x90, - 0x39, 0xf8, 0x68, 0x98, 0x29, 0x97, 0x1a, 0x98, 0x0b, 0x94, 0x38, 0x99, 0xd0, 0x59, 0x82, 0x0b, - 0xda, 0x42, 0x09, 0xa3, 0xac, 0x30, 0x86, 0x08, 0x39, 0x99, 0xe3, 0x39, 0x92, 0x1f, 0x84, 0x09, - 0x90, 0x0d, 0x23, 0xac, 0x01, 0x19, 0x83, 0x1b, 0x11, 0xf8, 0x0b, 0x49, 0x07, 0x9d, 0x21, 0x00, - 0x98, 0x1a, 0x84, 0x0a, 0x93, 0x8d, 0x12, 0xa9, 0x38, 0xb5, 0x2d, 0x12, 0x90, 0xc0, 0x1c, 0x03, - 0x8f, 0x80, 0x40, 0x08, 0x82, 0x8d, 0x93, 0x8b, 0x31, 0x34, 0xfa, 0x20, 0x89, 0x01, 0xb2, 0x7b, - 0xb2, 0x3b, 0xf0, 0x08, 0x02, 0x38, 0xc8, 0x39, 0xa1, 0x69, 0xb2, 0x49, 0xb9, 0xcb, 0x71, 0xd3, - 0x18, 0x18, 0x28, 0xd1, 0x88, 0x39, 0x91, 0xab, 0x45, 0xb9, 0x28, 0x03, 0x98, 0xbc, 0x73, 0x91, - 0xcb, 0x81, 0x71, 0xb8, 0x20, 0x80, 0xb8, 0x0c, 0x26, 0xc0, 0x10, 0x89, 0x05, 0xbc, 0x50, 0xa8, - 0x01, 0x90, 0x00, 0xba, 0x28, 0x04, 0x20, 0xac, 0x41, 0xb8, 0x99, 0x53, 0x90, 0xa9, 0x08, 0x42, - 0xd1, 0x4c, 0x84, 0x88, 0x9d, 0x22, 0xb0, 0x2a, 0x06, 0x9a, 0x10, 0x1a, 0x83, 0x0c, 0xda, 0x29, - 0xa6, 0x7a, 0xb1, 0x1b, 0x83, 0x71, 0xb1, 0x8c, 0x82, 0x18, 0xc8, 0x40, 0xc2, 0x3a, 0x02, 0x81, - 0xca, 0x2a, 0x05, 0x98, 0x9b, 0x22, 0xa1, 0x58, 0x04, 0xfa, 0x29, 0x28, 0xe8, 0x10, 0x1a, 0x42, - 0xf0, 0x38, 0xa8, 0x81, 0x29, 0x91, 0x12, 0xbd, 0x30, 0x91, 0x0a, 0x12, 0x14, 0xf9, 0x3a, 0xd0, - 0x68, 0x90, 0x81, 0x8a, 0x0a, 0x86, 0x89, 0x11, 0xb9, 0x09, 0x23, 0x0d, 0xa5, 0x2b, 0x82, 0x29, - 0xcb, 0x01, 0x09, 0x9a, 0x47, 0x98, 0x9a, 0x8a, 0x86, 0x2b, 0x96, 0x1b, 0x21, 0xf9, 0x42, 0xa0, - 0x8b, 0x20, 0x86, 0x8d, 0x81, 0x39, 0xc2, 0x0a, 0x10, 0x19, 0x13, 0xa1, 0xbb, 0x8e, 0x27, 0x8a, - 0x88, 0xaa, 0x44, 0x98, 0x1c, 0x90, 0x25, 0x89, 0x01, 0xeb, 0x21, 0x03, 0xba, 0x28, 0x9d, 0x26, - 0x90, 0xbb, 0x20, 0x19, 0xe1, 0x38, 0xab, 0x26, 0x8a, 0x91, 0x9e, 0x12, 0x33, 0x20, 0xe1, 0x9b, - 0x81, 0x49, 0x95, 0x0a, 0x81, 0x00, 0xbb, 0x1c, 0x35, 0x94, 0x99, 0x0e, 0xa8, 0x02, 0x72, 0xa1, - 0xbb, 0x68, 0x91, 0x8b, 0x92, 0x21, 0x3b, 0xd1, 0xb2, 0x1b, 0x1b, 0x47, 0xa0, 0xac, 0x20, 0x24, - 0xca, 0x28, 0xa3, 0xbc, 0x29, 0xa2, 0x21, 0x04, 0x3d, 0x95, 0x9a, 0x19, 0x38, 0xb5, 0x2c, 0x86, - 0xbb, 0x41, 0x82, 0x09, 0x00, 0xc8, 0x8d, 0x03, 0x18, 0x19, 0xaa, 0xa4, 0x73, 0x9a, 0x11, 0x13, - 0xfc, 0x00, 0x0a, 0xb2, 0x74, 0xa0, 0x18, 0x8a, 0x02, 0x11, 0xac, 0x31, 0xc1, 0x1c, 0x24, 0xac, - 0x10, 0x00, 0x93, 0x9f, 0x83, 0x30, 0xf9, 0x1a, 0x22, 0x81, 0x1a, 0x38, 0xc3, 0x8e, 0x13, 0xa8, - 0x0a, 0x24, 0x90, 0x9d, 0x94, 0x9a, 0x48, 0xa1, 0x39, 0xb4, 0x8f, 0x43, 0xc9, 0x18, 0x80, 0x0a, - 0x05, 0x9a, 0x30, 0x96, 0x0c, 0x28, 0xe3, 0x29, 0x90, 0x80, 0x0a, 0x12, 0x89, 0x80, 0x57, 0xdb, - 0x10, 0x19, 0xb2, 0x1e, 0x92, 0x08, 0x33, 0x9f, 0x05, 0x0a, 0x80, 0x11, 0x90, 0x9a, 0x10, 0xaa, - 0x04, 0x50, 0xc3, 0x1c, 0x93, 0x2a, 0xf9, 0x48, 0x80, 0x9a, 0x18, 0x15, 0x98, 0x8b, 0x16, 0x9a, - 0x00, 0xa1, 0x45, 0x9e, 0x91, 0x00, 0x00, 0x29, 0x86, 0x8a, 0x88, 0xa8, 0x50, 0x92, 0x0b, 0x94, - 0x8b, 0x18, 0x22, 0xfb, 0x79, 0x90, 0x19, 0xc0, 0x28, 0x91, 0x92, 0x2a, 0x0a, 0xb0, 0x46, 0xaa, - 0x32, 0xbd, 0x41, 0x03, 0xbc, 0x09, 0x11, 0x88, 0xd0, 0x0d, 0x16, 0x49, 0xc2, 0x8b, 0x10, 0xa0, - 0x11, 0x1b, 0x86, 0x9c, 0x14, 0xaa, 0x03, 0x0d, 0x14, 0xaa, 0x89, 0x9a, 0x16, 0x2b, 0x95, 0x8b, - 0x40, 0xb2, 0x8a, 0x9c, 0x44, 0xa8, 0x38, 0xdc, 0x51, 0x09, 0x92, 0x09, 0xa8, 0x38, 0xc0, 0x24, - 0x0c, 0xa0, 0x40, 0xa9, 0x90, 0x86, 0x0c, 0x90, 0x91, 0x1a, 0x94, 0x2a, 0xf2, 0x20, 0x31, 0x90, - 0xd1, 0x2b, 0x91, 0x00, 0x88, 0x07, 0x8b, 0xa0, 0x03, 0xae, 0x31, 0x80, 0x05, 0x8d, 0xa1, 0x59, - 0xd9, 0x20, 0x80, 0x91, 0x08, 0xb1, 0xbf, 0x55, 0x80, 0xba, 0x28, 0x01, 0x90, 0x89, 0x44, 0xdb, - 0x12, 0x29, 0xb0, 0x9c, 0x24, 0x09, 0xea, 0x29, 0x03, 0x9c, 0x02, 0x82, 0xab, 0x30, 0x95, 0x0d, - 0x82, 0x08, 0x13, 0xff, 0x20, 0x03, 0xba, 0x21, 0xa9, 0x00, 0x90, 0x29, 0xb8, 0x41, 0x50, 0xa1, - 0xac, 0x35, 0xa1, 0x2b, 0xe3, 0x8b, 0xa8, 0x50, 0xb2, 0x38, 0xa8, 0x17, 0xa9, 0xcb, 0x15, 0x99, - 0x19, 0x14, 0xa9, 0x8c, 0x43, 0xd8, 0x09, 0x12, 0xa0, 0xca, 0x03, 0x48, 0x82, 0x0b, 0x57, 0x9e, - 0x00, 0x10, 0x82, 0x8b, 0x83, 0x9d, 0x01, 0x10, 0x00, 0x8d, 0x04, 0x0f, 0x02, 0x99, 0x00, 0x21, - 0xda, 0x18, 0xb0, 0x21, 0x03, 0xba, 0x80, 0x1d, 0x17, 0x0a, 0x90, 0x19, 0x08, 0x01, 0xdb, 0x19, - 0x38, 0x3a, 0xa6, 0x91, 0xaf, 0x13, 0x2a, 0xc0, 0x1c, 0x85, 0x18, 0x18, 0xdb, 0x30, 0xa3, 0x38, - 0xbe, 0x10, 0x21, 0xb1, 0x12, 0x9f, 0x02, 0x9b, 0x47, 0xbb, 0x21, 0x09, 0xa8, 0x99, 0x25, 0xbc, - 0x35, 0xab, 0xc2, 0x28, 0x81, 0x10, 0xa8, 0x88, 0x20, 0xb9, 0x07, 0x0d, 0x90, 0x09, 0x40, 0x99, - 0x90, 0x01, 0x9b, 0xfb, 0x32, 0x1c, 0x59, 0xb3, 0xbb, 0x6b, 0x1a, 0x05, 0xbb, 0xb1, 0x6a, 0xc2, - 0x21, 0x9a, 0x82, 0x8d, 0x21, 0xa3, 0xc8, 0x0c, 0x61, 0xb9, 0x18, 0x0a, 0x20, 0xab, 0x28, 0x92, - 0x0c, 0x26, 0x09, 0xdb, 0x29, 0x84, 0x8e, 0x00, 0x08, 0x48, 0xa3, 0xbd, 0x20, 0x2b, 0x04, 0xba, - 0x18, 0x0a, 0x84, 0x2e, 0xb0, 0x8c, 0x42, 0x81, 0x9c, 0xbb, 0x7b, 0x81, 0x12, 0x8c, 0x09, 0x49, - 0xa1, 0xa0, 0x81, 0x9e, 0x33, 0x0c, 0xc1, 0x38, 0x29, 0xba, 0xa2, 0x3b, 0x8d, 0x29, 0x50, 0xbb, - 0x93, 0xd2, 0x19, 0x3a, 0x0a, 0x70, 0xb9, 0x92, 0x0b, 0x08, 0x11, 0x32, 0x8f, 0x09, 0x90, 0xa3, - 0xf2, 0xb2, 0x90, 0x00, 0x02, 0xf9, 0x88, 0x70, 0x02, 0x00, 0x00, 0x7d, 0x0b, 0x02, 0x01, 0x00, - 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x7f, 0xf3, 0x5a, 0x74, 0xda, 0x32, 0x29, 0xb5, - 0x2d, 0x06, 0x0a, 0x47, 0x2a, 0xf8, 0x1a, 0x81, 0x81, 0x28, 0xf0, 0x29, 0xb0, 0x5a, 0x03, 0xbb, - 0x60, 0xa2, 0xab, 0x0a, 0x05, 0x89, 0x20, 0x07, 0xbb, 0x21, 0x11, 0xce, 0x33, 0x8b, 0xb5, 0x5d, - 0xb2, 0x1b, 0x11, 0x82, 0xab, 0x31, 0xc1, 0x0a, 0x54, 0xf8, 0x28, 0xb1, 0x3a, 0x91, 0x13, 0x2c, - 0xb6, 0x8d, 0x43, 0xb9, 0x81, 0x30, 0xda, 0x11, 0x2a, 0xb4, 0x3a, 0x98, 0x04, 0x3b, 0xc0, 0x90, - 0x90, 0x1f, 0x07, 0x8c, 0x10, 0xa1, 0x3a, 0xa2, 0xaa, 0x50, 0xa3, 0x1b, 0xd8, 0x41, 0x0b, 0x87, - 0x0d, 0x82, 0x08, 0x20, 0xa0, 0x1a, 0xb2, 0x41, 0x1b, 0xb3, 0x6a, 0xb0, 0x59, 0xc1, 0x00, 0x8c, - 0x99, 0x24, 0x9b, 0x13, 0x89, 0xce, 0x53, 0xa8, 0x10, 0xaa, 0x24, 0x8b, 0xa3, 0x4a, 0x83, 0x08, - 0xba, 0x07, 0x8f, 0x12, 0x12, 0xbe, 0x22, 0x40, 0xd9, 0x00, 0x20, 0xa9, 0x83, 0xaa, 0x30, 0xdd, - 0xea, 0x1c, 0x26, 0x28, 0xc1, 0x1a, 0x82, 0xc9, 0x50, 0x01, 0xc8, 0x29, 0x81, 0x12, 0x9e, 0x85, - 0x38, 0x9c, 0x05, 0x28, 0xcb, 0x41, 0xa0, 0x8b, 0x32, 0x90, 0x92, 0x0f, 0x05, 0x9c, 0x12, 0x0a, - 0x12, 0xbd, 0x23, 0xca, 0x9a, 0x45, 0xb8, 0x89, 0x11, 0x19, 0xf0, 0x29, 0x10, 0xcc, 0x52, 0x81, - 0xbb, 0x40, 0x93, 0x0c, 0x88, 0x02, 0x0a, 0x41, 0xa4, 0x0e, 0x82, 0x19, 0x03, 0xfb, 0x5a, 0x02, - 0xca, 0x30, 0xa8, 0x88, 0x61, 0x00, 0xfb, 0x32, 0x98, 0x80, 0x89, 0x02, 0x62, 0xfb, 0x38, 0x81, - 0x88, 0x20, 0xb1, 0x0c, 0x15, 0x1c, 0xa1, 0x99, 0x38, 0x03, 0xbc, 0x12, 0x21, 0xe8, 0x78, 0xd1, - 0x29, 0x81, 0xa8, 0x10, 0xc9, 0x5a, 0x00, 0xa2, 0x19, 0x80, 0x88, 0xaa, 0x00, 0x17, 0xab, 0x30, - 0x00, 0xf1, 0x7b, 0xb2, 0x08, 0x0b, 0xd2, 0x70, 0xa8, 0x20, 0x98, 0x21, 0x8e, 0x94, 0x9a, 0x32, - 0x98, 0x88, 0xfa, 0x42, 0x80, 0xa8, 0x33, 0xcd, 0x20, 0x01, 0xa1, 0x2c, 0xa3, 0x20, 0xaf, 0x85, - 0x38, 0xa0, 0xb8, 0x4a, 0xb4, 0x69, 0xa0, 0x09, 0x08, 0x82, 0x08, 0xc1, 0x1b, 0x83, 0x40, 0xcb, - 0x32, 0xf9, 0x59, 0xd8, 0x21, 0x89, 0x02, 0x2a, 0xd0, 0x88, 0x68, 0xa0, 0x89, 0x13, 0x1b, 0xc3, - 0x19, 0xab, 0x37, 0x0b, 0xb8, 0x24, 0xae, 0x51, 0x91, 0xba, 0x62, 0x89, 0x90, 0x08, 0x01, 0x08, - 0x98, 0x00, 0xf1, 0x5a, 0x02, 0xc8, 0x38, 0x88, 0xa1, 0x5d, 0xb3, 0x0b, 0x48, 0xb9, 0x14, 0xb8, - 0x49, 0xa2, 0xab, 0x69, 0xa1, 0x0a, 0x45, 0xc0, 0xab, 0x62, 0xb8, 0x19, 0x14, 0x9c, 0x32, 0xcb, - 0x24, 0xab, 0x29, 0x85, 0x89, 0x08, 0xa8, 0x23, 0x0e, 0x04, 0xac, 0x62, 0xb8, 0x21, 0xab, 0x28, - 0x05, 0x99, 0x9b, 0x16, 0x0a, 0x81, 0x93, 0x9f, 0x12, 0x91, 0x2c, 0x94, 0xaa, 0x32, 0xb4, 0x0f, - 0x81, 0x10, 0x88, 0x89, 0x48, 0xa0, 0x14, 0x8d, 0xa0, 0x20, 0x2a, 0x14, 0xcb, 0x11, 0x89, 0x05, - 0x8e, 0x01, 0x91, 0x20, 0xb8, 0x0b, 0x06, 0x0c, 0x05, 0x9b, 0x28, 0x99, 0x05, 0x09, 0x8c, 0x04, - 0x89, 0x80, 0xa8, 0x44, 0x8b, 0x90, 0xb6, 0x2f, 0x83, 0x8a, 0x22, 0xc8, 0x8c, 0x35, 0xc9, 0x20, - 0xa8, 0x12, 0xbb, 0x31, 0xa1, 0x0b, 0x12, 0x38, 0xf4, 0x2e, 0x24, 0xdb, 0x28, 0x22, 0xdd, 0x33, - 0x9a, 0x00, 0xa0, 0x48, 0xb1, 0x09, 0x08, 0x35, 0xaf, 0x33, 0x9b, 0xa1, 0x30, 0xa1, 0x8d, 0x82, - 0x42, 0xba, 0xa1, 0x61, 0xbb, 0x15, 0x0a, 0x80, 0x0a, 0x15, 0xca, 0x00, 0x4a, 0xd3, 0x29, 0x93, - 0x2c, 0xd3, 0x4a, 0xa0, 0x29, 0x91, 0x32, 0xaf, 0x22, 0xa8, 0x10, 0x03, 0x8f, 0x92, 0x28, 0x99, - 0x21, 0xbd, 0x27, 0x8c, 0x00, 0x82, 0x8b, 0xa2, 0x38, 0x98, 0xb8, 0x46, 0xaa, 0x00, 0x2b, 0x86, - 0x98, 0x3c, 0xf3, 0x38, 0x98, 0x84, 0x8d, 0x03, 0x09, 0x88, 0xa0, 0x78, 0xc2, 0x2a, 0x91, 0x89, - 0x81, 0x71, 0xf0, 0x28, 0x08, 0x80, 0x98, 0x28, 0xa3, 0x1b, 0xc0, 0x48, 0xa1, 0x6a, 0xb1, 0x91, - 0x3b, 0x91, 0x82, 0x0c, 0x15, 0x9d, 0x82, 0x1b, 0x40, 0xf3, 0x39, 0x88, 0x18, 0xc2, 0x4a, 0x98, - 0x82, 0x0a, 0xa9, 0x13, 0x0e, 0x17, 0x8b, 0x94, 0x89, 0x0b, 0x03, 0x01, 0x1d, 0xa5, 0x2a, 0xd0, - 0x58, 0x81, 0x9a, 0x22, 0xad, 0x33, 0xbb, 0x10, 0x14, 0x9d, 0x42, 0xc0, 0x19, 0x82, 0xbb, 0x32, - 0x83, 0x1b, 0xd3, 0xad, 0x36, 0xaa, 0x89, 0x05, 0x99, 0x59, 0xa3, 0x8f, 0x22, 0xb8, 0x5b, 0xa2, - 0x89, 0x40, 0xa2, 0x9c, 0x10, 0x20, 0x0a, 0x96, 0x8a, 0x19, 0x03, 0x1b, 0x98, 0x0a, 0x57, 0xda, - 0x09, 0x12, 0x10, 0xb1, 0x0b, 0x01, 0xba, 0x64, 0xb0, 0x2b, 0xb0, 0x72, 0xb1, 0x0b, 0x83, 0x10, - 0x9a, 0x90, 0x3f, 0x97, 0x1b, 0x82, 0xa8, 0x38, 0x1b, 0xa7, 0x28, 0x9f, 0x15, 0x89, 0x9a, 0x15, - 0x9a, 0x09, 0x15, 0x9d, 0x11, 0x11, 0xab, 0x12, 0x08, 0x99, 0x0a, 0x27, 0xaa, 0x09, 0x00, 0x20, - 0xf1, 0x09, 0x73, 0xc9, 0x19, 0x05, 0x8c, 0x81, 0x12, 0xaa, 0x8a, 0x45, 0xc9, 0x08, 0x21, 0xb1, - 0x0a, 0x00, 0x33, 0xaf, 0x13, 0x09, 0xb0, 0x49, 0x20, 0xf3, 0x0c, 0x13, 0x98, 0x88, 0x31, 0xa9, - 0x8b, 0x37, 0xeb, 0x20, 0x10, 0xd0, 0x4b, 0xb4, 0x38, 0xa9, 0x90, 0x21, 0xd8, 0x38, 0x13, 0xea, - 0x2a, 0x85, 0x99, 0x0b, 0x17, 0xb8, 0x29, 0x90, 0x84, 0x8c, 0x12, 0xa0, 0x98, 0x3a, 0x07, 0xbc, - 0x43, 0xa9, 0x30, 0x90, 0xb8, 0x5a, 0xa5, 0x0c, 0x94, 0x8a, 0x41, 0xe8, 0x51, 0xa9, 0x08, 0x10, - 0xb1, 0x19, 0x19, 0x23, 0xca, 0x39, 0x03, 0xcd, 0x41, 0x81, 0x8b, 0x80, 0x23, 0x8a, 0x9f, 0x15, - 0x9b, 0x12, 0xb2, 0x3b, 0x00, 0xa4, 0x8e, 0x02, 0x29, 0xd0, 0x91, 0x7a, 0xb0, 0x80, 0x41, 0x9a, - 0xa0, 0x12, 0x38, 0xdc, 0x41, 0xa3, 0x9f, 0x42, 0xb0, 0x20, 0x98, 0x99, 0x62, 0xf8, 0x59, 0xa8, - 0x11, 0x89, 0x02, 0x9c, 0x21, 0x01, 0xc9, 0x30, 0xb1, 0x1a, 0x08, 0x03, 0x80, 0x9d, 0x54, 0xe9, - 0x39, 0x92, 0x09, 0x88, 0x01, 0x18, 0xca, 0x71, 0x81, 0xab, 0x98, 0x64, 0xcb, 0x41, 0x98, 0xa8, - 0x51, 0xb0, 0x09, 0x01, 0x88, 0x81, 0xbc, 0x65, 0xa8, 0x28, 0xb8, 0x20, 0xc8, 0x31, 0xa0, 0xa8, - 0x7a, 0xa5, 0x9a, 0x30, 0x19, 0xd1, 0x30, 0x98, 0x98, 0x39, 0xc0, 0x12, 0x0c, 0x09, 0x27, 0x9e, - 0x42, 0xb8, 0x08, 0x2a, 0x93, 0xba, 0x71, 0xa1, 0x18, 0xa0, 0xab, 0x75, 0xc8, 0x28, 0x88, 0x09, - 0x82, 0x91, 0x38, 0xae, 0x22, 0x18, 0xf9, 0x58, 0x90, 0x80, 0xaa, 0x32, 0x00, 0x09, 0xd3, 0x69, - 0xa9, 0x11, 0xb1, 0x0c, 0x08, 0x37, 0xca, 0x19, 0x02, 0x08, 0xb2, 0x2f, 0x91, 0x80, 0x28, 0x03, - 0xcf, 0x22, 0x02, 0x9c, 0x91, 0x50, 0xa8, 0x18, 0x91, 0xba, 0x52, 0x99, 0xa1, 0x38, 0x18, 0xc4, - 0x3b, 0x08, 0xc7, 0x3e, 0x94, 0x8a, 0x18, 0x82, 0x98, 0x09, 0x22, 0xc9, 0x81, 0x61, 0xc9, 0x80, - 0x12, 0x2a, 0xf0, 0x29, 0x91, 0x93, 0x2b, 0x00, 0xf4, 0x3b, 0x12, 0xd1, 0x1d, 0x14, 0xaa, 0x21, - 0xbb, 0x43, 0xa8, 0x00, 0x11, 0xa9, 0x18, 0x38, 0x92, 0x87, 0xaf, 0x33, 0x8b, 0x85, 0x0d, 0x92, - 0x3a, 0xb0, 0x29, 0x84, 0x0a, 0x18, 0xc3, 0x18, 0x2c, 0x96, 0xab, 0x18, 0x34, 0xb8, 0x81, 0xbc, - 0x70, 0xb9, 0x24, 0x08, 0xc9, 0x30, 0x90, 0x9d, 0x05, 0x8a, 0x52, 0xd1, 0x8a, 0x42, 0xd0, 0x3a, - 0x95, 0x8b, 0x31, 0xe8, 0x58, 0xa0, 0x19, 0x18, 0x92, 0x9b, 0x32, 0x99, 0x88, 0xc8, 0x51, 0x19, - 0xc1, 0x1a, 0x63, 0xf8, 0x39, 0x92, 0xaa, 0x51, 0xa8, 0x02, 0x98, 0x1a, 0x91, 0x0a, 0x11, 0x27, - 0xbe, 0x63, 0xb8, 0x09, 0x00, 0x82, 0x0b, 0x04, 0xb9, 0x01, 0x40, 0xa0, 0xba, 0x78, 0xb0, 0x50, - 0xc0, 0x29, 0x91, 0x1b, 0x96, 0x1a, 0x88, 0x83, 0x48, 0xfb, 0x20, 0x10, 0xc0, 0x49, 0xa0, 0x00, - 0x10, 0x99, 0xc3, 0x4c, 0x92, 0xb8, 0x78, 0xb2, 0x1d, 0x94, 0x1a, 0xa8, 0x23, 0xab, 0x15, 0xba, - 0x88, 0x13, 0x0b, 0x86, 0x3a, 0xf1, 0x3a, 0x11, 0xc2, 0x0c, 0x21, 0xf8, 0x50, 0xa8, 0x08, 0x22, - 0xbb, 0x01, 0x00, 0x98, 0x2c, 0x07, 0x8c, 0x11, 0x90, 0x81, 0x8e, 0x14, 0x99, 0x20, 0xb0, 0x8a, - 0x40, 0x11, 0xc2, 0x0b, 0x38, 0x05, 0xb9, 0x49, 0xcc, 0x25, 0xb8, 0x3a, 0x86, 0x0d, 0x12, 0xb8, - 0x8b, 0x24, 0xb1, 0x2a, 0xa3, 0x89, 0x39, 0x80, 0x94, 0xbc, 0x49, 0x31, 0xf3, 0x0d, 0x42, 0xe0, - 0x28, 0x90, 0x81, 0x1a, 0x02, 0xc8, 0x0a, 0x02, 0x58, 0xd1, 0x39, 0x92, 0x0e, 0x03, 0xa9, 0x8b, - 0x25, 0xb0, 0x1c, 0x06, 0x0c, 0x01, 0x91, 0x2b, 0xa0, 0x1a, 0x03, 0x82, 0x0e, 0x82, 0x9b, 0x12, - 0x19, 0x13, 0x60, 0xf4, 0x2e, 0x92, 0xa8, 0x49, 0x94, 0x0d, 0x03, 0x0b, 0x01, 0xa0, 0x08, 0x20, - 0xc9, 0x00, 0x33, 0xaf, 0x16, 0x9a, 0x08, 0x11, 0x88, 0x1a, 0xa6, 0x0e, 0x23, 0xc8, 0x19, 0x00, - 0x90, 0x20, 0xa1, 0x0d, 0x85, 0xaa, 0x20, 0x05, 0xac, 0x33, 0xc9, 0x88, 0x42, 0xc9, 0x83, 0x39, - 0xea, 0x33, 0xbd, 0x42, 0x92, 0x0b, 0x01, 0xc2, 0x2d, 0x11, 0xb0, 0x29, 0xa1, 0x1c, 0x84, 0x00, - 0x8b, 0x20, 0xb5, 0x3d, 0xc3, 0x0c, 0x31, 0xe2, 0x2b, 0x93, 0x8b, 0x72, 0xd1, 0x28, 0xb0, 0x28, - 0x80, 0x81, 0x19, 0xa8, 0x23, 0x9a, 0xa9, 0x10, 0x74, 0xd8, 0x02, 0x08, 0xaf, 0x14, 0xb8, 0x4c, - 0x83, 0x09, 0xa9, 0x31, 0xa8, 0x99, 0x03, 0x1e, 0x86, 0x99, 0x38, 0xb3, 0x8c, 0x43, 0xfa, 0x21, - 0x99, 0x12, 0xb1, 0x1d, 0x05, 0xab, 0x12, 0x3a, 0xd0, 0x31, 0xc8, 0x39, 0xa1, 0xa1, 0x8f, 0x05, - 0x19, 0xa8, 0x93, 0x2e, 0xb3, 0x29, 0x81, 0x8d, 0x07, 0x1a, 0xb0, 0xa8, 0x58, 0xa2, 0x19, 0x08, - 0xa2, 0x9b, 0x73, 0xc1, 0x1b, 0x14, 0xda, 0x40, 0x90, 0x88, 0x05, 0x8d, 0x03, 0x8a, 0x11, 0x80, - 0x8b, 0x84, 0x0c, 0xc2, 0x79, 0xc3, 0x19, 0x02, 0xcb, 0x31, 0xa1, 0x0b, 0x18, 0xf3, 0x4a, 0xc2, - 0x38, 0x88, 0xc0, 0x39, 0x81, 0x8b, 0x13, 0x30, 0xad, 0x87, 0x1c, 0x93, 0x98, 0x8a, 0x21, 0xc0, - 0x38, 0x81, 0x9c, 0x36, 0xad, 0x22, 0xe3, 0x3a, 0xa1, 0x91, 0x1c, 0x80, 0x61, 0xc0, 0x18, 0x00, - 0x92, 0x89, 0xa0, 0x3c, 0xa7, 0x4a, 0xc1, 0x18, 0x91, 0x28, 0x83, 0xaf, 0x24, 0xa8, 0x20, 0xa8, - 0x08, 0x1a, 0xa5, 0x4a, 0xa4, 0x8d, 0x33, 0xc9, 0x18, 0x82, 0x0b, 0x92, 0x8c, 0x13, 0x0b, 0x89, - 0x25, 0xf8, 0x1f, 0x05, 0xa8, 0x0b, 0x13, 0xca, 0x28, 0x07, 0x8c, 0x02, 0x98, 0x00, 0xc9, 0x50, - 0x80, 0x90, 0x2b, 0x86, 0x8c, 0x12, 0x09, 0xca, 0x31, 0x81, 0x91, 0x8d, 0x22, 0x12, 0xaf, 0x16, - 0x9b, 0x20, 0x81, 0x89, 0x89, 0x41, 0x98, 0xb0, 0x69, 0xa0, 0x51, 0xb8, 0x08, 0x98, 0x31, 0x18, - 0xf0, 0x2b, 0x32, 0xdc, 0x13, 0xab, 0x55, 0xb8, 0x81, 0x8b, 0x89, 0x24, 0x90, 0x9b, 0x02, 0x9c, - 0x36, 0xba, 0x80, 0x00, 0x18, 0x91, 0xac, 0x01, 0x75, 0xd0, 0x29, 0xa1, 0x40, 0xd8, 0x20, 0xab, - 0x32, 0x81, 0x0a, 0xb4, 0x2b, 0x46, 0xf8, 0x29, 0x98, 0x28, 0x22, 0xb9, 0x1b, 0x93, 0x12, 0x82, - 0x1e, 0xd8, 0x38, 0x24, 0xbc, 0x38, 0x80, 0x57, 0xbe, 0x23, 0x08, 0xa0, 0x18, 0xa9, 0x93, 0x3c, - 0x07, 0xab, 0x29, 0x92, 0x31, 0xcd, 0x20, 0x83, 0x8c, 0x22, 0xdb, 0x00, 0x20, 0xb0, 0x0a, 0xba, - 0x77, 0xb0, 0x19, 0x08, 0x90, 0x88, 0x36, 0xfb, 0x28, 0x92, 0x88, 0x89, 0x10, 0x89, 0x24, 0xac, - 0x92, 0x8b, 0x27, 0xa9, 0x09, 0x29, 0x07, 0x9b, 0x21, 0xcc, 0x43, 0x82, 0x9b, 0x00, 0x88, 0x50, - 0x04, 0xae, 0x12, 0x08, 0x00, 0x30, 0xfa, 0x39, 0x85, 0x9b, 0x28, 0x22, 0xc0, 0x59, 0xd9, 0x20, - 0x80, 0x02, 0xca, 0x0a, 0x14, 0x19, 0xa0, 0x88, 0x80, 0x90, 0x4d, 0xc1, 0x8a, 0x42, 0x91, 0x1c, - 0xfb, 0x44, 0xba, 0x10, 0xb1, 0x29, 0x10, 0x80, 0x93, 0xcf, 0x44, 0xa8, 0x9c, 0x42, 0xa0, 0x80, - 0x11, 0xbc, 0x32, 0x98, 0x60, 0xb2, 0x9e, 0x31, 0x92, 0xbc, 0x42, 0x91, 0x89, 0x41, 0xc9, 0x00, - 0x13, 0x0d, 0x80, 0x9c, 0x55, 0xa0, 0x9b, 0x42, 0xc8, 0x59, 0x90, 0x89, 0x20, 0xa3, 0x8c, 0x10, - 0xd9, 0x42, 0x98, 0x9a, 0x51, 0xb3, 0x3b, 0x94, 0xcc, 0x42, 0x91, 0x0c, 0x93, 0x2b, 0x90, 0x20, - 0x99, 0x31, 0xb3, 0x8f, 0x13, 0xae, 0x34, 0xa8, 0x0d, 0x13, 0xbb, 0x27, 0x9b, 0xb0, 0x53, 0xaa, - 0x13, 0x9c, 0x42, 0xa8, 0x01, 0x90, 0x9f, 0x82, 0x22, 0x00, 0xaf, 0x14, 0x98, 0x00, 0x08, 0xb1, - 0x1b, 0x0a, 0x17, 0xab, 0x30, 0x14, 0xdd, 0x38, 0x03, 0xdb, 0x43, 0xbb, 0x01, 0x39, 0x04, 0xc8, - 0x9a, 0x70, 0xb0, 0x18, 0x01, 0x8d, 0x13, 0x01, 0xa8, 0x0f, 0x85, 0x09, 0x99, 0xa3, 0x7a, 0xb1, - 0x21, 0xba, 0xb1, 0x70, 0xa2, 0x8a, 0x00, 0x61, 0xd9, 0x11, 0x89, 0xc2, 0x51, 0xa9, 0x92, 0x0b, - 0x44, 0xb0, 0x8c, 0x32, 0x98, 0x0a, 0x88, 0x22, 0xba, 0x30, 0x91, 0xcd, 0x43, 0x42, 0xcb, 0xa8, - 0x50, 0xc9, 0x22, 0xb9, 0xaa, 0x37, 0x9b, 0x94, 0xa0, 0x0e, 0x13, 0x0c, 0x01, 0x00, 0x0c, 0x13, - 0xd8, 0x1c, 0x06, 0x9a, 0x28, 0xb2, 0x29, 0x03, 0x0e, 0x86, 0x8c, 0x10, 0x83, 0x9a, 0x30, 0xf8, - 0x20, 0x08, 0x82, 0x1c, 0x92, 0x28, 0x9f, 0x93, 0x4a, 0x13, 0xea, 0x38, 0xb3, 0x0f, 0x03, 0x88, - 0x0b, 0x11, 0x93, 0x0e, 0x11, 0x90, 0x91, 0x8b, 0x86, 0x8a, 0x00, 0x25, 0xcc, 0x30, 0xa2, 0x8b, - 0x00, 0x68, 0xb0, 0x0b, 0x33, 0x8b, 0xf2, 0x49, 0x93, 0x0e, 0x02, 0x89, 0x99, 0x40, 0x81, 0xb0, - 0x4b, 0xb1, 0x20, 0xb0, 0x50, 0x88, 0x9a, 0x27, 0x9f, 0x93, 0x29, 0x12, 0xba, 0x92, 0x3c, 0xd0, - 0x11, 0x08, 0x88, 0x27, 0xcb, 0x09, 0x31, 0x93, 0x3b, 0xf8, 0x31, 0x8f, 0x84, 0x19, 0x89, 0x01, - 0x59, 0xf8, 0x20, 0x88, 0x80, 0x29, 0xb5, 0x1e, 0x82, 0x91, 0x28, 0xda, 0x32, 0xa9, 0x29, 0xa3, - 0x20, 0x9f, 0x85, 0x0a, 0x0a, 0x83, 0x02, 0x1e, 0xb2, 0x29, 0x20, 0xdb, 0x15, 0x8d, 0x83, 0x80, - 0x09, 0x98, 0x44, 0x9a, 0xd1, 0x48, 0xb9, 0x42, 0xb0, 0x30, 0xcb, 0x28, 0x16, 0xab, 0x10, 0x30, - 0xea, 0x13, 0x0c, 0x98, 0x07, 0x89, 0x89, 0x91, 0x29, 0x23, 0xcc, 0x08, 0x83, 0x51, 0xda, 0x13, - 0x1a, 0xb9, 0x94, 0x4a, 0xb2, 0x2c, 0x97, 0x0b, 0x08, 0x83, 0x2b, 0x81, 0xc2, 0x0a, 0x88, 0x64, - 0xe8, 0x18, 0x88, 0x95, 0x2b, 0x80, 0xa0, 0x48, 0x02, 0x90, 0xbb, 0x79, 0x95, 0x8d, 0x90, 0x12, - 0x09, 0x83, 0x89, 0x1d, 0x95, 0x0b, 0x13, 0x8f, 0x82, 0x21, 0x9d, 0x11, 0x38, 0xc1, 0x1a, 0x00, - 0xb0, 0x70, 0xd2, 0x3a, 0xb8, 0x43, 0x81, 0xbc, 0x42, 0xc0, 0x18, 0x82, 0x9d, 0x20, 0x85, 0x29, - 0xda, 0x20, 0x80, 0x02, 0x8c, 0x18, 0xe0, 0x48, 0x88, 0xa2, 0x4b, 0x13, 0xe8, 0x3b, 0xa3, 0x4a, - 0xe1, 0x30, 0xbb, 0x22, 0x11, 0x29, 0xf0, 0x5a, 0xa0, 0x30, 0xb9, 0x33, 0xbf, 0x06, 0x09, 0xc8, - 0x30, 0x92, 0x00, 0x0a, 0xb1, 0x01, 0x59, 0xc2, 0x8d, 0xa3, 0x70, 0xa9, 0x80, 0x10, 0xa0, 0x48, - 0xa9, 0x80, 0x69, 0x94, 0x8b, 0xb0, 0x38, 0x52, 0x9a, 0xc0, 0x38, 0x13, 0xae, 0xa3, 0x1c, 0x24, - 0xa1, 0x9c, 0x02, 0x0a, 0x84, 0x40, 0xfb, 0x89, 0x52, 0x8b, 0x95, 0x2b, 0x92, 0x00, 0x8b, 0x02, - 0xaa, 0x55, 0xa9, 0xa0, 0x4b, 0x11, 0xa4, 0x8f, 0x04, 0x09, 0x80, 0x18, 0xc0, 0x09, 0x33, 0xbc, - 0x01, 0x18, 0x02, 0xc3, 0x1f, 0x86, 0x9b, 0x12, 0x20, 0x9e, 0x01, 0x32, 0xae, 0x30, 0xb2, 0x10, - 0x1a, 0xa3, 0x8e, 0xa2, 0x70, 0xc1, 0x09, 0x02, 0x08, 0xb0, 0x89, 0x63, 0xc9, 0x20, 0x91, 0x99, - 0x29, 0x15, 0xd9, 0x1a, 0x52, 0xd0, 0x89, 0x12, 0xa8, 0x43, 0xcb, 0x82, 0x1a, 0x94, 0x1b, 0x11, - 0x94, 0x9f, 0x14, 0x8d, 0x83, 0x28, 0x82, 0xfb, 0x38, 0x82, 0xa0, 0x4a, 0xb0, 0x18, 0xa9, 0x36, - 0xab, 0x88, 0x23, 0x8e, 0x93, 0x4b, 0x94, 0xea, 0x50, 0xa8, 0x10, 0x82, 0x8e, 0x03, 0x1b, 0x02, - 0xaa, 0x00, 0x38, 0x9a, 0x97, 0x2c, 0xc1, 0x31, 0x90, 0xb9, 0x28, 0x84, 0x9c, 0x11, 0x9d, 0x26, - 0xc0, 0x59, 0xa0, 0xa9, 0x33, 0x1a, 0xc0, 0x38, 0xa3, 0x8c, 0x18, 0xb2, 0x15, 0x9e, 0x32, 0xd1, - 0x1b, 0x27, 0xbd, 0x21, 0x91, 0x10, 0xa1, 0x1e, 0x82, 0x8a, 0x41, 0x99, 0x98, 0x51, 0x0a, 0xe1, - 0x48, 0x90, 0x0a, 0xa3, 0x38, 0x90, 0x0c, 0x12, 0xb8, 0x21, 0x78, 0xe0, 0x8a, 0x42, 0x91, 0x9a, - 0x71, 0xc9, 0x10, 0x81, 0x10, 0xb8, 0x2b, 0x07, 0x0f, 0x01, 0x82, 0x8c, 0x81, 0x00, 0x08, 0x00, - 0x83, 0xaf, 0x23, 0xb9, 0x40, 0xaa, 0x42, 0xa1, 0xbd, 0x52, 0xa0, 0x39, 0x92, 0xa9, 0x10, 0x20, - 0x97, 0x1d, 0x81, 0xba, 0x44, 0xcb, 0x24, 0xa9, 0x80, 0x84, 0x8f, 0x02, 0x93, 0x2b, 0xb9, 0x11, - 0x12, 0x8e, 0x14, 0xbb, 0x62, 0xa8, 0x90, 0x2a, 0xa2, 0x35, 0xad, 0x21, 0xa1, 0x98, 0x19, 0x28, - 0xd1, 0x29, 0x17, 0xae, 0x21, 0x83, 0x0d, 0xb2, 0x3a, 0x12, 0x98, 0x82, 0x9f, 0x82, 0x10, 0xb0, - 0x3d, 0x86, 0xa9, 0x29, 0x84, 0x0e, 0x03, 0xa9, 0x8b, 0x15, 0x8c, 0x23, 0xc0, 0x29, 0x18, 0xd0, - 0x4a, 0x92, 0xbb, 0x55, 0xc9, 0x28, 0x81, 0x09, 0x28, 0xa4, 0x19, 0x8b, 0x80, 0x96, 0xaa, 0x3d, - 0x07, 0x8a, 0x18, 0x94, 0x8e, 0x12, 0x00, 0x9a, 0x83, 0x0b, 0x23, 0xbd, 0x31, 0x03, 0x9b, 0x11, - 0x82, 0xdf, 0x41, 0xa2, 0x0b, 0x03, 0xb0, 0x7a, 0xe1, 0x29, 0x02, 0xba, 0x22, 0xb8, 0x89, 0x35, - 0x19, 0xb8, 0xb9, 0x6b, 0xb3, 0x0b, 0x63, 0x90, 0xd0, 0x49, 0xa8, 0x00, 0x30, 0x91, 0x9f, 0xa1, - 0x52, 0x00, 0xf9, 0x30, 0xaa, 0x03, 0x18, 0x9c, 0x02, 0x43, 0xe0, 0x2c, 0xa1, 0x10, 0x89, 0x25, - 0x8d, 0xa3, 0x3b, 0xa3, 0x0a, 0x88, 0x07, 0x8e, 0x01, 0x10, 0xa8, 0x10, 0x19, 0xe2, 0x30, 0x99, - 0x23, 0xea, 0x41, 0x09, 0xb8, 0x15, 0x09, 0xcb, 0x52, 0x99, 0x85, 0x8b, 0x30, 0xd3, 0x2b, 0x84, - 0x8b, 0x94, 0x2a, 0xf3, 0x29, 0x99, 0x24, 0xaa, 0xa1, 0x60, 0xa9, 0x08, 0x92, 0x0d, 0x12, 0x91, - 0xdb, 0x68, 0xa1, 0x29, 0x84, 0x8e, 0x92, 0x39, 0xa0, 0x90, 0x1b, 0x37, 0xd9, 0x2a, 0x85, 0x1a, - 0x88, 0xa1, 0x98, 0x4c, 0xb4, 0x39, 0xa1, 0x0b, 0x04, 0xb9, 0x5a, 0x85, 0x8c, 0x12, 0xb0, 0x4c, - 0xa3, 0x89, 0x00, 0x9a, 0x34, 0x99, 0x68, 0xa4, 0x0c, 0x89, 0x84, 0x3b, 0xc1, 0x34, 0xca, 0x10, - 0x80, 0x98, 0x29, 0xda, 0x63, 0xa9, 0xa8, 0x44, 0xba, 0x81, 0xb1, 0x71, 0xba, 0x32, 0xeb, 0x10, - 0x50, 0xc1, 0x8a, 0x31, 0xc1, 0x18, 0x18, 0xf0, 0x10, 0x29, 0x92, 0x8a, 0x80, 0x54, 0xea, 0x20, - 0x08, 0x91, 0x0c, 0x84, 0xaa, 0x31, 0x80, 0xa8, 0xc9, 0x70, 0x95, 0x9c, 0x32, 0xa8, 0x18, 0x0a, - 0xd0, 0x51, 0x09, 0xa3, 0x0e, 0x84, 0x19, 0xa8, 0x11, 0x99, 0x23, 0x2a, 0xf2, 0x1b, 0x15, 0xaa, - 0x09, 0x05, 0x19, 0x08, 0xe1, 0x20, 0xc9, 0x42, 0x98, 0xaa, 0x28, 0x07, 0x99, 0x9c, 0x07, 0x99, - 0x08, 0x13, 0xbb, 0x21, 0x92, 0x1c, 0xb9, 0x16, 0x9a, 0x2b, 0x95, 0x89, 0x03, 0x9a, 0x88, 0x91, - 0x32, 0x5a, 0xf8, 0x8a, 0x43, 0x29, 0xf1, 0x5a, 0xb8, 0x28, 0x31, 0xd1, 0x0b, 0x33, 0xdb, 0x00, - 0x41, 0x98, 0x28, 0x82, 0xfb, 0x69, 0xa8, 0x11, 0x80, 0x98, 0x40, 0xb0, 0x1d, 0x05, 0xa8, 0x4a, - 0x93, 0xac, 0x11, 0x90, 0x20, 0xe2, 0x18, 0x9a, 0x62, 0xd1, 0x19, 0x80, 0x38, 0xd1, 0x18, 0x09, - 0x83, 0x59, 0xc8, 0x89, 0x42, 0xfa, 0x40, 0xa9, 0x08, 0x11, 0x82, 0xbb, 0x40, 0xa1, 0x2c, 0x87, - 0x9c, 0x40, 0x90, 0xa8, 0x11, 0xa9, 0x62, 0x90, 0x80, 0x8b, 0x42, 0x81, 0xca, 0x1a, 0x81, 0x70, - 0x95, 0x09, 0xa9, 0x51, 0xc9, 0x22, 0xaa, 0x19, 0x35, 0xf9, 0x49, 0x81, 0x99, 0x30, 0xe8, 0x2a, - 0x03, 0x91, 0xac, 0x10, 0x48, 0xa4, 0x0a, 0xa9, 0x38, 0x03, 0x39, 0xdf, 0x11, 0x18, 0x88, 0x94, - 0x9f, 0x43, 0xc0, 0x09, 0x09, 0x84, 0x2a, 0x01, 0xe9, 0x28, 0x12, 0xd8, 0x39, 0xa1, 0x18, 0x32, - 0xf8, 0x0c, 0x31, 0xa2, 0x8a, 0x28, 0xd1, 0x38, 0x83, 0xda, 0x09, 0x38, 0x27, 0xad, 0x31, 0x8a, - 0x96, 0x1b, 0x10, 0xa8, 0x41, 0x11, 0xe8, 0x28, 0x8a, 0x05, 0x9a, 0x1a, 0x07, 0x9a, 0x21, 0x98, - 0x2a, 0x90, 0xa3, 0x8f, 0x01, 0x82, 0x21, 0x0a, 0xb0, 0x3b, 0xc5, 0x8d, 0x03, 0x2a, 0xab, 0x27, - 0x0f, 0x82, 0x18, 0xb1, 0x8a, 0x39, 0xe2, 0x49, 0xb8, 0x08, 0x23, 0x29, 0xca, 0x07, 0x1a, 0xd9, - 0x24, 0x89, 0xaa, 0x71, 0xc2, 0x1b, 0x31, 0xc1, 0x19, 0x02, 0xac, 0x32, 0xc8, 0x12, 0x4a, 0xf9, - 0x60, 0xa9, 0x91, 0x39, 0xa1, 0x00, 0x88, 0x88, 0x10, 0xf2, 0x69, 0x88, 0xa8, 0x40, 0xb2, 0x9d, - 0x22, 0x20, 0xdb, 0x01, 0x28, 0x8a, 0x87, 0x2b, 0xb2, 0x1b, 0x30, 0xa7, 0x1e, 0x93, 0x1a, 0x92, - 0x18, 0x19, 0xc3, 0x39, 0xe9, 0x41, 0xa9, 0x23, 0x99, 0xbd, 0x60, 0xa3, 0x19, 0x09, 0xb0, 0x69, - 0xb2, 0x49, 0xc8, 0x39, 0xb0, 0x83, 0x4b, 0xb2, 0xa8, 0x72, 0x99, 0xca, 0x60, 0xa3, 0x1a, 0xb9, - 0x81, 0x80, 0x5c, 0xc2, 0x09, 0x22, 0x19, 0xa4, 0xbf, 0x33, 0xb2, 0x0e, 0x22, 0xd9, 0x50, 0x90, - 0x08, 0xa8, 0x30, 0xa8, 0x42, 0xdb, 0x23, 0x80, 0x0d, 0xa5, 0x4b, 0x91, 0x92, 0x1b, 0x01, 0x9a, - 0x03, 0x5c, 0xe8, 0x21, 0x19, 0xb4, 0x1b, 0x92, 0x19, 0x88, 0x09, 0x99, 0x67, 0x8d, 0x03, 0x8c, - 0x88, 0x33, 0xab, 0xb1, 0x50, 0x80, 0x9c, 0x84, 0x00, 0x89, 0x80, 0xa0, 0x10, 0x2c, 0x94, 0x2b, - 0x9d, 0xd2, 0x70, 0xb8, 0x03, 0x3c, 0xd2, 0x18, 0x8a, 0x85, 0x98, 0x3c, 0xc5, 0x28, 0x98, 0x80, - 0x30, 0xb0, 0x49, 0xa2, 0x8a, 0x38, 0x87, 0x8b, 0x49, 0xf4, 0x49, 0x91, 0x99, 0x42, 0xca, 0x38, - 0x92, 0x0b, 0x84, 0x18, 0x9b, 0xc2, 0x59, 0x00, 0xb1, 0x8c, 0x46, 0xeb, 0x10, 0x21, 0xca, 0x20, - 0x01, 0xdb, 0x32, 0x88, 0xb1, 0x3a, 0xd2, 0x4a, 0xa0, 0x51, 0x91, 0xba, 0x60, 0xb8, 0x29, 0x01, - 0x04, 0x9e, 0x82, 0x38, 0xb9, 0x32, 0x81, 0xaf, 0x13, 0x08, 0x9b, 0x15, 0x98, 0xa0, 0x3b, 0x85, - 0xa2, 0x2d, 0x84, 0x9c, 0x01, 0x92, 0x0a, 0x40, 0x91, 0xa1, 0x8e, 0x8a, 0x47, 0xb0, 0x99, 0x41, - 0xeb, 0x32, 0x88, 0xa9, 0x03, 0xab, 0x68, 0xa3, 0x8d, 0x32, 0xca, 0x98, 0x52, 0x9a, 0x22, 0xc8, - 0x1a, 0x11, 0x9a, 0x07, 0x1b, 0xca, 0x26, 0x0a, 0xba, 0x34, 0x9a, 0x80, 0x13, 0x0f, 0x10, 0x93, - 0x1a, 0xb8, 0x9d, 0x07, 0x29, 0xc9, 0x42, 0xa9, 0x1b, 0x16, 0x9c, 0x01, 0x12, 0x0c, 0xe2, 0x49, - 0x01, 0xb0, 0x29, 0x98, 0x03, 0x99, 0x53, 0xac, 0x91, 0x43, 0x8c, 0xa1, 0x50, 0x08, 0xe0, 0x39, - 0x98, 0x11, 0x90, 0x00, 0xaf, 0x21, 0x94, 0x1a, 0x09, 0xa3, 0x00, 0x9e, 0x12, 0xab, 0x12, 0x32, - 0xbc, 0xfb, 0x71, 0x90, 0x08, 0x1a, 0xb2, 0x1c, 0x22, 0xa1, 0xbc, 0x25, 0x00, 0xba, 0x90, 0x34, - 0x2b, 0x90, 0xc1, 0x0f, 0x15, 0x19, 0xa0, 0xc0, 0x3a, 0x33, 0xea, 0x22, 0x1c, 0x04, 0x0b, 0xb1, - 0x9a, 0x71, 0x87, 0x9a, 0x80, 0x28, 0x18, 0x92, 0x09, 0xdb, 0x55, 0xb8, 0x0a, 0x02, 0x31, 0x9e, - 0x80, 0x01, 0x0a, 0x33, 0xb2, 0xff, 0x20, 0x28, 0xc2, 0x8b, 0x33, 0xaa, 0x09, 0x95, 0x1d, 0x98, - 0x22, 0x83, 0xbf, 0x48, 0x04, 0xaa, 0x38, 0xc2, 0x1a, 0x61, 0xc0, 0x2a, 0x81, 0x99, 0x41, 0xe0, - 0x3a, 0x84, 0xa8, 0x3b, 0xa4, 0x1c, 0x04, 0xaa, 0x81, 0x30, 0xdb, 0x45, 0xc9, 0x39, 0x03, 0x9d, - 0x02, 0x18, 0x8a, 0x85, 0x0a, 0x09, 0xa2, 0x1c, 0x16, 0xab, 0x00, 0x44, 0xeb, 0x30, 0xb2, 0x0a, - 0x22, 0xc0, 0x2a, 0xc1, 0x30, 0x99, 0xe8, 0x58, 0x81, 0x99, 0x28, 0xb2, 0x0d, 0x10, 0xa4, 0x2b, - 0xb8, 0x71, 0x90, 0xb9, 0x78, 0xc1, 0x29, 0x10, 0xb0, 0x50, 0xa8, 0x11, 0xc9, 0x49, 0x02, 0xb9, - 0xbb, 0x46, 0x00, 0xbc, 0x05, 0x18, 0x9a, 0x23, 0x98, 0x89, 0x89, 0x43, 0xd0, 0x1c, 0x07, 0x89, - 0x2a, 0xc4, 0x3a, 0xa9, 0x15, 0x8c, 0x91, 0x38, 0xa4, 0x0c, 0x00, 0x98, 0x80, 0x42, 0xcb, 0x00, - 0x51, 0xd8, 0x08, 0x00, 0x89, 0x03, 0x8b, 0xb3, 0x5a, 0x10, 0x97, 0xab, 0x18, 0x33, 0xf3, 0x3a, - 0xb0, 0x32, 0x8d, 0xa5, 0x29, 0xa8, 0x2a, 0x37, 0xbc, 0x40, 0x90, 0x98, 0xa1, 0x49, 0x22, 0xd9, - 0x19, 0x11, 0x0c, 0x13, 0xe1, 0x58, 0xba, 0x14, 0x28, 0xfa, 0x20, 0x2a, 0xd3, 0x18, 0x28, 0xe1, - 0x38, 0xd0, 0x18, 0x82, 0xac, 0x34, 0xa8, 0x8c, 0x24, 0xd8, 0x29, 0x11, 0xc8, 0x48, 0xa8, 0x20, - 0x80, 0xc9, 0x52, 0xb8, 0x19, 0x84, 0x1c, 0x80, 0x22, 0xbd, 0x53, 0x98, 0xa9, 0x73, 0xb9, 0x20, - 0x10, 0xac, 0x16, 0x9c, 0x12, 0x90, 0x0c, 0x04, 0x99, 0x09, 0x85, 0x9a, 0x38, 0xa3, 0x2b, 0x90, - 0xc0, 0x79, 0xd1, 0x29, 0x23, 0xe9, 0x39, 0x91, 0xa8, 0x2a, 0x82, 0x11, 0xcb, 0x11, 0x68, 0xe0, - 0x38, 0x81, 0xc9, 0x29, 0x83, 0x0a, 0x99, 0x33, 0xa9, 0x91, 0xaf, 0x36, 0xd9, 0x19, 0x84, 0x0b, - 0xa9, 0x15, 0x10, 0xbc, 0x42, 0xa0, 0x3d, 0xb1, 0x12, 0x18, 0xba, 0x33, 0x62, 0xe9, 0x18, 0x04, - 0x9c, 0x08, 0x35, 0xcc, 0x32, 0xa8, 0x1a, 0xa3, 0x2d, 0x83, 0xb9, 0x49, 0x13, 0xfb, 0x59, 0x91, - 0x9a, 0x01, 0x29, 0xa2, 0x2a, 0x30, 0xb6, 0x9f, 0x51, 0x90, 0xaa, 0x43, 0xa9, 0x88, 0x13, 0x9d, - 0x02, 0x82, 0x1c, 0xd3, 0x18, 0x29, 0xc4, 0x1b, 0x22, 0xa2, 0x9c, 0x40, 0xd2, 0x2a, 0xa3, 0x2b, - 0x83, 0xbe, 0x46, 0xb8, 0x0a, 0x12, 0xa8, 0x29, 0xb3, 0x39, 0x16, 0xbf, 0x14, 0x8a, 0x88, 0x23, - 0x99, 0x9d, 0x14, 0x98, 0x19, 0x92, 0xaa, 0x32, 0x8c, 0x86, 0x10, 0xcb, 0x33, 0xca, 0x82, 0x62, - 0xad, 0x84, 0x0a, 0x02, 0x90, 0x58, 0xc1, 0x9b, 0x13, 0x23, 0x9f, 0x12, 0x08, 0x0e, 0x84, 0x80, - 0x39, 0xe8, 0x52, 0xaa, 0xa0, 0x41, 0x99, 0x91, 0x39, 0x90, 0x80, 0x00, 0x80, 0x9f, 0x86, 0x1a, - 0xb2, 0xaa, 0x70, 0xc2, 0x29, 0x09, 0xa4, 0x1e, 0x03, 0x9a, 0x01, 0xa8, 0x79, 0xc1, 0x28, 0x88, - 0x91, 0x38, 0x88, 0xa0, 0x5c, 0x91, 0x90, 0x1c, 0x81, 0x31, 0x92, 0xaf, 0x83, 0x1c, 0x86, 0x09, - 0x19, 0xc2, 0x31, 0x9c, 0x95, 0x0d, 0x13, 0x00, 0xca, 0x31, 0xa9, 0x30, 0xc0, 0x0c, 0x84, 0x49, - 0xb1, 0x1a, 0x8a, 0x16, 0x1b, 0xe8, 0x39, 0xa2, 0x42, 0x9a, 0xd9, 0x71, 0x98, 0x00, 0xc9, 0x42, - 0xa9, 0x98, 0x21, 0xc9, 0x31, 0x19, 0xd2, 0x0a, 0x28, 0x17, 0xab, 0x19, 0x84, 0x0b, 0x00, 0x84, - 0x09, 0x39, 0xf2, 0x38, 0x9a, 0x94, 0x72, 0xf0, 0x29, 0x82, 0xb8, 0x48, 0x82, 0xbb, 0x51, 0xa8, - 0x10, 0x00, 0x88, 0x2a, 0x98, 0xa5, 0x7a, 0x89, 0xc2, 0x38, 0xbc, 0x04, 0x38, 0xac, 0x15, 0x8a, - 0xa1, 0x58, 0xba, 0x94, 0x1c, 0x81, 0x92, 0x1e, 0x85, 0x8a, 0x98, 0x42, 0xd9, 0x40, 0x90, 0x99, - 0x20, 0x98, 0x89, 0x20, 0xd0, 0x62, 0xb9, 0x20, 0x91, 0xad, 0x63, 0xc0, 0x18, 0x19, 0xb2, 0x3a, - 0x92, 0x91, 0x19, 0xa9, 0x70, 0x97, 0x0b, 0x12, 0xd0, 0x3a, 0x00, 0x94, 0x3b, 0xd9, 0x23, 0xaa, - 0x13, 0x1f, 0x82, 0x82, 0x9d, 0x32, 0xba, 0x06, 0x0b, 0xc2, 0x28, 0x0c, 0x94, 0x38, 0xc9, 0x21, - 0x30, 0xfa, 0x48, 0x98, 0xb8, 0x60, 0xc1, 0x19, 0x80, 0x08, 0x00, 0x08, 0x91, 0x7b, 0xf8, 0x20, - 0x90, 0x39, 0xd2, 0x2a, 0x12, 0xb9, 0x19, 0x30, 0x93, 0x9f, 0x34, 0xb9, 0x80, 0x88, 0x59, 0xa2, - 0x9c, 0x63, 0xb0, 0x1d, 0x84, 0x01, 0x9d, 0x12, 0x08, 0x90, 0x28, 0xdb, 0x35, 0xab, 0x31, 0xb2, - 0x0d, 0x12, 0x89, 0xab, 0x26, 0x0a, 0xd9, 0x51, 0xd0, 0x39, 0x98, 0x01, 0x09, 0xa0, 0x68, 0xe0, - 0x28, 0x01, 0xca, 0x62, 0xc8, 0x28, 0x00, 0xa8, 0x28, 0x90, 0x82, 0x2b, 0xf2, 0x49, 0x80, 0xa8, - 0x50, 0xa2, 0x0e, 0x82, 0x00, 0x89, 0x13, 0xbc, 0x20, 0x87, 0x0a, 0x08, 0xa3, 0x48, 0xca, 0x28, - 0x23, 0xcd, 0x21, 0x83, 0x8f, 0x22, 0xb8, 0x3c, 0xa5, 0x2b, 0x90, 0x01, 0x98, 0x00, 0x90, 0x8b, - 0x44, 0xcd, 0x32, 0x80, 0x9c, 0x07, 0x9b, 0x21, 0xb0, 0x68, 0x98, 0x90, 0x19, 0x08, 0xc1, 0x70, - 0xb9, 0x32, 0x10, 0x9e, 0x04, 0x88, 0x0b, 0x93, 0x89, 0x32, 0xba, 0x43, 0xae, 0x11, 0x93, 0x2f, - 0xa2, 0x01, 0x89, 0x48, 0xd9, 0x02, 0x8a, 0x44, 0xb9, 0x1a, 0x01, 0x42, 0xdb, 0x41, 0xc8, 0x09, - 0x38, 0x95, 0x81, 0x9f, 0x24, 0xc9, 0x18, 0x22, 0xc8, 0x1b, 0x82, 0xb1, 0x7b, 0xb2, 0x28, 0x80, - 0xbb, 0x04, 0x89, 0x2e, 0x86, 0xaa, 0x50, 0xc0, 0x18, 0x30, 0xc0, 0x88, 0x2a, 0xa2, 0x91, 0x6a, - 0xb3, 0x99, 0x49, 0x04, 0xab, 0x1c, 0x16, 0xdb, 0x11, 0x21, 0xea, 0x31, 0x98, 0x89, 0x01, 0x4b, - 0xc3, 0x00, 0x0c, 0x12, 0xcb, 0x53, 0xc8, 0x28, 0x82, 0x0d, 0x82, 0x21, 0x1c, 0xe2, 0x10, 0x89, - 0x32, 0xa8, 0xa8, 0x12, 0x9f, 0x26, 0xcb, 0x22, 0x89, 0x8a, 0x07, 0x8c, 0x20, 0xa1, 0x09, 0x10, - 0xb0, 0x41, 0x98, 0xbb, 0x73, 0xe8, 0x29, 0x03, 0x99, 0x19, 0x94, 0x0b, 0x91, 0x10, 0xaa, 0x17, - 0x0e, 0xb3, 0x1a, 0x24, 0xa9, 0xa9, 0x68, 0xa2, 0x1c, 0x04, 0xab, 0x13, 0x88, 0x8c, 0x02, 0x9e, - 0x15, 0x08, 0xb8, 0x19, 0x92, 0x40, 0x40, 0xf0, 0x3b, 0x08, 0x91, 0x89, 0x42, 0x08, 0xb6, 0x2f, - 0xa1, 0x01, 0x2a, 0x90, 0xb4, 0x1f, 0x03, 0x90, 0x1b, 0x92, 0x31, 0xf0, 0x8a, 0x12, 0x92, 0x3b, - 0xa5, 0x8f, 0x21, 0x81, 0x8a, 0x18, 0xaa, 0x94, 0x70, 0xaa, 0x82, 0x38, 0xda, 0x32, 0x99, 0xd1, - 0x51, 0x8b, 0xc2, 0x7a, 0xa0, 0x20, 0x9a, 0x82, 0x3a, 0xa3, 0x9a, 0x8b, 0x33, 0xa8, 0xbd, 0x62, - 0xa0, 0x02, 0x1f, 0xa2, 0x30, 0xd0, 0x49, 0x90, 0x88, 0x40, 0xdb, 0x21, 0x18, 0x02, 0x88, 0x90, - 0x1e, 0x12, 0xa0, 0x2a, 0x47, 0xc9, 0x1b, 0x95, 0x2d, 0x91, 0x82, 0x39, 0xe0, 0x18, 0x20, 0xe8, - 0x41, 0x89, 0xb9, 0x43, 0xa0, 0x0c, 0x03, 0xb0, 0x1c, 0x03, 0x88, 0x9a, 0x16, 0x8b, 0xa8, 0x08, - 0x58, 0xd3, 0x0b, 0x05, 0x8c, 0x11, 0xa4, 0x2c, 0x90, 0x11, 0x09, 0xdb, 0x24, 0xa9, 0x90, 0x69, - 0xd8, 0x23, 0x0c, 0x94, 0x8a, 0x21, 0xa1, 0x0e, 0x12, 0x88, 0xba, 0x74, 0xc0, 0x10, 0x39, 0xd3, - 0x2a, 0xb0, 0x50, 0x88, 0xa8, 0x12, 0xeb, 0x51, 0xb0, 0x00, 0x28, 0xc8, 0x21, 0x8a, 0x82, 0x10, - 0x8c, 0x93, 0x0e, 0xa4, 0x78, 0xb8, 0x91, 0x6b, 0xd1, 0x38, 0x88, 0xa1, 0x30, 0xc9, 0x41, 0xc9, - 0x22, 0xba, 0x21, 0x9a, 0x06, 0x1a, 0x9a, 0x85, 0x3a, 0xe9, 0x42, 0x90, 0xda, 0x21, 0xb8, 0x20, - 0x00, 0xa4, 0x29, 0xca, 0x32, 0xc9, 0x04, 0x3a, 0xec, 0x13, 0x3a, 0xd0, 0x09, 0x04, 0x0b, 0x89, - 0x86, 0x2c, 0xc3, 0x19, 0x11, 0xfa, 0x31, 0x80, 0xa9, 0x38, 0xb2, 0x50, 0x9a, 0x91, 0x19, 0x0a, - 0x17, 0x9a, 0xa3, 0x1e, 0x04, 0x99, 0x00, 0x98, 0x7b, 0xd3, 0x48, 0xa8, 0x10, 0xa9, 0x90, 0x52, - 0xaa, 0x15, 0x1a, 0xcb, 0x11, 0x21, 0x91, 0x0e, 0x22, 0xe2, 0x1b, 0x83, 0x0a, 0x91, 0x21, 0xa9, - 0xb3, 0x7a, 0xf1, 0x50, 0xba, 0x23, 0x0a, 0xa1, 0x10, 0x0a, 0xb5, 0x2f, 0x94, 0x8c, 0x03, 0xa8, - 0x28, 0xa1, 0x8c, 0x38, 0x90, 0x03, 0x89, 0x4c, 0xc1, 0x91, 0x98, 0x3f, 0xa4, 0x08, 0x32, 0xbf, - 0x15, 0x98, 0x09, 0x83, 0x0e, 0x03, 0x00, 0x0c, 0x84, 0x9b, 0x12, 0x88, 0x19, 0x01, 0x88, 0xc9, - 0x16, 0x0d, 0xb4, 0x4b, 0xa9, 0x07, 0x9b, 0x22, 0x93, 0x8f, 0x01, 0x90, 0x08, 0x10, 0xc9, 0x22, - 0x3c, 0x94, 0x99, 0x0e, 0x23, 0x90, 0xbb, 0x72, 0xd0, 0x48, 0xb8, 0x20, 0x00, 0x98, 0x22, 0xda, - 0x39, 0x93, 0x9c, 0x11, 0x19, 0xb2, 0x49, 0xd3, 0x9d, 0x51, 0xa0, 0x40, 0x98, 0x99, 0x00, 0x93, - 0x2d, 0x83, 0xd2, 0x2f, 0x84, 0x0a, 0x18, 0xb1, 0x59, 0x90, 0x89, 0x94, 0x09, 0x28, 0xd1, 0x29, - 0x88, 0x10, 0xf3, 0x3a, 0x11, 0xe2, 0x4b, 0xb8, 0x15, 0x9c, 0x38, 0x94, 0x8b, 0x10, 0xb4, 0x0d, - 0x21, 0x00, 0xa0, 0x3a, 0xe2, 0x39, 0x08, 0xc2, 0x18, 0x2c, 0x82, 0xb0, 0x20, 0x30, 0xf9, 0x39, - 0x89, 0x91, 0x42, 0x0a, 0xf5, 0x2c, 0x91, 0x32, 0x89, 0xb1, 0x39, 0xa8, 0x63, 0x98, 0xd9, 0x79, - 0xb1, 0x58, 0xb0, 0x28, 0x91, 0x3a, 0x8a, 0xa4, 0x53, 0x8e, 0xa2, 0x20, 0x0b, 0x02, 0xca, 0x88, - 0x2a, 0x24, 0x8b, 0x80, 0xd1, 0x70, 0xb9, 0x18, 0x92, 0x29, 0x9a, 0x08, 0xd2, 0x2e, 0x83, 0xc3, - 0x5d, 0xc1, 0x20, 0x98, 0x10, 0xc8, 0x2b, 0x17, 0x9b, 0x31, 0xdb, 0x31, 0x81, 0x09, 0x20, 0xdb, - 0x04, 0x9b, 0x20, 0xd9, 0x23, 0x30, 0x9e, 0xa2, 0x23, 0x19, 0xea, 0x33, 0xe9, 0x69, 0xb0, 0x08, - 0x48, 0xa1, 0x29, 0xbb, 0x17, 0x1b, 0x92, 0x9a, 0x29, 0x85, 0x0c, 0x85, 0x9a, 0x39, 0x96, 0x8b, - 0x80, 0x82, 0x0d, 0x23, 0xba, 0xa3, 0x6b, 0x94, 0x8c, 0x00, 0x82, 0x09, 0x11, 0xa2, 0x2c, 0xe2, - 0x39, 0x25, 0xdd, 0x21, 0x92, 0x8a, 0x08, 0x95, 0x1b, 0x01, 0x23, 0xaf, 0x81, 0x60, 0xc0, 0x18, - 0x18, 0xd3, 0x2b, 0x92, 0x10, 0xab, 0x26, 0xa9, 0x88, 0x31, 0x9a, 0xd9, 0x22, 0x21, 0xbb, 0x99, - 0x07, 0x9d, 0x41, 0x83, 0xbc, 0x32, 0x3b, 0xf0, 0x40, 0xb8, 0x98, 0x49, 0x92, 0xa1, 0x1a, 0x19, - 0xb0, 0x10, 0x0c, 0x07, 0x0e, 0x84, 0x9a, 0x88, 0x24, 0x98, 0x19, 0x8a, 0x01, 0x01, 0x8d, 0x35, - 0xbc, 0x61, 0xa8, 0xa3, 0x2e, 0xa2, 0x11, 0xab, 0x22, 0xb8, 0x30, 0x20, 0xb8, 0x14, 0x8e, 0x17, - 0xbc, 0x21, 0x91, 0x8a, 0x54, 0xeb, 0x41, 0xa9, 0x02, 0x20, 0xda, 0x40, 0x80, 0x80, 0x99, 0x83, - 0x8e, 0x01, 0x21, 0x0b, 0x23, 0xd9, 0x1a, 0x88, 0x00, 0x86, 0x19, 0xdc, 0x10, 0x32, 0xac, 0x12, - 0x9b, 0x17, 0x8c, 0x02, 0x09, 0x1a, 0xc6, 0x3a, 0xb8, 0x12, 0x40, 0xc2, 0x1e, 0x83, 0x19, 0x9c, - 0x16, 0xab, 0x81, 0x60, 0xd1, 0x18, 0x80, 0xa9, 0x40, 0xa0, 0x38, 0x03, 0xad, 0x31, 0xc2, 0x8c, - 0x23, 0x90, 0x8b, 0x17, 0x9a, 0x09, 0xb2, 0x70, 0xa8, 0x80, 0x81, 0x20, 0x2a, 0xf3, 0x11, 0x2b, - 0xa3, 0xcb, 0x51, 0xa0, 0x0c, 0x06, 0x9b, 0x10, 0x12, 0x8a, 0xd9, 0x21, 0x10, 0xbb, 0xc3, 0x58, - 0xb3, 0x2c, 0x06, 0xdb, 0x12, 0x08, 0x98, 0xe1, 0x3a, 0xa2, 0x42, 0xb9, 0x88, 0x19, 0x83, 0xa8, - 0x5a, 0x94, 0x29, 0xa0, 0x1b, 0xa9, 0xa5, 0x08, 0x5c, 0xc2, 0x31, 0xb5, 0x8f, 0x03, 0x98, 0x2c, - 0xa3, 0x31, 0xea, 0x50, 0x90, 0x91, 0x8a, 0x39, 0x86, 0x1c, 0xa3, 0x0d, 0x10, 0x03, 0xbb, 0x60, - 0xa0, 0x89, 0x12, 0x9b, 0x41, 0x21, 0xf9, 0x18, 0x19, 0x40, 0xe3, 0x8a, 0x38, 0xe0, 0x22, 0x89, - 0xda, 0x30, 0x84, 0xa9, 0x70, 0xa0, 0x98, 0x80, 0x8a, 0x83, 0x4a, 0x81, 0x80, 0xc0, 0x3e, 0x87, - 0x8a, 0x28, 0xa0, 0x9a, 0x32, 0x11, 0x8b, 0x99, 0x07, 0x8c, 0x9b, 0x46, 0xa0, 0x28, 0xd9, 0x22, - 0x9b, 0x21, 0x82, 0xbf, 0x06, 0x19, 0xa0, 0x09, 0x03, 0x20, 0xeb, 0x01, 0x09, 0x1b, 0x27, 0xd8, - 0x29, 0x02, 0xf9, 0x29, 0x81, 0x80, 0x10, 0x80, 0xab, 0x31, 0x28, 0xb8, 0xa9, 0xc9, 0x79, 0xf2, - 0x40, 0x80, 0xa8, 0x81, 0x11, 0xbb, 0x49, 0xb6, 0x1c, 0x92, 0x3b, 0xa6, 0x2a, 0x05, 0xb9, 0x3a, - 0x93, 0x39, 0xca, 0x34, 0xbd, 0x03, 0x11, 0x8c, 0x04, 0xb8, 0x59, 0xa8, 0x09, 0x43, 0xb2, 0x8f, - 0x20, 0xb1, 0x69, 0xb8, 0x88, 0x11, 0x98, 0x21, 0xc8, 0x19, 0x05, 0x2c, 0xf1, 0x3b, 0x02, 0x10, - 0xd1, 0x1a, 0x41, 0x9b, 0x06, 0x08, 0x9b, 0x10, 0x20, 0x94, 0x09, 0x3b, 0x27, 0xad, 0x89, 0x35, - 0xcb, 0x30, 0xa2, 0x8b, 0x51, 0x84, 0xac, 0x88, 0x03, 0x0a, 0xab, 0x07, 0x1a, 0x23, 0xcb, 0x82, - 0x8e, 0x52, 0xb0, 0x0d, 0x02, 0x88, 0x09, 0x83, 0xb8, 0x1c, 0x83, 0x13, 0xcd, 0x53, 0x09, 0xf1, - 0x1a, 0x03, 0x9a, 0x10, 0x33, 0xce, 0x30, 0x02, 0xbb, 0x31, 0xa0, 0x09, 0x29, 0xe1, 0x58, 0xab, - 0x43, 0x82, 0xeb, 0x50, 0x00, 0xb0, 0x71, 0xa9, 0x08, 0x12, 0x99, 0x09, 0x80, 0x34, 0x00, 0xd8, - 0x39, 0xc2, 0x12, 0x2e, 0xc1, 0x29, 0x01, 0xc8, 0x2b, 0x07, 0x1a, 0xb0, 0x21, 0x8e, 0x94, 0x0b, - 0x12, 0xb8, 0x0c, 0x16, 0xca, 0x39, 0x14, 0xeb, 0x10, 0x11, 0xaa, 0x43, 0x8c, 0xa1, 0x20, 0x18, - 0xa3, 0x8c, 0xb0, 0x55, 0xcc, 0x41, 0x90, 0x99, 0x50, 0xc0, 0x18, 0x11, 0xca, 0x31, 0xca, 0x21, - 0x11, 0x9b, 0x28, 0xc1, 0x49, 0x32, 0xf8, 0x4a, 0xc0, 0x08, 0x31, 0xa2, 0x8b, 0x33, 0xeb, 0x19, - 0x27, 0x9a, 0x10, 0xc2, 0x1c, 0x84, 0x0a, 0x18, 0xaa, 0x01, 0x24, 0xdc, 0x49, 0x92, 0x29, 0xe0, - 0x39, 0xb2, 0x3a, 0x82, 0xa9, 0x09, 0x01, 0x83, 0xdf, 0x32, 0x83, 0xcb, 0x20, 0x20, 0x43, 0xe1, - 0x0b, 0x2a, 0x01, 0x04, 0x90, 0xbf, 0x34, 0xa2, 0x1b, 0x09, 0xb6, 0x1d, 0x05, 0x0a, 0x90, 0x12, - 0x09, 0xb9, 0x8c, 0x91, 0x57, 0xaa, 0x01, 0x0a, 0xc0, 0x71, 0xa8, 0x19, 0x20, 0xa1, 0x9d, 0x01, - 0x13, 0xbb, 0x51, 0xe8, 0x89, 0x32, 0xa8, 0x00, 0x2b, 0x05, 0x00, 0x9a, 0x88, 0xd1, 0x2c, 0xa2, - 0xcb, 0x44, 0x40, 0xe1, 0x0a, 0x01, 0xb1, 0x58, 0xaa, 0x85, 0x8b, 0x24, 0x98, 0x8a, 0x05, 0x9a, - 0x12, 0x29, 0xf2, 0x6a, 0x98, 0x98, 0x30, 0xb1, 0x7a, 0x92, 0xa9, 0x29, 0xa0, 0x58, 0xb0, 0x01, - 0x4a, 0x94, 0xa9, 0x9b, 0x24, 0x29, 0xc9, 0x25, 0xab, 0x1b, 0x64, 0xe2, 0x2c, 0x82, 0x90, 0x19, - 0xa1, 0x18, 0xba, 0x14, 0x30, 0xba, 0x20, 0x63, 0xf1, 0x1c, 0x12, 0x90, 0x88, 0x11, 0xcc, 0x21, - 0x11, 0xe0, 0x0c, 0x23, 0x91, 0x0a, 0x9a, 0x91, 0x25, 0xbc, 0x34, 0xaf, 0x13, 0x11, 0xbb, 0x09, - 0x31, 0xc1, 0x18, 0x99, 0x19, 0x1a, 0x57, 0x9b, 0x80, 0x49, 0x98, 0xd0, 0x1e, 0x13, 0x81, 0x11, - 0x9e, 0x10, 0x10, 0xa2, 0x2d, 0x83, 0x9a, 0x15, 0xf9, 0x3c, 0x84, 0xa9, 0x30, 0xb9, 0x38, 0x33, - 0x89, 0xa0, 0x1c, 0x83, 0xc8, 0x38, 0x09, 0x15, 0xb0, 0x2d, 0xa9, 0x08, 0x77, 0xa8, 0x90, 0x0a, - 0x42, 0xb1, 0x39, 0x9a, 0xa4, 0x78, 0x82, 0xcc, 0x38, 0xa1, 0x28, 0x01, 0x09, 0x9c, 0x07, 0x8d, - 0x99, 0x22, 0x80, 0x0a, 0x92, 0x8b, 0x37, 0xac, 0x18, 0x81, 0x90, 0x62, 0xfa, 0x10, 0x80, 0x89, - 0x00, 0x9a, 0x12, 0x31, 0xa6, 0x1d, 0xc0, 0x50, 0xc1, 0x1a, 0x92, 0x88, 0x00, 0x00, 0x0a, 0xc1, - 0x30, 0x84, 0x0d, 0x10, 0xd0, 0x38, 0x20, 0xd1, 0x8a, 0x42, 0x02, 0xf8, 0x1c, 0x05, 0x20, 0xba, - 0x90, 0x3b, 0x17, 0x1a, 0xb1, 0xba, 0x69, 0x02, 0xa9, 0x12, 0x2c, 0x84, 0xbb, 0x20, 0x28, 0x13, - 0xad, 0x94, 0x4e, 0xb1, 0x38, 0xcc, 0x32, 0x00, 0x01, 0xa9, 0x90, 0x2e, 0x92, 0x0a, 0xb8, 0x66, - 0xa9, 0x90, 0x18, 0xa8, 0x12, 0x6a, 0xc3, 0x19, 0x9e, 0x22, 0x99, 0x81, 0x32, 0xce, 0x21, 0x98, - 0x00, 0x32, 0xba, 0x88, 0x88, 0x80, 0x3a, 0x02, 0x77, 0xc0, 0x8a, 0x30, 0xe0, 0x39, 0x92, 0x10, - 0xcc, 0x20, 0x04, 0x00, 0x8b, 0x86, 0xc9, 0x3c, 0xa3, 0x06, 0x8c, 0x82, 0xaa, 0x40, 0x31, 0xc1, - 0x8c, 0x92, 0x28, 0x19, 0xa3, 0x32, 0xcf, 0x40, 0xa2, 0x1d, 0x81, 0x08, 0x18, 0xd3, 0x3b, 0x01, - 0x8e, 0x04, 0x00, 0xab, 0x11, 0x02, 0x0d, 0x93, 0x08, 0xad, 0x33, 0xab, 0x51, 0xa8, 0x82, 0x0e, - 0x82, 0x20, 0x99, 0xa4, 0x49, 0x8f, 0x35, 0xb9, 0x0b, 0x13, 0x00, 0x0d, 0xa3, 0x5b, 0x04, 0xba, - 0x40, 0xe9, 0x51, 0x90, 0x81, 0xba, 0x32, 0x99, 0x90, 0x18, 0x28, 0x04, 0xbb, 0x19, 0xbb, 0x04, - 0x04, 0xdf, 0x83, 0x40, 0x93, 0x8b, 0x8c, 0x03, 0x08, 0x15, 0xac, 0xa8, 0x50, 0xc2, 0x1c, 0x02, - 0xd0, 0x53, 0x9d, 0x11, 0x18, 0xaa, 0x12, 0x9b, 0x38, 0x16, 0xc9, 0x39, 0x9a, 0x42, 0xb0, 0x19, - 0x98, 0x00, 0x10, 0xbb, 0x67, 0xda, 0x00, 0x08, 0x3a, 0xa6, 0x2a, 0x93, 0x8f, 0x04, 0x19, 0xa9, - 0x61, 0xa9, 0x03, 0x19, 0x99, 0x90, 0x34, 0x98, 0x2a, 0xe8, 0x49, 0xe2, 0x28, 0x88, 0x22, 0xa9, - 0x09, 0x12, 0xcf, 0x04, 0x39, 0xd1, 0x29, 0xa8, 0x23, 0x98, 0x89, 0xb1, 0x9c, 0x09, 0x12, 0x1a, - 0xa6, 0x5a, 0xe0, 0x19, 0x21, 0xb1, 0x09, 0x19, 0xfb, 0x73, 0x90, 0x89, 0xa1, 0x3a, 0x03, 0xc0, - 0x38, 0xc8, 0x42, 0xdb, 0x11, 0x2a, 0x94, 0x31, 0xac, 0x52, 0xa1, 0x3b, 0xf3, 0x1a, 0x84, 0x9c, - 0x23, 0xaa, 0x12, 0xa4, 0x0f, 0x82, 0x20, 0x00, 0xa4, 0x8e, 0x82, 0x00, 0x9e, 0x13, 0x8b, 0x14, - 0x18, 0xcb, 0x09, 0xa0, 0x22, 0x09, 0xaf, 0x14, 0x08, 0x22, 0xe0, 0x8a, 0x93, 0x1f, 0x92, 0x21, - 0xa9, 0x3a, 0x84, 0xb9, 0x59, 0xc2, 0x4a, 0xc2, 0x29, 0x15, 0xbc, 0x38, 0x83, 0xb9, 0x4b, 0x86, - 0x8a, 0x03, 0x0c, 0x91, 0x00, 0x72, 0x83, 0xbf, 0x01, 0x09, 0x11, 0x02, 0x00, 0x88, 0x09, 0xe3, - 0x3e, 0x95, 0x0b, 0x00, 0xa1, 0x38, 0xa2, 0x09, 0x8e, 0x94, 0x39, 0xb0, 0xca, 0x70, 0xa1, 0x88, - 0x38, 0xc9, 0x81, 0x1c, 0x81, 0x21, 0xac, 0x12, 0x99, 0x9f, 0x22, 0x10, 0x39, 0x94, 0x8d, 0x08, - 0xb1, 0x8c, 0x43, 0xa8, 0x28, 0x07, 0x1c, 0xb2, 0x0a, 0x90, 0x6b, 0x13, 0xf9, 0x49, 0x81, 0x10, - 0xa0, 0x38, 0xb2, 0x9f, 0x34, 0x98, 0xaa, 0x61, 0x90, 0xca, 0x60, 0x80, 0x08, 0x11, 0x8a, 0x09, - 0xa0, 0x71, 0xb0, 0x2a, 0x33, 0xf8, 0x1a, 0x32, 0xf0, 0x2b, 0x03, 0xbc, 0x52, 0xa0, 0x09, 0x21, - 0xe8, 0x2a, 0xa3, 0x20, 0xab, 0x95, 0x1b, 0xb0, 0x30, 0x17, 0xb8, 0x40, 0xb2, 0xaf, 0x00, 0x33, - 0x9d, 0x14, 0x9a, 0xa9, 0x25, 0x89, 0x82, 0xac, 0x28, 0x87, 0x8d, 0x22, 0x98, 0x8a, 0x12, 0xc9, - 0x08, 0x21, 0x81, 0x2b, 0xeb, 0x34, 0x09, 0xb9, 0x39, 0x95, 0x1d, 0x05, 0x99, 0x9b, 0x26, 0x9a, - 0x90, 0x28, 0x30, 0xb4, 0x0b, 0x72, 0xe0, 0x28, 0x90, 0x00, 0x89, 0x90, 0x43, 0xab, 0xb3, 0x59, - 0x80, 0xc9, 0x60, 0x81, 0x09, 0xa3, 0xb8, 0x9f, 0x21, 0x22, 0xba, 0x67, 0xbb, 0x11, 0x08, 0x21, - 0xca, 0x19, 0xc0, 0x29, 0x27, 0x89, 0xba, 0x21, 0xba, 0x20, 0x80, 0x34, 0x8a, 0x06, 0xdf, 0x10, - 0x08, 0x24, 0x9a, 0x00, 0x01, 0xcb, 0x11, 0x29, 0xc0, 0x10, 0x13, 0xcc, 0x50, 0xa1, 0x9a, 0x22, - 0x1c, 0x14, 0xbb, 0x40, 0xd8, 0x38, 0xb8, 0xa9, 0x53, 0x88, 0x05, 0x99, 0xaf, 0x21, 0x21, 0x90, - 0x88, 0xad, 0x31, 0x24, 0xfb, 0x30, 0x90, 0xbb, 0x51, 0x10, 0x94, 0x0b, 0x12, 0xfb, 0x69, 0x91, - 0x00, 0x99, 0x19, 0x82, 0x8c, 0x31, 0xb1, 0x9a, 0x12, 0x35, 0xf8, 0x2d, 0x84, 0x9a, 0x28, 0x94, - 0x0c, 0x80, 0x20, 0xd2, 0x0c, 0x33, 0xb8, 0x4a, 0x93, 0x0a, 0x9b, 0x27, 0xbc, 0x12, 0x49, 0x95, - 0x09, 0xaa, 0x11, 0x31, 0xeb, 0x43, 0xd9, 0x28, 0xa8, 0x01, 0x1a, 0x06, 0x9b, 0xb1, 0x08, 0x71, - 0xa1, 0x9c, 0x82, 0x1a, 0x39, 0xe1, 0x18, 0x12, 0xaa, 0x15, 0xae, 0x11, 0x14, 0xa8, 0x39, 0xd0, - 0xa0, 0x6a, 0x90, 0x80, 0x8b, 0x34, 0xba, 0x10, 0x35, 0xdc, 0x22, 0x8a, 0x01, 0x22, 0xba, 0xa9, - 0x19, 0xc4, 0x73, 0xba, 0x34, 0xb8, 0x19, 0xbc, 0x16, 0x1a, 0x01, 0xb0, 0x0f, 0x14, 0x9a, 0x18, - 0xb2, 0x4c, 0x93, 0x1b, 0x83, 0x8e, 0x13, 0xc8, 0x1c, 0x12, 0xb2, 0x5c, 0x90, 0x92, 0x1d, 0x92, - 0x41, 0x9a, 0xb9, 0x53, 0xb8, 0x4c, 0x94, 0x19, 0x29, 0xe2, 0x2b, 0x14, 0x81, 0xbb, 0x09, 0x23, - 0x4b, 0x97, 0xac, 0x30, 0x01, 0x9a, 0x09, 0xc1, 0x79, 0xa8, 0x82, 0x2a, 0x88, 0x85, 0xaa, 0xbd, - 0x48, 0x05, 0x09, 0xb8, 0x20, 0x88, 0x00, 0x07, 0x9f, 0x12, 0x20, 0xb8, 0xab, 0x32, 0x10, 0x00, - 0x03, 0xdd, 0x70, 0x90, 0x91, 0x99, 0x99, 0x54, 0xa9, 0x8a, 0x24, 0x89, 0x13, 0xca, 0x0a, 0x51, - 0x83, 0xdc, 0x10, 0x88, 0x14, 0x00, 0xa9, 0x2b, 0x97, 0x39, 0xeb, 0x00, 0x43, 0x88, 0xb9, 0x8b, - 0x82, 0x61, 0x80, 0x8b, 0x85, 0x19, 0x89, 0xca, 0x80, 0x55, 0xb9, 0x3a, 0xd2, 0x1c, 0x84, 0x2a, - 0xc0, 0x10, 0x01, 0x9c, 0x34, 0xa9, 0x4a, 0xb3, 0x1d, 0x92, 0x08, 0x32, 0xb0, 0xaa, 0x3c, 0x27, - 0x9a, 0xa3, 0x8e, 0x98, 0x25, 0x09, 0xd2, 0x0c, 0x14, 0x98, 0x1a, 0xa0, 0x1a, 0x13, 0xcb, 0x16, - 0x1e, 0x03, 0xa8, 0x2c, 0xa0, 0x42, 0x98, 0xb3, 0x1f, 0xa3, 0x38, 0xb8, 0xba, 0x31, 0x84, 0xab, - 0x3d, 0x07, 0x0d, 0x02, 0x88, 0x9b, 0x33, 0xa9, 0x92, 0x8d, 0x20, 0xf3, 0x3b, 0x04, 0x89, 0x00, - 0xa2, 0x9f, 0x82, 0x39, 0x84, 0x09, 0x8c, 0x25, 0x98, 0x98, 0x31, 0xbd, 0x40, 0x93, 0x9e, 0x43, - 0x80, 0x88, 0x88, 0x99, 0xa8, 0x7a, 0x94, 0x2b, 0xb8, 0x40, 0xa3, 0x08, 0x2b, 0xb6, 0x8c, 0x42, - 0xe0, 0x28, 0x91, 0x01, 0x0d, 0x83, 0x83, 0x9f, 0x00, 0x91, 0x8a, 0x28, 0x92, 0x0b, 0xb0, 0x45, - 0xfa, 0x29, 0x81, 0x80, 0x0c, 0x01, 0x88, 0x22, 0xdc, 0x12, 0x8c, 0x04, 0x40, 0xd9, 0x13, 0xaa, - 0x01, 0x33, 0xd0, 0x29, 0x21, 0xb8, 0x29, 0x17, 0xcc, 0x40, 0xa0, 0x88, 0x4a, 0x95, 0x10, 0x98, - 0xaa, 0x12, 0xac, 0x71, 0x01, 0xba, 0x31, 0x11, 0x9d, 0x98, 0x27, 0xac, 0x21, 0x90, 0x89, 0x32, - 0x9a, 0xa2, 0x1e, 0x02, 0x02, 0x9f, 0x82, 0x08, 0x8f, 0x03, 0x00, 0x10, 0xe0, 0x1c, 0x93, 0x1a, - 0x14, 0xca, 0x1a, 0xb2, 0x78, 0x81, 0x08, 0xb8, 0x2d, 0x87, 0x9b, 0x22, 0x00, 0xb9, 0x48, 0x98, - 0x30, 0x83, 0x89, 0xef, 0x13, 0x38, 0x91, 0xca, 0x3b, 0xb4, 0x29, 0x05, 0xba, 0x25, 0x99, 0x90, - 0xbb, 0x3a, 0x37, 0xd8, 0x39, 0x81, 0xa0, 0x89, 0x20, 0xca, 0x24, 0x01, 0xcb, 0x42, 0x9a, 0x94, - 0x8c, 0x80, 0x8a, 0x32, 0x65, 0xe8, 0x89, 0x4a, 0x95, 0x8d, 0x12, 0x18, 0x88, 0x09, 0xd1, 0x19, - 0x14, 0x80, 0xca, 0x2a, 0x14, 0x89, 0x9b, 0x15, 0x9b, 0x41, 0x95, 0x8d, 0x11, 0xb1, 0x4a, 0x90, - 0x80, 0x33, 0xcd, 0x10, 0x03, 0x09, 0x11, 0x8e, 0xc0, 0x6a, 0x92, 0x09, 0x02, 0xbb, 0x60, 0x83, - 0x8c, 0x02, 0xdb, 0x51, 0xa9, 0x21, 0x00, 0xa1, 0x19, 0x80, 0xfc, 0x41, 0xa1, 0x1c, 0x81, 0x81, - 0x80, 0x0c, 0x09, 0x85, 0xaa, 0x68, 0xd1, 0xab, 0x73, 0xa1, 0x8a, 0x12, 0x00, 0xda, 0x11, 0x9a, - 0x84, 0x00, 0x31, 0xe0, 0x8c, 0x25, 0xb8, 0x8b, 0x35, 0xd0, 0x19, 0x01, 0x91, 0xa9, 0x30, 0x90, - 0x8a, 0x20, 0x45, 0xf2, 0x1c, 0x03, 0xb8, 0x18, 0x41, 0xe8, 0x39, 0xa1, 0x2b, 0x81, 0x00, 0x43, - 0xc8, 0x19, 0x81, 0xdb, 0x62, 0xc0, 0x18, 0x11, 0xb8, 0x1a, 0x10, 0x25, 0xac, 0x11, 0x90, 0x9f, - 0x14, 0x89, 0x88, 0xa8, 0x62, 0xc8, 0x3b, 0xb3, 0x2d, 0x94, 0x28, 0x99, 0x08, 0x24, 0xf9, 0x19, - 0x11, 0x90, 0x58, 0xaa, 0x81, 0x1b, 0x31, 0xd2, 0x59, 0x81, 0x10, 0xfb, 0x3b, 0x12, 0x9a, 0x06, - 0xbb, 0x01, 0x43, 0xaa, 0x88, 0x8b, 0x07, 0x99, 0x29, 0xd3, 0x9c, 0x32, 0x13, 0xb9, 0x0b, 0x13, - 0x3a, 0x55, 0xf9, 0x9a, 0x12, 0x99, 0xa8, 0x39, 0x47, 0xa1, 0xb8, 0x2b, 0x93, 0xcb, 0x27, 0xac, - 0x21, 0x23, 0xb9, 0xac, 0x81, 0x73, 0xb8, 0x31, 0x08, 0xeb, 0x18, 0x22, 0x11, 0x19, 0x05, 0xdb, - 0x30, 0x09, 0x05, 0x00, 0x9b, 0x89, 0x08, 0x73, 0x82, 0xcc, 0x12, 0x0b, 0x90, 0x90, 0x25, 0xaf, - 0x14, 0xaa, 0x80, 0x39, 0x98, 0x27, 0xbb, 0x43, 0xbc, 0x08, 0x03, 0x9b, 0x02, 0x3b, 0xa6, 0x09, - 0x10, 0x24, 0xcd, 0x19, 0x13, 0xba, 0x0a, 0x36, 0xdb, 0x38, 0xb8, 0x8a, 0x70, 0x95, 0x8b, 0x02, - 0x9b, 0x30, 0x23, 0xc0, 0x01, 0x1a, 0xf3, 0x1c, 0x5a, 0x93, 0x99, 0x0c, 0x35, 0x91, 0xab, 0x15, - 0xc9, 0x18, 0x11, 0x80, 0x99, 0x50, 0xc2, 0x1b, 0x40, 0xc3, 0x2a, 0xb1, 0x5d, 0xb2, 0x8c, 0x41, - 0xc8, 0x1a, 0x04, 0xaa, 0x4a, 0x84, 0x88, 0x1b, 0x88, 0x00, 0xa2, 0x0c, 0x09, 0x17, 0xad, 0x12, - 0x88, 0x30, 0xd4, 0x0a, 0x11, 0xb0, 0x0c, 0x82, 0x9a, 0x72, 0x80, 0xa3, 0x19, 0x19, 0x96, 0x9c, - 0x39, 0x92, 0x51, 0x34, 0xe0, 0x9d, 0x32, 0xb1, 0x29, 0x88, 0x32, 0x13, 0xbd, 0x42, 0xd9, 0x38, - 0x14, 0xb9, 0x9f, 0x11, 0x99, 0x28, 0x02, 0x02, 0xaf, 0x01, 0x20, 0xbb, 0x31, 0x07, 0xbd, 0x29, - 0x13, 0xbb, 0x21, 0xb8, 0x2b, 0x05, 0x59, 0xa6, 0x8e, 0x22, 0xa8, 0xaa, 0x31, 0x93, 0x4a, 0x92, - 0x8a, 0x88, 0x32, 0x61, 0xb0, 0xab, 0x39, 0x97, 0x8f, 0x32, 0xa9, 0x10, 0x23, 0xcc, 0x38, 0xa2, - 0x12, 0x8e, 0x88, 0x34, 0xb0, 0x1e, 0x80, 0x02, 0x49, 0x93, 0xce, 0x68, 0x91, 0x08, 0xba, 0x28, - 0x13, 0x88, 0x1b, 0x17, 0xe9, 0x39, 0x91, 0x2b, 0x84, 0x20, 0xcc, 0x88, 0x08, 0x42, 0xb1, 0x0c, - 0x98, 0x10, 0x2a, 0x83, 0xca, 0x0c, 0x26, 0x80, 0xca, 0x38, 0x83, 0x9b, 0xad, 0xb3, 0x7b, 0x92, - 0x88, 0x73, 0xb0, 0x08, 0x99, 0xc0, 0x4a, 0x16, 0xb9, 0x09, 0x21, 0xb0, 0x43, 0xa1, 0x9e, 0x33, - 0x99, 0x22, 0xbf, 0x02, 0x22, 0xba, 0x01, 0x2b, 0xc2, 0x27, 0x8a, 0xda, 0x38, 0x25, 0x19, 0xba, - 0x22, 0xaa, 0x13, 0x9c, 0xd1, 0x73, 0x91, 0xbb, 0x81, 0x21, 0x61, 0xfa, 0x28, 0x80, 0x32, 0xca, - 0x39, 0xf1, 0x39, 0x81, 0x98, 0x8b, 0x14, 0x10, 0x90, 0xf8, 0x4a, 0xb2, 0x39, 0xd4, 0x2c, 0x04, - 0x98, 0x09, 0xc9, 0x30, 0x81, 0xb8, 0x38, 0x52, 0xd8, 0x19, 0xa0, 0x3a, 0x00, 0x37, 0xac, 0xa8, - 0x10, 0x12, 0xa9, 0x9b, 0x37, 0x00, 0xd8, 0x20, 0xc9, 0x00, 0x71, 0xa1, 0x8e, 0x30, 0x83, 0xad, - 0x32, 0xc0, 0x18, 0x12, 0xcb, 0x31, 0x81, 0x18, 0x80, 0xec, 0x51, 0x98, 0x1a, 0x11, 0x11, 0x8b, - 0x87, 0xad, 0x21, 0x12, 0x98, 0x80, 0x9e, 0x12, 0x0a, 0x82, 0x32, 0xaf, 0x30, 0x84, 0xbd, 0x38, - 0x83, 0x0b, 0x05, 0x9c, 0x21, 0x11, 0xa2, 0x2a, 0xfc, 0x50, 0x98, 0x90, 0x28, 0xa0, 0x19, 0xb0, - 0x18, 0xa0, 0x03, 0x3e, 0x96, 0x0a, 0xb0, 0x6b, 0x82, 0x92, 0x1c, 0x00, 0xc0, 0x2a, 0x87, 0x98, - 0x50, 0xd0, 0x88, 0x11, 0x10, 0xc8, 0x89, 0x8b, 0x16, 0x08, 0x13, 0xac, 0x82, 0x9d, 0x11, 0x00, - 0x4a, 0x05, 0xa0, 0xad, 0x71, 0x90, 0xa9, 0x29, 0x80, 0x03, 0x89, 0xb8, 0x4a, 0xc0, 0x74, 0xc8, - 0x1a, 0x88, 0x93, 0x0d, 0x23, 0x10, 0x89, 0x83, 0xdc, 0x4a, 0xd3, 0x38, 0xc0, 0x18, 0x12, 0xa8, - 0x2c, 0x24, 0xac, 0x13, 0x99, 0xea, 0x30, 0x23, 0xb1, 0x1c, 0xb8, 0x30, 0x98, 0x25, 0x81, 0xcf, - 0x28, 0x06, 0x9a, 0x21, 0x98, 0x09, 0xd8, 0x69, 0x83, 0x8a, 0x82, 0xab, 0x89, 0x31, 0x07, 0x0b, - 0x99, 0x33, 0xc8, 0x09, 0xfb, 0x50, 0x83, 0x88, 0xd9, 0x2a, 0x11, 0x88, 0x21, 0x9e, 0x41, 0xc1, - 0x01, 0x9e, 0x32, 0x92, 0x0c, 0x81, 0xf0, 0x30, 0x98, 0x80, 0xa0, 0x58, 0x82, 0xdb, 0x39, 0x02, - 0x0a, 0x24, 0xdb, 0x81, 0x18, 0x93, 0xba, 0x73, 0xa9, 0xa2, 0x2b, 0xda, 0x43, 0x8b, 0x21, 0xc1, - 0x0f, 0x11, 0x81, 0x1c, 0x81, 0x21, 0xd2, 0x8d, 0x22, 0xe8, 0x58, 0xa3, 0x99, 0xa8, 0x31, 0x88, - 0x98, 0x52, 0x11, 0xfc, 0x40, 0xa1, 0x28, 0xa0, 0x09, 0x99, 0x43, 0x88, 0x49, 0x94, 0x8a, 0x08, - 0x91, 0x14, 0x8b, 0xca, 0x23, 0xa3, 0x3e, 0xe1, 0x22, 0x38, 0xd1, 0xcb, 0x89, 0x42, 0x30, 0xa3, - 0xcc, 0x61, 0xbb, 0x28, 0x05, 0x8c, 0x43, 0x98, 0xa2, 0x8c, 0x98, 0x21, 0xcb, 0x21, 0x9c, 0xa8, - 0x72, 0xb3, 0xdb, 0x73, 0xb8, 0x88, 0x08, 0x92, 0x5b, 0xc3, 0x29, 0xb1, 0x49, 0xa8, 0x84, 0x8c, - 0x38, 0x03, 0x88, 0xfb, 0x10, 0x32, 0x9d, 0x21, 0xd1, 0x49, 0x81, 0xa8, 0xa9, 0x20, 0x73, 0xd3, - 0x89, 0x20, 0x98, 0x80, 0xab, 0x65, 0x90, 0x81, 0xa9, 0x2b, 0x15, 0x88, 0x22, 0xdd, 0x32, 0x19, - 0xa1, 0x9f, 0x12, 0x48, 0xb0, 0x20, 0xaa, 0x19, 0x11, 0xd8, 0x30, 0x1b, 0xa5, 0x0c, 0x10, 0xc9, - 0x43, 0x9d, 0x43, 0xb9, 0x60, 0xc8, 0x09, 0x80, 0x00, 0x08, 0xa4, 0x1a, 0x91, 0x1c, 0x94, 0x9e, - 0x32, 0xa9, 0x82, 0x9c, 0x42, 0x10, 0xfa, 0x20, 0xb0, 0x2a, 0x88, 0xd1, 0x69, 0x91, 0x08, 0x12, - 0xad, 0x42, 0xda, 0x28, 0x13, 0x91, 0x19, 0x88, 0x12, 0x9a, 0x44, 0xa0, 0x8c, 0x07, 0x8b, 0x91, - 0x39, 0xa1, 0x23, 0x0f, 0x94, 0x0b, 0x09, 0x82, 0x00, 0xb9, 0x8f, 0x86, 0x0b, 0xa3, 0x98, 0x0c, - 0x06, 0x08, 0x08, 0x04, 0x9c, 0x09, 0xe1, 0x68, 0x98, 0x01, 0x00, 0x0a, 0x08, 0x98, 0x32, 0xa9, - 0x71, 0x9a, 0xa4, 0x3d, 0xd9, 0x44, 0x09, 0xc8, 0x48, 0xb0, 0x18, 0x19, 0x04, 0x9a, 0x21, 0x8d, - 0xa0, 0x64, 0xb0, 0x19, 0xb2, 0x1b, 0xd8, 0x19, 0x03, 0x14, 0x0f, 0x13, 0x8b, 0xc1, 0x58, 0xb0, - 0xa8, 0x39, 0x84, 0x00, 0xbd, 0x04, 0x89, 0x18, 0x18, 0x94, 0xdb, 0x4b, 0x92, 0x31, 0x9a, 0xcc, - 0x43, 0xbc, 0x25, 0x88, 0x09, 0xa8, 0x11, 0x59, 0x83, 0x02, 0xaf, 0x98, 0x3a, 0x20, 0x07, 0x0b, - 0x91, 0x88, 0x20, 0x92, 0x2d, 0x12, 0xb2, 0xaf, 0x84, 0x0a, 0x51, 0x93, 0x29, 0x80, 0x81, 0xfd, - 0x21, 0x99, 0x42, 0xa9, 0x88, 0x00, 0x09, 0x17, 0xba, 0xa1, 0x70, 0xb9, 0x31, 0x90, 0xc0, 0x49, - 0xa3, 0x08, 0x2d, 0xb5, 0x0b, 0x98, 0x20, 0x80, 0x11, 0x73, 0xfa, 0x19, 0x30, 0xc0, 0x99, 0x38, - 0xb0, 0x31, 0xa3, 0x10, 0x8f, 0x03, 0xd1, 0x8f, 0x24, 0xb0, 0x00, 0x9b, 0x23, 0x99, 0x12, 0x04, - 0x9a, 0xaf, 0x33, 0xbc, 0x26, 0x9a, 0xa3, 0x38, 0xaa, 0x22, 0x0a, 0x06, 0x1c, 0x93, 0x0f, 0x02, - 0x99, 0x38, 0x82, 0x9a, 0x42, 0xd3, 0x2a, 0xa8, 0x94, 0x60, 0xa8, 0x91, 0x91, 0x0f, 0x02, 0x81, - 0x18, 0xba, 0xab, 0x26, 0x08, 0x09, 0xfa, 0x7b, 0xa2, 0x09, 0x88, 0x80, 0x01, 0x10, 0x19, 0xa3, - 0x9e, 0x09, 0x8f, 0x07, 0x38, 0xa8, 0xb8, 0x8d, 0x02, 0x18, 0x05, 0xab, 0x12, 0x18, 0x88, 0xa8, - 0x40, 0x00, 0xf3, 0x3b, 0x09, 0xd0, 0x73, 0xa1, 0x9b, 0x00, 0x29, 0x94, 0x38, 0x0a, 0x83, 0xcf, - 0x04, 0x0c, 0x91, 0x01, 0x98, 0x0b, 0x05, 0x30, 0x92, 0x8e, 0x98, 0x03, 0xbb, 0x48, 0x53, 0xb3, - 0xc8, 0xae, 0x39, 0x84, 0x20, 0x94, 0xbe, 0x28, 0x05, 0x88, 0x98, 0x12, 0xc9, 0x28, 0xd1, 0x38, - 0x92, 0x3b, 0x94, 0x8e, 0x20, 0x06, 0xab, 0x01, 0x81, 0x28, 0xf8, 0x30, 0x88, 0x98, 0x2c, 0x94, - 0x0a, 0x40, 0xa4, 0xaf, 0x21, 0x80, 0x22, 0xa1, 0x1b, 0xb2, 0xcb, 0x7b, 0xa3, 0x99, 0x51, 0xa2, - 0xa9, 0x2a, 0x04, 0x92, 0x9b, 0xd4, 0x1e, 0x93, 0x09, 0x11, 0xa8, 0x58, 0x80, 0x28, 0xaf, 0x95, - 0x0b, 0x91, 0x21, 0x8b, 0x84, 0x89, 0x1b, 0xb9, 0x42, 0xa8, 0x73, 0xf0, 0x00, 0x89, 0xa2, 0x5b, - 0xb3, 0x3a, 0xc2, 0x2b, 0x00, 0x83, 0x37, 0x0d, 0xb0, 0x48, 0x89, 0x12, 0x18, 0x29, 0x84, 0x8d, - 0xd8, 0x19, 0x02, 0x4b, 0x87, 0x8a, 0x01, 0xaa, 0x48, 0x83, 0x0b, 0xfa, 0x28, 0x20, 0x32, 0xf3, - 0x2d, 0x93, 0x0a, 0x82, 0x88, 0x8a, 0x21, 0x19, 0xc3, 0x08, 0x79, 0x97, 0x8b, 0x92, 0x0a, 0xa0, - 0x40, 0xb0, 0x9b, 0x67, 0xb8, 0x80, 0x89, 0x00, 0x21, 0xb2, 0x2e, 0x03, 0x0c, 0x11, 0xea, 0x41, - 0x00, 0xc8, 0x2b, 0x01, 0x90, 0x49, 0xd0, 0x28, 0xb2, 0x3a, 0xd0, 0x1c, 0x43, 0x01, 0xcc, 0x19, - 0x52, 0xc9, 0x10, 0x8a, 0x22, 0x91, 0x4b, 0xe8, 0x2b, 0x24, 0x92, 0xbe, 0x40, 0x92, 0x0a, 0x10, - 0x19, 0xb9, 0x63, 0x8a, 0x93, 0x9b, 0x68, 0x90, 0x80, 0x41, 0x10, 0x09, 0x0b, 0xf0, 0x0a, 0x70, - 0xb9, 0x32, 0x1c, 0x83, 0xb2, 0x2b, 0x0c, 0xa4, 0x89, 0xcb, 0x31, 0x73, 0xc1, 0x4a, 0x00, 0x09, - 0x12, 0x03, 0xdb, 0x8f, 0x13, 0x30, 0xa2, 0x3b, 0xc6, 0x0c, 0x01, 0x10, 0x98, 0x8c, 0x15, 0x8a, - 0xaa, 0x00, 0x23, 0x8f, 0x12, 0xc0, 0x1a, 0x02, 0x92, 0x9b, 0x13, 0xd1, 0x1a, 0xaa, 0x97, 0x4c, - 0x04, 0x89, 0xcb, 0x32, 0xa9, 0x89, 0x35, 0xe9, 0x18, 0x11, 0x9b, 0x94, 0x1e, 0x81, 0x1a, 0x13, - 0xac, 0x88, 0xa0, 0x72, 0x99, 0x02, 0x13, 0x99, 0xce, 0x18, 0x33, 0xc8, 0x09, 0x04, 0x8d, 0x33, - 0x83, 0x0d, 0x98, 0x00, 0xcc, 0x43, 0xc8, 0x39, 0x92, 0x81, 0x01, 0xbb, 0x7b, 0xa7, 0x0b, 0x18, - 0x84, 0x8b, 0x12, 0xb0, 0x08, 0x09, 0x33, 0x8c, 0xc0, 0x61, 0x90, 0xc3, 0x3b, 0x88, 0xb4, 0x70, - 0xa1, 0x09, 0xa9, 0xa8, 0x1a, 0x94, 0x79, 0xb6, 0x09, 0x9a, 0x13, 0x39, 0x84, 0xcd, 0x28, 0xd0, - 0x29, 0x23, 0xf9, 0x18, 0x21, 0xd8, 0x19, 0x02, 0xaa, 0x10, 0x01, 0x1c, 0x95, 0x1b, 0xa3, 0x9e, - 0x30, 0x96, 0x0b, 0x01, 0xa2, 0x8a, 0xaa, 0x83, 0x3c, 0x23, 0xb1, 0x9c, 0x10, 0x73, 0xf3, 0x0e, - 0x02, 0x09, 0x82, 0x11, 0x8c, 0x92, 0x28, 0xc9, 0x43, 0x8a, 0xb0, 0x29, 0x1f, 0x06, 0x8b, 0x88, - 0xa2, 0x2b, 0x17, 0xca, 0x21, 0xa9, 0x32, 0xc0, 0x9b, 0x48, 0xa2, 0x8d, 0x43, 0xb0, 0x0c, 0x23, - 0x89, 0x8c, 0x42, 0x82, 0x9d, 0x80, 0x43, 0x09, 0x9a, 0x94, 0x9f, 0x11, 0x33, 0xb8, 0x09, 0xb9, - 0x9a, 0x54, 0xb1, 0x3a, 0xb3, 0x28, 0xfb, 0x08, 0x14, 0xcc, 0x88, 0x51, 0xa8, 0x98, 0x59, 0xa2, - 0xa9, 0x40, 0xa1, 0x0d, 0x93, 0x3c, 0xe0, 0x50, 0x90, 0xab, 0x22, 0xc0, 0x31, 0xd0, 0x29, 0x91, - 0x18, 0x88, 0x39, 0xb1, 0x61, 0xea, 0x29, 0x99, 0xa2, 0x1e, 0x16, 0xa9, 0x80, 0x99, 0x19, 0x04, - 0x1c, 0x82, 0x81, 0x28, 0xeb, 0x29, 0x80, 0x88, 0x64, 0x8a, 0xb1, 0x00, 0x38, 0xaa, 0x6a, 0x93, - 0x90, 0x1b, 0xdf, 0x30, 0x98, 0x02, 0xc2, 0x78, 0xc9, 0x18, 0x08, 0xa0, 0x29, 0x81, 0x10, 0x0b, - 0xb5, 0x11, 0xbc, 0x09, 0x43, 0xd9, 0x31, 0xcc, 0x21, 0x31, 0xc1, 0xbb, 0x13, 0x31, 0x90, 0xc4, - 0x1c, 0xe1, 0x39, 0x03, 0xaa, 0x21, 0x9d, 0x03, 0x9f, 0x05, 0xaa, 0x49, 0xd1, 0x28, 0x29, 0x92, - 0x1b, 0xc1, 0x19, 0xb0, 0x70, 0xc8, 0x88, 0x39, 0xd3, 0x28, 0x9b, 0x07, 0xaa, 0x3a, 0xa4, 0x80, - 0x1b, 0xa3, 0x0d, 0x98, 0x24, 0xd0, 0x0a, 0x28, 0xa1, 0x8d, 0x08, 0x03, 0xaf, 0x62, 0xa0, 0x8b, - 0x22, 0xb8, 0x39, 0xb1, 0x02, 0x8c, 0x85, 0x90, 0x19, 0xc9, 0x92, 0x4a, 0xcb, 0x21, 0x30, 0x91, - 0xad, 0x21, 0x61, 0xba, 0x29, 0xa1, 0x44, 0xba, 0x9b, 0xa9, 0x0b, 0x43, 0x93, 0xad, 0x81, 0x30, - 0xf0, 0x29, 0x10, 0x91, 0x9c, 0xb1, 0x5a, 0xa1, 0x29, 0xb0, 0x9b, 0x0b, 0x05, 0x9b, 0x18, 0x93, - 0xcb, 0x1c, 0xa3, 0x39, 0xb1, 0x20, 0xba, 0xbb, 0x30, 0xa1, 0x99, 0x11, 0xb9, 0x9a, 0x21, 0xa0, - 0x99, 0x1a, 0xb1, 0x00, 0x0b, 0x03, 0x0a, 0x99, 0x99, 0x0b, 0x91, 0x10, 0x01, 0xa9, 0x19, 0x99, - 0x99, 0x09, 0x90, 0x0a, 0x90, 0x99, 0x09, 0x79, 0x02, 0x01, 0x0f, 0x7d, 0x0b, 0x02, 0xcd, 0x06, - 0x47, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xdf, 0x08, 0x88, 0x08, - 0x08, 0x88, 0x80, 0x00, 0x08, 0x08, 0x80, 0x00, 0x00, 0x00, 0x08, 0x01, 0x01, 0x01, 0x10, 0x22, - 0x11, 0x29, 0x77, 0x24, 0x98, 0xaa, 0xac, 0x40, 0x37, 0x03, 0x00, 0x90, 0xdc, 0x9b, 0x10, 0x08, - 0x51, 0x44, 0x12, 0x90, 0xba, 0x9a, 0xfa, 0xad, 0x9a, 0x9a, 0x20, 0x47, 0x43, 0x11, 0x80, 0xb8, - 0xac, 0xaa, 0xb9, 0xbf, 0x9b, 0x51, 0x34, 0x33, 0x36, 0x33, 0x22, 0x12, 0xb0, 0xbe, 0xab, 0x09, - 0x20, 0x02, 0xfb, 0xab, 0xa9, 0xbb, 0x51, 0x24, 0x01, 0x63, 0x33, 0xb8, 0xbe, 0xcd, 0x9b, 0x18, - 0x52, 0x33, 0x81, 0xcb, 0x89, 0x21, 0x11, 0x31, 0x24, 0x31, 0x53, 0x13, 0xca, 0xcb, 0xeb, 0xbb, - 0xac, 0x18, 0x32, 0x44, 0x34, 0x24, 0xa0, 0xce, 0x9b, 0x30, 0x44, 0x12, 0xa8, 0xcc, 0xba, 0x89, - 0x80, 0x98, 0x99, 0x88, 0x73, 0x37, 0x22, 0x80, 0x98, 0x08, 0x33, 0x13, 0x01, 0xeb, 0xab, 0x89, - 0xaa, 0x48, 0x47, 0x23, 0x81, 0xb9, 0xcd, 0xac, 0x99, 0x00, 0x22, 0x82, 0xba, 0x9c, 0x10, 0x44, - 0x44, 0x12, 0xa8, 0xaa, 0x0a, 0x00, 0xfa, 0xcd, 0x9a, 0x38, 0x37, 0x24, 0x80, 0xb9, 0xbb, 0xbb, - 0x8a, 0x08, 0x01, 0x88, 0x42, 0x81, 0x9a, 0x00, 0xea, 0x8a, 0x75, 0x44, 0x12, 0x00, 0x11, 0x21, - 0xa0, 0xde, 0xbc, 0xbb, 0x99, 0x08, 0x00, 0x32, 0x65, 0x34, 0x35, 0x22, 0x81, 0xa9, 0xab, 0x99, - 0xba, 0xbd, 0xac, 0x9b, 0x89, 0x00, 0x64, 0x34, 0x23, 0x32, 0x22, 0x81, 0xdb, 0xbc, 0xab, 0xbb, - 0xbd, 0xbd, 0xaa, 0x88, 0x11, 0x22, 0x23, 0x01, 0x10, 0x65, 0x44, 0x22, 0x81, 0xca, 0xbc, 0xab, - 0x9a, 0xdb, 0xbc, 0xac, 0x18, 0x22, 0x12, 0x00, 0x00, 0x20, 0x67, 0x43, 0x12, 0x98, 0x99, 0x98, - 0xa8, 0xfb, 0xbc, 0xaa, 0x89, 0x00, 0x11, 0x41, 0x46, 0x43, 0x34, 0x23, 0x02, 0x99, 0xab, 0xbb, - 0xeb, 0xcc, 0xab, 0x18, 0x64, 0x33, 0x12, 0x80, 0x89, 0x08, 0x31, 0x12, 0x90, 0xca, 0x9a, 0x00, - 0xd9, 0xef, 0xcc, 0xba, 0x09, 0x10, 0x33, 0x23, 0x43, 0x44, 0x44, 0x22, 0x80, 0xba, 0xbe, 0xbc, - 0xba, 0xaa, 0x9a, 0x08, 0x31, 0x34, 0x23, 0x23, 0x02, 0x88, 0x41, 0x45, 0x13, 0x80, 0x08, 0x11, - 0x82, 0xba, 0xac, 0x89, 0x98, 0xfd, 0xcc, 0xbb, 0x08, 0x63, 0x54, 0x34, 0x33, 0x12, 0x01, 0x98, - 0xba, 0xbf, 0xbc, 0xab, 0x9a, 0x89, 0x00, 0x43, 0x45, 0x43, 0x32, 0x22, 0x02, 0x98, 0xcc, 0xcc, - 0xbb, 0xcc, 0xbb, 0xbb, 0x99, 0x80, 0x08, 0x42, 0x54, 0x44, 0x33, 0x32, 0x01, 0xa8, 0xcc, 0xac, - 0xaa, 0x99, 0xaa, 0x9a, 0x99, 0x99, 0xdb, 0x8a, 0x54, 0x34, 0x33, 0x43, 0x32, 0x33, 0x22, 0x98, - 0x99, 0x88, 0xd9, 0xcd, 0xcc, 0xca, 0xaa, 0x8a, 0x31, 0x55, 0x43, 0x33, 0x22, 0x22, 0x00, 0x98, - 0xcb, 0xcb, 0xcb, 0xaa, 0x09, 0x21, 0x11, 0x10, 0x51, 0x45, 0x35, 0x24, 0x01, 0x90, 0xb9, 0xbb, - 0xcd, 0xbc, 0xbe, 0xcb, 0xab, 0x9a, 0x10, 0x33, 0x35, 0x35, 0x43, 0x23, 0x11, 0x80, 0xb9, 0xbd, - 0xbc, 0xab, 0xcb, 0xcb, 0xbb, 0xaa, 0x8a, 0x31, 0x46, 0x24, 0x22, 0x12, 0x00, 0x21, 0x33, 0x24, - 0x12, 0x90, 0x99, 0x08, 0x88, 0xea, 0xde, 0xac, 0x9a, 0x30, 0x55, 0x43, 0x22, 0x80, 0x88, 0x98, - 0xaa, 0xbc, 0xbd, 0xaa, 0x09, 0x21, 0x12, 0x01, 0x41, 0x65, 0x44, 0x33, 0x33, 0x03, 0xa9, 0xce, - 0xcc, 0xcb, 0xba, 0xaa, 0xaa, 0x99, 0x09, 0x40, 0x45, 0x34, 0x24, 0x12, 0x10, 0x80, 0x90, 0xb9, - 0xbb, 0xab, 0xba, 0xdc, 0xcb, 0xbb, 0xbc, 0xab, 0x89, 0x41, 0x44, 0x43, 0x32, 0x33, 0x36, 0x34, - 0x12, 0x98, 0xcb, 0xcb, 0xaa, 0x98, 0xa9, 0xbb, 0xba, 0x38, 0x77, 0x34, 0x23, 0x11, 0x88, 0x98, - 0x98, 0xcb, 0xdc, 0xcb, 0xaa, 0x9a, 0x08, 0x20, 0x32, 0x55, 0x53, 0x43, 0x23, 0x02, 0x98, 0xba, - 0xcc, 0xdc, 0xbc, 0xac, 0xab, 0x8a, 0x00, 0x20, 0x43, 0x43, 0x34, 0x43, 0x32, 0x12, 0x00, 0xa8, - 0xa9, 0xaa, 0x99, 0xda, 0xdd, 0xbc, 0xbc, 0xab, 0x99, 0x09, 0x10, 0x53, 0x54, 0x43, 0x23, 0x23, - 0x12, 0x01, 0xa8, 0xcb, 0xbc, 0xab, 0xbb, 0xcb, 0x0a, 0x52, 0x54, 0x33, 0x33, 0x11, 0x80, 0xa9, - 0xa9, 0xba, 0xcb, 0xaa, 0x9b, 0x99, 0xca, 0xaa, 0x09, 0x72, 0x55, 0x54, 0x33, 0x23, 0x81, 0xb9, - 0xdb, 0xcc, 0xcc, 0xcc, 0xba, 0x9a, 0x89, 0x08, 0x42, 0x34, 0x35, 0x32, 0x22, 0x11, 0x01, 0x98, - 0x98, 0xaa, 0xda, 0xcc, 0xbb, 0xbc, 0xac, 0xbb, 0xbc, 0xbb, 0x89, 0x72, 0x53, 0x33, 0x43, 0x23, - 0x23, 0x02, 0x98, 0xcb, 0xab, 0x9a, 0x89, 0xba, 0xbc, 0x0a, 0x53, 0x56, 0x43, 0x13, 0x02, 0x88, - 0x8a, 0x08, 0x21, 0x80, 0xfb, 0xcc, 0xab, 0x9b, 0x08, 0x31, 0x44, 0x34, 0x44, 0x32, 0x23, 0x12, - 0xa8, 0xec, 0xcd, 0xcc, 0xbb, 0xbb, 0xbb, 0x9a, 0x18, 0x55, 0x44, 0x32, 0x22, 0x11, 0x00, 0x88, - 0x99, 0xaa, 0xaa, 0xa9, 0xaa, 0xdd, 0xcd, 0xcb, 0xbb, 0xbb, 0x99, 0x20, 0x44, 0x34, 0x44, 0x33, - 0x24, 0x33, 0x23, 0x81, 0xa9, 0xbd, 0xcb, 0xbb, 0xba, 0xbb, 0x09, 0x41, 0x54, 0x23, 0x13, 0x01, - 0x00, 0x11, 0x33, 0x22, 0xb8, 0xcf, 0xbc, 0xab, 0x9a, 0x89, 0x89, 0x00, 0x21, 0x43, 0x33, 0x03, - 0xb9, 0xde, 0xdd, 0xcd, 0xcb, 0xcb, 0xaa, 0x9a, 0x09, 0x41, 0x44, 0x24, 0x23, 0x22, 0x01, 0x01, - 0x11, 0x01, 0x01, 0x88, 0xba, 0xce, 0xce, 0xbc, 0xbc, 0xbb, 0x9a, 0x10, 0x63, 0x43, 0x33, 0x34, - 0x34, 0x33, 0x23, 0x12, 0x90, 0xbc, 0xbd, 0xbb, 0xbb, 0xab, 0x8a, 0x31, 0x46, 0x32, 0x22, 0x12, - 0x22, 0x23, 0x13, 0x80, 0x9a, 0xbb, 0xbd, 0xcd, 0xdb, 0xbb, 0xbc, 0xaa, 0xa9, 0x18, 0x32, 0x24, - 0x11, 0x23, 0x13, 0xfa, 0xff, 0xbc, 0xbc, 0xbb, 0xbb, 0x88, 0x43, 0x45, 0x43, 0x23, 0x33, 0x22, - 0x12, 0x01, 0x01, 0x98, 0xca, 0xec, 0xcc, 0xbc, 0xcb, 0xaa, 0x89, 0x18, 0x21, 0x42, 0x53, 0x53, - 0x33, 0x34, 0x43, 0x22, 0x01, 0xa8, 0xca, 0xac, 0xac, 0xba, 0xaa, 0x9a, 0x09, 0x21, 0x43, 0x33, - 0x34, 0x34, 0x22, 0x11, 0x08, 0xa8, 0xcc, 0xcc, 0xcb, 0xbc, 0xbc, 0xaa, 0x08, 0x11, 0x12, 0x90, - 0x99, 0x30, 0x36, 0x24, 0xb8, 0xef, 0xcb, 0xbc, 0xab, 0xaa, 0x08, 0x51, 0x44, 0x34, 0x33, 0x32, - 0x12, 0x11, 0x22, 0x12, 0xa8, 0xfb, 0xdc, 0xbb, 0xac, 0xbb, 0x99, 0x10, 0x21, 0x32, 0x53, 0x63, - 0x43, 0x34, 0x34, 0x24, 0x22, 0x02, 0x98, 0xbc, 0xbd, 0xba, 0xab, 0xa9, 0x99, 0x08, 0x18, 0x32, - 0x36, 0x34, 0x23, 0x22, 0x02, 0xa8, 0xcd, 0xcc, 0xbb, 0xbd, 0xac, 0x9a, 0x19, 0x10, 0x81, 0x98, - 0x9a, 0x28, 0x66, 0x43, 0x12, 0xc9, 0xcd, 0xcc, 0xba, 0xbb, 0xa9, 0x08, 0x32, 0x37, 0x34, 0x34, - 0x12, 0x12, 0x21, 0x21, 0x81, 0xc9, 0xcd, 0xcc, 0xab, 0xbb, 0x99, 0x18, 0x10, 0x22, 0x32, 0x45, - 0x34, 0x35, 0x43, 0x34, 0x23, 0x23, 0x81, 0xb9, 0xcc, 0xac, 0xbb, 0xaa, 0xab, 0x9a, 0x99, 0x10, - 0x52, 0x44, 0x34, 0x23, 0x23, 0x81, 0xc9, 0xcc, 0xdb, 0xcb, 0xab, 0xab, 0x09, 0x18, 0x00, 0x88, - 0x99, 0x28, 0x55, 0x45, 0x43, 0x01, 0xba, 0xce, 0xcc, 0xbb, 0xaa, 0x8a, 0x20, 0x44, 0x34, 0x34, - 0x23, 0x22, 0x21, 0x01, 0x01, 0xa8, 0xeb, 0xbd, 0xbc, 0xbb, 0xab, 0x89, 0x11, 0x23, 0x12, 0x00, - 0x41, 0x56, 0x45, 0x34, 0x24, 0x23, 0x12, 0x98, 0xca, 0xcb, 0xbb, 0xba, 0xba, 0xbb, 0xbc, 0xab, - 0x08, 0x44, 0x44, 0x23, 0x33, 0x14, 0x02, 0xb9, 0xdc, 0xbc, 0xac, 0xab, 0x99, 0x88, 0x98, 0xa9, - 0xaa, 0x9b, 0x20, 0x56, 0x44, 0x22, 0x90, 0xeb, 0xbd, 0xbc, 0xab, 0x9a, 0x18, 0x42, 0x44, 0x43, - 0x23, 0x23, 0x12, 0x12, 0x12, 0x11, 0xb9, 0xcf, 0xbc, 0xcb, 0x9a, 0x89, 0x10, 0x21, 0x10, 0x08, - 0x20, 0x65, 0x54, 0x34, 0x44, 0x22, 0x22, 0x00, 0xa8, 0xca, 0xcb, 0xba, 0xba, 0xba, 0xbb, 0x9a, - 0x08, 0x43, 0x45, 0x33, 0x43, 0x22, 0x02, 0x90, 0xcc, 0xcc, 0xbb, 0xac, 0x99, 0x99, 0x99, 0xcb, - 0xbc, 0xcb, 0x8a, 0x42, 0x36, 0x34, 0x13, 0xa0, 0xdc, 0xbc, 0xcb, 0x9a, 0x89, 0x00, 0x21, 0x42, - 0x42, 0x33, 0x43, 0x33, 0x34, 0x33, 0x12, 0xda, 0xbd, 0xbd, 0xaa, 0x9a, 0x88, 0x01, 0x01, 0x88, - 0x00, 0x63, 0x64, 0x44, 0x43, 0x24, 0x32, 0x11, 0x00, 0xa9, 0xca, 0xbb, 0xac, 0xbb, 0xca, 0xca, - 0xaa, 0x88, 0x21, 0x35, 0x35, 0x32, 0x22, 0x01, 0xb8, 0xcc, 0xcc, 0xbb, 0xab, 0xa9, 0xca, 0xcb, - 0xac, 0xbb, 0x9b, 0x40, 0x45, 0x34, 0x33, 0x81, 0xc9, 0xbd, 0xad, 0xab, 0x99, 0x89, 0x88, 0x10, - 0x31, 0x35, 0x43, 0x33, 0x44, 0x34, 0x43, 0x01, 0x98, 0xcb, 0xac, 0x9b, 0x99, 0x89, 0xa9, 0xbb, - 0xbb, 0x0a, 0x75, 0x55, 0x53, 0x43, 0x33, 0x32, 0x11, 0x81, 0xa8, 0xdb, 0xdb, 0xba, 0xab, 0xab, - 0xaa, 0x9a, 0x18, 0x41, 0x44, 0x24, 0x22, 0x81, 0x98, 0xba, 0xcc, 0xbd, 0xbb, 0x9b, 0x9a, 0xcb, - 0xcd, 0xcb, 0xab, 0x0a, 0x31, 0x35, 0x34, 0x22, 0x81, 0xca, 0xcc, 0xbb, 0xac, 0x99, 0xaa, 0xba, - 0xab, 0x20, 0x46, 0x44, 0x34, 0x43, 0x43, 0x12, 0x01, 0xb9, 0xcc, 0xab, 0xaa, 0x99, 0xa8, 0xa9, - 0x9a, 0x28, 0x55, 0x45, 0x44, 0x34, 0x43, 0x33, 0x22, 0x01, 0x90, 0xba, 0xbe, 0xbc, 0xab, 0xab, - 0xaa, 0xaa, 0x99, 0x20, 0x45, 0x44, 0x33, 0x22, 0x02, 0x80, 0xb9, 0xdc, 0xbc, 0xbc, 0xbb, 0xcb, - 0xcb, 0xcb, 0xbb, 0x9a, 0x20, 0x45, 0x34, 0x23, 0x12, 0x90, 0xca, 0xbc, 0xac, 0xbb, 0xcb, 0xcb, - 0xbb, 0x89, 0x31, 0x55, 0x33, 0x35, 0x43, 0x33, 0x22, 0x80, 0xca, 0xcb, 0xba, 0xaa, 0xaa, 0xaa, - 0x9b, 0x08, 0x52, 0x54, 0x45, 0x44, 0x34, 0x33, 0x33, 0x12, 0x81, 0xa9, 0xeb, 0xbc, 0xbb, 0xac, - 0xa9, 0xab, 0xbb, 0x89, 0x31, 0x47, 0x43, 0x33, 0x11, 0x80, 0x98, 0xca, 0xbc, 0xcc, 0xbb, 0xcb, - 0xba, 0xdb, 0xcb, 0xab, 0x0a, 0x30, 0x45, 0x33, 0x24, 0x12, 0x80, 0xba, 0xbc, 0xbc, 0xac, 0xcb, - 0xbc, 0xab, 0x8a, 0x31, 0x55, 0x43, 0x34, 0x24, 0x23, 0x01, 0x90, 0xaa, 0xac, 0xaa, 0xba, 0xaa, - 0xab, 0x99, 0x21, 0x64, 0x44, 0x45, 0x43, 0x34, 0x23, 0x23, 0x11, 0x80, 0xa8, 0xbc, 0xcc, 0xba, - 0xba, 0xbc, 0xcc, 0xba, 0x89, 0x31, 0x44, 0x43, 0x22, 0x11, 0x12, 0x01, 0xb9, 0xdd, 0xcc, 0xbb, - 0xba, 0xbc, 0xcb, 0xcb, 0xaa, 0x08, 0x32, 0x35, 0x34, 0x33, 0x12, 0x81, 0xba, 0xbd, 0xbd, 0xcb, - 0xbc, 0xad, 0x9b, 0x89, 0x32, 0x54, 0x34, 0x34, 0x32, 0x22, 0x01, 0xa8, 0xca, 0xba, 0xab, 0x9a, - 0x9a, 0x88, 0x08, 0x41, 0x64, 0x44, 0x35, 0x34, 0x24, 0x23, 0x23, 0x11, 0x01, 0xa9, 0xbc, 0xbd, - 0xcb, 0xbb, 0xdb, 0xbb, 0xab, 0x09, 0x42, 0x44, 0x23, 0x33, 0x23, 0x12, 0x90, 0xea, 0xcc, 0xcc, - 0xbb, 0xbc, 0xcb, 0xbb, 0xaa, 0x88, 0x21, 0x43, 0x34, 0x43, 0x33, 0x13, 0x81, 0xcb, 0xbd, 0xcc, - 0xdb, 0xcb, 0xab, 0xaa, 0x20, 0x53, 0x35, 0x43, 0x33, 0x32, 0x23, 0x01, 0xa9, 0xbc, 0xbb, 0xbb, - 0xaa, 0x9a, 0x18, 0x52, 0x44, 0x53, 0x34, 0x35, 0x43, 0x43, 0x32, 0x33, 0x12, 0x01, 0xa8, 0xcc, - 0xbc, 0xcc, 0xba, 0xac, 0xaa, 0x8a, 0x10, 0x33, 0x43, 0x32, 0x43, 0x33, 0x43, 0x12, 0xca, 0xde, - 0xcc, 0xac, 0xbb, 0xba, 0xaa, 0xaa, 0x88, 0x10, 0x44, 0x43, 0x33, 0x32, 0x12, 0x01, 0xb9, 0xce, - 0xcd, 0xcc, 0xbb, 0xab, 0x89, 0x42, 0x35, 0x43, 0x32, 0x33, 0x33, 0x14, 0x01, 0x99, 0xab, 0xcb, - 0xaa, 0xaa, 0x99, 0x21, 0x64, 0x53, 0x43, 0x32, 0x43, 0x33, 0x33, 0x35, 0x34, 0x33, 0x12, 0xa8, - 0xdd, 0xcb, 0xbb, 0xaa, 0x9b, 0xaa, 0x89, 0x08, 0x21, 0x32, 0x53, 0x42, 0x32, 0x25, 0x81, 0xeb, - 0xdd, 0xbc, 0xbc, 0xba, 0xa9, 0x9a, 0xa9, 0x99, 0x18, 0x32, 0x35, 0x34, 0x34, 0x23, 0x91, 0xeb, - 0xdd, 0xdb, 0xbb, 0x9c, 0x8a, 0x21, 0x34, 0x34, 0x33, 0x34, 0x33, 0x23, 0x01, 0x90, 0xaa, 0xbb, - 0xcb, 0xbb, 0xaa, 0x31, 0x47, 0x34, 0x33, 0x02, 0x00, 0x30, 0x55, 0x35, 0x25, 0x43, 0x33, 0x13, - 0x81, 0xca, 0xbd, 0xcb, 0xaa, 0xaa, 0xab, 0xab, 0xaa, 0x8a, 0x10, 0x43, 0x44, 0x42, 0x22, 0x12, - 0xa8, 0xde, 0xcc, 0xbb, 0xbb, 0xaa, 0xa9, 0xaa, 0xcb, 0x9a, 0x09, 0x52, 0x45, 0x23, 0x02, 0xd9, - 0xcc, 0xcc, 0xba, 0xaa, 0x8a, 0x20, 0x53, 0x34, 0x53, 0x32, 0x33, 0x12, 0x11, 0x20, 0x01, 0xb8, - 0xcd, 0xcc, 0x9a, 0x18, 0x52, 0x34, 0x24, 0x01, 0x89, 0x99, 0x08, 0x53, 0x44, 0x34, 0x53, 0x33, - 0x13, 0x80, 0xcb, 0xbc, 0xbb, 0xbb, 0xcb, 0xbb, 0xad, 0xbb, 0x99, 0x18, 0x32, 0x53, 0x32, 0x13, - 0x82, 0xc9, 0xcd, 0xcc, 0xba, 0xab, 0x9a, 0xbb, 0xdc, 0xcb, 0xaa, 0x19, 0x54, 0x53, 0x12, 0xa8, - 0xdc, 0xbb, 0xbc, 0xaa, 0x99, 0x18, 0x42, 0x34, 0x35, 0x33, 0x24, 0x32, 0x22, 0x33, 0x43, 0x01, - 0xc9, 0xcd, 0xac, 0x9a, 0x20, 0x34, 0x34, 0x22, 0x90, 0xaa, 0x9a, 0x30, 0x55, 0x44, 0x53, 0x33, - 0x24, 0x02, 0x98, 0xca, 0xab, 0xbb, 0xaa, 0xcc, 0xdb, 0xbb, 0xbb, 0x88, 0x22, 0x43, 0x22, 0x11, - 0x88, 0x89, 0xa9, 0xeb, 0xbc, 0xac, 0x9a, 0x99, 0xdb, 0xce, 0xcb, 0xaa, 0x10, 0x44, 0x33, 0x81, - 0xdc, 0xcc, 0xbb, 0xaa, 0x9a, 0x00, 0x31, 0x53, 0x34, 0x33, 0x43, 0x43, 0x32, 0x43, 0x32, 0x22, - 0x98, 0xcd, 0xbd, 0xaa, 0x08, 0x33, 0x36, 0x22, 0x81, 0xba, 0xbb, 0x09, 0x64, 0x53, 0x33, 0x35, - 0x43, 0x32, 0x11, 0xa8, 0xba, 0xbc, 0xba, 0xbc, 0xbe, 0xbd, 0xab, 0x99, 0x11, 0x33, 0x33, 0x01, - 0x98, 0xbb, 0x99, 0x00, 0x11, 0x98, 0x99, 0xba, 0xff, 0xcd, 0xcc, 0xab, 0x89, 0x31, 0x35, 0x12, - 0xb9, 0xcf, 0xcb, 0xaa, 0x99, 0x89, 0x10, 0x21, 0x34, 0x43, 0x24, 0x34, 0x34, 0x33, 0x24, 0x22, - 0x81, 0xca, 0xcd, 0x9b, 0x89, 0x21, 0x34, 0x24, 0x01, 0xb9, 0xcb, 0x8a, 0x41, 0x35, 0x44, 0x33, - 0x33, 0x25, 0x23, 0x12, 0x88, 0xba, 0xcc, 0xcb, 0xcc, 0xbc, 0xbc, 0x9a, 0x08, 0x32, 0x24, 0x01, - 0xa9, 0xcc, 0xaa, 0x88, 0x21, 0x32, 0x02, 0x90, 0xdb, 0xdc, 0xcb, 0xcb, 0x9a, 0x09, 0x43, 0x24, - 0x81, 0xec, 0xcc, 0xba, 0xaa, 0x99, 0x98, 0x08, 0x20, 0x34, 0x35, 0x45, 0x43, 0x32, 0x33, 0x22, - 0x11, 0xa8, 0xda, 0xac, 0x8a, 0x10, 0x43, 0x24, 0x12, 0x98, 0xbb, 0xac, 0x18, 0x45, 0x44, 0x33, - 0x24, 0x33, 0x53, 0x43, 0x22, 0x01, 0xa9, 0xcc, 0xcc, 0xdb, 0xab, 0xab, 0x88, 0x10, 0x33, 0x23, - 0xa8, 0xcd, 0xbc, 0x9a, 0x28, 0x42, 0x33, 0x02, 0xa8, 0xbd, 0xbd, 0xbb, 0xbb, 0x99, 0x20, 0x63, - 0x23, 0xc0, 0xde, 0xbc, 0xab, 0xab, 0xaa, 0xac, 0x9b, 0x18, 0x63, 0x44, 0x44, 0x42, 0x32, 0x12, - 0x01, 0x80, 0xa8, 0xaa, 0xab, 0x08, 0x30, 0x33, 0x01, 0xa9, 0xcc, 0xac, 0x19, 0x55, 0x45, 0x32, - 0x22, 0x12, 0x43, 0x44, 0x44, 0x12, 0x80, 0xb9, 0xbd, 0xbc, 0xbc, 0xba, 0x9a, 0x88, 0x31, 0x33, - 0x82, 0xfa, 0xcc, 0xaa, 0x89, 0x21, 0x43, 0x12, 0x80, 0xba, 0xcb, 0xab, 0x9a, 0xba, 0xab, 0x88, - 0x32, 0x83, 0xff, 0xcc, 0xbd, 0xbb, 0xbb, 0xbc, 0xad, 0x9b, 0x28, 0x64, 0x53, 0x33, 0x24, 0x23, - 0x11, 0x00, 0x98, 0x99, 0x99, 0x08, 0x00, 0x01, 0x90, 0xba, 0xcb, 0x9a, 0x30, 0x66, 0x44, 0x43, - 0x12, 0x11, 0x21, 0x54, 0x34, 0x25, 0x11, 0xa8, 0xbb, 0xcd, 0xbb, 0xbb, 0xab, 0x9a, 0x08, 0x21, - 0x12, 0xc9, 0xce, 0xac, 0x9b, 0x10, 0x23, 0x13, 0x80, 0xba, 0xbb, 0x9a, 0x89, 0xb9, 0xdd, 0xcb, - 0xab, 0x99, 0xa9, 0xec, 0xcd, 0xcc, 0xca, 0xca, 0xbb, 0xbd, 0x9b, 0x30, 0x46, 0x34, 0x33, 0x33, - 0x13, 0x02, 0x80, 0x88, 0x88, 0x80, 0x00, 0x80, 0xa8, 0xdb, 0xbb, 0x89, 0x31, 0x56, 0x44, 0x33, - 0x24, 0x11, 0x10, 0x42, 0x46, 0x34, 0x23, 0x81, 0xca, 0xbc, 0xbb, 0xab, 0xba, 0xba, 0xbb, 0x99, - 0x08, 0xb8, 0xde, 0xcc, 0xab, 0x89, 0x10, 0x11, 0x08, 0x99, 0x9a, 0x08, 0x21, 0x33, 0xb8, 0xff, - 0xbc, 0xba, 0xaa, 0x99, 0xba, 0xce, 0xcd, 0xcb, 0xbb, 0xbe, 0xac, 0x8a, 0x31, 0x46, 0x24, 0x23, - 0x22, 0x12, 0x11, 0x00, 0x80, 0x88, 0x08, 0x88, 0x98, 0xc9, 0xba, 0x89, 0x52, 0x45, 0x33, 0x24, - 0x23, 0x21, 0x20, 0x41, 0x64, 0x44, 0x33, 0x13, 0x90, 0xdb, 0xbb, 0xbb, 0xba, 0xca, 0xbb, 0xcb, - 0xa9, 0xa9, 0xca, 0xcd, 0xcb, 0xaa, 0x88, 0x80, 0x88, 0xaa, 0x8b, 0x32, 0x35, 0x34, 0x02, 0xfa, - 0xdc, 0xab, 0x9b, 0x8a, 0x90, 0xb9, 0xce, 0xbd, 0xbc, 0xcb, 0xbb, 0xbc, 0x8a, 0x72, 0x44, 0x33, - 0x33, 0x22, 0x11, 0x12, 0x01, 0x81, 0x88, 0x89, 0x89, 0x99, 0xaa, 0x8a, 0x61, 0x45, 0x34, 0x32, - 0x21, 0x33, 0x34, 0x33, 0x34, 0x36, 0x35, 0x24, 0x02, 0xb8, 0xcc, 0xbb, 0x9a, 0x9a, 0xab, 0xbc, - 0xad, 0xaa, 0xaa, 0xcb, 0xdb, 0xcb, 0xba, 0xab, 0xca, 0xba, 0x8b, 0x62, 0x34, 0x24, 0x12, 0x98, - 0xcc, 0xdb, 0xba, 0xaa, 0x9a, 0xaa, 0xcc, 0xcc, 0xcb, 0xbb, 0xad, 0xac, 0x9b, 0x18, 0x55, 0x53, - 0x33, 0x32, 0x21, 0x22, 0x12, 0x02, 0x98, 0xaa, 0xbb, 0x8a, 0x08, 0x32, 0x54, 0x44, 0x34, 0x24, - 0x23, 0x22, 0x23, 0x23, 0x33, 0x44, 0x44, 0x34, 0x33, 0x90, 0xdc, 0xcb, 0x9a, 0x98, 0x80, 0xa9, - 0xdb, 0xab, 0xab, 0xaa, 0xeb, 0xcc, 0xdb, 0xba, 0xab, 0xbb, 0xbb, 0x09, 0x63, 0x44, 0x23, 0x01, - 0x98, 0xcb, 0xbc, 0xba, 0xbb, 0xbc, 0xcb, 0xcd, 0xcb, 0xcb, 0xbb, 0xbb, 0xbb, 0x89, 0x53, 0x46, - 0x44, 0x32, 0x22, 0x22, 0x22, 0x13, 0x01, 0xa8, 0xbc, 0xac, 0x89, 0x31, 0x44, 0x34, 0x34, 0x33, - 0x33, 0x23, 0x24, 0x32, 0x32, 0x43, 0x43, 0x34, 0x33, 0x80, 0xdc, 0xbd, 0xba, 0x89, 0x10, 0x01, - 0xaa, 0xbc, 0xbb, 0xcc, 0xdb, 0xdc, 0xdb, 0xbb, 0xbb, 0xac, 0x9b, 0x09, 0x32, 0x36, 0x23, 0x13, - 0x98, 0xca, 0xac, 0xab, 0xba, 0xba, 0xcc, 0xbd, 0xcd, 0xbb, 0xbc, 0xbb, 0xba, 0x99, 0x31, 0x56, - 0x44, 0x33, 0x33, 0x32, 0x43, 0x22, 0x01, 0xa9, 0xbd, 0xac, 0x8a, 0x20, 0x44, 0x34, 0x34, 0x23, - 0x33, 0x22, 0x12, 0x21, 0x32, 0x43, 0x34, 0x33, 0x23, 0xa0, 0xdd, 0xcc, 0xbb, 0x99, 0x00, 0x01, - 0x90, 0x99, 0xba, 0xaa, 0xdc, 0xdd, 0xcc, 0xcc, 0xbb, 0xac, 0xaa, 0x99, 0x00, 0x42, 0x43, 0x23, - 0x02, 0x90, 0xa9, 0xbb, 0xbc, 0xbd, 0xcc, 0xcb, 0xcc, 0xbb, 0xcb, 0xbb, 0xab, 0x8a, 0x10, 0x54, - 0x54, 0x33, 0x25, 0x33, 0x32, 0x22, 0x01, 0xb9, 0xcd, 0xbb, 0xaa, 0x18, 0x42, 0x44, 0x34, 0x34, - 0x32, 0x33, 0x23, 0x32, 0x32, 0x23, 0x13, 0x22, 0x01, 0xd9, 0xdc, 0xbc, 0xbc, 0xbb, 0x99, 0x10, - 0x22, 0x33, 0x22, 0x11, 0xb8, 0xee, 0xdc, 0xdc, 0xbb, 0xbc, 0xab, 0xa9, 0x89, 0x00, 0x31, 0x35, - 0x33, 0x23, 0x11, 0x80, 0xba, 0xcf, 0xdb, 0xbc, 0xbc, 0xbb, 0xcb, 0xba, 0xac, 0xab, 0x8a, 0x40, - 0x64, 0x53, 0x33, 0x43, 0x23, 0x22, 0x02, 0x98, 0xdb, 0xbb, 0xbb, 0xaa, 0x18, 0x63, 0x44, 0x43, - 0x24, 0x24, 0x32, 0x22, 0x22, 0x11, 0x80, 0x80, 0x08, 0xb8, 0xcc, 0xdb, 0xbc, 0xad, 0x9a, 0x09, - 0x20, 0x23, 0x22, 0x01, 0x00, 0xa8, 0xfb, 0xed, 0xdb, 0xbb, 0xba, 0xbb, 0xba, 0xaa, 0x09, 0x62, - 0x44, 0x33, 0x23, 0x01, 0xa9, 0xcb, 0xcc, 0xbc, 0xbc, 0xcb, 0xbb, 0xbc, 0xcb, 0xbb, 0x9a, 0x08, - 0x63, 0x44, 0x34, 0x34, 0x33, 0x23, 0x22, 0x81, 0x99, 0xcb, 0xcb, 0xab, 0x9b, 0x19, 0x52, 0x44, - 0x54, 0x33, 0x34, 0x33, 0x32, 0x21, 0x12, 0x11, 0x80, 0xb9, 0xcb, 0xbc, 0xcc, 0xcc, 0xab, 0xaa, - 0x88, 0x21, 0x11, 0x00, 0x98, 0x89, 0x90, 0xfb, 0xdd, 0xbd, 0xbc, 0xac, 0xab, 0xaa, 0x89, 0x31, - 0x45, 0x34, 0x33, 0x13, 0x90, 0xb9, 0xcc, 0xbc, 0xcc, 0xcb, 0xbb, 0xcb, 0xcb, 0xcb, 0xaa, 0x89, - 0x31, 0x45, 0x35, 0x43, 0x23, 0x23, 0x21, 0x11, 0x00, 0xa9, 0xcb, 0xcb, 0xbb, 0xbb, 0x9a, 0x20, - 0x56, 0x54, 0x43, 0x33, 0x32, 0x22, 0x21, 0x21, 0x01, 0x88, 0xaa, 0xcb, 0xbc, 0xcd, 0xcb, 0xbb, - 0x8a, 0x08, 0x00, 0x00, 0x99, 0x89, 0x01, 0x98, 0xfb, 0xcf, 0xbc, 0xbc, 0xbb, 0xab, 0x89, 0x20, - 0x54, 0x34, 0x25, 0x12, 0x81, 0xa9, 0xaa, 0xba, 0xcc, 0xcc, 0xcb, 0xdb, 0xcb, 0xbb, 0xac, 0x9a, - 0x18, 0x53, 0x34, 0x35, 0x33, 0x23, 0x33, 0x32, 0x12, 0x90, 0xba, 0xcc, 0xba, 0xac, 0xbb, 0xab, - 0x19, 0x65, 0x44, 0x33, 0x43, 0x22, 0x22, 0x23, 0x33, 0x12, 0x90, 0xba, 0xbd, 0xdb, 0xdb, 0xba, - 0xcb, 0xaa, 0x9a, 0x89, 0x88, 0x00, 0x11, 0x88, 0xb9, 0xff, 0xcc, 0xbb, 0xac, 0x9a, 0x08, 0x10, - 0x52, 0x34, 0x35, 0x22, 0x82, 0x98, 0xa9, 0xa9, 0xca, 0xdb, 0xcd, 0xcc, 0xbb, 0xbc, 0xcb, 0xab, - 0x9a, 0x10, 0x44, 0x35, 0x34, 0x33, 0x33, 0x24, 0x22, 0x02, 0x98, 0xaa, 0xac, 0xbb, 0xca, 0xca, - 0x9a, 0x18, 0x43, 0x45, 0x33, 0x24, 0x22, 0x43, 0x33, 0x34, 0x23, 0x01, 0x99, 0xaa, 0xbc, 0xdb, - 0xcc, 0xbc, 0xba, 0xab, 0x99, 0x10, 0x00, 0xa9, 0xcb, 0xdd, 0xcc, 0xcb, 0xaa, 0x9a, 0x08, 0x11, - 0x53, 0x44, 0x34, 0x24, 0x11, 0x88, 0x89, 0x88, 0x89, 0xb9, 0xed, 0xdc, 0xcb, 0xbb, 0xcb, 0xbb, - 0xbb, 0x9a, 0x20, 0x45, 0x44, 0x43, 0x33, 0x24, 0x33, 0x22, 0x01, 0x98, 0xba, 0xbb, 0xac, 0xab, - 0xbb, 0x9a, 0x8a, 0x20, 0x73, 0x34, 0x43, 0x44, 0x33, 0x34, 0x34, 0x22, 0x21, 0x00, 0x88, 0xba, - 0xcd, 0xcc, 0xcb, 0xcb, 0x9a, 0x08, 0x88, 0x98, 0xba, 0xcc, 0xcc, 0xcb, 0xab, 0x8a, 0x10, 0x32, - 0x53, 0x34, 0x35, 0x34, 0x13, 0x01, 0x98, 0x98, 0x80, 0x98, 0xdc, 0xde, 0xcb, 0xcb, 0xab, 0xbb, - 0xac, 0xab, 0x8a, 0x30, 0x55, 0x43, 0x34, 0x33, 0x34, 0x23, 0x23, 0x01, 0x98, 0xaa, 0xaa, 0xcb, - 0xab, 0xac, 0xbb, 0xac, 0x8a, 0x10, 0x31, 0x44, 0x35, 0x44, 0x34, 0x24, 0x33, 0x34, 0x12, 0x00, - 0xa9, 0xcc, 0xcc, 0xcb, 0xaa, 0x8a, 0x99, 0xa9, 0xbc, 0xbc, 0xcc, 0xba, 0xab, 0x09, 0x21, 0x43, - 0x43, 0x53, 0x53, 0x33, 0x33, 0x12, 0x01, 0x88, 0x80, 0x98, 0xd9, 0xde, 0xbc, 0xcc, 0xcb, 0xbb, - 0xcb, 0xcb, 0x9b, 0x0a, 0x21, 0x45, 0x43, 0x24, 0x43, 0x32, 0x33, 0x32, 0x11, 0x88, 0x98, 0xb9, - 0xcb, 0xcb, 0xcb, 0xab, 0x9b, 0x89, 0x88, 0x00, 0x21, 0x44, 0x46, 0x44, 0x43, 0x34, 0x32, 0x11, - 0x91, 0xc9, 0xdb, 0xbb, 0xac, 0x9a, 0xa9, 0xb9, 0xdb, 0xcb, 0xca, 0xba, 0xba, 0x9a, 0x10, 0x22, - 0x33, 0x54, 0x43, 0x44, 0x33, 0x34, 0x33, 0x11, 0x00, 0x80, 0x90, 0xca, 0xde, 0xbc, 0xbe, 0xbc, - 0xcb, 0xbb, 0xac, 0xa9, 0x08, 0x32, 0x44, 0x43, 0x43, 0x34, 0x43, 0x23, 0x23, 0x12, 0x11, 0x88, - 0xb9, 0xbd, 0xbc, 0xaa, 0xaa, 0x89, 0x89, 0xa9, 0xab, 0x9a, 0x50, 0x56, 0x54, 0x43, 0x32, 0x12, - 0x01, 0x98, 0xba, 0xdb, 0xcb, 0x9a, 0x9a, 0xc9, 0xcb, 0xcb, 0xba, 0xbb, 0xbc, 0xcb, 0x09, 0x21, - 0x22, 0x31, 0x43, 0x35, 0x44, 0x42, 0x22, 0x22, 0x11, 0x21, 0x22, 0x33, 0x81, 0xfd, 0xdd, 0xcc, - 0xcb, 0xba, 0xab, 0xab, 0xaa, 0x08, 0x21, 0x53, 0x53, 0x44, 0x43, 0x24, 0x33, 0x23, 0x22, 0x02, - 0x90, 0xc9, 0xca, 0xaa, 0xab, 0xab, 0xaa, 0xba, 0xcc, 0xab, 0x8a, 0x63, 0x45, 0x35, 0x32, 0x13, - 0x01, 0x80, 0x88, 0xb9, 0xbd, 0xbc, 0xab, 0xaa, 0xca, 0xab, 0xab, 0xbc, 0xbd, 0xbd, 0xaa, 0x89, - 0x08, 0x98, 0x18, 0x62, 0x34, 0x34, 0x42, 0x33, 0x43, 0x33, 0x34, 0x43, 0x33, 0x81, 0xec, 0xdd, - 0xbc, 0xac, 0xbb, 0xba, 0xab, 0x9b, 0x99, 0x20, 0x42, 0x45, 0x44, 0x34, 0x43, 0x33, 0x32, 0x23, - 0x11, 0x90, 0xa9, 0xcb, 0xbc, 0xac, 0xaa, 0xaa, 0xaa, 0xcb, 0xab, 0x19, 0x74, 0x34, 0x34, 0x22, - 0x10, 0x08, 0x08, 0x08, 0x99, 0xbd, 0xbc, 0xac, 0xaa, 0x99, 0x88, 0xb9, 0xce, 0xcb, 0xab, 0x8a, - 0x98, 0x99, 0xbb, 0x8a, 0x31, 0x46, 0x34, 0x42, 0x43, 0x33, 0x44, 0x43, 0x43, 0x22, 0x80, 0xfb, - 0xcc, 0xbc, 0xac, 0xbb, 0xba, 0xac, 0xaa, 0x99, 0x00, 0x41, 0x45, 0x44, 0x33, 0x34, 0x33, 0x43, - 0x12, 0x01, 0x80, 0xa8, 0xcb, 0xdb, 0xaa, 0xab, 0x9a, 0xaa, 0xab, 0x0a, 0x73, 0x34, 0x25, 0x23, - 0x11, 0x88, 0x98, 0x80, 0x98, 0xda, 0xcc, 0xcb, 0xba, 0x09, 0x10, 0x01, 0xb9, 0xbe, 0xaa, 0x89, - 0x99, 0xeb, 0xbc, 0xac, 0x99, 0x99, 0x00, 0x42, 0x43, 0x34, 0x45, 0x53, 0x43, 0x33, 0x12, 0x90, - 0xcc, 0xcd, 0xbb, 0xbc, 0xcb, 0xbb, 0xcb, 0xaa, 0x9a, 0x08, 0x52, 0x44, 0x34, 0x34, 0x34, 0x24, - 0x13, 0x12, 0x01, 0x81, 0x98, 0xbc, 0xbc, 0xac, 0xaa, 0xaa, 0xaa, 0x89, 0x31, 0x35, 0x35, 0x34, - 0x12, 0x11, 0x88, 0x99, 0x89, 0xa9, 0xfb, 0xbc, 0xbd, 0xaa, 0x09, 0x10, 0x80, 0xaa, 0x8a, 0x10, - 0x13, 0xe8, 0xcd, 0xac, 0xab, 0xbc, 0xba, 0x9a, 0x18, 0x22, 0x55, 0x54, 0x44, 0x33, 0x23, 0x12, - 0x90, 0xdb, 0xcc, 0xcb, 0xac, 0xbc, 0xcb, 0xba, 0xaa, 0x8a, 0x18, 0x53, 0x44, 0x43, 0x44, 0x33, - 0x24, 0x22, 0x12, 0x11, 0x81, 0xb8, 0xcc, 0xbc, 0xac, 0xa9, 0x99, 0x08, 0x00, 0x22, 0x43, 0x34, - 0x33, 0x23, 0x01, 0xb9, 0xbb, 0xbb, 0xcc, 0xcd, 0xbd, 0xcb, 0x99, 0x08, 0x00, 0x00, 0x11, 0x32, - 0x24, 0x81, 0xca, 0xcc, 0xdb, 0xcc, 0xcb, 0xab, 0xaa, 0x98, 0x20, 0x54, 0x35, 0x44, 0x23, 0x32, - 0x11, 0x80, 0xba, 0xcc, 0xbd, 0xdb, 0xcb, 0xbc, 0xbb, 0xba, 0x99, 0x10, 0x43, 0x45, 0x34, 0x35, - 0x33, 0x34, 0x22, 0x22, 0x12, 0x90, 0xba, 0xce, 0xbb, 0xac, 0x9a, 0x88, 0x08, 0x11, 0x31, 0x43, - 0x34, 0x33, 0x13, 0x90, 0xaa, 0xbb, 0xcb, 0xcd, 0xdb, 0xbc, 0xac, 0xab, 0x89, 0x11, 0x32, 0x44, - 0x33, 0x22, 0x21, 0x02, 0xea, 0xdd, 0xdb, 0xcb, 0xaa, 0xaa, 0x89, 0x21, 0x53, 0x44, 0x24, 0x24, - 0x22, 0x02, 0x90, 0xb9, 0xcb, 0xbc, 0xbc, 0xbd, 0xbd, 0xcb, 0x9a, 0x99, 0x20, 0x42, 0x44, 0x34, - 0x43, 0x34, 0x32, 0x33, 0x23, 0x02, 0xa8, 0xdb, 0xbd, 0xcb, 0xab, 0xaa, 0x89, 0x09, 0x31, 0x43, - 0x34, 0x43, 0x32, 0x11, 0x01, 0x98, 0xba, 0xdc, 0xcc, 0xdb, 0xba, 0xba, 0x99, 0x08, 0x20, 0x43, - 0x34, 0x23, 0x32, 0x33, 0x02, 0xea, 0xde, 0xdb, 0xbb, 0xbb, 0xab, 0x09, 0x31, 0x54, 0x34, 0x44, - 0x33, 0x23, 0x11, 0x90, 0xba, 0xbc, 0xdb, 0xdb, 0xcc, 0xdb, 0xba, 0x9a, 0x89, 0x21, 0x53, 0x34, - 0x34, 0x44, 0x32, 0x34, 0x22, 0x22, 0x80, 0xa9, 0xbc, 0xbd, 0xac, 0xab, 0xaa, 0x9a, 0x08, 0x31, - 0x35, 0x34, 0x32, 0x12, 0x22, 0x21, 0x12, 0xa9, 0xde, 0xcc, 0xac, 0xbb, 0xaa, 0x99, 0x88, 0x20, - 0x22, 0x44, 0x43, 0x24, 0x12, 0x91, 0xdb, 0xbd, 0xcc, 0xcb, 0xab, 0xaa, 0x88, 0x21, 0x63, 0x44, - 0x24, 0x23, 0x22, 0x10, 0x98, 0xa9, 0xbb, 0xcd, 0xcc, 0xbc, 0xbc, 0xba, 0x99, 0x08, 0x32, 0x36, - 0x35, 0x34, 0x34, 0x43, 0x33, 0x22, 0x12, 0x80, 0xba, 0xcd, 0xbc, 0xbb, 0xbb, 0xab, 0xaa, 0x18, - 0x43, 0x35, 0x33, 0x24, 0x21, 0x33, 0x12, 0x80, 0xda, 0xdc, 0xbc, 0xcb, 0xab, 0xbb, 0xa9, 0x88, - 0x11, 0x53, 0x33, 0x34, 0x22, 0x02, 0xc9, 0xcc, 0xcc, 0xbc, 0xbc, 0xbb, 0xaa, 0x08, 0x31, 0x37, - 0x45, 0x32, 0x32, 0x12, 0x01, 0x88, 0xb8, 0xdb, 0xcc, 0xbc, 0xbd, 0xcb, 0xaa, 0x8a, 0x08, 0x42, - 0x45, 0x34, 0x43, 0x43, 0x32, 0x23, 0x13, 0x02, 0x98, 0xda, 0xbc, 0xcc, 0xba, 0xaa, 0xab, 0x99, - 0x00, 0x33, 0x35, 0x33, 0x23, 0x33, 0x24, 0x13, 0x00, 0xca, 0xcd, 0xcc, 0xbb, 0xac, 0xab, 0x9a, - 0x08, 0x21, 0x32, 0x43, 0x33, 0x21, 0x90, 0xeb, 0xbc, 0xcd, 0xbc, 0xad, 0xab, 0x9a, 0x08, 0x52, - 0x45, 0x43, 0x33, 0x22, 0x02, 0x01, 0x88, 0xba, 0xdc, 0xdb, 0xbc, 0xbc, 0xac, 0xaa, 0x99, 0x20, - 0x63, 0x44, 0x53, 0x32, 0x33, 0x24, 0x22, 0x22, 0x00, 0x98, 0xdb, 0xcc, 0xbb, 0xbc, 0xaa, 0xab, - 0x99, 0x08, 0x22, 0x34, 0x24, 0x33, 0x43, 0x32, 0x33, 0x01, 0xba, 0xcf, 0xcb, 0xcb, 0xab, 0xaa, - 0x89, 0x18, 0x20, 0x11, 0x01, 0x88, 0x99, 0xba, 0xdc, 0xcc, 0xdc, 0xdb, 0xbb, 0xaa, 0x8a, 0x32, - 0x46, 0x44, 0x33, 0x33, 0x23, 0x21, 0x00, 0x98, 0xca, 0xdc, 0xeb, 0xcb, 0xbb, 0xac, 0xaa, 0x88, - 0x31, 0x45, 0x35, 0x34, 0x24, 0x23, 0x33, 0x33, 0x23, 0x81, 0xb9, 0xdd, 0xdb, 0xbb, 0xba, 0xbb, - 0x9a, 0x9a, 0x08, 0x21, 0x32, 0x33, 0x45, 0x53, 0x33, 0x23, 0x01, 0xb9, 0xec, 0xcb, 0xba, 0xba, - 0x99, 0x09, 0x10, 0x00, 0xa9, 0xcb, 0xbb, 0xaa, 0xa9, 0xdc, 0xcd, 0xbd, 0xad, 0xbb, 0x8a, 0x30, - 0x54, 0x43, 0x34, 0x24, 0x22, 0x22, 0x21, 0x01, 0x98, 0xba, 0xcf, 0xcc, 0xdb, 0xab, 0xab, 0x99, - 0x20, 0x52, 0x34, 0x45, 0x42, 0x32, 0x32, 0x24, 0x33, 0x12, 0x00, 0xba, 0xdd, 0xbb, 0xbc, 0xab, - 0xab, 0xab, 0xa9, 0x88, 0x18, 0x10, 0x33, 0x46, 0x34, 0x34, 0x12, 0x80, 0xa9, 0xbc, 0xac, 0xab, - 0x9a, 0x9a, 0x89, 0x99, 0xca, 0xbd, 0xbc, 0xab, 0x8a, 0xa8, 0xeb, 0xcd, 0xbd, 0xbb, 0xaa, 0x18, - 0x54, 0x43, 0x43, 0x42, 0x32, 0x32, 0x22, 0x12, 0x11, 0x98, 0xdb, 0xdd, 0xcc, 0xbc, 0xab, 0x9b, - 0x09, 0x21, 0x44, 0x44, 0x53, 0x32, 0x24, 0x43, 0x32, 0x23, 0x12, 0x98, 0xcb, 0xcc, 0xbb, 0xac, - 0xbb, 0xbb, 0xbb, 0xba, 0x9a, 0x99, 0x00, 0x52, 0x55, 0x33, 0x24, 0x12, 0x90, 0xaa, 0xbb, 0xaa, - 0x99, 0xa8, 0xaa, 0xbc, 0xcd, 0xac, 0xac, 0xbb, 0xbb, 0x9a, 0xbb, 0xdc, 0xcc, 0xbc, 0xac, 0x89, - 0x41, 0x53, 0x33, 0x34, 0x24, 0x23, 0x23, 0x21, 0x12, 0x01, 0xa9, 0xcd, 0xdd, 0xcb, 0xac, 0xbb, - 0x99, 0x18, 0x31, 0x35, 0x45, 0x43, 0x43, 0x43, 0x43, 0x23, 0x13, 0x01, 0x98, 0xca, 0xcb, 0xbc, - 0xcb, 0xab, 0xac, 0xaa, 0xab, 0xba, 0xaa, 0x08, 0x63, 0x53, 0x24, 0x23, 0x12, 0x98, 0xb9, 0x9a, - 0x89, 0x88, 0x98, 0xb9, 0xdd, 0xcb, 0xcb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xdc, 0xcc, 0xcb, 0x9a, - 0x09, 0x32, 0x45, 0x34, 0x42, 0x22, 0x32, 0x32, 0x24, 0x23, 0x01, 0xa8, 0xdc, 0xcd, 0xbc, 0xbb, - 0xab, 0x8a, 0x10, 0x31, 0x35, 0x36, 0x35, 0x35, 0x34, 0x43, 0x23, 0x22, 0x01, 0x98, 0xcb, 0xbc, - 0xbc, 0xbb, 0xcb, 0xbb, 0xbc, 0xbc, 0xba, 0x9a, 0x10, 0x43, 0x44, 0x24, 0x23, 0x11, 0x00, 0x88, - 0x99, 0x88, 0x80, 0xa9, 0xdd, 0xdb, 0xbb, 0xac, 0x99, 0xa9, 0x99, 0xba, 0xcc, 0xcc, 0xdb, 0xba, - 0x9a, 0x18, 0x52, 0x43, 0x33, 0x33, 0x34, 0x44, 0x33, 0x33, 0x32, 0x13, 0x90, 0xed, 0xcc, 0xbb, - 0xaa, 0xaa, 0x88, 0x08, 0x10, 0x53, 0x55, 0x44, 0x34, 0x34, 0x24, 0x33, 0x22, 0x01, 0x98, 0xbc, - 0xbd, 0xbb, 0xac, 0xbb, 0xbd, 0xcb, 0xba, 0xaa, 0x08, 0x21, 0x34, 0x44, 0x32, 0x23, 0x12, 0x00, - 0x98, 0x89, 0x08, 0x98, 0xfb, 0xdc, 0xbb, 0xbb, 0x99, 0x89, 0xa9, 0xbb, 0xdc, 0xcb, 0xcb, 0xab, - 0xbb, 0x9a, 0x10, 0x34, 0x34, 0x34, 0x35, 0x34, 0x34, 0x43, 0x43, 0x43, 0x12, 0x90, 0xcc, 0xbc, - 0xab, 0xab, 0xaa, 0x9a, 0x9a, 0x09, 0x72, 0x46, 0x54, 0x43, 0x33, 0x33, 0x24, 0x22, 0x81, 0xb8, - 0xeb, 0xbb, 0xbc, 0xbb, 0xdb, 0xcb, 0xbb, 0xba, 0x99, 0x20, 0x42, 0x34, 0x24, 0x33, 0x24, 0x12, - 0x00, 0x98, 0x99, 0xba, 0xcc, 0xbd, 0xbc, 0xac, 0x9a, 0x88, 0x80, 0x08, 0x88, 0xaa, 0xbb, 0xcd, - 0xbc, 0xab, 0xab, 0x89, 0x88, 0x10, 0x53, 0x45, 0x44, 0x43, 0x34, 0x34, 0x24, 0x02, 0x98, 0xca, - 0xba, 0xbb, 0xca, 0xba, 0xba, 0xbc, 0x8b, 0x73, 0x47, 0x53, 0x43, 0x32, 0x33, 0x33, 0x23, 0x81, - 0xca, 0xcc, 0xbc, 0xbb, 0xcb, 0xbc, 0xdb, 0xaa, 0x9a, 0x08, 0x21, 0x24, 0x24, 0x33, 0x43, 0x32, - 0x12, 0x80, 0xaa, 0xca, 0xcb, 0xbc, 0xbd, 0xbb, 0xbb, 0x9a, 0x88, 0x00, 0x10, 0x80, 0x99, 0xca, - 0xcb, 0xbc, 0xbb, 0xbc, 0xbc, 0xbd, 0xaa, 0x08, 0x63, 0x54, 0x43, 0x34, 0x24, 0x33, 0x02, 0x80, - 0xa9, 0xab, 0xbc, 0xca, 0xcb, 0xcb, 0xab, 0x28, 0x65, 0x45, 0x43, 0x43, 0x33, 0x33, 0x24, 0x12, - 0x90, 0xda, 0xcb, 0xac, 0xbb, 0xdb, 0xbb, 0xbc, 0xab, 0x8a, 0x20, 0x33, 0x35, 0x34, 0x33, 0x24, - 0x23, 0x00, 0xa8, 0xbb, 0xbd, 0xbc, 0xcc, 0xbb, 0xac, 0x9a, 0x88, 0x10, 0x11, 0x11, 0x01, 0x01, - 0x88, 0xba, 0xcd, 0xcc, 0xcb, 0xbc, 0xbc, 0xab, 0x89, 0x42, 0x45, 0x34, 0x33, 0x44, 0x23, 0x13, - 0x02, 0x80, 0xaa, 0xbb, 0xbd, 0xbc, 0xaa, 0x99, 0x48, 0x65, 0x44, 0x53, 0x33, 0x43, 0x32, 0x23, - 0x11, 0x98, 0xdb, 0xdb, 0xbb, 0xcc, 0xcb, 0xbb, 0xac, 0x9a, 0x08, 0x20, 0x42, 0x43, 0x43, 0x33, - 0x23, 0x02, 0xa0, 0xba, 0xbc, 0xbc, 0xbc, 0xbd, 0xbc, 0xab, 0x99, 0x10, 0x21, 0x21, 0x21, 0x21, - 0x11, 0x90, 0xca, 0xdd, 0xcc, 0xcb, 0xbc, 0xbb, 0xab, 0x88, 0x52, 0x44, 0x43, 0x34, 0x43, 0x32, - 0x22, 0x11, 0x08, 0x98, 0xaa, 0xbb, 0xcb, 0xbc, 0x9b, 0x40, 0x47, 0x45, 0x43, 0x23, 0x43, 0x32, - 0x22, 0x81, 0xa8, 0xdb, 0xcb, 0xcc, 0xcb, 0xcb, 0xbb, 0xbb, 0x9a, 0x18, 0x31, 0x45, 0x33, 0x34, - 0x22, 0x12, 0x88, 0x98, 0xa9, 0xba, 0xce, 0xcc, 0xcb, 0xab, 0x9a, 0x00, 0x20, 0x21, 0x11, 0x00, - 0x11, 0x01, 0x00, 0xc9, 0xce, 0xbd, 0xbd, 0xac, 0xab, 0xaa, 0x08, 0x42, 0x54, 0x34, 0x34, 0x32, - 0x22, 0x12, 0x22, 0x23, 0x12, 0xa8, 0xcc, 0xcb, 0xcb, 0x8a, 0x30, 0x57, 0x43, 0x24, 0x33, 0x43, - 0x22, 0x12, 0x90, 0xb9, 0xdb, 0xbc, 0xcd, 0xca, 0xbb, 0xcb, 0xaa, 0x09, 0x20, 0x34, 0x34, 0x43, - 0x22, 0x11, 0x80, 0x80, 0x90, 0xa9, 0xdc, 0xcd, 0xcb, 0xbb, 0xab, 0x88, 0x21, 0x32, 0x12, 0x01, - 0x11, 0x32, 0x34, 0x82, 0xfa, 0xcd, 0xcc, 0xcb, 0xab, 0xab, 0x9a, 0x18, 0x62, 0x34, 0x34, 0x33, - 0x43, 0x22, 0x33, 0x34, 0x24, 0x01, 0x98, 0xca, 0xbb, 0xad, 0x9b, 0x20, 0x54, 0x34, 0x34, 0x34, - 0x43, 0x32, 0x11, 0x00, 0xa8, 0xda, 0xcc, 0xbc, 0xdb, 0xab, 0xbb, 0xaa, 0x08, 0x32, 0x53, 0x33, - 0x33, 0x22, 0x22, 0x43, 0x33, 0x02, 0xfa, 0xcd, 0xbc, 0xbc, 0xab, 0x99, 0x18, 0x20, 0x02, 0x80, - 0x08, 0x41, 0x34, 0x33, 0xa0, 0xdd, 0xcd, 0xbc, 0xcb, 0xaa, 0x9a, 0x09, 0x30, 0x45, 0x33, 0x34, - 0x23, 0x43, 0x33, 0x36, 0x33, 0x23, 0x81, 0xba, 0xcb, 0xcc, 0xaa, 0x8a, 0x28, 0x43, 0x45, 0x53, - 0x43, 0x33, 0x22, 0x11, 0x10, 0xa9, 0xcd, 0xbc, 0xbc, 0xbc, 0xac, 0x9b, 0x99, 0x10, 0x21, 0x42, - 0x22, 0x22, 0x32, 0x44, 0x44, 0x22, 0x91, 0xda, 0xcc, 0xbc, 0xbb, 0xaa, 0x99, 0x08, 0x81, 0x98, - 0x89, 0x28, 0x55, 0x24, 0x02, 0xa8, 0xec, 0xbc, 0xac, 0xab, 0xaa, 0x9a, 0x19, 0x42, 0x34, 0x53, - 0x33, 0x43, 0x34, 0x44, 0x34, 0x32, 0x11, 0x80, 0xa9, 0xcb, 0xcb, 0xba, 0x99, 0x18, 0x32, 0x56, - 0x34, 0x34, 0x33, 0x22, 0x12, 0x01, 0xca, 0xdc, 0xcb, 0xbc, 0xbb, 0xbb, 0x9a, 0x89, 0x11, 0x42, - 0x22, 0x11, 0x20, 0x45, 0x45, 0x34, 0x02, 0x98, 0xdb, 0xdb, 0xbb, 0xba, 0x9a, 0x9a, 0x98, 0xa9, - 0xbb, 0x8b, 0x52, 0x36, 0x24, 0x81, 0xc9, 0xcd, 0xcb, 0xba, 0xba, 0xba, 0x9b, 0x28, 0x34, 0x44, - 0x33, 0x34, 0x53, 0x44, 0x34, 0x33, 0x14, 0x11, 0x98, 0xba, 0xcb, 0xab, 0xab, 0xa9, 0x88, 0x41, - 0x46, 0x44, 0x33, 0x42, 0x22, 0x12, 0x81, 0xba, 0xcd, 0xdb, 0xbb, 0xbc, 0xaa, 0x99, 0x09, 0x00, - 0x11, 0x80, 0x08, 0x73, 0x45, 0x44, 0x22, 0x01, 0xa8, 0xcb, 0xbc, 0xbb, 0xab, 0xab, 0xa9, 0xca, - 0xcb, 0xaa, 0x18, 0x44, 0x24, 0x12, 0xa8, 0xcd, 0xbc, 0xcb, 0xba, 0xbb, 0xab, 0x8a, 0x21, 0x34, - 0x35, 0x43, 0x43, 0x54, 0x53, 0x43, 0x23, 0x13, 0x01, 0xb8, 0xcb, 0xcb, 0xaa, 0xa9, 0xa9, 0x99, - 0x31, 0x56, 0x34, 0x25, 0x33, 0x23, 0x12, 0x80, 0xb9, 0xcd, 0xcc, 0xcb, 0xaa, 0xaa, 0x89, 0x08, - 0x00, 0x88, 0x99, 0x28, 0x57, 0x54, 0x23, 0x13, 0x80, 0xb9, 0xbc, 0xac, 0xab, 0xab, 0xb9, 0xca, - 0xac, 0xab, 0x8a, 0x30, 0x44, 0x22, 0x02, 0xca, 0xbe, 0xbc, 0xac, 0xbb, 0xbb, 0x9a, 0x08, 0x33, - 0x43, 0x13, 0x32, 0x57, 0x45, 0x34, 0x34, 0x22, 0x12, 0x90, 0xaa, 0xac, 0xab, 0xab, 0xba, 0xba, - 0x9b, 0x41, 0x57, 0x34, 0x35, 0x22, 0x22, 0x11, 0x90, 0xca, 0xcc, 0xbc, 0xac, 0x9a, 0x99, 0x80, - 0x88, 0x98, 0x9a, 0x18, 0x73, 0x45, 0x34, 0x24, 0x02, 0x90, 0xaa, 0xbc, 0xbb, 0xbb, 0xcb, 0xba, - 0xbc, 0xbb, 0xab, 0x19, 0x41, 0x22, 0x23, 0x80, 0xea, 0xcd, 0xbc, 0xcb, 0xba, 0x9a, 0x89, 0x10, - 0x21, 0x02, 0x00, 0x73, 0x55, 0x35, 0x35, 0x43, 0x12, 0x01, 0x98, 0xaa, 0xbb, 0xcb, 0xba, 0xbb, - 0xab, 0x09, 0x73, 0x45, 0x35, 0x43, 0x32, 0x21, 0x00, 0xa9, 0xdb, 0xbc, 0xbc, 0xac, 0xa9, 0x98, - 0x08, 0x88, 0x98, 0x08, 0x31, 0x56, 0x45, 0x33, 0x23, 0x01, 0xaa, 0xbc, 0xbb, 0xbc, 0xca, 0xba, - 0xcb, 0xbb, 0xbb, 0x99, 0x10, 0x12, 0x12, 0x12, 0x81, 0xed, 0xcd, 0xcb, 0xaa, 0x9a, 0x89, 0x89, - 0x88, 0x98, 0x98, 0x31, 0x67, 0x45, 0x34, 0x34, 0x33, 0x12, 0x01, 0xa9, 0xcb, 0xbb, 0xbc, 0xcb, - 0xaa, 0x8a, 0x28, 0x54, 0x36, 0x35, 0x33, 0x23, 0x11, 0x90, 0xba, 0xcd, 0xdb, 0xba, 0xba, 0x9a, - 0x89, 0x88, 0x88, 0x88, 0x28, 0x74, 0x44, 0x34, 0x24, 0x02, 0x90, 0xa9, 0xbb, 0xcb, 0xba, 0xbc, - 0xbc, 0xcb, 0xba, 0x9a, 0x08, 0x08, 0x98, 0x89, 0x80, 0xc9, 0xce, 0xbc, 0xac, 0x9a, 0x98, 0x98, - 0x99, 0x99, 0x88, 0x10, 0x64, 0x65, 0x53, 0x34, 0x33, 0x33, 0x22, 0x00, 0xaa, 0xbc, 0xbd, 0xbb, - 0xbb, 0xab, 0x9a, 0x52, 0x46, 0x44, 0x24, 0x33, 0x12, 0x01, 0x98, 0xba, 0xcc, 0xbc, 0xbc, 0xba, - 0x9a, 0x88, 0x98, 0x88, 0x00, 0x63, 0x45, 0x35, 0x33, 0x23, 0x01, 0xb9, 0xba, 0xac, 0xbc, 0xdb, - 0xcb, 0xbb, 0xac, 0xaa, 0x89, 0x80, 0xa8, 0xaa, 0x99, 0x98, 0xcb, 0xcd, 0xbc, 0x9a, 0x98, 0x98, - 0xbb, 0xdb, 0xbb, 0x9a, 0x41, 0x56, 0x45, 0x43, 0x34, 0x33, 0x33, 0x12, 0x81, 0xb9, 0xbd, 0xad, - 0xab, 0xab, 0x9c, 0x89, 0x52, 0x45, 0x34, 0x24, 0x23, 0x12, 0x00, 0xa8, 0xaa, 0xbd, 0xcc, 0xbb, - 0xbb, 0xaa, 0x98, 0x89, 0x08, 0x53, 0x55, 0x53, 0x33, 0x33, 0x01, 0x98, 0xab, 0xbb, 0xcb, 0xcc, - 0xcb, 0xcb, 0xcb, 0xaa, 0x99, 0x88, 0x90, 0xbb, 0xac, 0xab, 0xab, 0xbc, 0xbb, 0x8a, 0x08, 0xb8, - 0xbe, 0xcc, 0xcb, 0xbb, 0x89, 0x62, 0x55, 0x34, 0x44, 0x33, 0x33, 0x13, 0x22, 0x80, 0xda, 0xbc, - 0xac, 0xba, 0xbb, 0xab, 0x28, 0x65, 0x44, 0x33, 0x24, 0x22, 0x11, 0x08, 0x89, 0xaa, 0xbc, 0xcd, - 0xbc, 0xaa, 0x9a, 0x89, 0x88, 0x31, 0x45, 0x35, 0x34, 0x24, 0x01, 0x88, 0xa9, 0x9a, 0x9a, 0xca, - 0xbc, 0xbd, 0xcb, 0xbb, 0xaa, 0x8a, 0x88, 0xca, 0xcb, 0xbb, 0x9b, 0x09, 0x88, 0xa9, 0x9a, 0xcb, - 0xcc, 0xbc, 0xbd, 0xbb, 0xab, 0x20, 0x57, 0x44, 0x34, 0x34, 0x32, 0x23, 0x22, 0x22, 0x90, 0xeb, - 0xbc, 0xbc, 0xbb, 0xba, 0x8a, 0x51, 0x45, 0x34, 0x43, 0x22, 0x22, 0x01, 0x81, 0x90, 0xa8, 0xdc, - 0xbd, 0xbc, 0xab, 0x9a, 0x88, 0x21, 0x34, 0x36, 0x25, 0x24, 0x11, 0x80, 0x99, 0xaa, 0x99, 0xaa, - 0xbc, 0xbd, 0xdb, 0xba, 0xbb, 0xaa, 0x89, 0xa9, 0xbc, 0xbd, 0xac, 0x89, 0x10, 0x21, 0x11, 0xb8, - 0xdc, 0xcb, 0xcc, 0xba, 0x9a, 0x08, 0x43, 0x46, 0x53, 0x43, 0x33, 0x33, 0x32, 0x33, 0x13, 0xc8, - 0xbe, 0xbd, 0xac, 0xaa, 0x99, 0x00, 0x44, 0x44, 0x33, 0x33, 0x33, 0x32, 0x11, 0x00, 0x88, 0xd9, - 0xdd, 0xbc, 0xac, 0xaa, 0x88, 0x10, 0x32, 0x35, 0x35, 0x34, 0x22, 0x01, 0xa8, 0xba, 0xba, 0xba, - 0xeb, 0xdb, 0xbb, 0xbb, 0xac, 0xaa, 0x9a, 0xaa, 0xcb, 0xcc, 0xcb, 0x99, 0x21, 0x43, 0x13, 0xa0, - 0xcc, 0xbc, 0xbc, 0xac, 0x9b, 0x09, 0x31, 0x54, 0x44, 0x34, 0x34, 0x23, 0x43, 0x22, 0x22, 0x91, - 0xeb, 0xcc, 0xcb, 0xaa, 0x99, 0x88, 0x21, 0x54, 0x43, 0x33, 0x24, 0x22, 0x12, 0x02, 0x01, 0x88, - 0xeb, 0xbd, 0xad, 0xbb, 0x99, 0x00, 0x22, 0x34, 0x35, 0x34, 0x33, 0x23, 0x80, 0xa9, 0xca, 0xcb, - 0xbc, 0xcc, 0xbb, 0xbb, 0xaa, 0xaa, 0xaa, 0xbb, 0xbc, 0xbc, 0xbe, 0x9a, 0x10, 0x44, 0x33, 0x81, - 0xea, 0xbc, 0xbc, 0xbb, 0x9a, 0x08, 0x20, 0x34, 0x44, 0x44, 0x44, 0x32, 0x43, 0x32, 0x23, 0x01, - 0xa8, 0xec, 0xbc, 0xbc, 0x9a, 0x8a, 0x00, 0x31, 0x44, 0x44, 0x32, 0x43, 0x32, 0x23, 0x02, 0x90, - 0xca, 0xcd, 0xcb, 0xba, 0x9a, 0x08, 0x12, 0x43, 0x43, 0x34, 0x34, 0x33, 0x22, 0x88, 0xaa, 0xcc, - 0xdb, 0xdb, 0xbb, 0xbb, 0xaa, 0x98, 0xa8, 0xca, 0xdb, 0xbc, 0xba, 0x99, 0x30, 0x44, 0x25, 0x02, - 0xa8, 0xbe, 0xac, 0xbb, 0x9a, 0x89, 0x00, 0x11, 0x32, 0x55, 0x54, 0x43, 0x43, 0x23, 0x33, 0x11, - 0x90, 0xc9, 0xcd, 0xbc, 0xba, 0x9a, 0x08, 0x10, 0x11, 0x63, 0x53, 0x34, 0x34, 0x24, 0x02, 0x80, - 0xa9, 0xbc, 0xac, 0xbb, 0x9b, 0x0a, 0x10, 0x43, 0x42, 0x43, 0x44, 0x33, 0x34, 0x11, 0x90, 0xc9, - 0xdb, 0xcc, 0xcb, 0xaa, 0x9a, 0x80, 0x80, 0xa9, 0xcc, 0xbc, 0xaa, 0x88, 0x32, 0x34, 0x33, 0x12, - 0xc8, 0xdd, 0xcb, 0xaa, 0x99, 0x88, 0x00, 0x00, 0x90, 0x10, 0x56, 0x45, 0x34, 0x24, 0x23, 0x11, - 0x00, 0xa9, 0xcb, 0xdb, 0xcb, 0xaa, 0x9a, 0x89, 0x89, 0x09, 0x73, 0x45, 0x44, 0x32, 0x22, 0x81, - 0xa8, 0xcb, 0xbb, 0xaa, 0xa9, 0x98, 0x08, 0x10, 0x33, 0x44, 0x35, 0x36, 0x43, 0x23, 0x81, 0xa8, - 0xbc, 0xcd, 0xbc, 0xac, 0x99, 0x08, 0x00, 0x99, 0xbc, 0xcd, 0x9a, 0x09, 0x11, 0x33, 0x13, 0x80, - 0xb9, 0xdc, 0xcb, 0x9a, 0x89, 0x00, 0x00, 0x99, 0xcc, 0xaa, 0x28, 0x67, 0x44, 0x43, 0x32, 0x12, - 0x00, 0x80, 0x99, 0x99, 0xca, 0xdb, 0xcb, 0xbc, 0xba, 0xab, 0x19, 0x65, 0x44, 0x24, 0x23, 0x01, - 0x98, 0xba, 0xba, 0x8a, 0x08, 0x81, 0xa8, 0xaa, 0x08, 0x54, 0x35, 0x53, 0x33, 0x43, 0x12, 0x80, - 0xca, 0xcd, 0xdb, 0xba, 0xaa, 0x88, 0x80, 0xa9, 0xcd, 0xbc, 0xbb, 0x09, 0x22, 0x34, 0x02, 0xa9, - 0xad, 0xbb, 0x99, 0x18, 0x21, 0x23, 0x11, 0xa9, 0xcc, 0xbb, 0x9c, 0x73, 0x47, 0x43, 0x33, 0x22, - 0x10, 0x00, 0x10, 0x31, 0x12, 0x01, 0xfc, 0xce, 0xbb, 0xac, 0x89, 0x30, 0x44, 0x44, 0x23, 0x12, - 0x98, 0xa9, 0x9b, 0x89, 0x11, 0x12, 0x81, 0xca, 0x9a, 0x40, 0x46, 0x34, 0x23, 0x22, 0x12, 0x81, - 0xb9, 0xfc, 0xbc, 0xbc, 0x9a, 0x89, 0x98, 0xb9, 0xce, 0xbc, 0xbb, 0x88, 0x32, 0x43, 0x81, 0xc9, - 0xdb, 0xab, 0x09, 0x31, 0x34, 0x23, 0x01, 0x01, 0x00, 0x99, 0xcb, 0x8b, 0x50, 0x56, 0x34, 0x33, - 0x12, 0x11, 0x31, 0x55, 0x43, 0x23, 0x91, 0xec, 0xcc, 0xbb, 0xab, 0x08, 0x32, 0x44, 0x23, 0x23, - 0x01, 0x98, 0x89, 0x30, 0x32, 0x22, 0x11, 0x81, 0x9a, 0x61, 0x56, 0x34, 0x33, 0x12, 0x10, 0x01, - 0x80, 0xfb, 0xbd, 0xac, 0x9b, 0x88, 0x98, 0xeb, 0xcd, 0xcb, 0xab, 0x89, 0x21, 0x33, 0x02, 0xca, - 0xcd, 0xba, 0x09, 0x20, 0x34, 0x24, 0x22, 0x22, 0x33, 0x13, 0xb0, 0xcd, 0xbb, 0x8a, 0x20, 0x43, - 0x32, 0x34, 0x44, 0x45, 0x35, 0x44, 0x11, 0xa0, 0xdb, 0xcc, 0xab, 0x9b, 0x00, 0x11, 0x01, 0x10, - 0x20, 0x21, 0x43, 0x34, 0x43, 0x12, 0x00, 0x11, 0x54, 0x33, 0x24, 0x22, 0x43, 0x32, 0x35, 0x02, - 0xb9, 0xdd, 0xac, 0x9b, 0x08, 0x12, 0x91, 0xed, 0xcc, 0xbb, 0xab, 0x8a, 0x00, 0x12, 0x02, 0xb8, - 0xcc, 0xac, 0x9b, 0x08, 0x31, 0x36, 0x46, 0x43, 0x32, 0x11, 0xa0, 0xca, 0xcb, 0x9a, 0x09, 0x00, - 0x08, 0x08, 0x20, 0x55, 0x45, 0x53, 0x32, 0x01, 0xa9, 0xcc, 0xbc, 0xba, 0xab, 0xaa, 0x99, 0x89, - 0x08, 0x32, 0x44, 0x33, 0x44, 0x33, 0x24, 0x24, 0x33, 0x35, 0x22, 0x00, 0x00, 0x52, 0x44, 0x03, - 0xc8, 0xcc, 0xcb, 0x89, 0x20, 0x33, 0x03, 0xea, 0xcd, 0xcb, 0xaa, 0x99, 0x88, 0x88, 0x80, 0x88, - 0x88, 0x99, 0xcb, 0xbc, 0x0a, 0x64, 0x55, 0x53, 0x22, 0x12, 0xa8, 0xaa, 0xbb, 0x99, 0x08, 0x80, - 0xc9, 0xcb, 0xaa, 0x20, 0x46, 0x44, 0x43, 0x12, 0x81, 0xaa, 0xcc, 0xcb, 0xcb, 0xac, 0x9b, 0x89, - 0x00, 0x00, 0x00, 0x08, 0x42, 0x54, 0x44, 0x24, 0x23, 0x11, 0x01, 0x08, 0x10, 0x42, 0x43, 0x12, - 0xb9, 0xbf, 0xad, 0x8a, 0x21, 0x43, 0x23, 0xa0, 0xdc, 0xbc, 0xac, 0x9a, 0x89, 0x98, 0x98, 0x09, - 0x00, 0xa0, 0xeb, 0xcb, 0x8a, 0x72, 0x45, 0x34, 0x33, 0x01, 0xa8, 0xbb, 0x9a, 0x88, 0x21, 0x00, - 0xfb, 0xcc, 0xab, 0x8a, 0x21, 0x53, 0x34, 0x32, 0x02, 0x98, 0xbc, 0xbd, 0xcc, 0xcb, 0xab, 0x9a, - 0x88, 0x88, 0xaa, 0xba, 0x18, 0x66, 0x44, 0x34, 0x23, 0x12, 0x08, 0x08, 0x21, 0x43, 0x34, 0x82, - 0xba, 0xcd, 0xac, 0x8a, 0x31, 0x34, 0x33, 0x91, 0xfb, 0xcb, 0xbb, 0xab, 0x89, 0x99, 0x99, 0x99, - 0x88, 0x80, 0xca, 0xcc, 0x9b, 0x72, 0x47, 0x34, 0x32, 0x81, 0xa8, 0x9a, 0x8a, 0x21, 0x32, 0x82, - 0xdd, 0xbd, 0xac, 0x99, 0x00, 0x12, 0x11, 0x11, 0x00, 0x80, 0xa8, 0xec, 0xcc, 0xbc, 0xbc, 0xaa, - 0x99, 0x98, 0xa9, 0xbb, 0x09, 0x75, 0x44, 0x43, 0x23, 0x12, 0x00, 0x10, 0x31, 0x35, 0x34, 0x81, - 0xba, 0xbe, 0xab, 0x18, 0x43, 0x24, 0x12, 0xb8, 0xdc, 0xab, 0xab, 0xba, 0xaa, 0xa9, 0x99, 0x00, - 0x80, 0x80, 0xca, 0xbf, 0x8c, 0x72, 0x36, 0x35, 0x12, 0x81, 0xaa, 0x9a, 0x08, 0x32, 0x24, 0x90, - 0xdc, 0xac, 0x9b, 0x89, 0x01, 0x80, 0xca, 0xcb, 0x9c, 0x08, 0x12, 0xc8, 0xdd, 0xbc, 0xac, 0xa9, - 0x88, 0x89, 0x98, 0x99, 0x18, 0x55, 0x44, 0x24, 0x23, 0x12, 0x22, 0x42, 0x34, 0x34, 0x12, 0x90, - 0xdb, 0xbb, 0x9c, 0x21, 0x35, 0x23, 0x81, 0xda, 0xcb, 0xab, 0x9a, 0xbb, 0xbb, 0xac, 0x08, 0x33, - 0x33, 0x24, 0x90, 0xdb, 0xab, 0x72, 0x57, 0x43, 0x12, 0x80, 0xa9, 0xa9, 0x88, 0x21, 0x32, 0x92, - 0xfb, 0xbb, 0xaa, 0x89, 0x88, 0xda, 0xbd, 0xbd, 0xaa, 0x08, 0x12, 0xb8, 0xdf, 0xbc, 0xbb, 0x9a, - 0x89, 0x98, 0x99, 0x9b, 0x28, 0x47, 0x44, 0x33, 0x32, 0x22, 0x33, 0x44, 0x34, 0x25, 0x11, 0x99, - 0xba, 0xba, 0x89, 0x43, 0x35, 0x22, 0x90, 0xdb, 0xbc, 0xab, 0xbb, 0xbd, 0xac, 0x9a, 0x20, 0x34, - 0x25, 0x22, 0x81, 0xaa, 0x9a, 0x50, 0x56, 0x34, 0x23, 0x81, 0x98, 0xba, 0x9a, 0x09, 0x21, 0x12, - 0x88, 0xba, 0xbe, 0xbd, 0xcb, 0xcc, 0xbb, 0xcb, 0x9a, 0x00, 0x01, 0xfb, 0xcd, 0xcc, 0xab, 0x8a, - 0x09, 0x88, 0x99, 0xaa, 0x19, 0x73, 0x43, 0x34, 0x33, 0x33, 0x33, 0x44, 0x34, 0x25, 0x11, 0x88, - 0xaa, 0x89, 0x18, 0x21, 0x43, 0x22, 0x80, 0xdb, 0xbd, 0xbb, 0xdc, 0xbc, 0xbc, 0x99, 0x18, 0x43, - 0x34, 0x33, 0x13, 0x98, 0x89, 0x40, 0x47, 0x35, 0x33, 0x02, 0xa0, 0xba, 0xbc, 0xab, 0x09, 0x08, - 0x10, 0x01, 0xb8, 0xdd, 0xbc, 0xbd, 0xaa, 0x89, 0x00, 0x22, 0xa1, 0xef, 0xcc, 0xcb, 0xbb, 0x99, - 0x88, 0x90, 0xa9, 0xcb, 0x9a, 0x20, 0x44, 0x35, 0x34, 0x43, 0x33, 0x42, 0x43, 0x23, 0x13, 0x81, - 0x98, 0x88, 0x00, 0x10, 0x12, 0x22, 0x12, 0x98, 0xcb, 0xdc, 0xee, 0xcc, 0xac, 0x9b, 0x89, 0x31, - 0x53, 0x43, 0x23, 0x01, 0x98, 0x20, 0x54, 0x45, 0x33, 0x12, 0x90, 0xb9, 0xbc, 0xab, 0x89, 0x00, - 0x08, 0x99, 0xeb, 0xcc, 0xbb, 0xcb, 0x8a, 0x20, 0x43, 0x43, 0x81, 0xec, 0xcc, 0xbc, 0xbb, 0x8a, - 0x09, 0x98, 0xca, 0xbc, 0x9c, 0x09, 0x21, 0x44, 0x34, 0x24, 0x33, 0x32, 0x34, 0x34, 0x22, 0x12, - 0x10, 0x10, 0x08, 0x10, 0x00, 0x01, 0x00, 0x00, 0x01, 0xd0, 0xff, 0xcd, 0xcb, 0xbb, 0x9a, 0x08, - 0x33, 0x35, 0x34, 0x22, 0x01, 0x31, 0x54, 0x35, 0x34, 0x22, 0x00, 0xa9, 0xba, 0xbb, 0xa9, 0x99, - 0xb9, 0xdd, 0xdb, 0xbc, 0xbb, 0x9a, 0x08, 0x52, 0x34, 0x43, 0x02, 0xba, 0xbf, 0xbd, 0xbb, 0x9a, - 0x88, 0x99, 0xdb, 0xbc, 0xac, 0x99, 0x08, 0x31, 0x45, 0x34, 0x32, 0x32, 0x53, 0x43, 0x22, 0x12, - 0x10, 0x11, 0x00, 0x01, 0x00, 0x00, 0x21, 0x11, 0x12, 0xa0, 0xfd, 0xde, 0xbc, 0xbd, 0xab, 0x99, - 0x10, 0x33, 0x35, 0x23, 0x21, 0x42, 0x54, 0x53, 0x33, 0x23, 0x02, 0x80, 0xa9, 0x99, 0x99, 0xba, - 0xbd, 0xbe, 0xcc, 0xbc, 0xbb, 0xab, 0x09, 0x41, 0x44, 0x34, 0x22, 0x90, 0xca, 0xbd, 0xac, 0x9a, - 0x89, 0xa9, 0xdb, 0xbd, 0xbb, 0xab, 0x99, 0x18, 0x53, 0x44, 0x32, 0x33, 0x44, 0x43, 0x23, 0x13, - 0x12, 0x12, 0x00, 0x80, 0x89, 0x89, 0x21, 0x43, 0x34, 0x03, 0xc8, 0xde, 0xcd, 0xdb, 0xbb, 0xaa, - 0x88, 0x11, 0x23, 0x33, 0x33, 0x44, 0x54, 0x53, 0x34, 0x23, 0x23, 0x11, 0x01, 0x80, 0x89, 0xba, - 0xcc, 0xbd, 0xcc, 0xbc, 0xcb, 0xab, 0x9a, 0x19, 0x43, 0x34, 0x34, 0x12, 0x88, 0xba, 0xbc, 0xab, - 0xaa, 0xeb, 0xdc, 0xbb, 0xbc, 0xbb, 0xab, 0x9b, 0x09, 0x42, 0x34, 0x35, 0x34, 0x44, 0x32, 0x33, - 0x23, 0x22, 0x02, 0x81, 0x80, 0x99, 0x08, 0x63, 0x34, 0x23, 0xa0, 0xdc, 0xcd, 0xcc, 0xbb, 0xac, - 0x9a, 0x88, 0x10, 0x21, 0x32, 0x43, 0x53, 0x54, 0x34, 0x34, 0x43, 0x22, 0x12, 0x01, 0x88, 0x99, - 0xca, 0xdb, 0xcb, 0xbc, 0xbc, 0xac, 0xbb, 0xa9, 0x00, 0x43, 0x44, 0x23, 0x12, 0x80, 0x98, 0x98, - 0xa9, 0xdc, 0xcc, 0xcb, 0xbb, 0xbc, 0xbb, 0xac, 0xaa, 0x89, 0x10, 0x63, 0x53, 0x43, 0x32, 0x23, - 0x43, 0x32, 0x22, 0x12, 0x00, 0x80, 0x00, 0x73, 0x34, 0x14, 0x01, 0xa9, 0xcc, 0xbc, 0xcd, 0xcb, - 0xaa, 0x9b, 0x99, 0x00, 0x21, 0x12, 0x33, 0x55, 0x45, 0x34, 0x34, 0x42, 0x22, 0x12, 0x00, 0x89, - 0xaa, 0xcb, 0xbc, 0xbc, 0xdb, 0xbb, 0xcb, 0xbb, 0x9b, 0x18, 0x62, 0x33, 0x24, 0x22, 0x11, 0x11, - 0x90, 0xda, 0xdc, 0xbb, 0xcb, 0xca, 0xbb, 0xcb, 0xbb, 0xab, 0x89, 0x30, 0x54, 0x34, 0x23, 0x23, - 0x43, 0x43, 0x32, 0x23, 0x11, 0x11, 0x22, 0x44, 0x36, 0x34, 0x22, 0x00, 0xa9, 0xdb, 0xcd, 0xbd, - 0xcb, 0xab, 0xaa, 0x8a, 0x10, 0x11, 0x01, 0x31, 0x47, 0x45, 0x34, 0x43, 0x23, 0x23, 0x11, 0x90, - 0xa8, 0xcb, 0xbb, 0xcc, 0xcb, 0xbb, 0xbc, 0xbc, 0xab, 0x8a, 0x10, 0x44, 0x43, 0x32, 0x32, 0x32, - 0x02, 0xb8, 0xcd, 0xcc, 0xab, 0xcb, 0xbb, 0xbc, 0xac, 0xab, 0x99, 0x08, 0x42, 0x43, 0x23, 0x22, - 0x22, 0x34, 0x34, 0x33, 0x22, 0x32, 0x53, 0x45, 0x44, 0x24, 0x23, 0x12, 0x01, 0x98, 0xdb, 0xdc, - 0xbc, 0xad, 0xbb, 0xaa, 0x89, 0x08, 0x98, 0x80, 0x42, 0x56, 0x35, 0x34, 0x43, 0x22, 0x12, 0x01, - 0x80, 0x99, 0xbb, 0xbd, 0xbd, 0xcb, 0xca, 0xaa, 0xab, 0x99, 0x08, 0x31, 0x44, 0x33, 0x34, 0x32, - 0x22, 0x81, 0xb9, 0xcd, 0xbc, 0xad, 0xac, 0xcb, 0xaa, 0xaa, 0x9a, 0x88, 0x31, 0x33, 0x23, 0x02, - 0x11, 0x44, 0x35, 0x22, 0x88, 0x89, 0x31, 0x57, 0x45, 0x34, 0x33, 0x32, 0x22, 0x11, 0x88, 0xca, - 0xcd, 0xcd, 0xcb, 0xab, 0xaa, 0xa9, 0x99, 0xa9, 0x08, 0x73, 0x45, 0x34, 0x24, 0x33, 0x22, 0x21, - 0x11, 0x00, 0x98, 0xcc, 0xcc, 0xbc, 0xbb, 0xab, 0xaa, 0x99, 0x99, 0x00, 0x43, 0x44, 0x43, 0x23, - 0x23, 0x11, 0x80, 0xbb, 0xcc, 0xbd, 0xbd, 0xbc, 0xac, 0xaa, 0x89, 0x08, 0x00, 0x21, 0x11, 0x12, - 0x31, 0x42, 0x12, 0x90, 0xbc, 0xbd, 0x09, 0x54, 0x46, 0x44, 0x33, 0x24, 0x23, 0x22, 0x01, 0x98, - 0xba, 0xdd, 0xdb, 0xbc, 0xbb, 0xac, 0xab, 0x9a, 0x8a, 0x31, 0x56, 0x34, 0x34, 0x24, 0x23, 0x32, - 0x21, 0x12, 0x81, 0xb9, 0xce, 0xbc, 0xbc, 0xbb, 0xaa, 0x89, 0x89, 0x08, 0x21, 0x53, 0x34, 0x43, - 0x32, 0x12, 0x02, 0xa8, 0xca, 0xcc, 0xbd, 0xbd, 0xcb, 0xaa, 0x9a, 0x08, 0x00, 0x11, 0x00, 0x21, - 0x42, 0x33, 0x13, 0xda, 0xbe, 0xba, 0x99, 0x20, 0x55, 0x44, 0x43, 0x34, 0x33, 0x43, 0x22, 0x81, - 0x98, 0xca, 0xbc, 0xcd, 0xcb, 0xbb, 0xcb, 0xbb, 0x9a, 0x08, 0x53, 0x45, 0x43, 0x43, 0x23, 0x33, - 0x23, 0x23, 0x12, 0xa8, 0xbd, 0xbe, 0xcb, 0xbb, 0xbb, 0xba, 0x9a, 0x99, 0x11, 0x53, 0x34, 0x34, - 0x24, 0x21, 0x11, 0x80, 0x99, 0xda, 0xcc, 0xbd, 0xbc, 0xbb, 0x9a, 0x89, 0x08, 0x80, 0x00, 0x20, - 0x43, 0x25, 0x12, 0xca, 0xbd, 0xac, 0x88, 0x10, 0x11, 0x44, 0x54, 0x53, 0x43, 0x43, 0x22, 0x12, - 0x80, 0x99, 0xaa, 0xcc, 0xdb, 0xbc, 0xbc, 0xbc, 0xaa, 0x89, 0x30, 0x63, 0x34, 0x34, 0x24, 0x43, - 0x22, 0x23, 0x11, 0x88, 0xca, 0xcb, 0xcb, 0xbb, 0xcb, 0xcb, 0xaa, 0x9b, 0x08, 0x22, 0x34, 0x34, - 0x24, 0x23, 0x22, 0x11, 0x90, 0xdb, 0xdc, 0xcc, 0xbb, 0xbb, 0xaa, 0xa9, 0xa8, 0x99, 0x89, 0x31, - 0x54, 0x24, 0x02, 0xd9, 0xcc, 0xab, 0x0a, 0x10, 0x01, 0x11, 0x53, 0x46, 0x44, 0x34, 0x23, 0x13, - 0x01, 0x90, 0x88, 0x99, 0xcc, 0xcd, 0xcc, 0xba, 0xab, 0x99, 0x18, 0x32, 0x44, 0x35, 0x53, 0x33, - 0x34, 0x23, 0x12, 0x80, 0xaa, 0xbc, 0xbb, 0xbc, 0xdb, 0xcb, 0xac, 0xab, 0x89, 0x20, 0x42, 0x32, - 0x33, 0x34, 0x34, 0x33, 0x81, 0xda, 0xdc, 0xcb, 0xab, 0xbb, 0x9a, 0x9a, 0xba, 0xbb, 0xab, 0x19, - 0x54, 0x34, 0x12, 0xb9, 0xcf, 0xbb, 0x9a, 0x10, 0x12, 0x10, 0x20, 0x64, 0x46, 0x34, 0x24, 0x13, - 0x11, 0x80, 0x01, 0x01, 0xb8, 0xdd, 0xcd, 0xbb, 0xaa, 0x8a, 0x88, 0x21, 0x32, 0x35, 0x45, 0x34, - 0x34, 0x24, 0x22, 0x80, 0x99, 0xba, 0xbb, 0xab, 0xbc, 0xcc, 0xbc, 0xbb, 0xaa, 0x18, 0x21, 0x23, - 0x32, 0x54, 0x44, 0x34, 0x02, 0xa8, 0xcd, 0xcb, 0xaa, 0xaa, 0x99, 0xa9, 0xaa, 0xbc, 0xaa, 0x19, - 0x42, 0x43, 0x02, 0xc8, 0xdc, 0xbb, 0xbb, 0x88, 0x00, 0x88, 0x08, 0x72, 0x56, 0x34, 0x34, 0x32, - 0x12, 0x12, 0x22, 0x21, 0x90, 0xdd, 0xcd, 0xcb, 0xaa, 0x89, 0x08, 0x10, 0x01, 0x31, 0x45, 0x35, - 0x35, 0x33, 0x23, 0x11, 0x98, 0xa9, 0xbb, 0xdb, 0xcb, 0xcb, 0xcb, 0xbb, 0xaa, 0x99, 0x00, 0x11, - 0x10, 0x62, 0x54, 0x44, 0x12, 0x91, 0xcb, 0xbc, 0xba, 0x9a, 0x9a, 0xba, 0xdb, 0xaa, 0x99, 0x08, - 0x32, 0x23, 0xa1, 0xdb, 0xcc, 0xbb, 0xbc, 0xaa, 0xba, 0xcc, 0x89, 0x41, 0x56, 0x53, 0x43, 0x32, - 0x33, 0x32, 0x33, 0x24, 0x01, 0xca, 0xce, 0xbc, 0xbb, 0xa9, 0x88, 0x80, 0x00, 0x20, 0x55, 0x44, - 0x43, 0x24, 0x22, 0x12, 0x01, 0x88, 0x98, 0xcb, 0xdb, 0xcb, 0xca, 0xaa, 0xaa, 0x99, 0x8a, 0x89, - 0x00, 0x32, 0x37, 0x45, 0x23, 0x02, 0xa9, 0xcd, 0xba, 0xba, 0xaa, 0xbb, 0xbc, 0xbb, 0x89, 0x21, - 0x32, 0x13, 0xd9, 0xbe, 0xab, 0x9a, 0x99, 0xcb, 0xcc, 0xbc, 0x9a, 0x20, 0x73, 0x53, 0x34, 0x34, - 0x24, 0x43, 0x32, 0x32, 0x02, 0xa0, 0xdc, 0xdb, 0xba, 0xab, 0xaa, 0x9a, 0x8a, 0x28, 0x64, 0x44, - 0x34, 0x43, 0x22, 0x22, 0x12, 0x12, 0x00, 0xa9, 0xbd, 0xbd, 0xbc, 0xbb, 0xbb, 0xbb, 0xbc, 0xaa, - 0x89, 0x31, 0x45, 0x34, 0x25, 0x23, 0x80, 0xb9, 0xdb, 0xbb, 0xbc, 0xcc, 0xbb, 0xab, 0x88, 0x11, - 0x23, 0x80, 0xeb, 0xbc, 0xac, 0x09, 0x11, 0x80, 0xda, 0xbc, 0xcb, 0x99, 0x21, 0x63, 0x53, 0x53, - 0x43, 0x53, 0x23, 0x33, 0x12, 0x00, 0xa8, 0xca, 0xcc, 0xcb, 0xcb, 0xab, 0xab, 0x89, 0x31, 0x47, - 0x43, 0x33, 0x33, 0x32, 0x43, 0x33, 0x24, 0x01, 0xa8, 0xcc, 0xcc, 0xbb, 0xbb, 0xcb, 0xdb, 0xab, - 0x9b, 0x09, 0x42, 0x33, 0x34, 0x33, 0x14, 0x12, 0x80, 0xb9, 0xed, 0xdb, 0xcb, 0xaa, 0x88, 0x00, - 0x11, 0x81, 0xba, 0xcd, 0xaa, 0x89, 0x21, 0x01, 0x98, 0xcc, 0xbc, 0xab, 0x89, 0x21, 0x44, 0x44, - 0x54, 0x44, 0x43, 0x23, 0x21, 0x10, 0x10, 0x00, 0xa8, 0xfb, 0xdb, 0xcb, 0xab, 0x9a, 0x10, 0x43, - 0x44, 0x33, 0x32, 0x33, 0x44, 0x43, 0x43, 0x12, 0x01, 0x99, 0xdb, 0xcb, 0xcb, 0xbb, 0xcc, 0xbb, - 0xbb, 0x9a, 0x00, 0x21, 0x43, 0x34, 0x34, 0x34, 0x23, 0x82, 0xda, 0xbd, 0xad, 0x9b, 0x8a, 0x88, - 0x80, 0x98, 0xca, 0xcb, 0xab, 0x8a, 0x10, 0x11, 0x01, 0xb9, 0xbc, 0xcc, 0xaa, 0x8a, 0x31, 0x43, - 0x57, 0x54, 0x34, 0x24, 0x23, 0x12, 0x32, 0x32, 0x12, 0xc9, 0xdd, 0xbc, 0xac, 0x9b, 0x08, 0x21, - 0x32, 0x23, 0x32, 0x45, 0x45, 0x53, 0x33, 0x22, 0x02, 0x80, 0xa9, 0xcb, 0xcc, 0xcb, 0xcb, 0xcb, - 0xbb, 0xba, 0xa9, 0x98, 0x10, 0x42, 0x45, 0x43, 0x33, 0x13, 0x98, 0xca, 0xbc, 0xbb, 0xba, 0xaa, - 0xcb, 0xab, 0xcb, 0xbb, 0xac, 0xab, 0x88, 0x11, 0x22, 0x01, 0xd9, 0xbc, 0xbb, 0x08, 0x63, 0x24, - 0x33, 0x55, 0x63, 0x53, 0x33, 0x34, 0x33, 0x43, 0x12, 0x98, 0xda, 0xcc, 0xcb, 0xaa, 0x89, 0x00, - 0x00, 0x90, 0x88, 0x51, 0x46, 0x44, 0x43, 0x23, 0x22, 0x01, 0x90, 0x98, 0xcb, 0xcc, 0xbc, 0xcb, - 0xbb, 0xac, 0xbb, 0xab, 0x99, 0x10, 0x44, 0x44, 0x43, 0x22, 0x01, 0x80, 0x99, 0x9a, 0xaa, 0xbc, - 0xbd, 0xbc, 0xac, 0xba, 0xaa, 0xaa, 0x9a, 0x88, 0x20, 0x23, 0x01, 0xca, 0xab, 0x30, 0x57, 0x34, - 0x22, 0x00, 0x21, 0x64, 0x45, 0x53, 0x33, 0x24, 0x22, 0x81, 0xa8, 0xdb, 0xdb, 0xaa, 0x9a, 0x89, - 0x88, 0xa9, 0xbb, 0x9b, 0x73, 0x47, 0x34, 0x34, 0x32, 0x21, 0x01, 0x90, 0xa9, 0xbc, 0xbd, 0xbc, - 0xbc, 0xcb, 0xbb, 0xcc, 0x9a, 0x89, 0x20, 0x52, 0x33, 0x34, 0x22, 0x12, 0x12, 0x01, 0x80, 0xdb, - 0xbd, 0xcc, 0xbb, 0xbb, 0xbb, 0xbb, 0xab, 0x99, 0x10, 0x53, 0x12, 0x81, 0xaa, 0x29, 0x66, 0x34, - 0x33, 0x81, 0x98, 0x19, 0x73, 0x54, 0x34, 0x24, 0x22, 0x12, 0x00, 0xa9, 0xbc, 0xbc, 0xba, 0xaa, - 0x9a, 0xaa, 0xec, 0xbb, 0x8a, 0x73, 0x45, 0x34, 0x43, 0x22, 0x12, 0x00, 0xa8, 0xb9, 0xdb, 0xbb, - 0xbd, 0xcb, 0xbc, 0xbc, 0xbc, 0x9a, 0x89, 0x21, 0x53, 0x33, 0x34, 0x33, 0x24, 0x23, 0x02, 0xa0, - 0xdb, 0xcc, 0xbc, 0xbb, 0xac, 0xbb, 0xbb, 0x99, 0x18, 0x32, 0x33, 0x12, 0x80, 0x20, 0x66, 0x44, - 0x23, 0x12, 0x98, 0x9a, 0x09, 0x62, 0x45, 0x43, 0x24, 0x22, 0x12, 0x00, 0xaa, 0xca, 0xab, 0xbb, - 0xab, 0xbb, 0xdd, 0xcc, 0xbb, 0x0a, 0x63, 0x45, 0x24, 0x24, 0x22, 0x11, 0x88, 0x99, 0xa9, 0xaa, - 0xdb, 0xcc, 0xcb, 0xcc, 0xbb, 0xac, 0x8a, 0x88, 0x21, 0x33, 0x44, 0x34, 0x24, 0x33, 0x22, 0x01, - 0xa8, 0xdb, 0xbc, 0xbd, 0xbb, 0xdb, 0xba, 0x9a, 0x88, 0x11, 0x22, 0x11, 0x00, 0x31, 0x55, 0x35, - 0x34, 0x12, 0x90, 0xa9, 0xaa, 0x88, 0x42, 0x55, 0x53, 0x32, 0x33, 0x21, 0x88, 0xa9, 0xba, 0xba, - 0xac, 0xab, 0xfb, 0xdc, 0xdb, 0xaa, 0x08, 0x53, 0x44, 0x43, 0x33, 0x22, 0x10, 0x98, 0x88, 0x99, - 0xa9, 0xcd, 0xdc, 0xcb, 0xbc, 0xbc, 0x9a, 0x8a, 0x00, 0x11, 0x43, 0x44, 0x43, 0x33, 0x33, 0x13, - 0x01, 0xa9, 0xcc, 0xbd, 0xbc, 0xcb, 0xbb, 0xab, 0x8a, 0x10, 0x11, 0x01, 0x01, 0x31, 0x46, 0x45, - 0x33, 0x23, 0x81, 0xa9, 0xbb, 0xaa, 0x08, 0x63, 0x45, 0x43, 0x33, 0x23, 0x11, 0x90, 0x99, 0x99, - 0x9a, 0x99, 0xdb, 0xcf, 0xbd, 0xad, 0x9a, 0x10, 0x53, 0x34, 0x34, 0x33, 0x22, 0x01, 0x00, 0x10, - 0x80, 0xc9, 0xbf, 0xbe, 0xbc, 0xbc, 0xab, 0x9b, 0x8a, 0x08, 0x21, 0x45, 0x53, 0x24, 0x23, 0x23, - 0x21, 0x80, 0xb9, 0xbd, 0xbd, 0xdb, 0xbb, 0xbb, 0x9b, 0x88, 0x00, 0x01, 0x10, 0x41, 0x45, 0x44, - 0x43, 0x12, 0x81, 0x98, 0xaa, 0xaa, 0x99, 0x20, 0x73, 0x43, 0x34, 0x34, 0x22, 0x01, 0x00, 0x08, - 0x88, 0x80, 0xa8, 0xdf, 0xdc, 0xcb, 0xab, 0x89, 0x31, 0x63, 0x43, 0x33, 0x23, 0x12, 0x12, 0x22, - 0x22, 0xa1, 0xed, 0xcc, 0xbc, 0xbc, 0xcb, 0xaa, 0x9b, 0x89, 0x18, 0x42, 0x44, 0x34, 0x24, 0x32, - 0x22, 0x01, 0x88, 0xca, 0xbc, 0xcc, 0xcb, 0xbb, 0xab, 0x99, 0x09, 0x08, 0x00, 0x42, 0x44, 0x35, - 0x34, 0x22, 0x81, 0x98, 0xba, 0xab, 0x9a, 0x18, 0x53, 0x45, 0x53, 0x43, 0x32, 0x12, 0x02, 0x01, - 0x10, 0x10, 0x80, 0xfc, 0xcd, 0xbc, 0xbb, 0xaa, 0x08, 0x42, 0x34, 0x44, 0x22, 0x23, 0x32, 0x33, - 0x33, 0x82, 0xd9, 0xbe, 0xcd, 0xcb, 0xbb, 0xac, 0xbb, 0xaa, 0x09, 0x30, 0x54, 0x43, 0x24, 0x33, - 0x23, 0x12, 0x81, 0xa9, 0xda, 0xdb, 0xbc, 0xbc, 0xba, 0xba, 0x99, 0x99, 0x08, 0x42, 0x44, 0x44, - 0x43, 0x12, 0x81, 0x98, 0xaa, 0xaa, 0x99, 0x10, 0x42, 0x34, 0x45, 0x34, 0x33, 0x24, 0x22, 0x21, - 0x21, 0x11, 0x01, 0xfa, 0xdd, 0xbc, 0xcb, 0x9a, 0x89, 0x10, 0x42, 0x43, 0x33, 0x43, 0x33, 0x34, - 0x24, 0x11, 0x98, 0xdb, 0xcc, 0xbc, 0xbc, 0xbc, 0xbb, 0xac, 0x9a, 0x18, 0x32, 0x45, 0x43, 0x33, - 0x33, 0x22, 0x12, 0x80, 0xa8, 0xdc, 0xcc, 0xbb, 0xac, 0xbb, 0xaa, 0xaa, 0x8a, 0x30, 0x54, 0x35, - 0x34, 0x22, 0x01, 0x98, 0xaa, 0x9a, 0x8a, 0x10, 0x31, 0x53, 0x54, 0x34, 0x34, 0x43, 0x32, 0x23, - 0x32, 0x33, 0x22, 0xb0, 0xff, 0xbc, 0xcb, 0xba, 0x99, 0x09, 0x20, 0x42, 0x33, 0x34, 0x44, 0x43, - 0x33, 0x22, 0x80, 0xa8, 0xcc, 0xbd, 0xbd, 0xbc, 0xbc, 0xac, 0xaa, 0x89, 0x11, 0x42, 0x43, 0x24, - 0x33, 0x24, 0x22, 0x12, 0x81, 0xb9, 0xce, 0xcb, 0xbb, 0xbb, 0xbb, 0xbb, 0xab, 0x18, 0x73, 0x34, - 0x25, 0x23, 0x01, 0x80, 0x98, 0x89, 0x99, 0x88, 0x88, 0x21, 0x65, 0x44, 0x43, 0x33, 0x33, 0x43, - 0x32, 0x34, 0x43, 0x02, 0xea, 0xcc, 0xbc, 0xab, 0xaa, 0x9a, 0x88, 0x10, 0x33, 0x53, 0x35, 0x44, - 0x23, 0x23, 0x11, 0x00, 0x98, 0xdc, 0xcc, 0xbd, 0xbc, 0xbb, 0xab, 0x9a, 0x08, 0x20, 0x42, 0x34, - 0x35, 0x34, 0x33, 0x24, 0x01, 0xa8, 0xdb, 0xbc, 0xbb, 0xac, 0xbb, 0xba, 0xab, 0x89, 0x31, 0x45, - 0x44, 0x32, 0x22, 0x11, 0x00, 0x88, 0xa9, 0xca, 0xaa, 0x19, 0x65, 0x44, 0x24, 0x23, 0x23, 0x22, - 0x34, 0x34, 0x35, 0x13, 0xa0, 0xdd, 0xcb, 0xbb, 0xab, 0xaa, 0xa9, 0x88, 0x10, 0x42, 0x35, 0x44, - 0x33, 0x32, 0x33, 0x33, 0x13, 0xd9, 0xdd, 0xbd, 0xbc, 0xac, 0x9b, 0x9a, 0x99, 0x98, 0x00, 0x31, - 0x36, 0x45, 0x33, 0x33, 0x13, 0x98, 0xca, 0xbc, 0xbc, 0xab, 0xbb, 0xbb, 0xcb, 0x9a, 0x09, 0x31, - 0x35, 0x45, 0x33, 0x33, 0x23, 0x82, 0xa9, 0xbd, 0xbc, 0x19, 0x72, 0x53, 0x33, 0x32, 0x22, 0x22, - 0x44, 0x44, 0x34, 0x33, 0x81, 0xcb, 0xcd, 0xba, 0xbb, 0xaa, 0xaa, 0xaa, 0x89, 0x28, 0x53, 0x34, - 0x34, 0x43, 0x34, 0x24, 0x22, 0x80, 0xeb, 0xdc, 0xbb, 0xbc, 0xaa, 0xab, 0xaa, 0xbb, 0xaa, 0x19, - 0x54, 0x45, 0x34, 0x33, 0x12, 0x81, 0xaa, 0xca, 0xbb, 0xac, 0xab, 0xbb, 0xcc, 0xba, 0x9a, 0x8a, - 0x20, 0x54, 0x44, 0x24, 0x23, 0x02, 0x90, 0xba, 0xac, 0x0a, 0x42, 0x36, 0x43, 0x22, 0x22, 0x21, - 0x44, 0x35, 0x35, 0x23, 0x02, 0xb8, 0xeb, 0xbb, 0xbc, 0xba, 0xba, 0xbb, 0xbb, 0x89, 0x21, 0x34, - 0x44, 0x43, 0x44, 0x43, 0x23, 0x02, 0xa8, 0xcd, 0xcc, 0xcb, 0xba, 0xbb, 0xbb, 0xbd, 0xba, 0x89, - 0x31, 0x37, 0x35, 0x23, 0x13, 0x01, 0x98, 0xa8, 0x99, 0xbb, 0xcc, 0xdb, 0xbb, 0xbc, 0xba, 0x9a, - 0x89, 0x41, 0x54, 0x34, 0x43, 0x12, 0x81, 0x99, 0xaa, 0x88, 0x32, 0x45, 0x24, 0x23, 0x22, 0x33, - 0x55, 0x44, 0x43, 0x23, 0x02, 0x80, 0xaa, 0xbc, 0xbc, 0xcb, 0xcb, 0xbb, 0xac, 0x9a, 0x09, 0x10, - 0x10, 0x22, 0x45, 0x35, 0x35, 0x32, 0x01, 0xc9, 0xeb, 0xbb, 0xbc, 0xcb, 0xdb, 0xbb, 0xcb, 0x99, - 0x18, 0x43, 0x44, 0x32, 0x32, 0x12, 0x12, 0x02, 0x81, 0xb8, 0xdc, 0xcb, 0xac, 0xbb, 0xba, 0xbb, - 0xbb, 0x8b, 0x42, 0x47, 0x43, 0x23, 0x02, 0x80, 0x98, 0x08, 0x21, 0x33, 0x35, 0x43, 0x43, 0x43, - 0x35, 0x45, 0x33, 0x33, 0x12, 0x10, 0x08, 0xa9, 0xdc, 0xdb, 0xcb, 0xbb, 0xac, 0x9b, 0x9a, 0x98, - 0x99, 0x99, 0x42, 0x46, 0x35, 0x33, 0x22, 0x90, 0xcb, 0xdb, 0xbb, 0xbd, 0xcc, 0xbc, 0xbb, 0xaa, - 0x89, 0x20, 0x53, 0x43, 0x43, 0x33, 0x33, 0x23, 0x12, 0x90, 0xcb, 0xbc, 0xbc, 0xbb, 0xdb, 0xdb, - 0xbb, 0xbb, 0x89, 0x43, 0x36, 0x24, 0x13, 0x11, 0x08, 0x08, 0x20, 0x31, 0x34, 0x34, 0x53, 0x33, - 0x45, 0x43, 0x34, 0x32, 0x32, 0x32, 0x22, 0x81, 0xda, 0xdc, 0xcb, 0xbb, 0xac, 0xab, 0xbb, 0xca, - 0xcb, 0xba, 0x19, 0x63, 0x45, 0x23, 0x23, 0x00, 0x88, 0xa9, 0xcb, 0xbd, 0xcd, 0xcb, 0xcb, 0xba, - 0xaa, 0x89, 0x18, 0x42, 0x34, 0x35, 0x43, 0x22, 0x02, 0x81, 0x80, 0x89, 0xa9, 0xba, 0xdc, 0xdc, - 0xcb, 0xab, 0x9b, 0x08, 0x43, 0x34, 0x23, 0x13, 0x11, 0x11, 0x21, 0x44, 0x43, 0x43, 0x33, 0x24, - 0x33, 0x34, 0x34, 0x35, 0x43, 0x42, 0x22, 0x01, 0xa8, 0xdb, 0xbb, 0xac, 0xac, 0xcb, 0xbc, 0xbc, - 0xbc, 0xbb, 0x9a, 0x20, 0x46, 0x43, 0x32, 0x11, 0x00, 0x10, 0x98, 0xcb, 0xbd, 0xbe, 0xbc, 0xbc, - 0xcb, 0xab, 0x8a, 0x18, 0x52, 0x43, 0x34, 0x23, 0x22, 0x21, 0x11, 0x21, 0x12, 0x80, 0xeb, 0xcd, - 0xcc, 0xbb, 0xbb, 0x8a, 0x10, 0x42, 0x33, 0x33, 0x23, 0x22, 0x43, 0x44, 0x43, 0x34, 0x43, 0x23, - 0x13, 0x22, 0x31, 0x63, 0x53, 0x33, 0x24, 0x12, 0x98, 0xaa, 0xbb, 0xba, 0xcb, 0xec, 0xcc, 0xcc, - 0xbb, 0xbb, 0x9c, 0x89, 0x20, 0x44, 0x33, 0x23, 0x33, 0x32, 0x13, 0x90, 0xcc, 0xcd, 0xeb, 0xcb, - 0xdb, 0xba, 0xab, 0x89, 0x10, 0x43, 0x44, 0x32, 0x32, 0x22, 0x33, 0x43, 0x33, 0x13, 0xa8, 0xdd, - 0xcc, 0xbc, 0xbb, 0xab, 0x8a, 0x18, 0x32, 0x33, 0x34, 0x33, 0x43, 0x34, 0x36, 0x34, 0x43, 0x22, - 0x22, 0x01, 0x10, 0x10, 0x43, 0x35, 0x43, 0x12, 0x00, 0x99, 0x08, 0x11, 0x81, 0xfb, 0xde, 0xdb, - 0xcb, 0xbb, 0xbb, 0x9b, 0x0a, 0x31, 0x34, 0x35, 0x43, 0x33, 0x33, 0x12, 0x88, 0xca, 0xcc, 0xcd, - 0xbc, 0xbd, 0xbb, 0xab, 0x89, 0x20, 0x34, 0x34, 0x33, 0x43, 0x34, 0x34, 0x43, 0x22, 0x81, 0xb8, - 0xdc, 0xbc, 0xcc, 0xaa, 0xaa, 0x89, 0x08, 0x21, 0x21, 0x33, 0x43, 0x34, 0x45, 0x43, 0x24, 0x32, - 0x21, 0x10, 0x08, 0x00, 0x20, 0x32, 0x34, 0x23, 0x01, 0x88, 0x31, 0x55, 0x23, 0x91, 0xfb, 0xbf, - 0xcc, 0xcb, 0xbb, 0xab, 0xaa, 0x08, 0x21, 0x53, 0x53, 0x42, 0x22, 0x23, 0x12, 0x80, 0x99, 0xdc, - 0xcd, 0xdb, 0xcb, 0xaa, 0x9a, 0x09, 0x20, 0x22, 0x43, 0x43, 0x34, 0x34, 0x25, 0x23, 0x11, 0x80, - 0xba, 0xcd, 0xbc, 0xbc, 0xbb, 0xaa, 0x99, 0x00, 0x20, 0x22, 0x34, 0x44, 0x44, 0x53, 0x32, 0x33, - 0x23, 0x11, 0x10, 0x80, 0x01, 0x10, 0x10, 0x12, 0x21, 0x10, 0x63, 0x45, 0x24, 0x13, 0xa0, 0xce, - 0xcd, 0xbc, 0xcb, 0xab, 0xab, 0x8a, 0x09, 0x21, 0x43, 0x44, 0x43, 0x33, 0x14, 0x12, 0x80, 0xb9, - 0xcc, 0xcd, 0xbc, 0xbc, 0xab, 0x9a, 0x09, 0x10, 0x31, 0x53, 0x44, 0x43, 0x34, 0x33, 0x23, 0x02, - 0x98, 0xcc, 0xcc, 0xcb, 0xbb, 0xab, 0xab, 0xa9, 0x88, 0x11, 0x52, 0x53, 0x53, 0x43, 0x43, 0x32, - 0x33, 0x22, 0x12, 0x00, 0x01, 0x88, 0x99, 0x99, 0x99, 0x80, 0x32, 0x67, 0x43, 0x33, 0x02, 0xc9, - 0xdd, 0xbc, 0xbc, 0xac, 0xbb, 0xba, 0x99, 0x89, 0x10, 0x43, 0x45, 0x34, 0x33, 0x23, 0x02, 0x80, - 0xba, 0xdd, 0xcc, 0xcb, 0xcb, 0xaa, 0xaa, 0x99, 0x80, 0x31, 0x63, 0x44, 0x24, 0x24, 0x22, 0x12, - 0x01, 0xa9, 0xcc, 0xcb, 0xcb, 0xbb, 0xbb, 0xba, 0x9b, 0x89, 0x21, 0x54, 0x34, 0x35, 0x43, 0x33, - 0x34, 0x33, 0x23, 0x11, 0x01, 0x90, 0x99, 0xbb, 0xab, 0x9a, 0x08, 0x54, 0x46, 0x43, 0x22, 0x90, - 0xeb, 0xdb, 0xcb, 0xbb, 0xac, 0xbb, 0xcb, 0xaa, 0x89, 0x18, 0x44, 0x44, 0x33, 0x24, 0x12, 0x00, - 0x90, 0xa9, 0xeb, 0xdb, 0xbc, 0xbc, 0xbb, 0xba, 0xaa, 0x08, 0x31, 0x56, 0x53, 0x33, 0x33, 0x33, - 0x12, 0x90, 0xca, 0xcc, 0xcb, 0xcb, 0xbb, 0xbb, 0xbc, 0x9a, 0x08, 0x31, 0x35, 0x35, 0x34, 0x43, - 0x43, 0x24, 0x33, 0x22, 0x12, 0x80, 0xa8, 0xaa, 0xbb, 0xaa, 0x8a, 0x20, 0x46, 0x35, 0x24, 0x01, - 0xc9, 0xdb, 0xbc, 0xbb, 0xbc, 0xcb, 0xdb, 0xbb, 0xba, 0x8a, 0x30, 0x45, 0x53, 0x32, 0x32, 0x11, - 0x01, 0x80, 0xa8, 0xda, 0xdc, 0xdb, 0xcb, 0xbb, 0xbb, 0xaa, 0x08, 0x42, 0x45, 0x43, 0x24, 0x23, - 0x22, 0x01, 0x80, 0xb9, 0xbd, 0xcc, 0xcb, 0xbb, 0xac, 0xab, 0x99, 0x00, 0x32, 0x44, 0x34, 0x53, - 0x33, 0x35, 0x34, 0x24, 0x12, 0x01, 0x90, 0xa9, 0xaa, 0x9a, 0x8a, 0x09, 0x31, 0x54, 0x43, 0x13, - 0x90, 0xeb, 0xbc, 0xcb, 0xbb, 0xcb, 0xcc, 0xdb, 0xbb, 0xba, 0x09, 0x31, 0x54, 0x33, 0x23, 0x33, - 0x32, 0x22, 0x02, 0xa0, 0xdc, 0xcd, 0xcc, 0xbc, 0xba, 0xbb, 0x99, 0x18, 0x43, 0x54, 0x33, 0x34, - 0x23, 0x13, 0x12, 0x80, 0xb9, 0xcd, 0xbd, 0xbc, 0xcb, 0xab, 0x9a, 0x88, 0x18, 0x21, 0x34, 0x35, - 0x44, 0x34, 0x35, 0x24, 0x23, 0x22, 0x00, 0x99, 0xa9, 0xaa, 0x9a, 0x99, 0x10, 0x41, 0x33, 0x33, - 0x81, 0xeb, 0xcd, 0xbb, 0xac, 0xba, 0xdc, 0xbc, 0xbd, 0xbc, 0x9a, 0x08, 0x31, 0x43, 0x23, 0x33, - 0x43, 0x44, 0x22, 0x12, 0x98, 0xdb, 0xcd, 0xcb, 0xbc, 0xba, 0xba, 0x99, 0x00, 0x43, 0x35, 0x34, - 0x24, 0x23, 0x22, 0x12, 0x00, 0xb9, 0xdd, 0xbc, 0xad, 0xab, 0x9b, 0x8a, 0x89, 0x00, 0x00, 0x42, - 0x54, 0x44, 0x44, 0x33, 0x34, 0x23, 0x12, 0x80, 0x99, 0x99, 0x99, 0x89, 0x08, 0x00, 0x80, 0x01, - 0x88, 0xb9, 0xde, 0xbc, 0xac, 0xab, 0xcb, 0xec, 0xdb, 0xcb, 0xaa, 0x9a, 0x00, 0x21, 0x22, 0x21, - 0x53, 0x44, 0x34, 0x33, 0x01, 0xb8, 0xcc, 0xbd, 0xdb, 0xba, 0xbb, 0xbb, 0x99, 0x18, 0x43, 0x35, - 0x44, 0x32, 0x33, 0x23, 0x22, 0x82, 0xc9, 0xce, 0xdb, 0xab, 0xab, 0x9a, 0x99, 0x98, 0x99, 0x8a, - 0x41, 0x56, 0x44, 0x34, 0x34, 0x33, 0x32, 0x11, 0x00, 0x98, 0x89, 0x88, 0x08, 0x01, 0x88, 0xba, - 0xac, 0xcb, 0xba, 0xbd, 0xbd, 0xbb, 0xba, 0xfb, 0xcc, 0xdb, 0xbb, 0xbb, 0x99, 0x08, 0x88, 0x80, - 0x31, 0x57, 0x34, 0x34, 0x22, 0x80, 0xb9, 0xcc, 0xbb, 0xad, 0xcb, 0xbb, 0xba, 0x9a, 0x18, 0x41, - 0x53, 0x43, 0x43, 0x32, 0x33, 0x22, 0x82, 0xea, 0xcc, 0xcb, 0xba, 0xaa, 0x99, 0x98, 0x99, 0xcb, - 0x9b, 0x41, 0x47, 0x44, 0x43, 0x43, 0x32, 0x12, 0x12, 0x00, 0x08, 0x08, 0x20, 0x21, 0x02, 0xa9, - 0xdc, 0xbb, 0xbb, 0xac, 0xcb, 0xbb, 0xbb, 0xdb, 0xcc, 0xbc, 0xad, 0xab, 0xaa, 0x99, 0x99, 0xba, - 0x9b, 0x51, 0x47, 0x34, 0x24, 0x12, 0x98, 0xab, 0xbc, 0xbb, 0xbc, 0xbc, 0xcb, 0xbb, 0xab, 0x88, - 0x32, 0x44, 0x53, 0x33, 0x24, 0x23, 0x12, 0x90, 0xdb, 0xbd, 0xbc, 0xab, 0x99, 0x89, 0x90, 0xeb, - 0xac, 0x0a, 0x42, 0x46, 0x53, 0x43, 0x32, 0x32, 0x22, 0x22, 0x22, 0x11, 0x31, 0x43, 0x24, 0x01, - 0xb9, 0xcd, 0xbb, 0xac, 0xab, 0xbb, 0xab, 0xdb, 0xcc, 0xbb, 0xbd, 0xaa, 0xaa, 0x89, 0xa9, 0xdb, - 0xbb, 0x8a, 0x62, 0x55, 0x43, 0x23, 0x81, 0xa9, 0xab, 0xcb, 0xba, 0xcb, 0xbc, 0xac, 0xcb, 0xba, - 0x89, 0x10, 0x33, 0x36, 0x24, 0x23, 0x22, 0x00, 0x99, 0xcb, 0xdc, 0xac, 0x9a, 0x89, 0x88, 0xb9, - 0xbe, 0x9b, 0x31, 0x55, 0x54, 0x33, 0x34, 0x23, 0x33, 0x33, 0x25, 0x43, 0x22, 0x32, 0x23, 0x23, - 0x00, 0xc9, 0xdc, 0xcb, 0xab, 0xbb, 0xab, 0xba, 0xce, 0xcb, 0xbb, 0xac, 0x88, 0x08, 0x88, 0xb9, - 0xcc, 0xab, 0x19, 0x64, 0x35, 0x33, 0x12, 0xa9, 0xbb, 0xac, 0x9a, 0xaa, 0xcc, 0xbc, 0xbc, 0xbb, - 0x9c, 0x09, 0x10, 0x33, 0x35, 0x23, 0x02, 0x80, 0x89, 0x89, 0xfb, 0xbd, 0xbb, 0x9a, 0x88, 0x90, - 0xca, 0x9a, 0x51, 0x55, 0x63, 0x43, 0x33, 0x33, 0x32, 0x53, 0x34, 0x25, 0x33, 0x33, 0x32, 0x22, - 0x12, 0x81, 0xc9, 0xcc, 0xac, 0xba, 0xbb, 0xbb, 0xdd, 0xcc, 0xbb, 0xbb, 0x89, 0x08, 0x80, 0xa8, - 0xdc, 0xbb, 0x09, 0x52, 0x45, 0x24, 0x02, 0xa0, 0xaa, 0x9b, 0x99, 0x98, 0xcb, 0xcc, 0xcc, 0xbb, - 0xac, 0x9a, 0x00, 0x10, 0x42, 0x23, 0x01, 0x89, 0x89, 0x00, 0x91, 0xde, 0xbc, 0xab, 0x9a, 0x99, - 0x8a, 0x51, 0x45, 0x34, 0x35, 0x34, 0x33, 0x33, 0x12, 0x53, 0x44, 0x43, 0x24, 0x33, 0x22, 0x22, - 0x22, 0x12, 0x90, 0xcb, 0xaa, 0xab, 0xba, 0xbc, 0xef, 0xbc, 0xbc, 0xbb, 0x99, 0x88, 0x98, 0xb8, - 0xdc, 0xbb, 0x8a, 0x31, 0x56, 0x43, 0x02, 0x80, 0xaa, 0x8a, 0x08, 0x81, 0xb8, 0xbe, 0xcd, 0xcb, - 0xac, 0x9b, 0x99, 0x08, 0x20, 0x23, 0x12, 0x99, 0x8a, 0x40, 0x24, 0xa8, 0xbd, 0xcb, 0xbb, 0xbc, - 0x9b, 0x38, 0x57, 0x43, 0x43, 0x43, 0x24, 0x12, 0x11, 0x21, 0x35, 0x34, 0x34, 0x24, 0x22, 0x12, - 0x22, 0x12, 0x90, 0xab, 0x8a, 0x98, 0x99, 0xca, 0xdf, 0xcd, 0xcb, 0xab, 0x89, 0x08, 0x98, 0xb9, - 0xdd, 0xbb, 0x9a, 0x28, 0x45, 0x43, 0x12, 0x88, 0x99, 0x99, 0x10, 0x11, 0x80, 0xdb, 0xdd, 0xcc, - 0xac, 0xab, 0x9a, 0x99, 0x80, 0x21, 0x02, 0x98, 0x89, 0x51, 0x34, 0x12, 0x90, 0x98, 0xda, 0xbc, - 0xbd, 0x8a, 0x31, 0x35, 0x45, 0x34, 0x24, 0x23, 0x12, 0x32, 0x45, 0x44, 0x33, 0x24, 0x12, 0x01, - 0x00, 0x00, 0x98, 0x9a, 0x89, 0x80, 0x88, 0xcb, 0xdd, 0xcd, 0xcb, 0xaa, 0x89, 0x00, 0x00, 0xa8, - 0xce, 0xbd, 0xba, 0x08, 0x52, 0x24, 0x12, 0x90, 0xaa, 0x99, 0x20, 0x23, 0x33, 0x91, 0xed, 0xce, - 0xcb, 0xab, 0xaa, 0xaa, 0x89, 0x08, 0x80, 0x98, 0x09, 0x52, 0x34, 0x33, 0x33, 0x25, 0x02, 0xb9, - 0xde, 0xab, 0x89, 0x28, 0x42, 0x44, 0x33, 0x22, 0x22, 0x63, 0x36, 0x45, 0x43, 0x23, 0x22, 0x00, - 0x80, 0x80, 0x99, 0xaa, 0x9a, 0x89, 0xa9, 0xdb, 0xbe, 0xcd, 0xbb, 0xaa, 0x10, 0x32, 0x24, 0x81, - 0xec, 0xbc, 0xab, 0x0a, 0x32, 0x35, 0x12, 0xa8, 0xbb, 0x9b, 0x28, 0x43, 0x45, 0x22, 0xa0, 0xce, - 0xcc, 0xcb, 0xba, 0xba, 0xaa, 0x8a, 0x89, 0xaa, 0x8a, 0x30, 0x45, 0x53, 0x43, 0x43, 0x23, 0x02, - 0xa9, 0xbc, 0xab, 0x99, 0x19, 0x21, 0x22, 0x01, 0x08, 0x74, 0x67, 0x34, 0x35, 0x33, 0x32, 0x21, - 0x10, 0x00, 0x98, 0xaa, 0xab, 0xaa, 0xaa, 0xdc, 0xbe, 0xbd, 0xbc, 0x9a, 0x19, 0x32, 0x34, 0x22, - 0xa8, 0xbe, 0xac, 0x89, 0x21, 0x24, 0x03, 0xa9, 0xcc, 0xaa, 0x99, 0x00, 0x33, 0x34, 0x23, 0xb0, - 0xcf, 0xbd, 0xbd, 0xac, 0xab, 0xaa, 0x9a, 0xaa, 0xaa, 0x9a, 0x20, 0x54, 0x44, 0x34, 0x34, 0x33, - 0x12, 0x98, 0xa9, 0x9a, 0x88, 0x99, 0xb9, 0xdd, 0xcb, 0x8a, 0x62, 0x55, 0x53, 0x33, 0x34, 0x32, - 0x23, 0x11, 0x80, 0x98, 0x89, 0x99, 0x99, 0xdb, 0xdd, 0xcc, 0xcb, 0xab, 0x8a, 0x10, 0x32, 0x14, - 0x81, 0xb9, 0xbb, 0x0a, 0x52, 0x43, 0x13, 0x98, 0xdb, 0xbb, 0xbb, 0x9b, 0x20, 0x53, 0x43, 0x23, - 0xa1, 0xed, 0xcd, 0xcb, 0xbb, 0xab, 0xab, 0xaa, 0xbb, 0xbb, 0x9a, 0x30, 0x56, 0x54, 0x43, 0x33, - 0x32, 0x21, 0x00, 0x80, 0x88, 0x99, 0xba, 0xbe, 0xcd, 0xbb, 0x8a, 0x20, 0x56, 0x34, 0x35, 0x43, - 0x32, 0x12, 0x11, 0x01, 0x00, 0x00, 0x80, 0xa9, 0xdd, 0xdc, 0xdb, 0xab, 0xab, 0x89, 0x11, 0x21, - 0x01, 0x99, 0xaa, 0x28, 0x44, 0x35, 0x23, 0x01, 0xa9, 0xbc, 0xad, 0xab, 0x9a, 0x00, 0x42, 0x25, - 0x13, 0xa8, 0xcf, 0xbc, 0xbc, 0xaa, 0xa9, 0xba, 0xbc, 0xbc, 0xaa, 0x89, 0x31, 0x46, 0x44, 0x43, - 0x32, 0x23, 0x12, 0x11, 0x10, 0x00, 0x80, 0xba, 0xee, 0xdb, 0xbb, 0xaa, 0x18, 0x44, 0x35, 0x35, - 0x32, 0x33, 0x22, 0x23, 0x22, 0x33, 0x33, 0x02, 0xda, 0xde, 0xcc, 0xcb, 0xab, 0x9a, 0x89, 0x08, - 0x80, 0x98, 0x98, 0x10, 0x54, 0x34, 0x43, 0x12, 0x80, 0xaa, 0xbb, 0xbc, 0xbb, 0x8a, 0x21, 0x35, - 0x24, 0xa0, 0xdc, 0xbd, 0xac, 0x9b, 0xa9, 0xa9, 0xbc, 0xbd, 0xac, 0x9a, 0x00, 0x33, 0x45, 0x44, - 0x33, 0x33, 0x23, 0x32, 0x32, 0x34, 0x24, 0x81, 0xc9, 0xce, 0xcc, 0xab, 0x9b, 0x10, 0x53, 0x34, - 0x33, 0x25, 0x32, 0x33, 0x43, 0x33, 0x43, 0x22, 0x90, 0xea, 0xcc, 0xcb, 0xac, 0xab, 0x9a, 0x99, - 0x99, 0xaa, 0x9a, 0x09, 0x53, 0x44, 0x34, 0x22, 0x11, 0x98, 0xb9, 0xca, 0xaa, 0x9a, 0x30, 0x53, - 0x23, 0xa0, 0xcd, 0xbd, 0xac, 0x99, 0x88, 0x99, 0xcc, 0xbd, 0xbc, 0xaa, 0x89, 0x28, 0x52, 0x53, - 0x34, 0x23, 0x33, 0x42, 0x53, 0x33, 0x43, 0x11, 0x90, 0xda, 0xcd, 0xcb, 0xaa, 0x8a, 0x10, 0x32, - 0x34, 0x34, 0x44, 0x42, 0x32, 0x43, 0x33, 0x33, 0x12, 0x90, 0xcc, 0xcd, 0xcb, 0xab, 0xba, 0xaa, - 0xbb, 0xbc, 0xba, 0xab, 0x19, 0x52, 0x44, 0x24, 0x12, 0x01, 0x98, 0xa9, 0xa9, 0x08, 0x31, 0x45, - 0x23, 0x91, 0xdb, 0xbd, 0xab, 0xaa, 0x88, 0x98, 0xeb, 0xcd, 0xcb, 0xab, 0x9b, 0x89, 0x10, 0x34, - 0x35, 0x35, 0x42, 0x33, 0x34, 0x34, 0x24, 0x23, 0x01, 0xa8, 0xcd, 0xcc, 0xba, 0x9b, 0x99, 0x00, - 0x20, 0x43, 0x44, 0x43, 0x43, 0x34, 0x34, 0x24, 0x13, 0x02, 0x98, 0xdb, 0xcb, 0xac, 0xbb, 0xba, - 0xbc, 0xbc, 0xbb, 0xac, 0x99, 0x08, 0x31, 0x34, 0x24, 0x12, 0x01, 0x98, 0xa9, 0x09, 0x63, 0x44, - 0x24, 0x12, 0x90, 0xb9, 0xbb, 0x9c, 0x88, 0xa8, 0xdc, 0xcd, 0xcb, 0xbb, 0xcb, 0xaa, 0x9a, 0x00, - 0x52, 0x44, 0x53, 0x32, 0x43, 0x33, 0x34, 0x33, 0x12, 0x80, 0xeb, 0xbc, 0xbc, 0xbb, 0xab, 0x99, - 0x09, 0x21, 0x52, 0x53, 0x44, 0x53, 0x43, 0x33, 0x24, 0x12, 0x01, 0xa8, 0xcb, 0xbc, 0xcb, 0xbb, - 0xdb, 0xbb, 0xcb, 0xbb, 0xab, 0xab, 0x89, 0x11, 0x22, 0x32, 0x02, 0xb8, 0xcb, 0x18, 0x66, 0x44, - 0x34, 0x33, 0x23, 0x00, 0x89, 0x09, 0x08, 0xa8, 0xec, 0xcc, 0xcb, 0xcb, 0xcb, 0xcb, 0xaa, 0x8a, - 0x20, 0x53, 0x44, 0x32, 0x43, 0x33, 0x34, 0x33, 0x23, 0x81, 0xca, 0xbd, 0xbc, 0xcb, 0xba, 0xaa, - 0x98, 0x00, 0x22, 0x44, 0x63, 0x53, 0x43, 0x33, 0x43, 0x33, 0x12, 0x90, 0xba, 0xbd, 0xcb, 0xbb, - 0xbc, 0xbb, 0xcc, 0xba, 0xac, 0xbb, 0xaa, 0x99, 0x89, 0x89, 0xba, 0xbe, 0xbc, 0x8a, 0x41, 0x54, - 0x44, 0x24, 0x23, 0x13, 0x21, 0x21, 0x21, 0x81, 0xb9, 0xce, 0xbc, 0xbc, 0xbd, 0xbc, 0xbb, 0x9a, - 0x09, 0x32, 0x35, 0x35, 0x43, 0x43, 0x33, 0x33, 0x23, 0x02, 0xb8, 0xdc, 0xbc, 0xcb, 0xab, 0xaa, - 0x89, 0x08, 0x11, 0x43, 0x44, 0x35, 0x34, 0x34, 0x43, 0x33, 0x22, 0x00, 0xa9, 0xbc, 0xcc, 0xbb, - 0xbb, 0xaa, 0xba, 0xcb, 0xbd, 0xbc, 0xbb, 0x9a, 0xa8, 0xda, 0xcc, 0xcc, 0xbb, 0xaa, 0x08, 0x41, - 0x44, 0x44, 0x32, 0x24, 0x23, 0x33, 0x33, 0x02, 0x90, 0xbb, 0xdd, 0xdb, 0xdb, 0xbb, 0xac, 0xab, - 0x89, 0x00, 0x32, 0x44, 0x43, 0x43, 0x34, 0x42, 0x22, 0x11, 0x80, 0xbb, 0xbd, 0xbc, 0xbb, 0xbb, - 0xaa, 0x99, 0x28, 0x53, 0x44, 0x53, 0x43, 0x43, 0x33, 0x33, 0x13, 0x11, 0x99, 0xcc, 0xdb, 0xca, - 0x9a, 0x8a, 0x89, 0x98, 0xba, 0xbc, 0xbc, 0x9a, 0x89, 0xdb, 0xed, 0xdb, 0xbb, 0xab, 0x9a, 0x08, - 0x32, 0x54, 0x53, 0x43, 0x33, 0x34, 0x24, 0x22, 0x11, 0x88, 0xb9, 0xcc, 0xcc, 0xcb, 0xcb, 0xba, - 0xa9, 0x88, 0x11, 0x33, 0x53, 0x43, 0x44, 0x33, 0x24, 0x22, 0x80, 0xaa, 0xbc, 0xbc, 0xcb, 0xbb, - 0xba, 0xaa, 0x09, 0x31, 0x36, 0x45, 0x43, 0x33, 0x43, 0x23, 0x22, 0x11, 0x88, 0xca, 0xdb, 0xac, - 0xac, 0x99, 0x89, 0x80, 0x99, 0xaa, 0xab, 0x89, 0x88, 0xfb, 0xec, 0xcc, 0xbc, 0xbb, 0xab, 0x9b, - 0x88, 0x21, 0x44, 0x35, 0x35, 0x44, 0x33, 0x23, 0x23, 0x11, 0x88, 0xca, 0xcc, 0xbc, 0xbc, 0xac, - 0xab, 0x99, 0x00, 0x20, 0x42, 0x43, 0x44, 0x43, 0x43, 0x12, 0x01, 0x98, 0xba, 0xdb, 0xbb, 0xbc, - 0xcb, 0xba, 0x9a, 0x18, 0x43, 0x35, 0x35, 0x43, 0x43, 0x33, 0x32, 0x02, 0x80, 0xb9, 0xdb, 0xcc, - 0xbb, 0xba, 0xaa, 0x99, 0x98, 0x98, 0x08, 0x10, 0x22, 0x03, 0xfc, 0xbf, 0xcd, 0xbb, 0xcb, 0xab, - 0xab, 0x99, 0x08, 0x53, 0x36, 0x44, 0x33, 0x34, 0x33, 0x32, 0x02, 0x80, 0xcb, 0xbd, 0xcc, 0xcb, - 0xba, 0x9a, 0x8a, 0x18, 0x21, 0x44, 0x43, 0x34, 0x43, 0x23, 0x22, 0x00, 0x99, 0xdb, 0xcb, 0xdb, - 0xbb, 0xbb, 0xac, 0x99, 0x10, 0x53, 0x34, 0x35, 0x43, 0x43, 0x32, 0x22, 0x01, 0x98, 0xba, 0xcd, - 0xcb, 0xbb, 0xab, 0xaa, 0x89, 0x80, 0x11, 0x22, 0x33, 0x14, 0xb8, 0xdf, 0xdb, 0xcb, 0xcb, 0xcb, - 0xbb, 0xbb, 0xab, 0x28, 0x54, 0x35, 0x34, 0x34, 0x33, 0x43, 0x23, 0x12, 0x88, 0xcb, 0xbd, 0xcc, - 0xba, 0xab, 0xaa, 0x89, 0x18, 0x43, 0x35, 0x44, 0x32, 0x33, 0x32, 0x12, 0x81, 0xa9, 0xcc, 0xdc, - 0xcb, 0xcb, 0xaa, 0x9a, 0x08, 0x20, 0x34, 0x53, 0x34, 0x34, 0x34, 0x24, 0x11, 0x00, 0x99, 0xca, - 0xcb, 0xcb, 0xbb, 0xac, 0x99, 0x08, 0x21, 0x32, 0x22, 0x01, 0x98, 0xcb, 0xdc, 0xdb, 0xcc, 0xcb, - 0xdb, 0xab, 0xab, 0x99, 0x21, 0x44, 0x34, 0x44, 0x33, 0x43, 0x43, 0x22, 0x02, 0xa8, 0xcb, 0xbc, - 0xbc, 0xbc, 0xba, 0xba, 0x09, 0x31, 0x45, 0x34, 0x33, 0x43, 0x22, 0x22, 0x11, 0x81, 0xa9, 0xce, - 0xcc, 0xac, 0xab, 0x9a, 0x99, 0x18, 0x20, 0x43, 0x35, 0x35, 0x44, 0x33, 0x23, 0x11, 0x81, 0xa9, - 0xcb, 0xcc, 0xdb, 0xba, 0xab, 0x88, 0x20, 0x32, 0x12, 0x80, 0x80, 0xa0, 0xda, 0xdc, 0xdb, 0xbc, - 0xad, 0xbc, 0xba, 0x9a, 0x89, 0x21, 0x45, 0x34, 0x34, 0x43, 0x33, 0x43, 0x23, 0x11, 0xa8, 0xdb, - 0xbc, 0xbd, 0xbb, 0xbb, 0xaa, 0x10, 0x63, 0x43, 0x33, 0x34, 0x43, 0x12, 0x12, 0x10, 0x98, 0xca, - 0xdc, 0xdb, 0xcb, 0xaa, 0x99, 0x09, 0x10, 0x21, 0x43, 0x44, 0x44, 0x24, 0x24, 0x12, 0x01, 0x88, - 0x9a, 0xcb, 0xbb, 0xcc, 0xbb, 0xab, 0x09, 0x22, 0x33, 0x02, 0x98, 0x98, 0xb9, 0xdc, 0xdc, 0xcc, - 0xcc, 0xbb, 0xcb, 0xaa, 0x89, 0x00, 0x32, 0x53, 0x44, 0x34, 0x34, 0x33, 0x33, 0x13, 0x01, 0x98, - 0xeb, 0xdc, 0xbb, 0xbc, 0x9a, 0x89, 0x21, 0x44, 0x43, 0x32, 0x32, 0x34, 0x33, 0x12, 0x91, 0xb9, - 0xbd, 0xcd, 0xbc, 0xba, 0xbb, 0xab, 0x99, 0x20, 0x63, 0x53, 0x43, 0x53, 0x33, 0x24, 0x23, 0x01, - 0x99, 0xba, 0xbd, 0xca, 0xbb, 0xbb, 0x8b, 0x08, 0x11, 0x10, 0x20, 0x02, 0xd9, 0xdc, 0xdb, 0xbb, - 0xbe, 0xcd, 0xcb, 0xab, 0x99, 0x08, 0x20, 0x31, 0x44, 0x44, 0x33, 0x34, 0x24, 0x22, 0x12, 0x00, - 0xa9, 0xdc, 0xcb, 0xcb, 0xbb, 0x9b, 0x18, 0x52, 0x33, 0x43, 0x32, 0x44, 0x43, 0x22, 0x11, 0x80, - 0xa9, 0xdc, 0xcb, 0xab, 0xbb, 0xac, 0xab, 0x89, 0x30, 0x53, 0x44, 0x53, 0x33, 0x35, 0x23, 0x13, - 0x98, 0xca, 0xba, 0x9a, 0xba, 0xbb, 0xcb, 0x9a, 0xaa, 0x09, 0x30, 0x33, 0xc0, 0xde, 0xbc, 0xba, - 0xdb, 0xdd, 0xbc, 0xac, 0xaa, 0x89, 0x10, 0x20, 0x32, 0x44, 0x43, 0x44, 0x33, 0x33, 0x33, 0x11, - 0xa9, 0xdb, 0xbc, 0xbc, 0xbb, 0xbc, 0xaa, 0x10, 0x34, 0x34, 0x32, 0x54, 0x43, 0x34, 0x32, 0x11, - 0x80, 0xca, 0xbc, 0xac, 0xab, 0xcb, 0xba, 0xaa, 0x99, 0x08, 0x52, 0x45, 0x53, 0x34, 0x24, 0x13, - 0x01, 0xa8, 0xaa, 0x9a, 0x99, 0x98, 0xba, 0xeb, 0xbb, 0xab, 0x09, 0x12, 0x90, 0xde, 0xac, 0xaa, - 0xa9, 0xdc, 0xdd, 0xcb, 0xba, 0xa9, 0x89, 0x10, 0x11, 0x22, 0x42, 0x45, 0x44, 0x33, 0x24, 0x02, - 0x80, 0xa9, 0xba, 0xbb, 0xbc, 0xbc, 0xab, 0xab, 0x89, 0x10, 0x44, 0x45, 0x34, 0x34, 0x34, 0x33, - 0x13, 0x90, 0xca, 0xac, 0xa9, 0xbb, 0xcb, 0xcb, 0xaa, 0xac, 0xab, 0x20, 0x56, 0x44, 0x43, 0x33, - 0x11, 0x88, 0xaa, 0x99, 0x18, 0x31, 0x12, 0xc8, 0xcd, 0xbc, 0x99, 0x10, 0xa0, 0xcc, 0xcb, 0x9a, - 0x88, 0xda, 0xcd, 0xbc, 0xbb, 0xac, 0x9a, 0x08, 0x00, 0x90, 0x08, 0x51, 0x47, 0x53, 0x23, 0x12, - 0x00, 0x98, 0x9a, 0xa9, 0x9a, 0xaa, 0xcb, 0xbb, 0xcc, 0xac, 0x89, 0x31, 0x46, 0x43, 0x53, 0x43, - 0x22, 0x00, 0x98, 0x98, 0x08, 0x98, 0x98, 0xdb, 0xbc, 0xcc, 0xdb, 0x9a, 0x08, 0x53, 0x35, 0x34, - 0x13, 0x81, 0xa8, 0x8a, 0x18, 0x42, 0x24, 0x03, 0xc9, 0xcc, 0xbb, 0x88, 0x98, 0xda, 0xcb, 0x9b, - 0x89, 0x99, 0xcd, 0xdb, 0xba, 0xbb, 0xac, 0xab, 0x99, 0xaa, 0xcb, 0x0a, 0x65, 0x54, 0x33, 0x33, - 0x01, 0x88, 0x99, 0x89, 0x08, 0x98, 0x99, 0xc9, 0xdc, 0xcd, 0xba, 0x09, 0x31, 0x34, 0x44, 0x44, - 0x32, 0x22, 0x01, 0x00, 0x21, 0x23, 0x12, 0xb8, 0xec, 0xbc, 0xcd, 0xbb, 0xaa, 0x20, 0x54, 0x43, - 0x33, 0x12, 0x90, 0x98, 0x88, 0x22, 0x35, 0x24, 0x91, 0xdb, 0xbc, 0xaa, 0x98, 0xca, 0xcc, 0xba, - 0x99, 0x09, 0x99, 0xab, 0xaa, 0xea, 0xcd, 0xbc, 0xbb, 0xcb, 0xcb, 0xaa, 0x20, 0x45, 0x35, 0x23, - 0x22, 0x00, 0x00, 0x18, 0x10, 0x11, 0x80, 0x98, 0xec, 0xcd, 0xbc, 0x9b, 0x09, 0x21, 0x42, 0x35, - 0x25, 0x33, 0x32, 0x33, 0x44, 0x33, 0x33, 0x82, 0xb9, 0xce, 0xdb, 0xcb, 0xab, 0x8a, 0x20, 0x53, - 0x53, 0x22, 0x11, 0x80, 0x09, 0x10, 0x32, 0x34, 0x13, 0xa8, 0xce, 0xac, 0x9a, 0xaa, 0xcc, 0xac, - 0xab, 0x89, 0x11, 0x22, 0x22, 0xa1, 0xef, 0xbc, 0xbb, 0xbc, 0xbb, 0xbb, 0x8a, 0x31, 0x46, 0x33, - 0x43, 0x32, 0x32, 0x13, 0x22, 0x31, 0x22, 0x00, 0xda, 0xcf, 0xdb, 0xbb, 0x9b, 0x88, 0x08, 0x42, - 0x44, 0x43, 0x34, 0x35, 0x43, 0x24, 0x12, 0x02, 0x80, 0xba, 0xbc, 0xcd, 0xbb, 0xbb, 0x99, 0x10, - 0x54, 0x33, 0x23, 0x02, 0x08, 0x08, 0x31, 0x44, 0x33, 0x81, 0xd9, 0xdb, 0xba, 0xca, 0xdc, 0xbb, - 0xac, 0x89, 0x20, 0x43, 0x33, 0x02, 0xda, 0xbd, 0xbc, 0xac, 0xbb, 0xcb, 0xab, 0x8a, 0x20, 0x31, - 0x45, 0x43, 0x43, 0x32, 0x23, 0x23, 0x22, 0x12, 0x88, 0xda, 0xdd, 0xbc, 0xbb, 0xba, 0x9a, 0x19, - 0x53, 0x44, 0x53, 0x34, 0x44, 0x42, 0x22, 0x21, 0x00, 0x90, 0xaa, 0xcc, 0xcc, 0xbb, 0xab, 0x8a, - 0x32, 0x35, 0x32, 0x12, 0x80, 0x00, 0x32, 0x36, 0x24, 0x01, 0x99, 0xbb, 0xbd, 0xdc, 0xbc, 0xbc, - 0xaa, 0x89, 0x30, 0x44, 0x32, 0x23, 0xa8, 0xdc, 0xca, 0xba, 0xcb, 0xbc, 0xcb, 0x9b, 0x9a, 0x00, - 0x32, 0x34, 0x44, 0x43, 0x32, 0x43, 0x32, 0x22, 0x12, 0x80, 0xea, 0xcd, 0xbb, 0xac, 0xaa, 0x09, - 0x21, 0x43, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x23, 0x80, 0xa9, 0xdc, 0xbd, 0xbc, 0xac, 0x99, - 0x20, 0x32, 0x22, 0x12, 0x11, 0x10, 0x42, 0x35, 0x34, 0x12, 0x98, 0xba, 0xcd, 0xeb, 0xcb, 0xbb, - 0x9b, 0x89, 0x32, 0x44, 0x33, 0x13, 0x90, 0xcb, 0xcb, 0xcc, 0xbc, 0xbc, 0xcc, 0xaa, 0xaa, 0x88, - 0x10, 0x32, 0x43, 0x35, 0x43, 0x43, 0x32, 0x33, 0x22, 0x02, 0xb9, 0xcf, 0xcb, 0xcb, 0xaa, 0x09, - 0x20, 0x22, 0x35, 0x35, 0x44, 0x33, 0x34, 0x34, 0x22, 0x00, 0x98, 0xda, 0xdb, 0xac, 0xab, 0x9a, - 0x18, 0x21, 0x12, 0x02, 0x01, 0x21, 0x44, 0x45, 0x33, 0x23, 0x80, 0xba, 0xdc, 0xcc, 0xbc, 0xba, - 0xaa, 0x08, 0x32, 0x34, 0x33, 0x22, 0x90, 0xba, 0xeb, 0xdb, 0xcc, 0xdb, 0xbc, 0xbb, 0xbb, 0x9a, - 0x08, 0x22, 0x43, 0x44, 0x34, 0x43, 0x24, 0x33, 0x32, 0x12, 0xa9, 0xcd, 0xcb, 0xbc, 0xab, 0x89, - 0x20, 0x42, 0x34, 0x43, 0x53, 0x34, 0x44, 0x33, 0x32, 0x01, 0x98, 0xda, 0xdb, 0xcb, 0xba, 0x9a, - 0x08, 0x11, 0x11, 0x11, 0x00, 0x20, 0x73, 0x44, 0x43, 0x22, 0x00, 0x98, 0xdb, 0xbd, 0xbc, 0xbb, - 0x9a, 0x08, 0x31, 0x23, 0x33, 0x22, 0x11, 0x00, 0x98, 0xfa, 0xce, 0xcd, 0xcb, 0xcb, 0xaa, 0x9a, - 0x89, 0x08, 0x31, 0x53, 0x34, 0x43, 0x34, 0x43, 0x32, 0x22, 0x88, 0xbb, 0xcd, 0xcb, 0xaa, 0x89, - 0x10, 0x22, 0x43, 0x32, 0x45, 0x44, 0x34, 0x25, 0x23, 0x01, 0x88, 0xba, 0xdb, 0xcb, 0xcb, 0x9a, - 0x88, 0x08, 0x80, 0x80, 0x88, 0x10, 0x54, 0x54, 0x43, 0x23, 0x02, 0x90, 0xdb, 0xdb, 0xbb, 0xac, - 0xaa, 0x09, 0x00, 0x21, 0x01, 0x08, 0x18, 0x32, 0x53, 0x02, 0xfa, 0xdd, 0xbc, 0xbc, 0xbb, 0xbb, - 0xaa, 0x99, 0x20, 0x52, 0x43, 0x44, 0x42, 0x32, 0x34, 0x33, 0x11, 0x98, 0xca, 0xbc, 0xab, 0x8a, - 0x11, 0x21, 0x11, 0x21, 0x46, 0x55, 0x34, 0x34, 0x33, 0x11, 0x80, 0xa9, 0xbb, 0xcd, 0xbb, 0xab, - 0x9a, 0x99, 0xaa, 0xba, 0xbb, 0x09, 0x73, 0x56, 0x43, 0x43, 0x12, 0x01, 0xb9, 0xbb, 0xcc, 0xba, - 0xab, 0xbb, 0xab, 0xa9, 0xba, 0xcb, 0x8a, 0x40, 0x44, 0x33, 0x90, 0xde, 0xbd, 0xbd, 0xbb, 0xbb, - 0xab, 0x8a, 0x88, 0x20, 0x42, 0x35, 0x35, 0x43, 0x43, 0x24, 0x33, 0x12, 0x88, 0xca, 0xab, 0x0a, - 0x21, 0x02, 0x88, 0x0a, 0x61, 0x46, 0x45, 0x32, 0x33, 0x22, 0x81, 0x90, 0xa9, 0xca, 0xbc, 0xac, - 0xbb, 0xbc, 0xbb, 0xbc, 0xbb, 0xaa, 0x09, 0x65, 0x35, 0x44, 0x22, 0x12, 0x01, 0x98, 0xaa, 0xcb, - 0xcb, 0xbc, 0xbb, 0xbb, 0xbc, 0xbc, 0xbb, 0x0a, 0x42, 0x44, 0x02, 0xb8, 0xdd, 0xbc, 0xac, 0xba, - 0xa9, 0x89, 0x98, 0x89, 0x09, 0x20, 0x43, 0x35, 0x36, 0x35, 0x44, 0x22, 0x12, 0x00, 0x98, 0x88, - 0x10, 0x10, 0x88, 0x80, 0x31, 0x55, 0x53, 0x43, 0x33, 0x24, 0x22, 0x22, 0x12, 0x91, 0xdb, 0xcc, - 0xcb, 0xab, 0xba, 0xbc, 0xbd, 0xac, 0x9a, 0x20, 0x44, 0x45, 0x33, 0x43, 0x21, 0x00, 0x90, 0xa9, - 0xba, 0xbd, 0xcc, 0xbb, 0xbc, 0xcb, 0xcb, 0x9a, 0x08, 0x31, 0x33, 0x81, 0xfb, 0xcd, 0xbb, 0xab, - 0x89, 0x08, 0x88, 0xb9, 0xcd, 0xba, 0x9a, 0x18, 0x55, 0x44, 0x53, 0x33, 0x33, 0x22, 0x00, 0x80, - 0x08, 0x10, 0x00, 0x80, 0x89, 0x88, 0x21, 0x44, 0x45, 0x44, 0x43, 0x32, 0x23, 0x01, 0xa9, 0xcb, - 0xbb, 0xbb, 0xeb, 0xcc, 0xcc, 0xcb, 0xab, 0x89, 0x21, 0x54, 0x34, 0x24, 0x23, 0x12, 0x11, 0x11, - 0x80, 0xa8, 0xdd, 0xcc, 0xcb, 0xbb, 0xcb, 0xab, 0x89, 0x18, 0x22, 0x22, 0xa8, 0xdd, 0xbb, 0x9b, - 0x09, 0x08, 0xb8, 0xcf, 0xcc, 0xbc, 0xab, 0x09, 0x41, 0x44, 0x34, 0x43, 0x33, 0x32, 0x11, 0x11, - 0x00, 0x10, 0x21, 0x00, 0xb8, 0xeb, 0xcb, 0x89, 0x31, 0x36, 0x34, 0x23, 0x12, 0x81, 0x98, 0x89, - 0x32, 0x22, 0xc8, 0xdf, 0xdc, 0xbc, 0xbb, 0x9b, 0x19, 0x42, 0x45, 0x33, 0x24, 0x23, 0x21, 0x21, - 0x22, 0x13, 0xa8, 0xed, 0xbd, 0xbc, 0xbc, 0xaa, 0x9a, 0x08, 0x21, 0x12, 0x01, 0xa9, 0xbb, 0x9b, - 0x08, 0x02, 0xea, 0xef, 0xcc, 0xcb, 0xba, 0x8a, 0x28, 0x43, 0x35, 0x34, 0x33, 0x23, 0x22, 0x12, - 0x32, 0x32, 0x23, 0x82, 0xb9, 0xde, 0xcb, 0xaa, 0x18, 0x32, 0x44, 0x23, 0x02, 0x88, 0x89, 0x40, - 0x45, 0x43, 0x02, 0xa8, 0xce, 0xdb, 0xcb, 0xab, 0x99, 0x10, 0x43, 0x35, 0x33, 0x24, 0x22, 0x22, - 0x33, 0x34, 0x12, 0xa0, 0xce, 0xcd, 0xbb, 0xbc, 0xaa, 0x99, 0x00, 0x11, 0x10, 0x08, 0x88, 0x01, - 0x12, 0x81, 0xda, 0xde, 0xdc, 0xdb, 0xab, 0xab, 0x89, 0x21, 0x45, 0x53, 0x32, 0x22, 0x12, 0x11, - 0x21, 0x32, 0x33, 0x33, 0x80, 0xfa, 0xdb, 0xbb, 0x99, 0x20, 0x32, 0x24, 0x12, 0x98, 0x89, 0x52, - 0x56, 0x43, 0x32, 0x81, 0xc9, 0xcc, 0xbc, 0xbc, 0xab, 0x89, 0x20, 0x63, 0x43, 0x32, 0x32, 0x23, - 0x33, 0x35, 0x43, 0x11, 0xb0, 0xed, 0xdb, 0xab, 0xbb, 0x9a, 0x89, 0x08, 0x01, 0x01, 0x00, 0x11, - 0x21, 0x01, 0xa8, 0xfb, 0xce, 0xdc, 0xcb, 0xbb, 0x9a, 0x18, 0x43, 0x35, 0x34, 0x32, 0x21, 0x10, - 0x21, 0x42, 0x33, 0x24, 0x22, 0x98, 0xcc, 0xbc, 0xab, 0x89, 0x11, 0x33, 0x33, 0x80, 0xcb, 0x8a, - 0x73, 0x47, 0x33, 0x23, 0x91, 0xda, 0xcc, 0xbc, 0xbb, 0xaa, 0x08, 0x42, 0x35, 0x33, 0x24, 0x22, - 0x21, 0x43, 0x34, 0x33, 0x02, 0xeb, 0xcd, 0xcb, 0xbb, 0xaa, 0x89, 0x88, 0x00, 0x00, 0x88, 0x00, - 0x01, 0x90, 0xaa, 0xcb, 0xec, 0xcd, 0xbd, 0xad, 0xab, 0x88, 0x31, 0x44, 0x34, 0x33, 0x22, 0x10, - 0x00, 0x21, 0x53, 0x43, 0x23, 0x12, 0xa9, 0xcc, 0xcb, 0xaa, 0x09, 0x21, 0x23, 0x02, 0xca, 0xbb, - 0x2a, 0x57, 0x35, 0x34, 0x12, 0x90, 0xcc, 0xdb, 0xbb, 0xba, 0x8a, 0x20, 0x44, 0x53, 0x32, 0x22, - 0x12, 0x32, 0x36, 0x34, 0x13, 0xa0, 0xec, 0xdb, 0xba, 0xab, 0x99, 0x88, 0x00, 0x98, 0x99, 0x8a, - 0x88, 0x90, 0xa9, 0xcb, 0xba, 0xde, 0xdd, 0xcb, 0xac, 0x9a, 0x10, 0x52, 0x43, 0x43, 0x11, 0x01, - 0x08, 0x11, 0x32, 0x44, 0x33, 0x23, 0x81, 0xba, 0xcc, 0xbb, 0xaa, 0x08, 0x32, 0x13, 0xda, 0xdc, - 0x8a, 0x31, 0x47, 0x34, 0x23, 0x02, 0xb9, 0xcd, 0xbb, 0xac, 0x9a, 0x09, 0x21, 0x35, 0x34, 0x33, - 0x22, 0x53, 0x44, 0x43, 0x33, 0x81, 0xca, 0xbe, 0xbc, 0xbb, 0xaa, 0x98, 0x80, 0x90, 0xa9, 0x9a, - 0x89, 0x08, 0xa0, 0xcb, 0xbb, 0xcd, 0xce, 0xcc, 0xac, 0x9b, 0x09, 0x31, 0x45, 0x33, 0x33, 0x01, - 0x00, 0x11, 0x44, 0x34, 0x34, 0x22, 0x01, 0xa8, 0xba, 0xbb, 0xbc, 0xaa, 0x10, 0x11, 0xd8, 0xdc, - 0xbb, 0x28, 0x65, 0x44, 0x33, 0x02, 0x90, 0xcb, 0xbc, 0xab, 0xab, 0x99, 0x08, 0x42, 0x44, 0x43, - 0x23, 0x34, 0x54, 0x43, 0x33, 0x12, 0xa9, 0xdd, 0xcb, 0xab, 0xab, 0x99, 0x89, 0x89, 0xa9, 0xba, - 0x99, 0x18, 0x13, 0x90, 0xcc, 0xcc, 0xbc, 0xbd, 0xbd, 0xac, 0x9a, 0x18, 0x43, 0x35, 0x23, 0x12, - 0x01, 0x21, 0x64, 0x53, 0x32, 0x22, 0x01, 0xa9, 0xaa, 0x8a, 0x99, 0xba, 0xaa, 0xab, 0xcb, 0xce, - 0xac, 0x0a, 0x54, 0x54, 0x33, 0x32, 0x80, 0xb9, 0xbc, 0xac, 0x99, 0x99, 0xaa, 0x89, 0x18, 0x44, - 0x35, 0x45, 0x34, 0x44, 0x32, 0x13, 0x91, 0xdb, 0xcc, 0xbb, 0xba, 0xa9, 0x9a, 0xa9, 0xaa, 0xbc, - 0xaa, 0x18, 0x42, 0x13, 0x80, 0xcc, 0xcc, 0xac, 0xcb, 0xba, 0x9a, 0x89, 0x21, 0x44, 0x43, 0x12, - 0x21, 0x41, 0x55, 0x53, 0x43, 0x12, 0x11, 0xa8, 0xa9, 0x98, 0x80, 0xa0, 0xcb, 0xcc, 0xbb, 0xbb, - 0xcb, 0x0a, 0x63, 0x55, 0x33, 0x33, 0x02, 0x98, 0xcb, 0xac, 0x89, 0x98, 0xa9, 0xcb, 0xab, 0x09, - 0x73, 0x45, 0x34, 0x44, 0x32, 0x33, 0x01, 0xb9, 0xcd, 0xac, 0xbb, 0xaa, 0xaa, 0xba, 0xbb, 0xbc, - 0xab, 0x09, 0x42, 0x24, 0x12, 0xa9, 0xcd, 0xcb, 0xaa, 0xaa, 0xa9, 0xa9, 0x9a, 0x09, 0x31, 0x42, - 0x43, 0x54, 0x46, 0x44, 0x34, 0x23, 0x12, 0x80, 0xa9, 0x9a, 0x00, 0x80, 0xda, 0xcd, 0xcb, 0xaa, - 0x9a, 0x89, 0x20, 0x45, 0x45, 0x23, 0x13, 0x80, 0xa9, 0xab, 0x9a, 0x80, 0xa8, 0xcd, 0xbc, 0xaa, - 0x30, 0x65, 0x34, 0x35, 0x33, 0x24, 0x11, 0x80, 0xbb, 0xcd, 0xca, 0xaa, 0xbb, 0xbb, 0xbc, 0xbb, - 0xaa, 0x09, 0x21, 0x53, 0x23, 0x81, 0xca, 0xcc, 0x9a, 0x9a, 0x88, 0x98, 0xdb, 0xbc, 0xbb, 0x8a, - 0x31, 0x45, 0x54, 0x44, 0x43, 0x43, 0x22, 0x02, 0x80, 0x98, 0x80, 0x00, 0xa9, 0xde, 0xdb, 0xab, - 0x9a, 0x89, 0x18, 0x41, 0x63, 0x43, 0x32, 0x12, 0x01, 0x98, 0x9a, 0x99, 0xba, 0xcd, 0xbc, 0x9c, - 0x19, 0x62, 0x44, 0x43, 0x24, 0x23, 0x22, 0x11, 0xa8, 0xcb, 0xcc, 0xbb, 0xbc, 0xbc, 0xbc, 0xbb, - 0xaa, 0x8a, 0x00, 0x31, 0x23, 0x13, 0x80, 0xaa, 0xab, 0x89, 0x00, 0xc9, 0xee, 0xcc, 0xcb, 0x9a, - 0x09, 0x31, 0x44, 0x44, 0x43, 0x53, 0x33, 0x23, 0x22, 0x00, 0x00, 0x88, 0xa8, 0xcd, 0xbe, 0xbc, - 0xab, 0x8a, 0x10, 0x11, 0x32, 0x53, 0x45, 0x33, 0x23, 0x02, 0x90, 0xba, 0xbc, 0xbd, 0xbc, 0xab, - 0x8a, 0x42, 0x46, 0x44, 0x33, 0x24, 0x22, 0x13, 0x01, 0x98, 0xdb, 0xbc, 0xbd, 0xbc, 0xbc, 0xac, - 0xaa, 0x89, 0x09, 0x08, 0x01, 0x21, 0x21, 0x33, 0x32, 0x11, 0x99, 0xdb, 0xbd, 0xbe, 0xbc, 0xbb, - 0x89, 0x31, 0x45, 0x33, 0x33, 0x45, 0x34, 0x35, 0x33, 0x23, 0x11, 0x90, 0xa8, 0xcb, 0xcd, 0xbc, - 0xcb, 0xaa, 0x88, 0x18, 0x00, 0x00, 0x53, 0x36, 0x35, 0x22, 0x01, 0x99, 0xca, 0xbb, 0xac, 0x9a, - 0x09, 0x30, 0x54, 0x35, 0x35, 0x43, 0x32, 0x32, 0x32, 0x01, 0xa9, 0xdc, 0xcc, 0xbc, 0xbc, 0xac, - 0xab, 0x99, 0x99, 0x98, 0x98, 0x00, 0x31, 0x45, 0x32, 0x12, 0x80, 0xb9, 0xbc, 0xcc, 0xcb, 0xaa, - 0x8a, 0x20, 0x63, 0x23, 0x22, 0x22, 0x44, 0x46, 0x34, 0x33, 0x22, 0x01, 0x98, 0xa9, 0xbb, 0xcc, - 0xcc, 0xcb, 0xba, 0x9a, 0x9a, 0x98, 0x10, 0x65, 0x34, 0x34, 0x12, 0x80, 0xca, 0xbb, 0xbb, 0x89, - 0x11, 0x43, 0x33, 0x45, 0x44, 0x34, 0x34, 0x32, 0x32, 0x12, 0x00, 0xca, 0xdc, 0xcc, 0xcb, 0xbb, - 0xbb, 0xac, 0xa9, 0xaa, 0x9b, 0x8a, 0x20, 0x54, 0x34, 0x23, 0x81, 0xa9, 0xcb, 0xbb, 0xab, 0x9a, - 0x88, 0x21, 0x73, 0x43, 0x32, 0x22, 0x21, 0x56, 0x44, 0x43, 0x22, 0x11, 0x08, 0x88, 0x08, 0x80, - 0xc9, 0xeb, 0xcc, 0xcb, 0xba, 0x99, 0x88, 0x31, 0x54, 0x43, 0x23, 0x81, 0xca, 0xbb, 0xac, 0x09, - 0x31, 0x34, 0x24, 0x33, 0x53, 0x35, 0x35, 0x43, 0x12, 0x11, 0x00, 0xa8, 0xca, 0xdc, 0xbc, 0xbc, - 0xcb, 0xba, 0xbb, 0xbb, 0xcb, 0xaa, 0x09, 0x53, 0x44, 0x32, 0x11, 0x98, 0xaa, 0xbb, 0x9a, 0x00, - 0x11, 0x22, 0x43, 0x45, 0x43, 0x32, 0x11, 0x21, 0x63, 0x35, 0x34, 0x33, 0x12, 0x11, 0x21, 0x34, - 0x13, 0xb0, 0xef, 0xbc, 0xad, 0xab, 0x99, 0x08, 0x21, 0x32, 0x32, 0x13, 0xb0, 0xcd, 0xac, 0x08, - 0x31, 0x44, 0x35, 0x33, 0x33, 0x35, 0x35, 0x24, 0x23, 0x12, 0x01, 0x90, 0xa9, 0xcd, 0xbd, 0xbd, - 0xca, 0xba, 0xac, 0xac, 0xbb, 0x9c, 0x8a, 0x20, 0x43, 0x34, 0x22, 0x81, 0xa9, 0xba, 0x99, 0x20, - 0x42, 0x23, 0x34, 0x35, 0x44, 0x23, 0x02, 0x88, 0x99, 0x08, 0x31, 0x45, 0x42, 0x33, 0x35, 0x34, - 0x34, 0x33, 0xb8, 0xcf, 0xbc, 0xbc, 0xab, 0x9a, 0x88, 0x90, 0xa8, 0x99, 0x18, 0x88, 0x98, 0x30, - 0x46, 0x44, 0x44, 0x43, 0x34, 0x43, 0x32, 0x32, 0x43, 0x22, 0x23, 0x81, 0xca, 0xcc, 0xbc, 0xbc, - 0xba, 0xcb, 0xeb, 0xcb, 0xcb, 0xba, 0x9a, 0x08, 0x21, 0x33, 0x24, 0x13, 0x80, 0x99, 0x99, 0x08, - 0x63, 0x63, 0x34, 0x44, 0x32, 0x11, 0x80, 0xa9, 0xba, 0xaa, 0x08, 0x01, 0x01, 0x31, 0x45, 0x55, - 0x43, 0x24, 0x13, 0xa0, 0xdc, 0xbc, 0xbc, 0xba, 0xaa, 0xbb, 0xbb, 0xac, 0x8a, 0x08, 0x01, 0x21, - 0x45, 0x45, 0x53, 0x33, 0x34, 0x43, 0x23, 0x32, 0x32, 0x43, 0x33, 0x01, 0xeb, 0xcc, 0xbb, 0xaa, - 0x88, 0x88, 0xdb, 0xce, 0xcb, 0xbb, 0x9b, 0x8a, 0x00, 0x10, 0x21, 0x22, 0x11, 0x11, 0x80, 0x09, - 0x73, 0x46, 0x44, 0x53, 0x22, 0x02, 0x88, 0xaa, 0xa9, 0x88, 0x00, 0x88, 0xdb, 0xcb, 0x8a, 0x21, - 0x54, 0x34, 0x34, 0x11, 0xa8, 0xcb, 0xcd, 0xcb, 0xcb, 0xcb, 0xab, 0x9a, 0x99, 0x88, 0x89, 0x08, - 0x42, 0x46, 0x44, 0x24, 0x32, 0x22, 0x23, 0x33, 0x43, 0x33, 0x23, 0x90, 0xeb, 0xcd, 0xab, 0x9a, - 0x00, 0x12, 0x88, 0xdc, 0xbd, 0xbc, 0xab, 0x8a, 0x88, 0x00, 0x08, 0x00, 0x10, 0x80, 0x89, 0x08, - 0x73, 0x56, 0x44, 0x34, 0x32, 0x01, 0x98, 0x99, 0x88, 0x10, 0x10, 0xa8, 0xed, 0xbc, 0xbb, 0x8a, - 0x10, 0x33, 0x35, 0x22, 0x02, 0xa8, 0xeb, 0xdb, 0xcc, 0xbc, 0xcb, 0x9a, 0x99, 0x9a, 0xa9, 0xaa, - 0x18, 0x64, 0x45, 0x43, 0x33, 0x23, 0x22, 0x42, 0x33, 0x34, 0x13, 0xa0, 0xdb, 0xcc, 0xba, 0x99, - 0x10, 0x11, 0x81, 0xda, 0xcd, 0xbb, 0xac, 0x99, 0x88, 0x00, 0x98, 0x98, 0x88, 0x80, 0x00, 0x01, - 0x51, 0x67, 0x44, 0x43, 0x22, 0x02, 0x88, 0x08, 0x10, 0x32, 0x22, 0xc0, 0xde, 0xdb, 0xba, 0x99, - 0x08, 0x00, 0x80, 0x00, 0x80, 0x11, 0x81, 0xda, 0xdd, 0xcc, 0xcb, 0x9a, 0x9a, 0xa9, 0xb9, 0xba, - 0x8b, 0x61, 0x45, 0x35, 0x33, 0x24, 0x22, 0x33, 0x44, 0x23, 0x23, 0x98, 0xdb, 0xcb, 0xaa, 0x09, - 0x21, 0x00, 0xb8, 0xec, 0xcb, 0xbb, 0x9a, 0x9a, 0x89, 0x00, 0x08, 0x00, 0x08, 0x08, 0x80, 0xcb, - 0x40, 0x77, 0x35, 0x34, 0x22, 0x00, 0x89, 0x18, 0x43, 0x34, 0x22, 0xa8, 0xce, 0xac, 0xab, 0x9a, - 0x98, 0xb8, 0xcb, 0xcb, 0xab, 0x10, 0x23, 0xb8, 0xcf, 0xcc, 0xab, 0x9a, 0x99, 0x99, 0xba, 0xbc, - 0x9a, 0x40, 0x45, 0x35, 0x34, 0x43, 0x43, 0x43, 0x24, 0x23, 0x12, 0x98, 0xbb, 0xbc, 0xaa, 0x20, - 0x23, 0x91, 0xeb, 0xcd, 0xcb, 0x9a, 0x99, 0x99, 0x99, 0x08, 0x20, 0x43, 0x32, 0x14, 0x82, 0xa8, - 0x09, 0x73, 0x47, 0x24, 0x12, 0x80, 0x99, 0x00, 0x32, 0x35, 0x24, 0x80, 0xdb, 0xbb, 0xbc, 0x9a, - 0xaa, 0xcc, 0xbc, 0xdb, 0x9a, 0x09, 0x00, 0xb8, 0xcd, 0xbd, 0xbb, 0x88, 0x08, 0x98, 0xba, 0xbc, - 0x9b, 0x42, 0x54, 0x34, 0x34, 0x34, 0x43, 0x44, 0x43, 0x23, 0x11, 0x98, 0xaa, 0xa9, 0x09, 0x31, - 0x23, 0xa8, 0xce, 0xcd, 0xbb, 0xba, 0xaa, 0xcb, 0x99, 0x08, 0x52, 0x53, 0x23, 0x22, 0x01, 0x98, - 0x08, 0x51, 0x45, 0x34, 0x23, 0x90, 0x99, 0x99, 0x10, 0x52, 0x34, 0x22, 0x88, 0xca, 0xcc, 0xcb, - 0xbb, 0xbd, 0xbc, 0xba, 0xab, 0x99, 0xa9, 0xec, 0xdc, 0xcb, 0x9b, 0x09, 0x00, 0x80, 0xa8, 0xcb, - 0x9a, 0x10, 0x44, 0x35, 0x34, 0x24, 0x43, 0x43, 0x44, 0x32, 0x12, 0x88, 0x99, 0x88, 0x00, 0x12, - 0x12, 0xa8, 0xdc, 0xdc, 0xbb, 0xbb, 0xcc, 0xac, 0xab, 0x08, 0x31, 0x44, 0x34, 0x32, 0x12, 0x00, - 0x08, 0x32, 0x47, 0x44, 0x22, 0x80, 0x98, 0xba, 0xba, 0x99, 0x21, 0x22, 0x32, 0x01, 0xfa, 0xcc, - 0xcb, 0xbc, 0xaa, 0x98, 0x98, 0x88, 0xea, 0xce, 0xbc, 0xbc, 0xab, 0x0a, 0x00, 0x80, 0xa9, 0xbc, - 0x9c, 0x09, 0x42, 0x45, 0x43, 0x33, 0x33, 0x44, 0x43, 0x24, 0x12, 0x01, 0x08, 0x08, 0x00, 0x11, - 0x00, 0x98, 0xa9, 0xcc, 0xbd, 0xdb, 0xbd, 0xcd, 0xba, 0x9a, 0x18, 0x42, 0x43, 0x34, 0x22, 0x11, - 0x00, 0x21, 0x45, 0x35, 0x33, 0x02, 0x98, 0xcb, 0xcb, 0xa9, 0x18, 0x10, 0x01, 0xa8, 0xcc, 0xbd, - 0xcb, 0xba, 0x09, 0x21, 0x33, 0x22, 0xf9, 0xce, 0xcc, 0xcb, 0xaa, 0x89, 0x88, 0x90, 0xc9, 0xcb, - 0xaa, 0x89, 0x21, 0x45, 0x34, 0x33, 0x24, 0x33, 0x44, 0x33, 0x23, 0x13, 0x12, 0x01, 0x00, 0x01, - 0x01, 0x88, 0x99, 0xbb, 0xeb, 0xec, 0xec, 0xdb, 0xcb, 0xaa, 0x8a, 0x10, 0x32, 0x35, 0x24, 0x22, - 0x21, 0x32, 0x45, 0x44, 0x32, 0x12, 0x90, 0xa9, 0xbb, 0x9b, 0x9a, 0x89, 0xba, 0xdd, 0xcc, 0xac, - 0xab, 0x8a, 0x20, 0x53, 0x34, 0x22, 0x80, 0xdc, 0xcc, 0xcb, 0xbb, 0x99, 0x89, 0x99, 0xbc, 0xbd, - 0xab, 0x9a, 0x00, 0x42, 0x45, 0x24, 0x23, 0x32, 0x53, 0x43, 0x23, 0x12, 0x12, 0x11, 0x00, 0x00, - 0x10, 0x00, 0x01, 0x00, 0x99, 0xec, 0xdc, 0xcd, 0xcc, 0xcb, 0x9a, 0x99, 0x11, 0x32, 0x53, 0x32, - 0x22, 0x53, 0x34, 0x35, 0x43, 0x22, 0x81, 0x90, 0x99, 0x98, 0x99, 0xba, 0xcc, 0xcc, 0xcc, 0xcb, - 0xba, 0x9a, 0x18, 0x43, 0x44, 0x23, 0x12, 0x98, 0xeb, 0xbc, 0xbb, 0x9b, 0x9a, 0xba, 0xdd, 0xcb, - 0xab, 0xab, 0x89, 0x28, 0x53, 0x44, 0x32, 0x33, 0x53, 0x34, 0x33, 0x23, 0x22, 0x12, 0x01, 0x88, - 0x89, 0x08, 0x21, 0x43, 0x14, 0x91, 0xec, 0xdc, 0xcc, 0xbc, 0xac, 0x9a, 0x09, 0x11, 0x22, 0x32, - 0x34, 0x53, 0x44, 0x53, 0x33, 0x24, 0x12, 0x11, 0x00, 0x90, 0x98, 0xaa, 0xcc, 0xcc, 0xdb, 0xcb, - 0xbb, 0xbb, 0x99, 0x20, 0x44, 0x43, 0x33, 0x11, 0x98, 0xbb, 0xbd, 0xab, 0xab, 0xcd, 0xcc, 0xcb, - 0xbb, 0xbb, 0xbb, 0xaa, 0x18, 0x53, 0x34, 0x34, 0x44, 0x33, 0x25, 0x33, 0x22, 0x22, 0x02, 0x00, - 0x88, 0x88, 0x18, 0x53, 0x44, 0x01, 0xa8, 0xcd, 0xcc, 0xbd, 0xcb, 0xab, 0x99, 0x89, 0x10, 0x31, - 0x33, 0x34, 0x45, 0x44, 0x34, 0x34, 0x33, 0x33, 0x22, 0x00, 0x88, 0xaa, 0xdb, 0xcc, 0xcb, 0xbc, - 0xbc, 0xac, 0xab, 0x89, 0x28, 0x43, 0x44, 0x22, 0x02, 0x80, 0x98, 0x98, 0xaa, 0xdd, 0xdb, 0xbb, - 0xbc, 0xbb, 0xbc, 0xbb, 0x9b, 0x89, 0x21, 0x45, 0x44, 0x33, 0x43, 0x33, 0x33, 0x43, 0x22, 0x12, - 0x00, 0x80, 0x20, 0x73, 0x34, 0x23, 0x80, 0xc9, 0xbd, 0xbd, 0xcd, 0xba, 0xbb, 0x9b, 0x8a, 0x00, - 0x22, 0x32, 0x53, 0x54, 0x45, 0x43, 0x24, 0x23, 0x33, 0x12, 0x80, 0x99, 0xab, 0xcc, 0xcb, 0xcb, - 0xac, 0xcb, 0xbb, 0xbb, 0xaa, 0x10, 0x44, 0x34, 0x33, 0x22, 0x21, 0x11, 0xa0, 0xdc, 0xcc, 0xcb, - 0xba, 0xcb, 0xcb, 0xbb, 0xbb, 0xab, 0x89, 0x32, 0x55, 0x43, 0x22, 0x23, 0x33, 0x34, 0x24, 0x22, - 0x10, 0x21, 0x31, 0x44, 0x45, 0x23, 0x13, 0x00, 0xb9, 0xdc, 0xdc, 0xdb, 0xab, 0xbb, 0xaa, 0x0a, - 0x10, 0x11, 0x01, 0x42, 0x56, 0x54, 0x33, 0x34, 0x23, 0x23, 0x11, 0x88, 0xb9, 0xcb, 0xcb, 0xbc, - 0xcb, 0xcb, 0xcb, 0xbb, 0xbb, 0x89, 0x30, 0x44, 0x34, 0x32, 0x33, 0x32, 0x11, 0xc9, 0xdc, 0xcb, - 0xca, 0xba, 0xcb, 0x7b, 0x02, 0x01, 0x02, 0x7d, 0x0b, 0x02, 0xf4, 0x01, 0xae, 0x0b, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0xf7, 0xff, 0xa1, 0x8f, 0xa1, 0x74, 0x62, 0xa3, 0xbd, 0x8a, 0x15, - 0x9a, 0x80, 0x18, 0x00, 0x98, 0x9b, 0xb8, 0xbf, 0xad, 0x51, 0x34, 0x80, 0x81, 0xca, 0x18, 0x0a, - 0x24, 0x12, 0x10, 0xfa, 0x8f, 0x00, 0x01, 0x31, 0x15, 0x53, 0x11, 0xa0, 0xac, 0xdb, 0x1a, 0x23, - 0x14, 0xb9, 0x19, 0x41, 0x26, 0x01, 0xa9, 0xba, 0x3b, 0x27, 0x44, 0x23, 0x91, 0xbb, 0xaa, 0xc9, - 0xbf, 0x09, 0x30, 0x45, 0x81, 0xfb, 0xbb, 0x89, 0x20, 0x23, 0xc8, 0xdc, 0xbb, 0x89, 0x11, 0x12, - 0x10, 0x42, 0x33, 0x92, 0xdd, 0xbc, 0x9b, 0x20, 0x33, 0x90, 0x89, 0x40, 0x56, 0x33, 0x82, 0xca, - 0x9b, 0x40, 0x45, 0x33, 0x11, 0x98, 0xaa, 0xca, 0xbc, 0xbd, 0x8a, 0x31, 0x34, 0x82, 0xda, 0xac, - 0x08, 0x53, 0x23, 0x98, 0xcc, 0x9a, 0x10, 0x44, 0x43, 0x32, 0x42, 0x12, 0x90, 0xdb, 0xbc, 0x9a, - 0x10, 0x11, 0xa8, 0xbb, 0x1a, 0x56, 0x23, 0x81, 0xba, 0x89, 0x73, 0x35, 0x33, 0x02, 0x98, 0xa9, - 0xcb, 0xbc, 0xac, 0x19, 0x63, 0x22, 0xa8, 0xcd, 0xbb, 0x8a, 0x10, 0x90, 0xdd, 0xbc, 0xaa, 0x88, - 0x21, 0x21, 0x32, 0x34, 0x13, 0xc8, 0xce, 0xab, 0x09, 0x31, 0x22, 0x80, 0x89, 0x72, 0x35, 0x23, - 0x90, 0xba, 0x89, 0x64, 0x24, 0x13, 0x80, 0xb9, 0xbc, 0xbd, 0xbc, 0x9b, 0x28, 0x44, 0x23, 0xa8, - 0xcc, 0x8a, 0x31, 0x44, 0x01, 0xb8, 0xcb, 0x09, 0x42, 0x44, 0x33, 0x34, 0x24, 0x11, 0xc9, 0xbc, - 0xac, 0x88, 0x11, 0x80, 0xb9, 0x99, 0x52, 0x35, 0x12, 0xa9, 0xbb, 0x48, 0x46, 0x34, 0x22, 0x81, - 0x98, 0xca, 0xdb, 0xbb, 0x8a, 0x31, 0x35, 0x82, 0xeb, 0xbc, 0x9b, 0x08, 0x81, 0xda, 0xcd, 0xab, - 0x9a, 0x18, 0x20, 0x33, 0x34, 0x24, 0x90, 0xfb, 0xbb, 0x9b, 0x10, 0x32, 0x81, 0x88, 0x51, 0x55, - 0x33, 0x02, 0xa8, 0x9a, 0x41, 0x55, 0x32, 0x11, 0x88, 0xbb, 0xcd, 0xcc, 0xaa, 0x09, 0x31, 0x43, - 0x81, 0xca, 0xaa, 0x18, 0x44, 0x22, 0xa0, 0xcb, 0x9a, 0x30, 0x46, 0x43, 0x34, 0x24, 0x13, 0xa0, - 0xdb, 0xbb, 0x9a, 0x08, 0x90, 0xa9, 0x9a, 0x41, 0x46, 0x22, 0x90, 0xaa, 0x18, 0x55, 0x35, 0x23, - 0x13, 0x81, 0xb9, 0xcd, 0xcb, 0x9b, 0x18, 0x43, 0x12, 0xc9, 0xbd, 0xbb, 0x8a, 0x88, 0xca, 0xce, - 0xcb, 0xaa, 0x89, 0x08, 0x31, 0x53, 0x33, 0x02, 0xd9, 0xcc, 0x9a, 0x09, 0x10, 0x00, 0x08, 0x51, - 0x44, 0x24, 0x12, 0x98, 0x89, 0x31, 0x46, 0x33, 0x22, 0x01, 0xa9, 0xce, 0xcc, 0xab, 0x8a, 0x20, - 0x33, 0x82, 0xba, 0x9d, 0x18, 0x43, 0x23, 0x91, 0xcb, 0x9a, 0x30, 0x45, 0x54, 0x63, 0x33, 0x14, - 0x81, 0xb9, 0xac, 0x9b, 0x88, 0x98, 0xbb, 0x9a, 0x51, 0x44, 0x22, 0x80, 0x9b, 0x28, 0x65, 0x43, - 0x33, 0x22, 0x22, 0x90, 0xeb, 0xcc, 0xab, 0x19, 0x32, 0x03, 0xd9, 0xcc, 0xaa, 0x89, 0x98, 0xdb, - 0xcd, 0xbb, 0xaa, 0x9a, 0x99, 0x18, 0x63, 0x34, 0x12, 0xa9, 0xcd, 0xaa, 0x08, 0x10, 0x98, 0x9a, - 0x40, 0x46, 0x24, 0x12, 0x98, 0x88, 0x41, 0x34, 0x24, 0x02, 0x01, 0x81, 0xc9, 0xce, 0xbc, 0x9b, - 0x28, 0x32, 0x01, 0xcb, 0xab, 0x38, 0x35, 0x14, 0xa8, 0xbc, 0x09, 0x41, 0x43, 0x32, 0x54, 0x45, - 0x33, 0x11, 0xa9, 0xbc, 0x8a, 0x08, 0x98, 0xcc, 0xab, 0x28, 0x36, 0x23, 0x91, 0xcb, 0x19, 0x54, - 0x34, 0x23, 0x12, 0x21, 0x12, 0xa8, 0xcf, 0xcb, 0x89, 0x31, 0x23, 0xc9, 0xcd, 0x9a, 0x08, 0x00, - 0xca, 0xdd, 0xab, 0x9b, 0x88, 0x98, 0x9a, 0x10, 0x45, 0x23, 0xa1, 0xcc, 0xbb, 0x19, 0x21, 0x90, - 0xcc, 0x0a, 0x64, 0x34, 0x12, 0x90, 0x9a, 0x38, 0x46, 0x33, 0x11, 0x88, 0x08, 0x90, 0xeb, 0xcd, - 0xab, 0x19, 0x32, 0x02, 0xda, 0xac, 0x19, 0x53, 0x23, 0x90, 0xbc, 0x9b, 0x40, 0x34, 0x23, 0x21, - 0x55, 0x34, 0x13, 0x90, 0xcb, 0x9b, 0x28, 0x01, 0xe9, 0xbc, 0x0b, 0x52, 0x24, 0x81, 0xb9, 0x9b, - 0x51, 0x36, 0x23, 0x81, 0x80, 0x11, 0x02, 0xd9, 0xcc, 0x9b, 0x21, 0x24, 0xa1, 0xce, 0xbb, 0x08, - 0x22, 0x90, 0xed, 0xbc, 0xaa, 0x08, 0x00, 0x98, 0x89, 0x30, 0x44, 0x01, 0xda, 0xac, 0x0a, 0x31, - 0x12, 0xda, 0xbb, 0x38, 0x57, 0x23, 0x81, 0xaa, 0x0a, 0x73, 0x43, 0x11, 0x88, 0x99, 0x80, 0x90, - 0xcc, 0xbc, 0x8b, 0x32, 0x24, 0xc8, 0xcc, 0x8b, 0x41, 0x34, 0x01, 0xca, 0xbb, 0x19, 0x63, 0x33, - 0x11, 0x21, 0x44, 0x24, 0x82, 0xc9, 0xab, 0x18, 0x42, 0x90, 0xec, 0xab, 0x10, 0x44, 0x13, 0xb8, - 0xcb, 0x18, 0x54, 0x24, 0x02, 0x88, 0x09, 0x00, 0x91, 0xda, 0xbb, 0x18, 0x35, 0x03, 0xfb, 0xbd, - 0x8a, 0x20, 0x13, 0xd8, 0xcd, 0xab, 0x89, 0x10, 0x81, 0x98, 0x09, 0x31, 0x23, 0xd8, 0xcd, 0x8b, - 0x30, 0x43, 0xa1, 0xcc, 0x8a, 0x61, 0x34, 0x02, 0xa8, 0xab, 0x40, 0x55, 0x22, 0x81, 0xa9, 0x99, - 0x88, 0xb8, 0xcc, 0xab, 0x30, 0x44, 0x91, 0xdc, 0xac, 0x18, 0x53, 0x23, 0xa8, 0xdb, 0x9a, 0x30, - 0x44, 0x22, 0x01, 0x31, 0x43, 0x13, 0xb9, 0xbd, 0x0a, 0x43, 0x14, 0xc9, 0xbd, 0x8a, 0x41, 0x34, - 0x81, 0xcb, 0x8b, 0x41, 0x36, 0x23, 0x91, 0x99, 0x89, 0x00, 0xa8, 0xbc, 0x8a, 0x54, 0x14, 0xb0, - 0xcf, 0x9b, 0x19, 0x32, 0x01, 0xec, 0xbc, 0x9a, 0x18, 0x11, 0x00, 0x99, 0x18, 0x21, 0xa0, 0xdd, - 0xac, 0x18, 0x53, 0x02, 0xb8, 0xad, 0x29, 0x44, 0x24, 0x91, 0xba, 0x0a, 0x54, 0x34, 0x12, 0x98, - 0xba, 0x99, 0x99, 0xca, 0xbb, 0x2a, 0x55, 0x03, 0xc9, 0xbe, 0x9b, 0x32, 0x36, 0x02, 0xca, 0xbb, - 0x09, 0x63, 0x33, 0x21, 0x01, 0x22, 0x33, 0x90, 0xcd, 0x9b, 0x40, 0x34, 0x81, 0xcc, 0xac, 0x18, - 0x53, 0x22, 0xa9, 0xad, 0x08, 0x54, 0x24, 0x02, 0xa8, 0x99, 0x09, 0x88, 0xa9, 0x9a, 0x52, 0x35, - 0x81, 0xec, 0xbc, 0x8a, 0x20, 0x23, 0xb0, 0xcf, 0xac, 0x89, 0x10, 0x02, 0x00, 0x88, 0x08, 0x80, - 0xdb, 0xbd, 0x89, 0x41, 0x24, 0x81, 0xca, 0x9a, 0x41, 0x35, 0x12, 0xb9, 0xbb, 0x51, 0x46, 0x23, - 0x81, 0xaa, 0xba, 0x9a, 0xa9, 0xba, 0x1a, 0x64, 0x33, 0xb1, 0xcf, 0xbb, 0x18, 0x63, 0x23, 0xa0, - 0xdb, 0xaa, 0x20, 0x44, 0x23, 0x22, 0x21, 0x11, 0x80, 0xdb, 0xac, 0x29, 0x63, 0x22, 0xa8, 0xcc, - 0x8a, 0x21, 0x25, 0x91, 0xca, 0x9b, 0x52, 0x45, 0x22, 0x00, 0x9a, 0xaa, 0x89, 0x99, 0x99, 0x31, - 0x47, 0x12, 0xc9, 0xbe, 0xac, 0x18, 0x31, 0x01, 0xeb, 0xcc, 0x9a, 0x08, 0x11, 0x02, 0x81, 0x80, - 0x98, 0xcb, 0xbe, 0x9b, 0x38, 0x44, 0x13, 0xb8, 0xbb, 0x19, 0x46, 0x33, 0x90, 0xca, 0x1a, 0x64, - 0x34, 0x12, 0x90, 0xba, 0xbb, 0xbb, 0xba, 0x89, 0x73, 0x25, 0x02, 0xea, 0xcb, 0x8b, 0x30, 0x35, - 0x02, 0xb9, 0xad, 0x0a, 0x42, 0x34, 0x33, 0x22, 0x12, 0x90, 0xca, 0xcc, 0x89, 0x41, 0x24, 0x82, - 0xc9, 0xab, 0x19, 0x44, 0x02, 0xb9, 0xbc, 0x28, 0x56, 0x34, 0x02, 0x90, 0xaa, 0xbb, 0xaa, 0x99, - 0x41, 0x45, 0x24, 0x90, 0xcd, 0xbc, 0x99, 0x20, 0x22, 0xa8, 0xce, 0xbb, 0x9b, 0x10, 0x32, 0x22, - 0x01, 0x98, 0xdc, 0xcc, 0xbb, 0x09, 0x42, 0x24, 0x01, 0xa9, 0x8a, 0x41, 0x34, 0x02, 0xc9, 0x9a, - 0x72, 0x54, 0x22, 0x82, 0xa8, 0xbb, 0xad, 0xaa, 0x89, 0x32, 0x46, 0x12, 0xb8, 0xcd, 0xab, 0x18, - 0x42, 0x33, 0x90, 0xdb, 0x9b, 0x28, 0x44, 0x34, 0x24, 0x22, 0x80, 0xb9, 0xbd, 0x9b, 0x20, 0x45, - 0x12, 0x98, 0xaa, 0x09, 0x31, 0x33, 0xb0, 0xbe, 0x8a, 0x55, 0x45, 0x22, 0x00, 0x98, 0xbb, 0xbc, - 0xab, 0x28, 0x55, 0x33, 0x03, 0xeb, 0xbc, 0x9c, 0x08, 0x20, 0x80, 0xdb, 0xbc, 0xab, 0x89, 0x11, - 0x33, 0x33, 0x82, 0xfb, 0xcd, 0xbb, 0x8a, 0x21, 0x34, 0x12, 0x98, 0x89, 0x21, 0x35, 0x12, 0xb8, - 0xbb, 0x51, 0x47, 0x34, 0x22, 0x00, 0xaa, 0xcd, 0xbb, 0x9b, 0x20, 0x55, 0x23, 0x81, 0xbc, 0xad, - 0x8a, 0x21, 0x32, 0x01, 0xc9, 0xab, 0x0a, 0x52, 0x54, 0x53, 0x32, 0x11, 0xa9, 0xcc, 0xab, 0x18, - 0x42, 0x23, 0x01, 0x99, 0x08, 0x31, 0x23, 0xb8, 0xbf, 0x8a, 0x62, 0x45, 0x33, 0x12, 0x01, 0xc9, - 0xcc, 0xbb, 0x8a, 0x52, 0x35, 0x23, 0xb8, 0xcd, 0xbb, 0x89, 0x00, 0x00, 0xca, 0xcc, 0xab, 0x9b, - 0x09, 0x30, 0x44, 0x14, 0xa1, 0xdc, 0xbd, 0x9a, 0x18, 0x22, 0x13, 0x81, 0x08, 0x32, 0x34, 0x82, - 0xca, 0x9c, 0x38, 0x47, 0x43, 0x22, 0x11, 0x98, 0xda, 0xcc, 0xbb, 0x09, 0x53, 0x25, 0x02, 0xc8, - 0xbb, 0x9b, 0x28, 0x32, 0x02, 0xb9, 0xbb, 0x8a, 0x41, 0x45, 0x45, 0x35, 0x23, 0x91, 0xdb, 0xbc, - 0x8a, 0x31, 0x43, 0x11, 0x98, 0x00, 0x32, 0x14, 0xa8, 0xcd, 0x8a, 0x31, 0x46, 0x32, 0x12, 0x11, - 0x90, 0xea, 0xcc, 0xab, 0x28, 0x54, 0x14, 0x81, 0xca, 0xbb, 0x9a, 0x00, 0x80, 0xca, 0xcc, 0xaa, - 0xa9, 0x98, 0x09, 0x42, 0x35, 0x13, 0xf9, 0xcc, 0xab, 0x0a, 0x31, 0x32, 0x00, 0x88, 0x41, 0x34, - 0x12, 0xb9, 0xae, 0x09, 0x44, 0x34, 0x22, 0x01, 0x10, 0x98, 0xec, 0xcc, 0x9a, 0x38, 0x54, 0x22, - 0x90, 0xcb, 0x9b, 0x08, 0x22, 0x81, 0xb9, 0x9c, 0x18, 0x32, 0x33, 0x54, 0x55, 0x34, 0x12, 0xb9, - 0xcd, 0x9b, 0x18, 0x33, 0x12, 0x90, 0x08, 0x53, 0x24, 0x92, 0xeb, 0xab, 0x28, 0x54, 0x23, 0x12, - 0x00, 0x10, 0xa0, 0xec, 0xbc, 0x9a, 0x42, 0x36, 0x12, 0xb9, 0xbc, 0xab, 0x08, 0x80, 0xc9, 0xbd, - 0xab, 0x89, 0x88, 0xa9, 0x09, 0x54, 0x25, 0x92, 0xec, 0xac, 0x9b, 0x10, 0x22, 0x01, 0x88, 0x20, - 0x45, 0x23, 0x90, 0xbd, 0x9b, 0x41, 0x45, 0x12, 0x01, 0x08, 0x88, 0xa8, 0xdd, 0xcb, 0x09, 0x52, - 0x24, 0x02, 0xc9, 0xba, 0x89, 0x31, 0x11, 0xc9, 0xbb, 0x09, 0x43, 0x24, 0x11, 0x52, 0x45, 0x24, - 0x81, 0xdb, 0xcb, 0x89, 0x30, 0x22, 0x81, 0x88, 0x41, 0x35, 0x13, 0xc9, 0xbd, 0x0a, 0x42, 0x25, - 0x12, 0x80, 0x08, 0x00, 0xb8, 0xce, 0xbb, 0x29, 0x55, 0x23, 0x91, 0xdb, 0xab, 0x09, 0x01, 0xa8, - 0xdd, 0xab, 0x89, 0x10, 0x80, 0x99, 0x18, 0x54, 0x23, 0xd8, 0xce, 0xab, 0x89, 0x22, 0x02, 0x80, - 0x09, 0x63, 0x34, 0x02, 0xca, 0xac, 0x19, 0x63, 0x33, 0x01, 0x98, 0x88, 0x80, 0xc9, 0xce, 0xaa, - 0x20, 0x45, 0x23, 0xa0, 0xcb, 0x9a, 0x20, 0x23, 0xb0, 0xbe, 0x9b, 0x40, 0x43, 0x13, 0x10, 0x52, - 0x44, 0x13, 0xb8, 0xdd, 0xaa, 0x18, 0x32, 0x11, 0x89, 0x28, 0x55, 0x33, 0x91, 0xeb, 0xab, 0x28, - 0x54, 0x13, 0x81, 0x98, 0x08, 0x88, 0xd9, 0xbc, 0x9b, 0x51, 0x35, 0x03, 0xb9, 0xbd, 0x8a, 0x10, - 0x80, 0xfb, 0xbc, 0x9a, 0x18, 0x12, 0x90, 0x99, 0x30, 0x35, 0x02, 0xed, 0xad, 0x9b, 0x18, 0x12, - 0x81, 0x89, 0x31, 0x47, 0x13, 0x90, 0xcc, 0x9a, 0x30, 0x35, 0x23, 0x90, 0x99, 0x89, 0x98, 0xeb, - 0xbc, 0x0a, 0x73, 0x43, 0x01, 0xb9, 0xbb, 0x18, 0x43, 0x82, 0xeb, 0xac, 0x19, 0x42, 0x24, 0x10, - 0x00, 0x43, 0x43, 0x82, 0xeb, 0xac, 0x8a, 0x11, 0x13, 0x80, 0x09, 0x63, 0x35, 0x13, 0xc8, 0xbc, - 0x8a, 0x42, 0x35, 0x02, 0x98, 0x99, 0x89, 0x90, 0xeb, 0xbb, 0x18, 0x55, 0x23, 0x90, 0xcc, 0xaa, - 0x00, 0x02, 0xc8, 0xce, 0xab, 0x89, 0x22, 0x12, 0x98, 0x09, 0x31, 0x24, 0xd9, 0xde, 0xba, 0x89, - 0x11, 0x11, 0x99, 0x18, 0x55, 0x34, 0x01, 0xc9, 0xcb, 0x19, 0x52, 0x33, 0x82, 0xa9, 0x9a, 0x89, - 0xa9, 0xcc, 0x9b, 0x50, 0x45, 0x12, 0xa0, 0xcb, 0x09, 0x32, 0x24, 0xb9, 0xbf, 0xab, 0x21, 0x45, - 0x22, 0x10, 0x20, 0x32, 0x14, 0xc8, 0xcc, 0xab, 0x18, 0x21, 0x82, 0x89, 0x40, 0x47, 0x24, 0x81, - 0xbb, 0xac, 0x18, 0x54, 0x22, 0x81, 0xa9, 0x99, 0x99, 0xa9, 0xdb, 0x8a, 0x53, 0x44, 0x01, 0xca, - 0xbb, 0x0a, 0x22, 0x91, 0xdf, 0xbc, 0xaa, 0x10, 0x22, 0x12, 0x88, 0x18, 0x11, 0xa0, 0xdf, 0xbc, - 0xaa, 0x00, 0x01, 0x98, 0x09, 0x72, 0x35, 0x33, 0x90, 0xbd, 0x9b, 0x30, 0x36, 0x23, 0x90, 0xba, - 0xaa, 0x9a, 0xcb, 0xab, 0x38, 0x47, 0x24, 0x81, 0xab, 0x9b, 0x41, 0x25, 0x81, 0xdc, 0xac, 0x09, - 0x32, 0x35, 0x22, 0x11, 0x21, 0x12, 0xa0, 0xdc, 0xac, 0x8a, 0x11, 0x81, 0x98, 0x39, 0x57, 0x34, - 0x13, 0xa8, 0xbc, 0x8b, 0x52, 0x34, 0x12, 0x90, 0xab, 0xab, 0xbb, 0xcb, 0x8a, 0x52, 0x35, 0x03, - 0xc9, 0xbd, 0x8a, 0x21, 0x12, 0xfa, 0xce, 0xba, 0x09, 0x20, 0x22, 0x11, 0x81, 0x00, 0xa8, 0xdc, - 0xbd, 0xab, 0x89, 0x00, 0xa0, 0x9a, 0x41, 0x57, 0x33, 0x02, 0xb9, 0xbc, 0x09, 0x44, 0x43, 0x01, - 0xa8, 0xbb, 0xbb, 0xbb, 0x9b, 0x48, 0x46, 0x33, 0x82, 0xca, 0x9b, 0x30, 0x37, 0x03, 0xd9, 0xcc, - 0x9a, 0x28, 0x53, 0x33, 0x23, 0x22, 0x01, 0xa0, 0xcc, 0xbb, 0x8b, 0x10, 0x80, 0xbb, 0x0b, 0x67, - 0x35, 0x24, 0x81, 0xaa, 0x9b, 0x38, 0x45, 0x23, 0x01, 0xb9, 0xcb, 0xac, 0xbb, 0x89, 0x42, 0x35, - 0x12, 0xc9, 0xcc, 0x8a, 0x10, 0x23, 0xc0, 0xcf, 0xcb, 0xaa, 0x18, 0x21, 0x23, 0x13, 0x01, 0xa9, - 0xcd, 0xad, 0x9b, 0x09, 0x08, 0xa9, 0xcb, 0x19, 0x55, 0x35, 0x22, 0x98, 0xba, 0x8a, 0x41, 0x44, - 0x12, 0x90, 0xb9, 0xbd, 0xcb, 0xaa, 0x28, 0x45, 0x33, 0x02, 0xca, 0xab, 0x30, 0x55, 0x13, 0xa0, - 0xcd, 0xab, 0x89, 0x42, 0x43, 0x34, 0x32, 0x02, 0xa8, 0xdb, 0xbb, 0x89, 0x21, 0x01, 0xdb, 0xab, - 0x40, 0x47, 0x24, 0x02, 0x98, 0x99, 0x18, 0x42, 0x24, 0x11, 0x90, 0xba, 0xbe, 0xbc, 0x9b, 0x40, - 0x44, 0x22, 0xb8, 0xbd, 0xab, 0x20, 0x33, 0x92, 0xde, 0xbd, 0xba, 0x89, 0x10, 0x32, 0x34, 0x23, - 0x90, 0xdc, 0xcc, 0x9a, 0x09, 0x11, 0x98, 0xbc, 0x9b, 0x52, 0x35, 0x24, 0x81, 0xa9, 0x89, 0x30, - 0x43, 0x13, 0x81, 0xa8, 0xcd, 0xbd, 0xbc, 0x09, 0x53, 0x35, 0x02, 0xa9, 0xac, 0x09, 0x63, 0x23, - 0x82, 0xcb, 0xbc, 0x9a, 0x10, 0x43, 0x44, 0x34, 0x22, 0x91, 0xcb, 0xbc, 0x8a, 0x21, 0x12, 0xb8, - 0xbe, 0x09, 0x73, 0x24, 0x13, 0x80, 0x99, 0x10, 0x43, 0x32, 0x01, 0x80, 0xa8, 0xec, 0xcc, 0xbb, - 0x18, 0x73, 0x23, 0x90, 0xdb, 0xbb, 0x08, 0x43, 0x12, 0xd9, 0xcc, 0xbb, 0x9a, 0x08, 0x20, 0x43, - 0x44, 0x02, 0xb8, 0xce, 0xba, 0x09, 0x21, 0x81, 0xc9, 0xac, 0x19, 0x63, 0x33, 0x02, 0xa8, 0x89, - 0x31, 0x35, 0x11, 0x98, 0x8a, 0xba, 0xde, 0xcc, 0x9a, 0x30, 0x45, 0x23, 0x90, 0xbc, 0x8b, 0x42, - 0x35, 0x12, 0xb8, 0xcc, 0x9a, 0x08, 0x21, 0x43, 0x54, 0x33, 0x03, 0xb9, 0xbf, 0x9a, 0x28, 0x22, - 0x82, 0xdb, 0xab, 0x30, 0x46, 0x23, 0x01, 0x89, 0x28, 0x53, 0x23, 0x81, 0x98, 0x89, 0xa9, 0xcf, - 0xcc, 0x8a, 0x31, 0x45, 0x02, 0xc9, 0xac, 0x8a, 0x30, 0x33, 0x90, 0xdd, 0xbb, 0x9b, 0x89, 0x00, - 0x20, 0x45, 0x24, 0x81, 0xeb, 0xbc, 0x8a, 0x28, 0x22, 0x90, 0xbd, 0x8b, 0x40, 0x44, 0x12, 0x98, - 0x99, 0x21, 0x44, 0x12, 0xa8, 0xaa, 0x99, 0xb9, 0xcf, 0xbc, 0x09, 0x63, 0x34, 0x02, 0xba, 0xad, - 0x18, 0x53, 0x33, 0x80, 0xcb, 0xab, 0x09, 0x11, 0x22, 0x63, 0x45, 0x23, 0x91, 0xeb, 0xbb, 0x8a, - 0x32, 0x14, 0xb0, 0xbc, 0x0a, 0x63, 0x24, 0x02, 0x98, 0x08, 0x53, 0x43, 0x02, 0xa8, 0x99, 0x89, - 0xc9, 0xcd, 0xac, 0x19, 0x44, 0x24, 0xa0, 0xeb, 0xaa, 0x18, 0x32, 0x03, 0xd9, 0xbc, 0xab, 0x89, - 0x80, 0x08, 0x41, 0x45, 0x13, 0xa8, 0xbf, 0xac, 0x88, 0x22, 0x12, 0xc9, 0xbb, 0x19, 0x63, 0x23, - 0x80, 0x9a, 0x29, 0x64, 0x23, 0x91, 0xba, 0xab, 0xa9, 0xca, 0xce, 0x9b, 0x30, 0x37, 0x14, 0xa0, - 0xcb, 0x8a, 0x41, 0x34, 0x12, 0xa9, 0xac, 0x8a, 0x10, 0x12, 0x21, 0x45, 0x35, 0x13, 0xc8, 0xcd, - 0x9a, 0x18, 0x23, 0x02, 0xba, 0x9d, 0x28, 0x35, 0x23, 0x80, 0x89, 0x51, 0x45, 0x22, 0x90, 0xaa, - 0x9a, 0x98, 0xda, 0xcc, 0x8b, 0x50, 0x34, 0x02, 0xd9, 0xbc, 0x8a, 0x21, 0x24, 0x90, 0xcc, 0xab, - 0x8a, 0x08, 0x08, 0x08, 0x63, 0x34, 0x02, 0xeb, 0xbd, 0x9a, 0x20, 0x22, 0x81, 0xbc, 0x9b, 0x40, - 0x34, 0x02, 0xa9, 0x8a, 0x72, 0x44, 0x11, 0x99, 0xbb, 0xaa, 0x99, 0xdb, 0xad, 0x0a, 0x54, 0x43, - 0x02, 0xba, 0xbc, 0x18, 0x44, 0x14, 0x91, 0xb9, 0x9a, 0x18, 0x21, 0x11, 0x41, 0x55, 0x33, 0x82, - 0xdc, 0xbc, 0x89, 0x21, 0x23, 0x90, 0xbc, 0x0a, 0x62, 0x33, 0x02, 0xa9, 0x38, 0x56, 0x24, 0x02, - 0xa8, 0xba, 0x99, 0xa9, 0xdc, 0xbb, 0x19, 0x55, 0x23, 0xa0, 0xdc, 0xab, 0x18, 0x32, 0x03, 0xd9, - 0xbc, 0xaa, 0x08, 0x80, 0x88, 0x21, 0x55, 0x33, 0xb0, 0xcf, 0xbb, 0x09, 0x22, 0x13, 0xb8, 0xbc, - 0x19, 0x53, 0x13, 0xa0, 0xbb, 0x58, 0x46, 0x33, 0x81, 0xcb, 0xbb, 0xaa, 0xaa, 0xcc, 0x9b, 0x50, - 0x45, 0x13, 0xa0, 0xdb, 0x99, 0x41, 0x43, 0x12, 0xa9, 0xba, 0x09, 0x31, 0x22, 0x21, 0x54, 0x35, - 0x23, 0xc8, 0xce, 0xaa, 0x08, 0x32, 0x02, 0xb8, 0xaa, 0x30, 0x36, 0x23, 0xa8, 0x0a, 0x74, 0x35, - 0x33, 0x90, 0xba, 0xbb, 0xaa, 0xcb, 0xbc, 0x9b, 0x62, 0x25, 0x02, 0xca, 0xbd, 0x99, 0x21, 0x22, - 0xa1, 0xcd, 0xab, 0x89, 0x00, 0x00, 0x08, 0x52, 0x34, 0x03, 0xfb, 0xbd, 0x9b, 0x10, 0x32, 0x81, - 0xba, 0x9b, 0x41, 0x34, 0x91, 0xcb, 0x0a, 0x65, 0x44, 0x02, 0x98, 0xcb, 0xba, 0xa9, 0xba, 0xbb, - 0x18, 0x56, 0x24, 0x01, 0xb9, 0x9c, 0x29, 0x44, 0x23, 0x80, 0xba, 0x8b, 0x21, 0x34, 0x22, 0x41, - 0x44, 0x24, 0x92, 0xdc, 0xbc, 0x9a, 0x11, 0x23, 0x80, 0x9a, 0x19, 0x54, 0x23, 0x80, 0xaa, 0x61, - 0x47, 0x33, 0x03, 0x98, 0xcb, 0xba, 0xba, 0xcb, 0xaa, 0x30, 0x55, 0x22, 0xb8, 0xdc, 0xab, 0x08, - 0x22, 0x82, 0xda, 0xbc, 0x9a, 0x00, 0x01, 0x08, 0x31, 0x44, 0x14, 0xb0, 0xcf, 0xbb, 0x8a, 0x21, - 0x11, 0x98, 0x99, 0x21, 0x44, 0x91, 0xeb, 0x9b, 0x51, 0x46, 0x23, 0x01, 0xba, 0xbc, 0xbc, 0xba, - 0xaa, 0x09, 0x62, 0x44, 0x02, 0x98, 0xab, 0x0a, 0x53, 0x34, 0x11, 0x99, 0x9b, 0x28, 0x43, 0x33, - 0x42, 0x53, 0x43, 0x02, 0xda, 0xcd, 0xaa, 0x88, 0x21, 0x00, 0x88, 0x20, 0x53, 0x24, 0x90, 0xba, - 0x28, 0x77, 0x34, 0x23, 0x00, 0xa9, 0xcb, 0xbb, 0xcb, 0x9a, 0x18, 0x34, 0x24, 0x90, 0xdc, 0xab, - 0x89, 0x20, 0x01, 0xca, 0xcc, 0x9b, 0x09, 0x01, 0x11, 0x21, 0x53, 0x23, 0xb8, 0xdf, 0xbb, 0xab, - 0x00, 0x01, 0x88, 0x09, 0x42, 0x34, 0x82, 0xec, 0xac, 0x28, 0x64, 0x34, 0x12, 0x98, 0xca, 0xdb, - 0xba, 0xba, 0x09, 0x31, 0x36, 0x22, 0x90, 0xba, 0x0a, 0x52, 0x44, 0x11, 0x98, 0x9a, 0x18, 0x53, - 0x33, 0x42, 0x33, 0x24, 0x02, 0xda, 0xcd, 0xaa, 0x89, 0x08, 0x88, 0x89, 0x31, 0x37, 0x24, 0x91, - 0xbb, 0x0c, 0x73, 0x45, 0x33, 0x12, 0x80, 0xba, 0xcc, 0xbb, 0x9c, 0x09, 0x42, 0x23, 0x81, 0xcc, - 0xbb, 0x8a, 0x10, 0x01, 0xda, 0xbd, 0xaa, 0x09, 0x20, 0x11, 0x21, 0x35, 0x23, 0xb0, 0xdf, 0xbb, - 0x9a, 0x08, 0x80, 0xaa, 0x8b, 0x54, 0x35, 0x12, 0xda, 0xbd, 0x89, 0x42, 0x45, 0x22, 0x01, 0x99, - 0xdb, 0xbc, 0xcb, 0x8a, 0x10, 0x34, 0x14, 0x91, 0xaa, 0x8a, 0x42, 0x34, 0x12, 0xa8, 0xaa, 0x28, - 0x44, 0x34, 0x32, 0x43, 0x24, 0x02, 0xd9, 0xcc, 0x9b, 0x89, 0x01, 0xa8, 0xbb, 0x2a, 0x57, 0x33, - 0x02, 0xca, 0xac, 0x20, 0x46, 0x34, 0x23, 0x01, 0x98, 0xca, 0xcc, 0xbb, 0x8a, 0x31, 0x34, 0x83, - 0xda, 0xbc, 0x8a, 0x20, 0x02, 0xc9, 0xcd, 0xaa, 0x08, 0x11, 0x12, 0x11, 0x33, 0x25, 0x90, 0xdd, - 0xac, 0x8a, 0x10, 0x01, 0xc8, 0xbb, 0x28, 0x47, 0x13, 0xa0, 0xdc, 0xaa, 0x20, 0x44, 0x33, 0x12, - 0x80, 0xba, 0xdd, 0xbc, 0xbb, 0x09, 0x53, 0x33, 0x82, 0xc9, 0xaa, 0x40, 0x34, 0x23, 0xa8, 0xcb, - 0x09, 0x43, 0x44, 0x12, 0x22, 0x43, 0x12, 0xb8, 0xde, 0xba, 0x08, 0x21, 0x91, 0xcb, 0x9c, 0x40, - 0x35, 0x14, 0x98, 0xac, 0x8a, 0x53, 0x35, 0x33, 0x11, 0x00, 0xa8, 0xcc, 0xbd, 0xab, 0x18, 0x53, - 0x22, 0xb8, 0xbd, 0xab, 0x10, 0x33, 0xa0, 0xce, 0xac, 0x89, 0x21, 0x21, 0x11, 0x31, 0x53, 0x82, - 0xea, 0xbd, 0xaa, 0x20, 0x23, 0xa1, 0xcc, 0x9b, 0x52, 0x35, 0x02, 0xca, 0xad, 0x0a, 0x32, 0x35, - 0x12, 0x81, 0x98, 0xba, 0xcf, 0xcb, 0x9a, 0x20, 0x44, 0x12, 0xa9, 0xab, 0x09, 0x54, 0x23, 0x81, - 0xca, 0x9a, 0x30, 0x35, 0x33, 0x22, 0x42, 0x33, 0x91, 0xed, 0xac, 0x8a, 0x20, 0x13, 0xb8, 0xbd, - 0x0a, 0x73, 0x43, 0x81, 0xb9, 0x9c, 0x28, 0x54, 0x33, 0x22, 0x01, 0x80, 0xa9, 0xce, 0xcb, 0x9a, - 0x41, 0x33, 0x91, 0xeb, 0xbb, 0x09, 0x32, 0x13, 0xfa, 0xdb, 0x8a, 0x18, 0x22, 0x02, 0x11, 0x32, - 0x14, 0xb0, 0xcf, 0xac, 0x08, 0x31, 0x13, 0xc9, 0xcb, 0x08, 0x54, 0x32, 0xa0, 0xcc, 0xaa, 0x28, - 0x34, 0x14, 0x01, 0x88, 0x99, 0xda, 0xdc, 0xbb, 0x09, 0x43, 0x34, 0x80, 0xcb, 0x9a, 0x31, 0x36, - 0x13, 0xb9, 0xbc, 0x09, 0x53, 0x24, 0x22, 0x21, 0x23, 0x13, 0xea, 0xcd, 0x9b, 0x19, 0x33, 0x82, - 0xda, 0x9c, 0x28, 0x54, 0x13, 0xa0, 0xcb, 0x8a, 0x52, 0x34, 0x23, 0x10, 0x00, 0x80, 0xca, 0xce, - 0xaa, 0x19, 0x43, 0x23, 0xc9, 0xbd, 0x9a, 0x20, 0x33, 0xa1, 0xde, 0xab, 0x89, 0x31, 0x23, 0x12, - 0x32, 0x43, 0x82, 0xec, 0xbd, 0x9a, 0x30, 0x43, 0x81, 0xda, 0x9a, 0x30, 0x36, 0x02, 0xc9, 0xac, - 0x8a, 0x32, 0x25, 0x02, 0x88, 0x98, 0xa9, 0xec, 0xbc, 0x9b, 0x20, 0x45, 0x02, 0xb8, 0xac, 0x19, - 0x44, 0x33, 0x91, 0xcb, 0xab, 0x30, 0x45, 0x23, 0x22, 0x23, 0x23, 0xa0, 0xcf, 0xbc, 0x8a, 0x21, - 0x14, 0x90, 0xbc, 0x8b, 0x62, 0x43, 0x02, 0xaa, 0xac, 0x28, 0x54, 0x23, 0x02, 0x00, 0x01, 0xa8, - 0xfb, 0xbc, 0x8a, 0x31, 0x34, 0x91, 0xdc, 0xac, 0x08, 0x31, 0x12, 0xca, 0xbe, 0x9b, 0x10, 0x32, - 0x33, 0x22, 0x43, 0x12, 0xc8, 0xcf, 0xab, 0x09, 0x42, 0x23, 0xa8, 0xbc, 0x09, 0x73, 0x23, 0x80, - 0xbc, 0xac, 0x10, 0x43, 0x13, 0x80, 0x98, 0x99, 0xda, 0xcd, 0xac, 0x89, 0x42, 0x24, 0x80, 0xdb, - 0x9a, 0x31, 0x45, 0x02, 0xa8, 0xbb, 0x0a, 0x52, 0x34, 0x23, 0x32, 0x33, 0x82, 0xfa, 0xbd, 0x9c, - 0x19, 0x22, 0x12, 0xba, 0xbc, 0x28, 0x55, 0x13, 0x90, 0xba, 0x0b, 0x63, 0x34, 0x23, 0x81, 0x00, - 0x80, 0xc9, 0xcd, 0xbb, 0x18, 0x63, 0x02, 0xc9, 0xcc, 0x9a, 0x20, 0x23, 0x91, 0xdd, 0xbb, 0x8a, - 0x31, 0x33, 0x24, 0x33, 0x33, 0x91, 0xde, 0xcc, 0x9a, 0x20, 0x23, 0x02, 0xc9, 0xaa, 0x31, 0x45, - 0x12, 0xb9, 0xbd, 0x89, 0x42, 0x23, 0x82, 0xa8, 0x9a, 0xca, 0xdc, 0xcc, 0x9a, 0x20, 0x25, 0x02, - 0xc9, 0xbb, 0x29, 0x55, 0x23, 0x81, 0xca, 0xab, 0x20, 0x44, 0x34, 0x32, 0x33, 0x22, 0xb8, 0xdf, - 0xbb, 0x8a, 0x30, 0x32, 0x90, 0xdb, 0x8a, 0x42, 0x35, 0x02, 0xa9, 0xaa, 0x30, 0x37, 0x24, 0x01, - 0x00, 0x00, 0x98, 0xeb, 0xac, 0x9a, 0x32, 0x24, 0xa0, 0xcf, 0xab, 0x19, 0x22, 0x03, 0xda, 0xcd, - 0x9a, 0x19, 0x22, 0x43, 0x32, 0x33, 0x03, 0xda, 0xce, 0xab, 0x09, 0x32, 0x23, 0xa0, 0xbb, 0x19, - 0x55, 0x23, 0x91, 0xdb, 0x9b, 0x20, 0x53, 0x11, 0x88, 0xaa, 0xaa, 0xdc, 0xcc, 0xbb, 0x19, 0x53, - 0x23, 0xb8, 0xcd, 0x8a, 0x51, 0x34, 0x12, 0xa8, 0xcb, 0x89, 0x42, 0x44, 0x33, 0x43, 0x23, 0x81, - 0xeb, 0xcc, 0xaa, 0x08, 0x11, 0x02, 0x99, 0xaa, 0x20, 0x45, 0x23, 0x90, 0x9a, 0x28, 0x65, 0x33, - 0x13, 0x01, 0x80, 0x90, 0xca, 0xbd, 0x9c, 0x30, 0x43, 0x91, 0xce, 0xad, 0x8a, 0x10, 0x22, 0xb0, - 0xcd, 0xac, 0x8a, 0x10, 0x42, 0x43, 0x43, 0x12, 0x90, 0xdc, 0xbc, 0x99, 0x28, 0x22, 0x02, 0x98, - 0x08, 0x41, 0x43, 0x81, 0xba, 0xac, 0x20, 0x54, 0x02, 0xa0, 0xba, 0xbc, 0xdb, 0xeb, 0xba, 0x09, - 0x42, 0x23, 0xb0, 0xce, 0x9a, 0x20, 0x45, 0x33, 0x80, 0xba, 0xaa, 0x30, 0x45, 0x35, 0x44, 0x32, - 0x02, 0xb9, 0xcd, 0xac, 0x89, 0x00, 0x11, 0x90, 0x98, 0x18, 0x42, 0x33, 0x80, 0x99, 0x40, 0x55, - 0x34, 0x02, 0x01, 0x00, 0x08, 0xa9, 0xbd, 0x9c, 0x30, 0x34, 0x92, 0xde, 0xad, 0x9b, 0x00, 0x12, - 0x90, 0xcc, 0xbc, 0xaa, 0x09, 0x22, 0x44, 0x35, 0x24, 0x81, 0xca, 0xcc, 0x9b, 0x08, 0x11, 0x02, - 0x80, 0x18, 0x42, 0x43, 0x01, 0xba, 0xac, 0x20, 0x35, 0x12, 0xb9, 0xbc, 0xcb, 0xcb, 0xcc, 0xac, - 0x0a, 0x41, 0x33, 0x90, 0xce, 0x9b, 0x18, 0x44, 0x33, 0x82, 0xa9, 0x89, 0x30, 0x54, 0x43, 0x45, - 0x43, 0x13, 0x91, 0xeb, 0xbb, 0xab, 0x08, 0x00, 0x90, 0x89, 0x21, 0x35, 0x23, 0xa0, 0xbb, 0x48, - 0x57, 0x33, 0x22, 0x08, 0x08, 0x80, 0x99, 0xcc, 0xab, 0x40, 0x36, 0x02, 0xfa, 0xbc, 0xab, 0x08, - 0x21, 0x90, 0xea, 0xbb, 0xab, 0x89, 0x00, 0x41, 0x55, 0x34, 0x23, 0xa8, 0xcd, 0xac, 0x88, 0x00, - 0x01, 0x88, 0x10, 0x53, 0x33, 0x91, 0xda, 0xab, 0x38, 0x45, 0x22, 0x98, 0xbc, 0xba, 0xbb, 0xcc, - 0xac, 0x8a, 0x51, 0x34, 0x81, 0xcc, 0xac, 0x09, 0x33, 0x25, 0x82, 0xa8, 0x89, 0x20, 0x43, 0x33, - 0x45, 0x45, 0x24, 0x02, 0xb9, 0xbd, 0xab, 0x89, 0x00, 0x98, 0x9a, 0x20, 0x45, 0x33, 0xa0, 0xbc, - 0x0a, 0x64, 0x34, 0x13, 0x80, 0x99, 0x08, 0x88, 0xca, 0xbb, 0x38, 0x57, 0x13, 0xc0, 0xbd, 0xac, - 0x09, 0x20, 0x81, 0xda, 0xcb, 0x9a, 0x08, 0x00, 0x00, 0x41, 0x46, 0x33, 0x82, 0xeb, 0xbb, 0x9a, - 0x10, 0x11, 0xa9, 0x89, 0x73, 0x34, 0x13, 0xb9, 0xbd, 0x0a, 0x62, 0x23, 0x81, 0xbb, 0xbc, 0xaa, - 0xca, 0xbc, 0xab, 0x30, 0x47, 0x12, 0xb9, 0xbe, 0x8a, 0x31, 0x34, 0x02, 0xa9, 0xab, 0x38, 0x45, - 0x23, 0x21, 0x54, 0x44, 0x22, 0x90, 0xdb, 0xbb, 0x8a, 0x00, 0x98, 0xbc, 0x89, 0x63, 0x34, 0x02, - 0xca, 0xbb, 0x30, 0x47, 0x23, 0x81, 0xa8, 0x89, 0x08, 0xa8, 0xbb, 0x0b, 0x56, 0x44, 0x81, 0xda, - 0xbc, 0x9a, 0x11, 0x12, 0xa9, 0xbe, 0xab, 0x09, 0x21, 0x00, 0x08, 0x73, 0x34, 0x14, 0xa8, 0xcc, - 0x9b, 0x08, 0x11, 0x90, 0xbb, 0x38, 0x57, 0x33, 0x90, 0xdb, 0xab, 0x30, 0x35, 0x14, 0xa8, 0xcb, - 0xab, 0x9a, 0xbb, 0xad, 0x19, 0x54, 0x33, 0x91, 0xcd, 0xbb, 0x29, 0x53, 0x23, 0x98, 0xba, 0x8a, - 0x53, 0x34, 0x12, 0x21, 0x45, 0x34, 0x02, 0xc9, 0xcc, 0x8a, 0x08, 0x80, 0xb9, 0x9c, 0x28, 0x55, - 0x22, 0xa0, 0xbc, 0x0a, 0x62, 0x34, 0x12, 0x88, 0x9a, 0x8a, 0x98, 0xb9, 0xaa, 0x62, 0x46, 0x22, - 0xb8, 0xce, 0xaa, 0x08, 0x12, 0x81, 0xdb, 0xac, 0x8a, 0x20, 0x21, 0x80, 0x10, 0x54, 0x33, 0x82, - 0xcc, 0xbc, 0x09, 0x21, 0x01, 0xcb, 0x9b, 0x63, 0x36, 0x12, 0xa9, 0xbd, 0x09, 0x42, 0x24, 0x81, - 0xba, 0xbc, 0xaa, 0xba, 0xdb, 0x9a, 0x51, 0x44, 0x12, 0xb9, 0xbe, 0x9a, 0x31, 0x34, 0x82, 0xc9, - 0x9b, 0x20, 0x35, 0x24, 0x11, 0x31, 0x44, 0x23, 0x90, 0xcd, 0xab, 0x08, 0x10, 0xa8, 0xbe, 0x8a, - 0x52, 0x34, 0x03, 0xda, 0xab, 0x28, 0x45, 0x24, 0x81, 0xa8, 0x99, 0x99, 0x98, 0xab, 0x29, 0x56, - 0x34, 0x82, 0xeb, 0xac, 0x8a, 0x10, 0x12, 0xb8, 0xbe, 0xab, 0x08, 0x22, 0x12, 0x80, 0x41, 0x44, - 0x13, 0xb8, 0xcd, 0x8b, 0x10, 0x22, 0xa8, 0xbd, 0x29, 0x56, 0x33, 0x81, 0xcc, 0xaa, 0x28, 0x35, - 0x23, 0x98, 0xcc, 0xab, 0xab, 0xbb, 0xbb, 0x28, 0x47, 0x24, 0x91, 0xeb, 0xba, 0x18, 0x42, 0x22, - 0xa0, 0xcb, 0x89, 0x52, 0x43, 0x12, 0x21, 0x32, 0x34, 0x02, 0xda, 0xbc, 0x9a, 0x11, 0x91, 0xeb, - 0xac, 0x18, 0x54, 0x23, 0xa0, 0xdb, 0x8a, 0x41, 0x35, 0x13, 0x80, 0xaa, 0xab, 0xa9, 0xba, 0x8a, - 0x73, 0x37, 0x12, 0xb0, 0xcd, 0xab, 0x08, 0x21, 0x81, 0xfb, 0xbb, 0x89, 0x20, 0x22, 0x02, 0x11, - 0x42, 0x33, 0xa1, 0xdd, 0xab, 0x18, 0x33, 0x82, 0xcd, 0x9b, 0x51, 0x36, 0x13, 0xa8, 0xbd, 0x89, - 0x42, 0x34, 0x01, 0xb9, 0xbd, 0xac, 0xba, 0xab, 0x8a, 0x62, 0x44, 0x02, 0xb8, 0xbd, 0x9a, 0x21, - 0x34, 0x82, 0xca, 0xab, 0x20, 0x36, 0x34, 0x22, 0x21, 0x23, 0x13, 0xb8, 0xce, 0x9a, 0x18, 0x11, - 0xc9, 0xcd, 0x8a, 0x40, 0x34, 0x03, 0xc9, 0xbb, 0x28, 0x46, 0x24, 0x11, 0xa8, 0xb9, 0xba, 0xba, - 0x9a, 0x30, 0x67, 0x33, 0x81, 0xdb, 0xbc, 0x8a, 0x10, 0x11, 0xc9, 0xdc, 0xaa, 0x08, 0x21, 0x23, - 0x11, 0x12, 0x23, 0x81, 0xfb, 0xbb, 0x0a, 0x52, 0x12, 0xc8, 0xcb, 0x29, 0x64, 0x33, 0x82, 0xcb, - 0xbb, 0x20, 0x46, 0x22, 0x90, 0xda, 0xcb, 0xbb, 0xbb, 0x9b, 0x31, 0x46, 0x14, 0x80, 0xcb, 0xbb, - 0x18, 0x42, 0x13, 0xb0, 0xdb, 0x89, 0x52, 0x34, 0x24, 0x32, 0x21, 0x12, 0xa8, 0xdb, 0xab, 0x19, - 0x22, 0xa0, 0xcf, 0xbb, 0x18, 0x44, 0x24, 0x90, 0xbb, 0x8b, 0x63, 0x35, 0x14, 0x81, 0x99, 0xbb, - 0xbc, 0xba, 0x19, 0x55, 0x34, 0x13, 0xb9, 0xbd, 0xac, 0x88, 0x11, 0xa8, 0xdc, 0xcb, 0x99, 0x20, - 0x22, 0x32, 0x32, 0x12, 0x91, 0xeb, 0xbc, 0x89, 0x41, 0x24, 0x90, 0xcb, 0x9a, 0x62, 0x34, 0x23, - 0xa8, 0xbc, 0x0a, 0x53, 0x34, 0x02, 0xa9, 0xcd, 0xcc, 0xbb, 0xab, 0x18, 0x53, 0x34, 0x02, 0xc9, - 0xcb, 0x89, 0x21, 0x23, 0x91, 0xdb, 0xaa, 0x20, 0x46, 0x43, 0x33, 0x24, 0x11, 0x90, 0xcb, 0xbb, - 0x08, 0x32, 0x02, 0xfb, 0xbc, 0x89, 0x31, 0x44, 0x01, 0xaa, 0x9a, 0x40, 0x46, 0x33, 0x12, 0x80, - 0xba, 0xbe, 0xad, 0x8a, 0x41, 0x44, 0x23, 0x91, 0xdb, 0xab, 0x8a, 0x18, 0x98, 0xfb, 0xcb, 0xaa, - 0x09, 0x11, 0x33, 0x44, 0x32, 0x00, 0xda, 0xcb, 0x9a, 0x31, 0x34, 0x02, 0xb9, 0xac, 0x30, 0x36, - 0x14, 0x91, 0xaa, 0x0a, 0x52, 0x34, 0x13, 0x88, 0xeb, 0xdc, 0xbc, 0xcb, 0x99, 0x31, 0x44, 0x12, - 0x98, 0xbb, 0x9b, 0x20, 0x24, 0x81, 0xca, 0xbb, 0x08, 0x64, 0x53, 0x43, 0x43, 0x22, 0x90, 0xca, - 0xbb, 0x89, 0x32, 0x24, 0xb8, 0xcd, 0x9a, 0x28, 0x33, 0x12, 0xb9, 0xaa, 0x51, 0x46, 0x33, 0x23, - 0x21, 0x90, 0xec, 0xcc, 0xab, 0x19, 0x54, 0x33, 0x02, 0xb9, 0xbc, 0x9a, 0x88, 0xa0, 0xec, 0xcb, - 0x9b, 0x8a, 0x00, 0x31, 0x63, 0x43, 0x12, 0xa9, 0xcd, 0x9b, 0x28, 0x53, 0x12, 0xa0, 0xaa, 0x29, - 0x53, 0x24, 0x80, 0xa9, 0x09, 0x42, 0x25, 0x02, 0x80, 0x99, 0xdc, 0xdd, 0xbc, 0xab, 0x19, 0x44, - 0x23, 0x80, 0xbb, 0x9b, 0x20, 0x33, 0x81, 0xcc, 0xac, 0x08, 0x42, 0x34, 0x35, 0x35, 0x25, 0x02, - 0xa9, 0xcc, 0x8a, 0x10, 0x23, 0x82, 0xcb, 0xbb, 0x18, 0x33, 0x03, 0xda, 0xab, 0x51, 0x45, 0x33, - 0x11, 0x11, 0x11, 0xb0, 0xcf, 0xbd, 0x9a, 0x51, 0x53, 0x12, 0xa8, 0xba, 0x9a, 0x18, 0x80, 0xfa, - 0xbc, 0xab, 0x9a, 0x80, 0x10, 0x31, 0x37, 0x34, 0x91, 0xeb, 0xcb, 0x09, 0x31, 0x24, 0x01, 0x9a, - 0x0a, 0x42, 0x24, 0x91, 0xba, 0x8a, 0x73, 0x43, 0x02, 0x98, 0x9a, 0xa9, 0xdc, 0xdd, 0xbb, 0x8b, - 0x41, 0x24, 0x02, 0xaa, 0xab, 0x18, 0x34, 0x03, 0xda, 0xbc, 0x89, 0x41, 0x33, 0x43, 0x44, 0x35, - 0x23, 0x91, 0xbd, 0xbc, 0x08, 0x33, 0x23, 0xb8, 0xad, 0x8a, 0x32, 0x13, 0xc9, 0xbc, 0x29, 0x46, - 0x24, 0x02, 0x88, 0x18, 0x01, 0xb8, 0xdf, 0xab, 0x19, 0x54, 0x23, 0x80, 0xca, 0x9a, 0x00, 0x12, - 0xc9, 0xce, 0xbb, 0x99, 0x00, 0x00, 0x10, 0x42, 0x45, 0x12, 0xb8, 0xce, 0x9a, 0x28, 0x43, 0x12, - 0xa0, 0x99, 0x30, 0x44, 0x02, 0xb9, 0x9c, 0x38, 0x46, 0x22, 0x98, 0xb9, 0x9a, 0xa8, 0xdd, 0xbd, - 0xac, 0x18, 0x43, 0x13, 0xa8, 0xcb, 0x09, 0x43, 0x23, 0xb0, 0xbe, 0xab, 0x20, 0x44, 0x22, 0x31, - 0x55, 0x33, 0x03, 0xc9, 0xbd, 0x9a, 0x30, 0x43, 0x81, 0xba, 0xaa, 0x31, 0x34, 0xa0, 0xce, 0x9a, - 0x42, 0x36, 0x12, 0x90, 0x99, 0x00, 0x80, 0xd9, 0xbd, 0x9b, 0x42, 0x26, 0x02, 0xb9, 0xbb, 0x19, - 0x43, 0x82, 0xdd, 0xbd, 0x9a, 0x09, 0x01, 0x00, 0x10, 0x63, 0x33, 0x82, 0xec, 0xcb, 0x09, 0x31, - 0x43, 0x81, 0x99, 0x00, 0x43, 0x23, 0xb0, 0xbe, 0x09, 0x73, 0x33, 0x02, 0xba, 0xbb, 0x9b, 0xaa, - 0xde, 0xbc, 0x89, 0x31, 0x24, 0x91, 0xcb, 0x9b, 0x51, 0x34, 0x82, 0xda, 0xac, 0x0a, 0x31, 0x24, - 0x22, 0x43, 0x44, 0x33, 0x90, 0xdc, 0xbb, 0x19, 0x42, 0x13, 0xa0, 0xaa, 0x19, 0x43, 0x03, 0xfb, - 0xac, 0x18, 0x54, 0x33, 0x81, 0xa9, 0x99, 0x08, 0x90, 0xfb, 0xab, 0x18, 0x54, 0x23, 0xa8, 0xbc, - 0x8a, 0x42, 0x23, 0xd8, 0xce, 0xbb, 0x89, 0x10, 0x11, 0x80, 0x31, 0x54, 0x12, 0xc8, 0xdc, 0x9a, - 0x18, 0x43, 0x12, 0x90, 0x09, 0x42, 0x24, 0x82, 0xda, 0xab, 0x48, 0x35, 0x24, 0x98, 0xba, 0xbb, - 0xa9, 0xca, 0xcd, 0xab, 0x28, 0x43, 0x03, 0xca, 0xbc, 0x28, 0x45, 0x13, 0xb0, 0xcd, 0x9a, 0x28, - 0x43, 0x22, 0x21, 0x53, 0x24, 0x03, 0xc8, 0xcc, 0x9a, 0x20, 0x33, 0x01, 0xaa, 0x09, 0x52, 0x14, - 0xb0, 0xce, 0x8a, 0x41, 0x44, 0x22, 0x98, 0x9a, 0x8a, 0x88, 0xa9, 0xcb, 0x0b, 0x63, 0x34, 0x91, - 0xdb, 0xab, 0x38, 0x44, 0x82, 0xfb, 0xbc, 0xab, 0x08, 0x21, 0x10, 0x10, 0x42, 0x43, 0x81, 0xdc, - 0xbc, 0x0a, 0x31, 0x24, 0x02, 0x88, 0x31, 0x36, 0x12, 0xb9, 0xbe, 0x0a, 0x54, 0x43, 0x02, 0xb9, - 0xcb, 0xaa, 0xa9, 0xba, 0xbc, 0x09, 0x42, 0x13, 0xd8, 0xcc, 0x89, 0x52, 0x24, 0x02, 0xda, 0xbb, - 0x8a, 0x32, 0x34, 0x33, 0x34, 0x34, 0x33, 0xa0, 0xdd, 0xab, 0x09, 0x32, 0x22, 0x90, 0x99, 0x42, - 0x35, 0x91, 0xec, 0xbb, 0x29, 0x55, 0x33, 0x02, 0xaa, 0xba, 0xaa, 0xa8, 0xa9, 0x9a, 0x62, 0x35, - 0x01, 0xdb, 0xbc, 0x19, 0x53, 0x23, 0xc8, 0xce, 0xab, 0x8a, 0x10, 0x11, 0x11, 0x21, 0x43, 0x11, - 0xda, 0xbd, 0xab, 0x28, 0x34, 0x22, 0x00, 0x30, 0x56, 0x23, 0x80, 0xbc, 0xac, 0x30, 0x46, 0x22, - 0x80, 0xba, 0xbc, 0xbb, 0xba, 0xbb, 0x8a, 0x32, 0x25, 0xb0, 0xcf, 0xaa, 0x21, 0x36, 0x23, 0xa8, - 0xcd, 0x9a, 0x18, 0x42, 0x33, 0x33, 0x24, 0x24, 0x81, 0xc9, 0xbc, 0x8a, 0x10, 0x23, 0x80, 0x88, - 0x51, 0x45, 0x12, 0xc9, 0xbd, 0x8b, 0x51, 0x44, 0x22, 0x80, 0xaa, 0xbb, 0xaa, 0xaa, 0x89, 0x52, - 0x44, 0x02, 0xc9, 0xbd, 0x9a, 0x41, 0x24, 0x82, 0xeb, 0xcc, 0x9a, 0x09, 0x10, 0x11, 0x21, 0x22, - 0x12, 0xc8, 0xdc, 0xab, 0x09, 0x31, 0x23, 0x11, 0x52, 0x45, 0x24, 0x02, 0xba, 0xbd, 0x09, 0x44, - 0x25, 0x02, 0x98, 0xdb, 0xab, 0xbb, 0xab, 0x09, 0x32, 0x34, 0xb0, 0xde, 0xab, 0x19, 0x63, 0x33, - 0x82, 0xca, 0xac, 0x8a, 0x20, 0x34, 0x34, 0x34, 0x23, 0x02, 0xba, 0xbd, 0x9b, 0x18, 0x22, 0x80, - 0x89, 0x62, 0x45, 0x23, 0xa0, 0xcd, 0xab, 0x29, 0x45, 0x24, 0x11, 0x98, 0xba, 0xbc, 0xbb, 0x99, - 0x42, 0x45, 0x12, 0xa9, 0xcd, 0x9a, 0x18, 0x34, 0x12, 0xc8, 0xbd, 0xbc, 0x8a, 0x08, 0x21, 0x32, - 0x33, 0x13, 0xc9, 0xdd, 0x9b, 0x09, 0x21, 0x12, 0x88, 0x30, 0x57, 0x34, 0x13, 0xa0, 0xbc, 0x8b, - 0x31, 0x46, 0x22, 0x81, 0xb9, 0xcd, 0xbb, 0xbc, 0x99, 0x31, 0x24, 0x82, 0xeb, 0xbc, 0x8a, 0x32, - 0x45, 0x11, 0xa8, 0xbb, 0x9b, 0x18, 0x43, 0x44, 0x34, 0x24, 0x11, 0xa9, 0xcb, 0x9a, 0x10, 0x12, - 0xa0, 0xbb, 0x48, 0x47, 0x34, 0x81, 0xca, 0xac, 0x09, 0x32, 0x36, 0x12, 0x01, 0xa9, 0xeb, 0xcb, - 0x9b, 0x18, 0x54, 0x23, 0x91, 0xcc, 0xac, 0x08, 0x31, 0x33, 0x90, 0xdc, 0xbb, 0xbb, 0x99, 0x00, - 0x31, 0x36, 0x23, 0x90, 0xdd, 0xab, 0x89, 0x22, 0x12, 0x98, 0x8a, 0x74, 0x35, 0x14, 0x81, 0xba, - 0x9b, 0x28, 0x35, 0x24, 0x02, 0x88, 0xdb, 0xdc, 0xbb, 0xab, 0x28, 0x44, 0x13, 0xb9, 0xce, 0x9a, - 0x18, 0x43, 0x23, 0x90, 0xba, 0xaa, 0x09, 0x11, 0x53, 0x45, 0x25, 0x13, 0x98, 0xcb, 0x9b, 0x18, - 0x33, 0x81, 0xbc, 0x8c, 0x63, 0x44, 0x12, 0xa8, 0xbc, 0x8a, 0x31, 0x34, 0x24, 0x10, 0x80, 0xc9, - 0xcd, 0xcb, 0x8a, 0x42, 0x35, 0x02, 0xc9, 0xbc, 0x8b, 0x20, 0x43, 0x01, 0xca, 0xcb, 0xaa, 0x99, - 0x98, 0x18, 0x63, 0x43, 0x01, 0xea, 0xbb, 0x9b, 0x41, 0x23, 0x80, 0xbb, 0x3a, 0x57, 0x34, 0x02, - 0xa8, 0xba, 0x19, 0x43, 0x24, 0x01, 0x80, 0xa8, 0xfb, 0xcd, 0xab, 0x8a, 0x42, 0x43, 0x81, 0xcc, - 0xcb, 0x09, 0x31, 0x24, 0x81, 0xa9, 0x9a, 0x08, 0x11, 0x11, 0x63, 0x45, 0x33, 0x82, 0xda, 0xac, - 0x09, 0x32, 0x23, 0xb9, 0xbd, 0x18, 0x46, 0x33, 0x81, 0xca, 0xab, 0x28, 0x34, 0x14, 0x01, 0x80, - 0x80, 0xeb, 0xcd, 0xab, 0x18, 0x45, 0x33, 0xa0, 0xcc, 0xac, 0x08, 0x32, 0x12, 0xa8, 0xbc, 0xab, - 0x99, 0x98, 0xa9, 0x30, 0x47, 0x23, 0xb0, 0xbf, 0x9c, 0x08, 0x33, 0x03, 0xb9, 0xab, 0x72, 0x45, - 0x22, 0x80, 0xaa, 0x8a, 0x31, 0x35, 0x02, 0x98, 0x98, 0xb9, 0xde, 0xbd, 0xab, 0x28, 0x35, 0x23, - 0xc9, 0xbd, 0x9b, 0x28, 0x34, 0x12, 0xa8, 0xaa, 0x09, 0x32, 0x12, 0x21, 0x75, 0x34, 0x13, 0xb8, - 0xcd, 0x8b, 0x20, 0x24, 0x92, 0xda, 0x8a, 0x41, 0x35, 0x22, 0xa9, 0xac, 0x09, 0x42, 0x33, 0x00, - 0x89, 0x08, 0xa0, 0xee, 0xbc, 0x9a, 0x51, 0x34, 0x03, 0xc9, 0xbd, 0x99, 0x20, 0x23, 0x91, 0xdb, - 0xaa, 0x09, 0x00, 0x99, 0x8a, 0x61, 0x34, 0x02, 0xec, 0xac, 0x8a, 0x31, 0x24, 0x91, 0xba, 0x1a, - 0x74, 0x43, 0x02, 0x99, 0x9a, 0x10, 0x34, 0x22, 0xa8, 0xa9, 0x89, 0xda, 0xed, 0xcb, 0x89, 0x31, - 0x35, 0x91, 0xdb, 0xac, 0x09, 0x31, 0x23, 0x90, 0xab, 0x8a, 0x42, 0x24, 0x00, 0x21, 0x55, 0x24, - 0x81, 0xdb, 0xac, 0x09, 0x33, 0x14, 0xb0, 0xcb, 0x19, 0x54, 0x24, 0x80, 0xb9, 0x8a, 0x40, 0x43, - 0x02, 0xa9, 0x99, 0x80, 0xb9, 0xdf, 0xbb, 0x29, 0x64, 0x23, 0x90, 0xcc, 0xab, 0x08, 0x32, 0x02, - 0xca, 0xcb, 0x99, 0x11, 0x01, 0xa9, 0x19, 0x54, 0x14, 0xb8, 0xcf, 0x9b, 0x18, 0x43, 0x12, 0xa8, - 0xab, 0x51, 0x35, 0x24, 0x91, 0x9a, 0x19, 0x53, 0x33, 0x91, 0xca, 0xaa, 0x99, 0xea, 0xdc, 0x9b, - 0x18, 0x44, 0x12, 0xb8, 0xcd, 0x9a, 0x10, 0x32, 0x82, 0xb9, 0x9c, 0x30, 0x44, 0x12, 0x01, 0x41, - 0x34, 0x23, 0xe9, 0xcc, 0x9a, 0x21, 0x43, 0x01, 0xca, 0x9a, 0x41, 0x44, 0x22, 0xa8, 0x9b, 0x18, - 0x54, 0x22, 0x98, 0xaa, 0x8a, 0x98, 0xfa, 0xbc, 0x9b, 0x52, 0x44, 0x02, 0xb9, 0xae, 0x9a, 0x11, - 0x12, 0xa8, 0xcc, 0x9a, 0x10, 0x23, 0x81, 0x99, 0x20, 0x35, 0xa2, 0xdf, 0xbc, 0x89, 0x31, 0x34, - 0x81, 0xba, 0x09, 0x55, 0x24, 0x12, 0xa8, 0x89, 0x41, 0x34, 0x12, 0xb9, 0xbc, 0x9a, 0xaa, 0xec, - 0xbc, 0x89, 0x51, 0x33, 0x91, 0xcc, 0xac, 0x89, 0x22, 0x13, 0xa9, 0xad, 0x19, 0x63, 0x23, 0x12, - 0x10, 0x42, 0x33, 0xa1, 0xde, 0xbb, 0x09, 0x53, 0x22, 0x98, 0xab, 0x19, 0x46, 0x23, 0x81, 0xaa, - 0x19, 0x54, 0x24, 0x81, 0xb9, 0xbb, 0x9a, 0xa9, 0xcd, 0xac, 0x29, 0x45, 0x23, 0xa0, 0xcd, 0xab, - 0x08, 0x22, 0x80, 0xcc, 0xac, 0x88, 0x32, 0x22, 0x81, 0x00, 0x32, 0x03, 0xfd, 0xcd, 0xaa, 0x10, - 0x42, 0x12, 0x98, 0x89, 0x41, 0x54, 0x22, 0x80, 0x89, 0x40, 0x44, 0x13, 0x90, 0xcb, 0xbb, 0xba, - 0xba, 0xbe, 0xab, 0x30, 0x45, 0x02, 0xca, 0xcc, 0x8a, 0x20, 0x22, 0xa0, 0xbc, 0x8c, 0x31, 0x27, - 0x23, 0x12, 0x22, 0x22, 0x91, 0xdd, 0xbc, 0x9a, 0x31, 0x34, 0x01, 0xaa, 0x8a, 0x62, 0x34, 0x03, - 0x98, 0x09, 0x72, 0x34, 0x12, 0xa8, 0xbc, 0xab, 0xaa, 0xbb, 0xbd, 0x0a, 0x54, 0x24, 0x81, 0xeb, - 0xab, 0x89, 0x20, 0x80, 0xeb, 0xbc, 0x8a, 0x21, 0x34, 0x13, 0x11, 0x11, 0x80, 0xfb, 0xcd, 0xac, - 0x88, 0x22, 0x23, 0x81, 0x89, 0x30, 0x46, 0x24, 0x01, 0x88, 0x28, 0x45, 0x24, 0x82, 0xb9, 0xdb, - 0xba, 0xba, 0xcb, 0x9b, 0x29, 0x44, 0x13, 0xc8, 0xbd, 0xab, 0x10, 0x23, 0x90, 0xbe, 0xac, 0x28, - 0x54, 0x24, 0x22, 0x22, 0x11, 0x81, 0xdb, 0xbd, 0xab, 0x28, 0x42, 0x12, 0x88, 0x09, 0x52, 0x44, - 0x02, 0xa0, 0x09, 0x52, 0x46, 0x22, 0x80, 0xaa, 0xbc, 0xab, 0xbb, 0xbb, 0x0a, 0x54, 0x43, 0x82, - 0xeb, 0xbb, 0x8a, 0x11, 0x01, 0xfb, 0xbc, 0xab, 0x18, 0x53, 0x32, 0x32, 0x22, 0x81, 0xda, 0xce, - 0xbb, 0x8b, 0x20, 0x33, 0x02, 0x00, 0x42, 0x36, 0x24, 0x81, 0x98, 0x20, 0x56, 0x34, 0x12, 0x98, - 0xcb, 0xbc, 0xab, 0xac, 0x9a, 0x10, 0x53, 0x12, 0xb8, 0xbe, 0x9b, 0x28, 0x32, 0x92, 0xdd, 0xbb, - 0x8a, 0x53, 0x44, 0x23, 0x43, 0x22, 0x80, 0xca, 0xbd, 0xbb, 0x08, 0x32, 0x13, 0x90, 0x08, 0x73, - 0x43, 0x12, 0x98, 0x9a, 0x62, 0x45, 0x33, 0x82, 0xb8, 0xcb, 0xbc, 0xbb, 0xac, 0x0a, 0x42, 0x25, - 0x01, 0xcb, 0xad, 0x89, 0x11, 0x02, 0xd9, 0xcd, 0xaa, 0x09, 0x22, 0x24, 0x23, 0x24, 0x02, 0xb8, - 0xce, 0xbc, 0x9a, 0x10, 0x22, 0x01, 0x98, 0x30, 0x47, 0x23, 0x01, 0xa9, 0x09, 0x73, 0x35, 0x22, - 0x91, 0xb9, 0xcb, 0xbc, 0xbc, 0xab, 0x19, 0x44, 0x23, 0xa0, 0xcd, 0xab, 0x28, 0x42, 0x01, 0xca, - 0xbd, 0x9a, 0x21, 0x44, 0x33, 0x34, 0x43, 0x02, 0xb8, 0xdd, 0xba, 0x09, 0x21, 0x11, 0x90, 0x8a, - 0x52, 0x45, 0x12, 0x98, 0xab, 0x29, 0x46, 0x34, 0x13, 0x98, 0xb9, 0xbb, 0xbe, 0xcb, 0x9a, 0x30, - 0x45, 0x12, 0xb9, 0xae, 0x8b, 0x10, 0x23, 0xa0, 0xdd, 0xbb, 0x8a, 0x10, 0x33, 0x34, 0x53, 0x33, - 0x81, 0xfb, 0xbc, 0xab, 0x19, 0x22, 0x01, 0xa8, 0x18, 0x65, 0x43, 0x01, 0xb8, 0xaa, 0x40, 0x46, - 0x23, 0x01, 0x98, 0xbb, 0xcb, 0xcc, 0xbb, 0x89, 0x42, 0x25, 0x82, 0xcb, 0xad, 0x09, 0x31, 0x14, - 0xa0, 0xcc, 0xab, 0x08, 0x42, 0x33, 0x53, 0x43, 0x23, 0x80, 0xdc, 0xcb, 0x9a, 0x11, 0x22, 0x90, - 0xa9, 0x28, 0x55, 0x33, 0x81, 0xcb, 0x9a, 0x62, 0x35, 0x23, 0x00, 0xa9, 0xab, 0xdb, 0xbc, 0xac, - 0x18, 0x53, 0x14, 0xa1, 0xeb, 0xaa, 0x08, 0x32, 0x02, 0xda, 0xbd, 0x9b, 0x08, 0x22, 0x33, 0x34, - 0x44, 0x12, 0xb0, 0xde, 0xba, 0x09, 0x21, 0x11, 0xa0, 0x9a, 0x50, 0x45, 0x22, 0x90, 0xba, 0x0a, - 0x73, 0x34, 0x22, 0x88, 0xaa, 0xba, 0xcc, 0xbc, 0x9c, 0x28, 0x44, 0x13, 0xb8, 0xbd, 0x8c, 0x28, - 0x24, 0x82, 0xca, 0xbc, 0x8a, 0x21, 0x24, 0x33, 0x53, 0x24, 0x03, 0xc8, 0xdc, 0xaa, 0x08, 0x22, - 0x01, 0xaa, 0x8b, 0x62, 0x35, 0x12, 0xa8, 0xbc, 0x18, 0x45, 0x24, 0x12, 0x98, 0x99, 0xba, 0xcc, - 0xbc, 0x9a, 0x41, 0x44, 0x02, 0xc9, 0xbc, 0x8b, 0x21, 0x24, 0x90, 0xcd, 0xab, 0x0a, 0x20, 0x22, - 0x32, 0x35, 0x34, 0x02, 0xfa, 0xbc, 0x9a, 0x18, 0x32, 0x81, 0xba, 0x09, 0x55, 0x34, 0x02, 0xba, - 0xac, 0x30, 0x46, 0x23, 0x82, 0xa8, 0xaa, 0xcb, 0xbc, 0xad, 0x0a, 0x42, 0x25, 0x81, 0xda, 0xbb, - 0x09, 0x52, 0x22, 0xa0, 0xcc, 0xaa, 0x19, 0x22, 0x43, 0x42, 0x53, 0x32, 0x91, 0xfb, 0xbb, 0x9a, - 0x11, 0x23, 0x90, 0xbb, 0x29, 0x47, 0x24, 0x91, 0xba, 0x9b, 0x52, 0x45, 0x22, 0x80, 0x98, 0xaa, - 0xba, 0xcd, 0xab, 0x19, 0x73, 0x22, 0xa1, 0xcc, 0xbb, 0x08, 0x43, 0x02, 0xd9, 0xbc, 0x9b, 0x18, - 0x22, 0x32, 0x43, 0x35, 0x23, 0xb0, 0xde, 0xab, 0x0a, 0x31, 0x12, 0xa8, 0xab, 0x40, 0x37, 0x24, - 0xa0, 0xba, 0x8a, 0x63, 0x34, 0x13, 0x90, 0xa9, 0xab, 0xcc, 0xcc, 0xaa, 0x28, 0x35, 0x14, 0xa0, - 0xbd, 0x9b, 0x20, 0x44, 0x01, 0xca, 0xcb, 0x89, 0x20, 0x32, 0x33, 0x44, 0x34, 0x12, 0xc8, 0xcd, - 0xab, 0x08, 0x22, 0x82, 0xb9, 0x8b, 0x61, 0x35, 0x13, 0xa8, 0xac, 0x19, 0x64, 0x33, 0x12, 0x98, - 0x99, 0xbb, 0xcc, 0xcc, 0x8a, 0x30, 0x35, 0x03, 0xca, 0xae, 0x9a, 0x20, 0x23, 0x91, 0xcd, 0xbb, - 0x8a, 0x20, 0x32, 0x33, 0x45, 0x34, 0x01, 0xca, 0xbe, 0xaa, 0x10, 0x22, 0x81, 0xb9, 0x1a, 0x64, - 0x34, 0x11, 0xba, 0x9c, 0x38, 0x55, 0x23, 0x01, 0x99, 0xaa, 0xcb, 0xdb, 0xac, 0x89, 0x52, 0x43, - 0x81, 0xca, 0xac, 0x09, 0x41, 0x13, 0x90, 0xcc, 0xab, 0x08, 0x31, 0x43, 0x43, 0x53, 0x23, 0x91, - 0xfb, 0xbb, 0x9b, 0x20, 0x22, 0xa0, 0xba, 0x29, 0x47, 0x24, 0x81, 0xb9, 0x9b, 0x52, 0x45, 0x22, - 0x81, 0x98, 0xaa, 0xca, 0xcc, 0xab, 0x08, 0x44, 0x23, 0xa1, 0xcd, 0xac, 0x08, 0x22, 0x02, 0xc9, - 0xbd, 0xaa, 0x08, 0x21, 0x33, 0x63, 0x43, 0x13, 0xa0, 0xcd, 0xac, 0x89, 0x21, 0x11, 0x98, 0x9a, - 0x40, 0x55, 0x22, 0x80, 0xab, 0x8a, 0x63, 0x34, 0x23, 0x80, 0xaa, 0xbb, 0xcd, 0xbc, 0xab, 0x20, - 0x36, 0x23, 0xb8, 0xcd, 0x9a, 0x28, 0x34, 0x01, 0xca, 0xbc, 0x9a, 0x20, 0x33, 0x44, 0x34, 0x24, - 0x03, 0xb9, 0xbf, 0xbb, 0x88, 0x12, 0x01, 0xaa, 0x8a, 0x72, 0x44, 0x12, 0xa0, 0x9a, 0x18, 0x55, - 0x43, 0x11, 0x80, 0xa8, 0xba, 0xbd, 0xad, 0x8a, 0x30, 0x35, 0x82, 0xda, 0xbc, 0x9a, 0x10, 0x23, - 0xa0, 0xcd, 0xbc, 0x8a, 0x00, 0x32, 0x53, 0x34, 0x24, 0x82, 0xca, 0xbd, 0x9a, 0x08, 0x12, 0x91, - 0x99, 0x18, 0x55, 0x34, 0x01, 0xb8, 0x9a, 0x40, 0x36, 0x24, 0x02, 0x98, 0xaa, 0xcc, 0xbc, 0xac, - 0x08, 0x52, 0x23, 0x81, 0xdb, 0xbb, 0x09, 0x42, 0x23, 0xa8, 0xdc, 0xab, 0x09, 0x21, 0x53, 0x44, - 0x43, 0x22, 0x90, 0xcc, 0xac, 0x8a, 0x08, 0x01, 0x99, 0x99, 0x31, 0x47, 0x32, 0x00, 0xa9, 0x19, - 0x72, 0x43, 0x23, 0x02, 0x90, 0xc9, 0xcc, 0xdb, 0x9a, 0x18, 0x43, 0x12, 0xb8, 0xcd, 0xab, 0x09, - 0x21, 0x80, 0xeb, 0xcb, 0xaa, 0x09, 0x20, 0x52, 0x44, 0x24, 0x12, 0xa8, 0xcc, 0xaa, 0x89, 0x10, - 0x80, 0x99, 0x08, 0x54, 0x35, 0x12, 0x90, 0x9a, 0x20, 0x64, 0x33, 0x12, 0x01, 0xa8, 0xcc, 0xcd, - 0xbb, 0x8b, 0x32, 0x35, 0x12, 0xca, 0xac, 0x8a, 0x31, 0x23, 0x90, 0xcd, 0xab, 0x9a, 0x18, 0x42, - 0x55, 0x34, 0x33, 0x82, 0xda, 0xbc, 0x9b, 0x09, 0x80, 0xa9, 0x9b, 0x31, 0x47, 0x33, 0x02, 0x98, - 0x10, 0x54, 0x34, 0x24, 0x12, 0x10, 0xa8, 0xeb, 0xbd, 0xbb, 0x09, 0x42, 0x13, 0xb0, 0xdd, 0xaa, - 0x89, 0x00, 0x80, 0xdb, 0xbc, 0xaa, 0x9a, 0x09, 0x30, 0x47, 0x25, 0x23, 0x80, 0xcb, 0xbb, 0x89, - 0x00, 0x90, 0xba, 0x1a, 0x74, 0x43, 0x22, 0x88, 0x8a, 0x30, 0x46, 0x23, 0x12, 0x10, 0x80, 0xca, - 0xdd, 0xbc, 0xaa, 0x20, 0x44, 0x11, 0xa9, 0xcb, 0x89, 0x21, 0x23, 0xa0, 0xdc, 0xaa, 0x89, 0x00, - 0x00, 0x62, 0x46, 0x24, 0x12, 0xa9, 0xcc, 0x9a, 0x88, 0x80, 0xba, 0xbc, 0x18, 0x45, 0x43, 0x11, - 0x89, 0x08, 0x63, 0x53, 0x12, 0x01, 0x11, 0x10, 0xa9, 0xbf, 0xbd, 0x99, 0x31, 0x32, 0xa0, 0xdd, - 0xaa, 0x89, 0x10, 0xa0, 0xcc, 0xbc, 0x9a, 0x08, 0x08, 0x09, 0x51, 0x46, 0x33, 0x02, 0xba, 0xad, - 0x89, 0x11, 0x90, 0xdb, 0x9b, 0x41, 0x45, 0x13, 0x91, 0x9a, 0x18, 0x55, 0x23, 0x01, 0x80, 0x08, - 0x00, 0xea, 0xcd, 0xab, 0x19, 0x43, 0x23, 0xb8, 0xbd, 0x8a, 0x41, 0x33, 0xa1, 0xdc, 0xab, 0x08, - 0x12, 0x01, 0x08, 0x64, 0x35, 0x33, 0x98, 0xbd, 0xac, 0x08, 0x01, 0xb9, 0xbe, 0x8a, 0x42, 0x35, - 0x02, 0xa8, 0x89, 0x52, 0x45, 0x22, 0x01, 0x88, 0x00, 0x81, 0xca, 0xbe, 0xab, 0x38, 0x34, 0x81, - 0xdd, 0xbb, 0x0a, 0x21, 0x02, 0xeb, 0xcc, 0x9a, 0x08, 0x01, 0x80, 0x08, 0x62, 0x44, 0x12, 0xa8, - 0xbb, 0x8a, 0x31, 0x04, 0xd9, 0xbc, 0x08, 0x54, 0x33, 0x91, 0xba, 0x0a, 0x73, 0x34, 0x03, 0x98, - 0x99, 0x09, 0x90, 0xdc, 0xcc, 0x89, 0x32, 0x34, 0x90, 0xbd, 0x9c, 0x30, 0x34, 0x02, 0xda, 0xcb, - 0x89, 0x21, 0x23, 0x80, 0x18, 0x45, 0x34, 0x81, 0xdb, 0xac, 0x09, 0x22, 0x80, 0xec, 0xab, 0x18, - 0x44, 0x13, 0x91, 0xab, 0x28, 0x56, 0x33, 0x02, 0x98, 0x89, 0x10, 0x90, 0xfb, 0xbb, 0x1a, 0x43, - 0x23, 0xfb, 0xbc, 0x9b, 0x20, 0x33, 0xb8, 0xdf, 0xaa, 0x09, 0x20, 0x02, 0x88, 0x10, 0x63, 0x33, - 0x91, 0xdb, 0x9b, 0x31, 0x35, 0x90, 0xdc, 0x9b, 0x31, 0x45, 0x12, 0xa9, 0xab, 0x20, 0x37, 0x24, - 0x80, 0xaa, 0x89, 0x88, 0xa8, 0xdc, 0x9b, 0x30, 0x35, 0x03, 0xfa, 0xbb, 0x19, 0x53, 0x33, 0xa8, - 0xbd, 0x9c, 0x28, 0x32, 0x03, 0x80, 0x20, 0x54, 0x12, 0xc8, 0xcc, 0x8a, 0x20, 0x23, 0xc9, 0xbe, - 0x8b, 0x41, 0x34, 0x02, 0xba, 0x8b, 0x72, 0x44, 0x13, 0x91, 0x99, 0x88, 0x08, 0xa8, 0xcc, 0x8a, - 0x41, 0x24, 0xa0, 0xde, 0xab, 0x09, 0x42, 0x01, 0xc9, 0xbd, 0x9b, 0x10, 0x22, 0x01, 0x08, 0x21, - 0x35, 0x13, 0xca, 0xad, 0x19, 0x44, 0x22, 0xb9, 0xbd, 0x0a, 0x44, 0x24, 0x90, 0xca, 0x0a, 0x52, - 0x35, 0x11, 0xa8, 0xaa, 0x9a, 0x88, 0xb9, 0xbc, 0x29, 0x46, 0x23, 0xb8, 0xbf, 0x9b, 0x31, 0x36, - 0x02, 0xca, 0xac, 0x8a, 0x31, 0x43, 0x01, 0x00, 0x21, 0x12, 0xa0, 0xcf, 0xab, 0x28, 0x43, 0x82, - 0xcc, 0xad, 0x08, 0x43, 0x23, 0x98, 0xbb, 0x29, 0x57, 0x33, 0x02, 0x98, 0xaa, 0x88, 0x88, 0xc9, - 0xaa, 0x30, 0x36, 0x83, 0xfc, 0xbc, 0x9a, 0x21, 0x33, 0xa0, 0xcf, 0xab, 0x89, 0x21, 0x23, 0x01, - 0x10, 0x31, 0x13, 0xc8, 0xcd, 0x8a, 0x53, 0x34, 0x81, 0xdb, 0x9b, 0x20, 0x45, 0x02, 0xb8, 0xbb, - 0x38, 0x56, 0x23, 0x81, 0xb9, 0xab, 0x9a, 0x99, 0xcb, 0x89, 0x73, 0x34, 0x81, 0xeb, 0xac, 0x09, - 0x53, 0x23, 0xa0, 0xeb, 0xaa, 0x18, 0x33, 0x33, 0x01, 0x10, 0x21, 0x90, 0xfc, 0xac, 0x0a, 0x32, - 0x33, 0xc8, 0xcd, 0x9a, 0x21, 0x35, 0x01, 0xba, 0x9b, 0x72, 0x44, 0x23, 0x81, 0xa9, 0xa9, 0x99, - 0x99, 0x9a, 0x29, 0x56, 0x13, 0xc8, 0xdd, 0xab, 0x09, 0x32, 0x03, 0xd9, 0xbd, 0xab, 0x08, 0x23, - 0x23, 0x12, 0x21, 0x12, 0xa0, 0xce, 0xbb, 0x30, 0x37, 0x14, 0x98, 0xbb, 0x0a, 0x63, 0x23, 0x91, - 0xcc, 0x89, 0x52, 0x35, 0x12, 0x90, 0xcb, 0xaa, 0xaa, 0x99, 0x09, 0x52, 0x35, 0x13, 0xd9, 0xcc, - 0x8b, 0x30, 0x35, 0x12, 0xb9, 0xae, 0x9a, 0x20, 0x24, 0x23, 0x12, 0x01, 0x90, 0xcc, 0xbd, 0xab, - 0x20, 0x25, 0x02, 0xca, 0xac, 0x1a, 0x42, 0x23, 0xa8, 0xac, 0x28, 0x57, 0x33, 0x13, 0x98, 0xaa, - 0xab, 0xaa, 0x99, 0x18, 0x46, 0x34, 0x90, 0xdd, 0xbc, 0x9a, 0x20, 0x32, 0xa0, 0xdd, 0xbb, 0x9a, - 0x11, 0x43, 0x32, 0x12, 0x11, 0xa8, 0xdc, 0xbb, 0x19, 0x54, 0x34, 0x01, 0xb9, 0xaa, 0x30, 0x35, - 0x03, 0xc9, 0xac, 0x30, 0x46, 0x33, 0x01, 0xb8, 0xbc, 0xbc, 0xaa, 0x8a, 0x41, 0x45, 0x33, 0xa0, - 0xdc, 0xbb, 0x08, 0x53, 0x14, 0x91, 0xca, 0xab, 0x09, 0x42, 0x43, 0x23, 0x12, 0x80, 0xdb, 0xbd, - 0xac, 0x08, 0x32, 0x23, 0xa8, 0xbd, 0x9a, 0x30, 0x34, 0x81, 0xcb, 0x8a, 0x74, 0x35, 0x33, 0x11, - 0x99, 0xbb, 0xbc, 0xab, 0x19, 0x73, 0x34, 0x12, 0xea, 0xbc, 0x9c, 0x09, 0x11, 0x02, 0xca, 0xcc, - 0xab, 0x88, 0x21, 0x43, 0x24, 0x12, 0x90, 0xda, 0xcb, 0x8a, 0x41, 0x53, 0x22, 0x88, 0x89, 0x18, - 0x32, 0x12, 0xc8, 0xbc, 0x19, 0x56, 0x43, 0x13, 0x80, 0xca, 0xbc, 0xac, 0x9b, 0x20, 0x45, 0x33, - 0x02, 0xdb, 0xbc, 0x99, 0x31, 0x34, 0x03, 0xb8, 0xbd, 0x9b, 0x10, 0x44, 0x34, 0x24, 0x02, 0xb9, - 0xce, 0xbb, 0x8a, 0x21, 0x33, 0x81, 0xb9, 0x9b, 0x18, 0x33, 0x91, 0xcd, 0x8a, 0x72, 0x46, 0x23, - 0x13, 0x81, 0xa9, 0xcc, 0xbb, 0x9a, 0x52, 0x35, 0x23, 0xa8, 0xbf, 0xac, 0x99, 0x10, 0x01, 0xa8, - 0xbd, 0xcb, 0x9a, 0x18, 0x32, 0x45, 0x33, 0x01, 0xd9, 0xbc, 0xab, 0x20, 0x44, 0x33, 0x01, 0x88, - 0x10, 0x32, 0x12, 0xb9, 0xbe, 0x09, 0x73, 0x34, 0x22, 0x02, 0x98, 0xeb, 0xbd, 0xac, 0x0a, 0x52, - 0x34, 0x13, 0xb8, 0xbc, 0x9c, 0x10, 0x32, 0x13, 0xa0, 0xcb, 0xaa, 0x09, 0x42, 0x45, 0x35, 0x33, - 0x90, 0xdd, 0xcb, 0xaa, 0x10, 0x22, 0x01, 0x98, 0x8a, 0x20, 0x22, 0xa0, 0xcd, 0x9b, 0x52, 0x45, - 0x24, 0x22, 0x11, 0x81, 0xc9, 0xcc, 0xbb, 0x19, 0x45, 0x34, 0x81, 0xda, 0xac, 0xaa, 0x08, 0x00, - 0x98, 0xcb, 0xac, 0xaa, 0x99, 0x18, 0x63, 0x35, 0x23, 0xa1, 0xcd, 0xbb, 0x0a, 0x42, 0x24, 0x12, - 0x08, 0x20, 0x43, 0x12, 0xb9, 0xbd, 0x0b, 0x52, 0x35, 0x22, 0x01, 0x88, 0xb8, 0xdd, 0xcc, 0x9b, - 0x38, 0x45, 0x23, 0x81, 0xcb, 0xab, 0x19, 0x32, 0x22, 0x90, 0xba, 0x8a, 0x88, 0x01, 0x62, 0x47, - 0x35, 0x12, 0xc9, 0xcd, 0xba, 0x09, 0x11, 0x12, 0x88, 0x99, 0x21, 0x33, 0x82, 0xdd, 0x9c, 0x29, - 0x44, 0x34, 0x12, 0x11, 0x11, 0x90, 0xfa, 0xdb, 0x8a, 0x40, 0x44, 0x12, 0xa9, 0xbc, 0xac, 0x88, - 0x00, 0x98, 0xbc, 0xab, 0x9a, 0x89, 0x99, 0x28, 0x47, 0x35, 0x12, 0xd9, 0xbc, 0xaa, 0x20, 0x34, - 0x22, 0x00, 0x10, 0x44, 0x23, 0x91, 0xcc, 0xab, 0x20, 0x45, 0x22, 0x00, 0x88, 0x88, 0xb8, 0xde, - 0xbc, 0x8a, 0x52, 0x44, 0x11, 0xa8, 0xbb, 0x8a, 0x31, 0x23, 0x90, 0xbc, 0x8a, 0x32, 0x23, 0x00, - 0x72, 0x55, 0x24, 0x81, 0xcc, 0xad, 0x8b, 0x18, 0x12, 0x80, 0x99, 0x28, 0x53, 0x22, 0xb9, 0xaf, - 0x8a, 0x41, 0x35, 0x12, 0x01, 0x18, 0x10, 0x90, 0xcd, 0xad, 0x19, 0x53, 0x34, 0x91, 0xda, 0xbb, - 0x99, 0x10, 0x98, 0xeb, 0xbb, 0x8a, 0x08, 0x80, 0x99, 0x40, 0x46, 0x24, 0x91, 0xeb, 0xbb, 0x89, - 0x42, 0x23, 0x01, 0x00, 0x43, 0x35, 0x03, 0xc9, 0xad, 0x89, 0x43, 0x43, 0x01, 0x98, 0x99, 0x88, - 0xca, 0xce, 0xab, 0x20, 0x45, 0x33, 0x80, 0xcb, 0x9b, 0x20, 0x33, 0x82, 0xbc, 0xac, 0x20, 0x34, - 0x12, 0x08, 0x62, 0x45, 0x22, 0xc8, 0xcd, 0xab, 0x0a, 0x11, 0x01, 0x99, 0x09, 0x52, 0x34, 0x81, - 0xeb, 0xbb, 0x18, 0x45, 0x33, 0x01, 0x88, 0x00, 0x10, 0xc9, 0xcd, 0xaa, 0x41, 0x35, 0x23, 0xb9, - 0xbe, 0x9a, 0x08, 0x00, 0xda, 0xbc, 0xab, 0x08, 0x12, 0x90, 0x89, 0x52, 0x36, 0x23, 0xc9, 0xbe, - 0x9b, 0x20, 0x33, 0x13, 0x80, 0x41, 0x46, 0x33, 0x91, 0xcc, 0x9b, 0x38, 0x44, 0x12, 0x90, 0x9a, - 0x99, 0x88, 0xfb, 0xbc, 0x8a, 0x52, 0x25, 0x12, 0xa9, 0xbb, 0x08, 0x53, 0x12, 0xc9, 0xac, 0x0a, - 0x33, 0x25, 0x01, 0x08, 0x43, 0x35, 0x01, 0xec, 0xbc, 0x9a, 0x00, 0x11, 0x98, 0x99, 0x48, 0x44, - 0x23, 0xc8, 0xbc, 0x9b, 0x52, 0x34, 0x13, 0x90, 0x98, 0x00, 0x81, 0xda, 0xbc, 0x1a, 0x45, 0x25, - 0x80, 0xcb, 0xab, 0x89, 0x11, 0xa8, 0xcf, 0xbb, 0x8a, 0x11, 0x12, 0x90, 0x08, 0x63, 0x34, 0x91, - 0xfb, 0xbb, 0x89, 0x32, 0x33, 0x81, 0x20, 0x56, 0x34, 0x12, 0xb9, 0xbd, 0x0a, 0x52, 0x33, 0x82, - 0xb9, 0xab, 0x9a, 0xa9, 0xce, 0xab, 0x38, 0x55, 0x33, 0x90, 0xbb, 0x8b, 0x43, 0x25, 0x90, 0xcc, - 0xab, 0x20, 0x35, 0x23, 0x00, 0x20, 0x53, 0x22, 0xc9, 0xbf, 0xbc, 0x89, 0x01, 0x80, 0xaa, 0x08, - 0x54, 0x34, 0x01, 0xdb, 0xbb, 0x29, 0x54, 0x33, 0x01, 0x99, 0x98, 0x00, 0xa8, 0xeb, 0x9a, 0x51, - 0x44, 0x12, 0xb9, 0xbd, 0x8a, 0x10, 0x80, 0xdd, 0xcc, 0x9a, 0x18, 0x21, 0x01, 0x80, 0x10, 0x43, - 0x12, 0xd9, 0xcc, 0x9b, 0x10, 0x33, 0x02, 0x18, 0x73, 0x36, 0x24, 0x91, 0xba, 0xac, 0x28, 0x34, - 0x14, 0xa0, 0xaa, 0xab, 0xa9, 0xcb, 0xbc, 0x09, 0x73, 0x24, 0x02, 0xb9, 0xaa, 0x40, 0x44, 0x82, - 0xd9, 0xcb, 0x89, 0x42, 0x43, 0x12, 0x00, 0x11, 0x22, 0x90, 0xde, 0xcb, 0xaa, 0x08, 0x80, 0xaa, - 0x8a, 0x61, 0x44, 0x13, 0xb0, 0xcc, 0x8a, 0x31, 0x36, 0x12, 0x80, 0xa9, 0x89, 0x98, 0xa9, 0xaa, - 0x41, 0x37, 0x14, 0xa0, 0xbd, 0x9b, 0x18, 0x12, 0xea, 0xce, 0xbb, 0x8a, 0x20, 0x32, 0x11, 0x00, - 0x21, 0x13, 0xc0, 0xcd, 0xac, 0x88, 0x22, 0x02, 0x00, 0x52, 0x47, 0x43, 0x12, 0xa8, 0xcb, 0x89, - 0x42, 0x33, 0x02, 0xba, 0xbd, 0xab, 0xba, 0xbb, 0x89, 0x73, 0x34, 0x03, 0xb8, 0xbb, 0x30, 0x57, - 0x22, 0xa8, 0xdc, 0xaa, 0x28, 0x53, 0x33, 0x22, 0x11, 0x01, 0x98, 0xdc, 0xbc, 0xbb, 0x99, 0x98, - 0xda, 0xaa, 0x28, 0x46, 0x34, 0x81, 0xc9, 0xab, 0x18, 0x44, 0x33, 0x02, 0x98, 0xaa, 0xaa, 0xab, - 0x9b, 0x61, 0x45, 0x23, 0xa0, 0xcc, 0xab, 0x19, 0x32, 0xc0, 0xef, 0xbb, 0xab, 0x19, 0x31, 0x32, - 0x22, 0x11, 0x00, 0xb9, 0xbf, 0xab, 0x19, 0x31, 0x01, 0xb9, 0x48, 0x77, 0x44, 0x22, 0x00, 0xaa, - 0x9a, 0x10, 0x53, 0x12, 0x88, 0xcb, 0xcb, 0xcb, 0xaa, 0x0a, 0x42, 0x44, 0x02, 0x98, 0x9c, 0x19, - 0x54, 0x33, 0x81, 0xeb, 0xbb, 0x8a, 0x42, 0x44, 0x32, 0x23, 0x01, 0xa0, 0xdb, 0xbc, 0xbb, 0x89, - 0x99, 0xeb, 0xcb, 0x09, 0x52, 0x34, 0x13, 0xa8, 0xbb, 0x8a, 0x53, 0x35, 0x12, 0x81, 0xa9, 0xdb, - 0xba, 0x9a, 0x40, 0x46, 0x32, 0x90, 0xeb, 0xaa, 0x09, 0x22, 0x02, 0xec, 0xcc, 0xbb, 0x9a, 0x18, - 0x22, 0x43, 0x23, 0x01, 0xc9, 0xdb, 0xab, 0x08, 0x22, 0x02, 0xc9, 0x8a, 0x74, 0x44, 0x24, 0x02, - 0x98, 0x99, 0x18, 0x32, 0x23, 0x81, 0xca, 0xcd, 0xbc, 0xcb, 0x8a, 0x41, 0x34, 0x22, 0xb8, 0xbc, - 0x0a, 0x73, 0x43, 0x02, 0xb8, 0xbc, 0x9b, 0x18, 0x53, 0x44, 0x33, 0x23, 0x91, 0xdb, 0xcc, 0x9a, - 0x09, 0x81, 0xb9, 0xcd, 0x9a, 0x20, 0x44, 0x23, 0x80, 0xa9, 0x89, 0x31, 0x35, 0x22, 0x01, 0x80, - 0xcb, 0xbe, 0xbc, 0x18, 0x45, 0x25, 0x81, 0xc9, 0xac, 0x09, 0x21, 0x13, 0xc8, 0xce, 0xbb, 0xab, - 0x88, 0x20, 0x42, 0x43, 0x13, 0x98, 0xcd, 0xbb, 0x09, 0x32, 0x24, 0xa8, 0xac, 0x19, 0x56, 0x34, - 0x12, 0x81, 0x89, 0x18, 0x22, 0x12, 0x88, 0xa9, 0xdb, 0xcd, 0xcc, 0xab, 0x18, 0x54, 0x23, 0x91, - 0xcb, 0xab, 0x40, 0x35, 0x23, 0xa0, 0xcb, 0xbb, 0x88, 0x32, 0x44, 0x35, 0x34, 0x12, 0xb8, 0xdd, - 0xaa, 0x89, 0x11, 0x80, 0xcc, 0xac, 0x09, 0x33, 0x25, 0x01, 0x99, 0x89, 0x41, 0x33, 0x12, 0x80, - 0x08, 0xa0, 0xdd, 0xbd, 0x9b, 0x61, 0x35, 0x13, 0xb8, 0xbd, 0xab, 0x20, 0x34, 0x81, 0xdc, 0xbc, - 0xba, 0x99, 0x88, 0x11, 0x53, 0x34, 0x02, 0xd9, 0xcc, 0x8a, 0x10, 0x33, 0x01, 0xca, 0x9a, 0x52, - 0x45, 0x22, 0x81, 0x88, 0x28, 0x42, 0x13, 0x90, 0xaa, 0xbb, 0xdb, 0xdd, 0xcb, 0x89, 0x41, 0x35, - 0x11, 0xc9, 0xbb, 0x09, 0x63, 0x24, 0x01, 0xb9, 0xba, 0x99, 0x11, 0x32, 0x44, 0x36, 0x24, 0x81, - 0xdb, 0xbc, 0x9a, 0x20, 0x12, 0xc8, 0xbc, 0xab, 0x30, 0x44, 0x12, 0x98, 0x8a, 0x41, 0x34, 0x13, - 0x98, 0xaa, 0x08, 0xb8, 0xde, 0xbc, 0x18, 0x55, 0x43, 0x91, 0xca, 0xac, 0x08, 0x31, 0x13, 0xc8, - 0xcd, 0xba, 0x99, 0x88, 0x80, 0x21, 0x35, 0x24, 0x90, 0xdd, 0xab, 0x19, 0x32, 0x24, 0x98, 0xbb, - 0x1a, 0x55, 0x24, 0x12, 0x88, 0x08, 0x43, 0x33, 0x81, 0xca, 0xab, 0x9a, 0xdb, 0xbe, 0xac, 0x18, - 0x54, 0x33, 0x90, 0xcc, 0x9a, 0x30, 0x44, 0x13, 0x98, 0xbb, 0x9a, 0x10, 0x22, 0x32, 0x46, 0x35, - 0x23, 0xb8, 0xce, 0xbb, 0x08, 0x31, 0x81, 0xdb, 0xbc, 0x09, 0x42, 0x23, 0x90, 0xaa, 0x20, 0x46, - 0x33, 0x80, 0xaa, 0x9a, 0x88, 0xd9, 0xcd, 0x9a, 0x51, 0x35, 0x23, 0xc8, 0xbc, 0x9b, 0x20, 0x24, - 0x81, 0xeb, 0xcb, 0x9a, 0x88, 0x98, 0x08, 0x42, 0x44, 0x12, 0xc9, 0xcd, 0x9a, 0x20, 0x33, 0x02, - 0xb9, 0x9b, 0x51, 0x35, 0x14, 0x80, 0x09, 0x41, 0x35, 0x13, 0xa8, 0xcb, 0xab, 0xa9, 0xeb, 0xbc, - 0x8a, 0x62, 0x43, 0x02, 0xb9, 0xad, 0x1a, 0x52, 0x33, 0x82, 0xb9, 0xab, 0x09, 0x32, 0x12, 0x53, - 0x46, 0x24, 0x82, 0xea, 0xcb, 0x9a, 0x10, 0x22, 0xa0, 0xcc, 0x9a, 0x28, 0x42, 0x01, 0xaa, 0x09, - 0x54, 0x25, 0x03, 0xa8, 0xab, 0x9a, 0x98, 0xdb, 0xbc, 0x29, 0x56, 0x33, 0x81, 0xcc, 0xbb, 0x09, - 0x33, 0x14, 0xb9, 0xbe, 0xbb, 0x89, 0x88, 0x88, 0x28, 0x64, 0x23, 0x91, 0xdd, 0xbb, 0x0a, 0x42, - 0x33, 0x80, 0xbb, 0x19, 0x45, 0x34, 0x01, 0x98, 0x20, 0x46, 0x33, 0x82, 0xca, 0xbb, 0xab, 0xba, - 0xdc, 0x9c, 0x18, 0x54, 0x23, 0x90, 0xdb, 0x9b, 0x30, 0x35, 0x13, 0xa0, 0xbb, 0x89, 0x41, 0x22, - 0x12, 0x63, 0x35, 0x14, 0xa0, 0xcd, 0xac, 0x88, 0x21, 0x01, 0xc9, 0xbb, 0x89, 0x32, 0x14, 0xa9, - 0xab, 0x61, 0x36, 0x24, 0x81, 0xba, 0xba, 0x99, 0xaa, 0xcc, 0x9a, 0x62, 0x35, 0x23, 0xb9, 0xcd, - 0x9a, 0x10, 0x23, 0x81, 0xdc, 0xbb, 0x9a, 0x09, 0x88, 0x89, 0x41, 0x45, 0x12, 0xc9, 0xbe, 0x9b, - 0x28, 0x43, 0x12, 0x98, 0x8a, 0x41, 0x44, 0x12, 0x98, 0x08, 0x64, 0x44, 0x12, 0x90, 0xbb, 0xac, - 0xaa, 0xba, 0xbc, 0x89, 0x63, 0x34, 0x02, 0xc9, 0xac, 0x09, 0x43, 0x34, 0x81, 0xa9, 0x9a, 0x10, - 0x24, 0x22, 0x32, 0x55, 0x43, 0x82, 0xea, 0xbc, 0xaa, 0x10, 0x11, 0x90, 0xcb, 0x9b, 0x10, 0x23, - 0xa8, 0xbd, 0x2a, 0x67, 0x43, 0x12, 0xa8, 0xba, 0xab, 0xaa, 0xbb, 0xab, 0x58, 0x46, 0x24, 0x80, - 0xcb, 0xbb, 0x89, 0x42, 0x02, 0xd9, 0xdb, 0x9a, 0x09, 0x08, 0x98, 0x00, 0x43, 0x24, 0xa1, 0xde, - 0xbb, 0x89, 0x31, 0x24, 0x81, 0x88, 0x30, 0x54, 0x13, 0x80, 0x99, 0x62, 0x46, 0x33, 0x01, 0xb9, - 0xbc, 0xcb, 0xaa, 0xbb, 0x9a, 0x40, 0x45, 0x22, 0xa0, 0xbc, 0x9a, 0x41, 0x34, 0x13, 0xa8, 0xaa, - 0x18, 0x44, 0x33, 0x32, 0x53, 0x44, 0x12, 0xb8, 0xce, 0xbb, 0x8a, 0x11, 0x80, 0xb9, 0xbb, 0x18, - 0x32, 0xb0, 0xdf, 0x8a, 0x62, 0x45, 0x23, 0x81, 0xa9, 0xac, 0xab, 0xab, 0xab, 0x18, 0x45, 0x35, - 0x01, 0xb9, 0xbd, 0x99, 0x20, 0x12, 0xb8, 0xce, 0xab, 0x8a, 0x08, 0x90, 0x80, 0x22, 0x35, 0x81, - 0xec, 0xcc, 0x9a, 0x18, 0x31, 0x02, 0x11, 0x42, 0x34, 0x24, 0x90, 0xaa, 0x48, 0x67, 0x43, 0x12, - 0x80, 0xba, 0xbc, 0xac, 0xba, 0x9a, 0x20, 0x63, 0x32, 0x80, 0xcb, 0x9a, 0x28, 0x44, 0x23, 0x80, - 0x9a, 0x19, 0x53, 0x34, 0x23, 0x34, 0x34, 0x23, 0xa0, 0xde, 0xbb, 0xaa, 0x08, 0x88, 0xba, 0x8a, - 0x20, 0x33, 0xd1, 0xcf, 0xab, 0x30, 0x47, 0x34, 0x02, 0x90, 0xb9, 0xbc, 0xac, 0xab, 0x09, 0x43, - 0x35, 0x12, 0xa9, 0xcc, 0x99, 0x18, 0x11, 0xb8, 0xcd, 0xbb, 0x8a, 0x08, 0x00, 0x09, 0x31, 0x24, - 0x81, 0xde, 0xcc, 0xaa, 0x08, 0x21, 0x00, 0x00, 0x63, 0x35, 0x24, 0x80, 0xba, 0x0a, 0x64, 0x45, - 0x22, 0x02, 0x99, 0xca, 0xdb, 0xba, 0xab, 0x18, 0x52, 0x23, 0x81, 0xba, 0x9c, 0x28, 0x34, 0x14, - 0x90, 0xa9, 0x08, 0x44, 0x34, 0x33, 0x43, 0x34, 0x22, 0xa0, 0xdc, 0xac, 0x9a, 0x88, 0xa8, 0xcb, - 0x9b, 0x31, 0x26, 0x92, 0xfb, 0xac, 0x09, 0x53, 0x44, 0x22, 0x01, 0x99, 0xca, 0xcb, 0xac, 0x8a, - 0x30, 0x35, 0x22, 0xa8, 0xbc, 0x9b, 0x20, 0x22, 0xb8, 0xcf, 0xab, 0x8a, 0x08, 0x01, 0x80, 0x21, - 0x24, 0x92, 0xfc, 0xbc, 0x9b, 0x08, 0x12, 0x90, 0xaa, 0x51, 0x47, 0x33, 0x01, 0xca, 0x9b, 0x31, - 0x57, 0x23, 0x13, 0x80, 0xb9, 0xdb, 0xcc, 0xba, 0x89, 0x41, 0x33, 0x01, 0xc9, 0xab, 0x29, 0x44, - 0x23, 0x90, 0xca, 0x09, 0x41, 0x25, 0x23, 0x33, 0x34, 0x24, 0x80, 0xcc, 0xbc, 0x8a, 0x10, 0x90, - 0xdb, 0xac, 0x19, 0x44, 0x12, 0xb8, 0xce, 0x9a, 0x30, 0x35, 0x24, 0x02, 0x80, 0xa8, 0xdb, 0xcc, - 0x9b, 0x19, 0x53, 0x23, 0x91, 0xcb, 0xab, 0x18, 0x33, 0x81, 0xce, 0xbc, 0x8a, 0x10, 0x11, 0x00, - 0x00, 0x42, 0x02, 0xfa, 0xdc, 0x9a, 0x19, 0x22, 0x81, 0xca, 0x8a, 0x63, 0x45, 0x12, 0x98, 0xbb, - 0x09, 0x73, 0x43, 0x22, 0x01, 0x88, 0xb9, 0xdc, 0xbc, 0x9b, 0x28, 0x53, 0x13, 0xa8, 0xbc, 0x0a, - 0x42, 0x25, 0x81, 0xb9, 0xab, 0x30, 0x45, 0x33, 0x22, 0x33, 0x35, 0x02, 0xda, 0xbd, 0x9b, 0x10, - 0x22, 0xb9, 0xbf, 0x9a, 0x41, 0x34, 0x81, 0xeb, 0xbb, 0x19, 0x53, 0x34, 0x12, 0x81, 0x90, 0xb9, - 0xdd, 0xcb, 0x8a, 0x40, 0x43, 0x02, 0xba, 0xad, 0x09, 0x31, 0x23, 0xc9, 0xcd, 0x9b, 0x19, 0x11, - 0x11, 0x00, 0x31, 0x33, 0xb0, 0xff, 0xac, 0x09, 0x20, 0x13, 0xa8, 0xbb, 0x39, 0x47, 0x24, 0x01, - 0xca, 0x9a, 0x30, 0x45, 0x33, 0x11, 0x08, 0x99, 0xca, 0xcd, 0xcb, 0x89, 0x32, 0x34, 0x91, 0xcb, - 0x9c, 0x38, 0x44, 0x12, 0xa8, 0xbb, 0x8a, 0x53, 0x34, 0x23, 0x33, 0x53, 0x22, 0xa8, 0xce, 0xac, - 0x08, 0x22, 0x01, 0xea, 0xab, 0x19, 0x53, 0x23, 0xb8, 0xcd, 0x9a, 0x30, 0x44, 0x22, 0x01, 0x08, - 0x88, 0xca, 0xbe, 0xac, 0x19, 0x43, 0x24, 0x98, 0xcc, 0x9a, 0x20, 0x43, 0x91, 0xeb, 0xbb, 0x8a, - 0x21, 0x22, 0x11, 0x20, 0x32, 0x82, 0xfd, 0xbd, 0xaa, 0x20, 0x33, 0x83, 0xdb, 0x9b, 0x51, 0x45, - 0x22, 0x98, 0xbb, 0x0a, 0x63, 0x24, 0x22, 0x00, 0x08, 0x99, 0xeb, 0xcc, 0xab, 0x10, 0x34, 0x04, - 0xb8, 0xbc, 0x0a, 0x53, 0x24, 0x81, 0xca, 0xaa, 0x10, 0x44, 0x33, 0x12, 0x33, 0x24, 0x82, 0xfb, - 0xbc, 0x9a, 0x21, 0x23, 0xa0, 0xbe, 0x9b, 0x40, 0x34, 0x02, 0xdb, 0xac, 0x09, 0x43, 0x24, 0x11, - 0x08, 0x08, 0x99, 0xdc, 0xbc, 0x9b, 0x41, 0x34, 0x02, 0xdb, 0xac, 0x09, 0x32, 0x14, 0xb8, 0xbe, - 0xbb, 0x18, 0x31, 0x22, 0x21, 0x32, 0x14, 0xd0, 0xce, 0xac, 0x0a, 0x31, 0x23, 0xa0, 0xcb, 0x1a, - 0x45, 0x25, 0x01, 0xaa, 0x9b, 0x30, 0x46, 0x22, 0x01, 0x88, 0x88, 0xb9, 0xec, 0xcb, 0x89, 0x32, - 0x34, 0xa1, 0xeb, 0x9b, 0x20, 0x35, 0x23, 0xb8, 0xbc, 0x8b, 0x42, 0x35, 0x33, 0x42, 0x32, 0x12, - 0xb9, 0xcf, 0x9c, 0x19, 0x31, 0x11, 0xc9, 0xac, 0x09, 0x42, 0x14, 0x90, 0xbc, 0x9b, 0x30, 0x45, - 0x12, 0x80, 0x08, 0x88, 0xb9, 0xce, 0xac, 0x19, 0x43, 0x23, 0xc8, 0xcc, 0x9a, 0x20, 0x24, 0x92, - 0xfb, 0xbb, 0x99, 0x21, 0x32, 0x22, 0x22, 0x33, 0xa1, 0xdf, 0xbd, 0xaa, 0x10, 0x24, 0x02, 0xb9, - 0xab, 0x41, 0x46, 0x22, 0x98, 0xaa, 0x09, 0x53, 0x34, 0x12, 0x80, 0x08, 0x98, 0xeb, 0xcc, 0xab, - 0x10, 0x44, 0x02, 0xb9, 0xae, 0x89, 0x43, 0x24, 0x82, 0xbb, 0xac, 0x18, 0x44, 0x24, 0x23, 0x23, - 0x14, 0x91, 0xfb, 0xbb, 0x9b, 0x21, 0x33, 0xa1, 0xcc, 0xab, 0x31, 0x35, 0x02, 0xda, 0xac, 0x08, - 0x43, 0x33, 0x02, 0x88, 0x88, 0xa9, 0xed, 0xcb, 0x8b, 0x31, 0x35, 0x91, 0xdc, 0xbb, 0x09, 0x43, - 0x13, 0xb8, 0xbf, 0x9c, 0x09, 0x21, 0x22, 0x33, 0x33, 0x13, 0xea, 0xce, 0xac, 0x09, 0x20, 0x23, - 0x80, 0xaa, 0x19, 0x54, 0x43, 0x01, 0xa9, 0x8a, 0x41, 0x45, 0x22, 0x00, 0x89, 0x98, 0xa9, 0xcd, - 0xcb, 0x09, 0x43, 0x23, 0xb8, 0xce, 0x9a, 0x30, 0x35, 0x23, 0xa8, 0xad, 0x9a, 0x41, 0x53, 0x43, - 0x33, 0x33, 0x01, 0xe9, 0xbc, 0x9c, 0x09, 0x22, 0x02, 0xa9, 0xbb, 0x0a, 0x63, 0x22, 0xa8, 0xbc, - 0x9a, 0x52, 0x34, 0x02, 0x80, 0x89, 0x99, 0xeb, 0xcc, 0xab, 0x10, 0x44, 0x01, 0xeb, 0xbc, 0x8a, - 0x30, 0x24, 0x91, 0xcd, 0xcb, 0x99, 0x10, 0x32, 0x43, 0x24, 0x13, 0xa8, 0xed, 0xbb, 0x9b, 0x18, - 0x33, 0x12, 0x99, 0x8a, 0x52, 0x45, 0x12, 0x90, 0x89, 0x20, 0x45, 0x23, 0x11, 0x88, 0x88, 0xa9, - 0xdc, 0xcc, 0x89, 0x31, 0x43, 0xa1, 0xcd, 0xbb, 0x18, 0x54, 0x23, 0x91, 0xba, 0x9c, 0x18, 0x44, - 0x44, 0x43, 0x33, 0x13, 0xa8, 0xcd, 0xac, 0x8a, 0x10, 0x12, 0x90, 0xa9, 0x0a, 0x31, 0x24, 0x90, - 0xbd, 0x99, 0x42, 0x44, 0x12, 0x80, 0x99, 0xa9, 0xdb, 0xdc, 0xab, 0x28, 0x53, 0x12, 0xeb, 0xcc, - 0xaa, 0x18, 0x32, 0x02, 0xda, 0xcc, 0xaa, 0x89, 0x11, 0x43, 0x35, 0x24, 0x82, 0xda, 0xcc, 0xab, - 0x09, 0x20, 0x11, 0x00, 0x18, 0x31, 0x35, 0x13, 0x90, 0x89, 0x62, 0x35, 0x24, 0x01, 0x88, 0x98, - 0xa9, 0xdb, 0xbc, 0x8a, 0x53, 0x24, 0x91, 0xcd, 0xac, 0x09, 0x32, 0x35, 0x01, 0xa9, 0xaa, 0x89, - 0x42, 0x45, 0x44, 0x34, 0x14, 0x81, 0xba, 0xbd, 0x9b, 0x08, 0x01, 0x81, 0x99, 0x08, 0x22, 0x33, - 0xc8, 0xbd, 0x0a, 0x63, 0x34, 0x02, 0xa8, 0xaa, 0x99, 0xcb, 0xcd, 0xab, 0x28, 0x45, 0x12, 0xda, - 0xcd, 0xaa, 0x08, 0x21, 0x02, 0xc9, 0xbc, 0x9c, 0x99, 0x80, 0x31, 0x55, 0x34, 0x13, 0xb8, 0xce, - 0xab, 0x8a, 0x18, 0x11, 0x80, 0x08, 0x42, 0x44, 0x02, 0x90, 0x9a, 0x41, 0x36, 0x24, 0x81, 0x89, - 0x99, 0x88, 0xba, 0xbd, 0x9b, 0x62, 0x25, 0x02, 0xdb, 0xad, 0x8a, 0x31, 0x24, 0x02, 0xa9, 0xaa, - 0x18, 0x42, 0x43, 0x44, 0x45, 0x34, 0x02, 0xa8, 0xcc, 0xab, 0x09, 0x10, 0x88, 0xa9, 0x08, 0x34, - 0x24, 0x90, 0xbd, 0xab, 0x42, 0x36, 0x12, 0x98, 0xab, 0x99, 0xaa, 0xcc, 0xbc, 0x09, 0x54, 0x14, - 0x90, 0xbe, 0xbc, 0x09, 0x11, 0x12, 0xb8, 0xbd, 0xab, 0x88, 0x08, 0x08, 0x61, 0x45, 0x24, 0x82, - 0xda, 0xbc, 0x9a, 0x08, 0x10, 0x98, 0x89, 0x42, 0x45, 0x12, 0x98, 0xbb, 0x29, 0x55, 0x34, 0x02, - 0xa8, 0xa9, 0x89, 0xa9, 0xdb, 0x9b, 0x50, 0x45, 0x12, 0xb8, 0xcd, 0x9b, 0x20, 0x43, 0x02, 0x98, - 0xab, 0x19, 0x42, 0x23, 0x33, 0x56, 0x35, 0x24, 0x80, 0xca, 0xac, 0x99, 0x10, 0x80, 0xaa, 0x8a, - 0x52, 0x34, 0x82, 0xda, 0xac, 0x18, 0x63, 0x23, 0x80, 0xaa, 0xab, 0x9a, 0xba, 0xbd, 0x9b, 0x73, - 0x34, 0x82, 0xeb, 0xad, 0x9a, 0x10, 0x22, 0x90, 0xbc, 0xac, 0x09, 0x01, 0x81, 0x18, 0x73, 0x44, - 0x22, 0xb8, 0xcd, 0x9b, 0x09, 0x10, 0x90, 0xaa, 0x19, 0x46, 0x24, 0x01, 0xba, 0x9c, 0x41, 0x44, - 0x23, 0x90, 0xaa, 0x9a, 0x99, 0xc9, 0xbb, 0x29, 0x47, 0x34, 0x81, 0xcc, 0xac, 0x19, 0x41, 0x22, - 0x88, 0xbb, 0x8a, 0x41, 0x24, 0x12, 0x22, 0x55, 0x34, 0x12, 0xb9, 0xcc, 0x9b, 0x00, 0x01, 0xb9, - 0xbc, 0x28, 0x46, 0x13, 0xa0, 0xbd, 0x8b, 0x51, 0x53, 0x02, 0xa8, 0xba, 0x9a, 0x9a, 0xcb, 0xbb, - 0x48, 0x55, 0x23, 0xb8, 0xce, 0xab, 0x08, 0x31, 0x82, 0xd9, 0xcb, 0x99, 0x20, 0x11, 0x80, 0x20, - 0x64, 0x43, 0x81, 0xda, 0xac, 0x8a, 0x10, 0x81, 0xb9, 0x9b, 0x61, 0x35, 0x14, 0xb8, 0xbb, 0x1a, - 0x64, 0x24, 0x01, 0xa8, 0xaa, 0xa9, 0x99, 0xba, 0x8b, 0x73, 0x36, 0x13, 0xb9, 0xbe, 0x9b, 0x21, - 0x34, 0x02, 0xba, 0xac, 0x18, 0x34, 0x24, 0x11, 0x32, 0x46, 0x23, 0x91, 0xeb, 0xaa, 0x09, 0x10, - 0x90, 0xbc, 0x8c, 0x51, 0x34, 0x02, 0xca, 0xbc, 0x18, 0x63, 0x23, 0x81, 0xba, 0xbb, 0xab, 0xcb, - 0xcb, 0x89, 0x54, 0x25, 0x82, 0xea, 0xcb, 0x99, 0x10, 0x22, 0x98, 0xbd, 0xab, 0x18, 0x32, 0x12, - 0x08, 0x42, 0x45, 0x22, 0xc8, 0xcc, 0xaa, 0x00, 0x11, 0xa8, 0xbd, 0x19, 0x64, 0x43, 0x81, 0xba, - 0xab, 0x40, 0x45, 0x22, 0x91, 0xb9, 0xab, 0xaa, 0xba, 0xbb, 0x40, 0x67, 0x32, 0x91, 0xda, 0xbb, - 0x09, 0x43, 0x22, 0xa0, 0xbc, 0x9a, 0x42, 0x34, 0x23, 0x21, 0x52, 0x34, 0x02, 0xc9, 0xbc, 0x8a, - 0x20, 0x01, 0xeb, 0xbb, 0x29, 0x55, 0x33, 0xa0, 0xcc, 0x9a, 0x31, 0x36, 0x12, 0xa0, 0xcb, 0xba, - 0xba, 0xbb, 0x9c, 0x50, 0x54, 0x13, 0xa8, 0xbe, 0x9c, 0x09, 0x21, 0x01, 0xca, 0xbc, 0x8a, 0x20, - 0x33, 0x02, 0x11, 0x53, 0x43, 0x91, 0xdc, 0xbb, 0x09, 0x21, 0x81, 0xdc, 0x9b, 0x41, 0x45, 0x13, - 0xa0, 0xbc, 0x0a, 0x63, 0x34, 0x02, 0x98, 0xbb, 0xcb, 0xaa, 0xaa, 0x09, 0x55, 0x35, 0x12, 0xb8, - 0xbd, 0x9b, 0x30, 0x34, 0x82, 0xca, 0xac, 0x18, 0x53, 0x33, 0x22, 0x22, 0x34, 0x22, 0xa0, 0xbe, - 0xab, 0x28, 0x22, 0xd8, 0xbd, 0x9b, 0x52, 0x35, 0x12, 0xba, 0xad, 0x09, 0x63, 0x33, 0x01, 0xb9, - 0xbc, 0xac, 0xcb, 0xaa, 0x18, 0x54, 0x43, 0x81, 0xda, 0xbc, 0x8a, 0x28, 0x11, 0xa8, 0xcd, 0x9b, - 0x19, 0x32, 0x23, 0x22, 0x22, 0x43, 0x82, 0xeb, 0xbc, 0x8b, 0x31, 0x12, 0xfa, 0xcb, 0x09, 0x54, - 0x33, 0x02, 0xca, 0xab, 0x30, 0x46, 0x23, 0x81, 0xa9, 0xbc, 0xbb, 0xbc, 0x8a, 0x41, 0x37, 0x24, - 0x81, 0xcb, 0xab, 0x09, 0x42, 0x13, 0xa8, 0xbd, 0x8a, 0x41, 0x34, 0x24, 0x22, 0x32, 0x12, 0x91, - 0xcc, 0xbb, 0x19, 0x33, 0x91, 0xde, 0xbb, 0x28, 0x54, 0x14, 0x91, 0xbb, 0x9b, 0x51, 0x44, 0x22, - 0x88, 0xca, 0xcb, 0xcb, 0xab, 0x0a, 0x51, 0x34, 0x23, 0xb9, 0xbf, 0xab, 0x09, 0x11, 0x91, 0xeb, - 0xcb, 0x8a, 0x20, 0x32, 0x43, 0x32, 0x22, 0x81, 0xda, 0xbc, 0x9b, 0x20, 0x24, 0xa0, 0xcd, 0x9b, - 0x41, 0x54, 0x12, 0x90, 0xbb, 0x09, 0x54, 0x34, 0x13, 0x90, 0xcb, 0xcc, 0xba, 0xab, 0x38, 0x55, - 0x24, 0x12, 0xa9, 0xac, 0x8a, 0x20, 0x33, 0x91, 0xeb, 0xab, 0x18, 0x63, 0x24, 0x24, 0x32, 0x11, - 0x90, 0xcb, 0xbb, 0x09, 0x43, 0x12, 0xda, 0xbd, 0x89, 0x41, 0x34, 0x12, 0xb9, 0xbb, 0x29, 0x56, - 0x23, 0x02, 0x98, 0xdc, 0xdb, 0xcb, 0x9a, 0x10, 0x34, 0x24, 0x91, 0xdb, 0xbb, 0x9a, 0x18, 0x90, - 0xea, 0xcb, 0xab, 0x18, 0x41, 0x42, 0x33, 0x33, 0x01, 0xda, 0xbc, 0x9b, 0x20, 0x34, 0x82, 0xcc, - 0xac, 0x18, 0x63, 0x23, 0x82, 0xaa, 0x8a, 0x51, 0x44, 0x22, 0x02, 0xa0, 0xcc, 0xcd, 0xab, 0x8a, - 0x52, 0x44, 0x22, 0x80, 0xba, 0x9b, 0x10, 0x32, 0x81, 0xdb, 0xac, 0x89, 0x42, 0x44, 0x34, 0x34, - 0x22, 0x81, 0xcb, 0xac, 0x8a, 0x32, 0x23, 0xa0, 0xce, 0x9a, 0x20, 0x53, 0x12, 0xa0, 0x9a, 0x18, - 0x54, 0x33, 0x23, 0x00, 0xca, 0xcf, 0xbc, 0xbc, 0x09, 0x42, 0x24, 0x02, 0xba, 0xad, 0x9b, 0x08, - 0x90, 0xd9, 0xcb, 0xbb, 0x99, 0x10, 0x43, 0x54, 0x33, 0x23, 0xb8, 0xcd, 0xab, 0x19, 0x43, 0x12, - 0xa8, 0xbc, 0x0a, 0x52, 0x33, 0x01, 0xaa, 0x09, 0x73, 0x53, 0x22, 0x01, 0x00, 0xc9, 0xdd, 0xbc, - 0xab, 0x30, 0x55, 0x23, 0x81, 0xa9, 0x9a, 0x10, 0x22, 0x82, 0xda, 0xac, 0x8a, 0x20, 0x34, 0x45, - 0x44, 0x33, 0x12, 0xc9, 0xbc, 0x9b, 0x20, 0x34, 0x82, 0xca, 0xbb, 0x19, 0x34, 0x23, 0x98, 0x9b, - 0x30, 0x47, 0x23, 0x02, 0x80, 0x80, 0xea, 0xde, 0xbc, 0xaa, 0x20, 0x44, 0x12, 0xa8, 0xac, 0x9b, - 0x08, 0x90, 0xda, 0xbd, 0xbb, 0x89, 0x00, 0x21, 0x63, 0x34, 0x25, 0x81, 0xcb, 0xbc, 0x0a, 0x41, - 0x23, 0x81, 0xcb, 0x9a, 0x21, 0x34, 0x02, 0xb9, 0x8a, 0x73, 0x43, 0x22, 0x08, 0x08, 0x00, 0xe9, - 0xce, 0xbc, 0x89, 0x52, 0x24, 0x03, 0x98, 0x9a, 0x18, 0x33, 0x12, 0xdb, 0xad, 0x8a, 0x20, 0x32, - 0x43, 0x54, 0x44, 0x23, 0x90, 0xeb, 0xab, 0x08, 0x32, 0x23, 0xa8, 0xbc, 0x0a, 0x42, 0x14, 0x90, - 0xbb, 0x29, 0x46, 0x24, 0x02, 0x99, 0x88, 0x90, 0xfb, 0xcd, 0xac, 0x09, 0x32, 0x24, 0x80, 0xdb, - 0xaa, 0x08, 0x11, 0xb9, 0xce, 0xac, 0x89, 0x08, 0x10, 0x10, 0x53, 0x35, 0x23, 0xb8, 0xbe, 0xab, - 0x28, 0x53, 0x12, 0x99, 0x9b, 0x28, 0x43, 0x03, 0xda, 0x9b, 0x30, 0x47, 0x23, 0x90, 0x99, 0x89, - 0x80, 0xeb, 0xcd, 0xab, 0x20, 0x36, 0x23, 0x80, 0xab, 0x19, 0x53, 0x14, 0xa0, 0xcc, 0xaa, 0x18, - 0x32, 0x22, 0x43, 0x55, 0x43, 0x02, 0xc9, 0xbc, 0x9a, 0x20, 0x34, 0x01, 0xba, 0x9a, 0x30, 0x34, - 0x92, 0xcc, 0x9a, 0x63, 0x35, 0x12, 0xa8, 0x9a, 0x89, 0x90, 0xfc, 0xbc, 0x9b, 0x20, 0x34, 0x02, - 0xcb, 0xbc, 0x09, 0x22, 0x92, 0xed, 0xbc, 0xaa, 0x18, 0x11, 0x00, 0x31, 0x64, 0x23, 0x82, 0xdb, - 0xad, 0x89, 0x31, 0x24, 0x81, 0xaa, 0x89, 0x42, 0x23, 0xb0, 0xbd, 0x0a, 0x64, 0x43, 0x01, 0xa9, - 0x9a, 0x08, 0x88, 0xec, 0xcb, 0x0a, 0x52, 0x43, 0x01, 0xa9, 0x89, 0x41, 0x25, 0x82, 0xda, 0xbb, - 0x0a, 0x31, 0x24, 0x21, 0x42, 0x45, 0x23, 0x91, 0xdc, 0xbb, 0x09, 0x33, 0x14, 0xa0, 0xaa, 0x18, - 0x44, 0x12, 0xca, 0xac, 0x39, 0x55, 0x33, 0x81, 0xba, 0x9a, 0x89, 0xb8, 0xcf, 0xac, 0x09, 0x32, - 0x23, 0xc8, 0xbd, 0x9a, 0x30, 0x23, 0xd8, 0xce, 0x9c, 0x89, 0x00, 0x11, 0x00, 0x31, 0x45, 0x22, - 0xb0, 0xcd, 0xaa, 0x18, 0x24, 0x03, 0xa0, 0x89, 0x31, 0x34, 0x92, 0xcd, 0x9c, 0x20, 0x36, 0x14, - 0x80, 0xba, 0x9a, 0x88, 0xa9, 0xdc, 0x9b, 0x30, 0x45, 0x13, 0x98, 0xbb, 0x30, 0x47, 0x23, 0xa8, - 0xcc, 0x9b, 0x18, 0x32, 0x23, 0x32, 0x54, 0x34, 0x12, 0xca, 0xcd, 0x8a, 0x28, 0x23, 0x82, 0x99, - 0x0a, 0x52, 0x33, 0xa0, 0xce, 0x8a, 0x51, 0x35, 0x12, 0x98, 0xab, 0xaa, 0x98, 0xca, 0xcc, 0x9b, - 0x20, 0x24, 0x90, 0xdd, 0xaa, 0x18, 0x33, 0x83, 0xed, 0xbc, 0x9b, 0x08, 0x21, 0x11, 0x20, 0x53, - 0x34, 0x81, 0xea, 0xcb, 0x89, 0x31, 0x24, 0x81, 0x89, 0x18, 0x34, 0x14, 0xc9, 0xcc, 0x09, 0x52, - 0x24, 0x02, 0xa9, 0xbb, 0x9a, 0x98, 0xca, 0xbb, 0x1a, 0x46, 0x24, 0x80, 0xbb, 0x09, 0x55, 0x25, - 0x01, 0xba, 0xad, 0x8a, 0x31, 0x23, 0x23, 0x32, 0x45, 0x23, 0x90, 0xcd, 0xac, 0x09, 0x21, 0x13, - 0x90, 0x89, 0x41, 0x35, 0x02, 0xeb, 0xbb, 0x18, 0x56, 0x23, 0x01, 0xa9, 0xbb, 0xaa, 0xaa, 0xdb, - 0xab, 0x19, 0x43, 0x92, 0xfc, 0xbb, 0x8a, 0x42, 0x23, 0xc8, 0xce, 0xac, 0x89, 0x10, 0x11, 0x11, - 0x21, 0x53, 0x12, 0xa8, 0xcd, 0xaa, 0x18, 0x43, 0x12, 0x80, 0x28, 0x63, 0x23, 0xa1, 0xdd, 0x9b, - 0x38, 0x45, 0x33, 0x80, 0xbb, 0xbc, 0xaa, 0xa9, 0xa9, 0x09, 0x44, 0x25, 0x82, 0xca, 0x9b, 0x61, - 0x35, 0x14, 0x90, 0xcb, 0xab, 0x19, 0x42, 0x32, 0x23, 0x43, 0x24, 0x01, 0xcb, 0xbd, 0x9b, 0x28, - 0x32, 0x81, 0x88, 0x41, 0x36, 0x14, 0xa8, 0xcd, 0x8a, 0x51, 0x34, 0x14, 0x90, 0xb9, 0xbb, 0xab, - 0xab, 0xab, 0x18, 0x42, 0x02, 0xfd, 0xbc, 0x9a, 0x20, 0x43, 0x82, 0xdc, 0xbd, 0xaa, 0x08, 0x20, - 0x21, 0x32, 0x33, 0x24, 0x90, 0xbd, 0xad, 0x09, 0x31, 0x23, 0x01, 0x20, 0x55, 0x34, 0x01, 0xda, - 0xac, 0x8a, 0x53, 0x34, 0x12, 0xa8, 0xdb, 0xba, 0xab, 0x9a, 0x18, 0x62, 0x33, 0x02, 0xda, 0xbb, - 0x38, 0x57, 0x33, 0x01, 0xc9, 0xbb, 0x9a, 0x30, 0x53, 0x33, 0x33, 0x24, 0x02, 0xc9, 0xbd, 0xab, - 0x08, 0x11, 0x81, 0x88, 0x51, 0x46, 0x33, 0x91, 0xcc, 0xab, 0x28, 0x55, 0x24, 0x01, 0xa0, 0xca, - 0xba, 0xac, 0xa9, 0x00, 0x32, 0x03, 0xea, 0xbe, 0xac, 0x08, 0x32, 0x22, 0xb9, 0xcf, 0xbb, 0x9a, - 0x18, 0x21, 0x42, 0x23, 0x23, 0x81, 0xdb, 0xac, 0x0a, 0x20, 0x23, 0x00, 0x20, 0x57, 0x53, 0x12, - 0xa8, 0xcc, 0x9a, 0x20, 0x44, 0x14, 0x81, 0xb8, 0xbc, 0xbc, 0xab, 0x09, 0x43, 0x35, 0x02, 0xb9, - 0xcc, 0x09, 0x52, 0x35, 0x22, 0x90, 0xbb, 0xbb, 0x09, 0x32, 0x45, 0x34, 0x33, 0x11, 0xb9, 0xbe, - 0x9b, 0x09, 0x01, 0x90, 0xba, 0x40, 0x47, 0x24, 0x12, 0xc9, 0xbb, 0x09, 0x52, 0x35, 0x23, 0x00, - 0xa9, 0xcd, 0xcb, 0xab, 0x08, 0x42, 0x23, 0xb8, 0xde, 0xbb, 0x8a, 0x21, 0x23, 0x91, 0xcd, 0xbc, - 0xba, 0x89, 0x18, 0x32, 0x45, 0x22, 0x81, 0xba, 0xad, 0x0a, 0x31, 0x13, 0x98, 0x9a, 0x74, 0x35, - 0x24, 0x81, 0xcb, 0xab, 0x19, 0x42, 0x34, 0x02, 0x80, 0xda, 0xdc, 0xbb, 0x9a, 0x30, 0x45, 0x23, - 0xa0, 0xbc, 0x9c, 0x21, 0x45, 0x23, 0x81, 0xa9, 0x9a, 0x99, 0x10, 0x41, 0x54, 0x43, 0x12, 0xa0, - 0xbc, 0xac, 0x08, 0x21, 0x90, 0xda, 0x8a, 0x63, 0x44, 0x22, 0x98, 0xbb, 0x9a, 0x41, 0x44, 0x32, - 0x02, 0x81, 0xda, 0xdc, 0xbb, 0x9b, 0x31, 0x35, 0x02, 0xdc, 0xbc, 0x9b, 0x18, 0x22, 0x02, 0xca, - 0xcc, 0xaa, 0xaa, 0x98, 0x10, 0x73, 0x33, 0x12, 0xc9, 0xbc, 0x8a, 0x31, 0x24, 0x91, 0xba, 0x29, - 0x57, 0x34, 0x11, 0xb9, 0xbb, 0x8a, 0x42, 0x33, 0x13, 0x81, 0xa8, 0xde, 0xbd, 0xbc, 0x09, 0x53, - 0x34, 0x01, 0xca, 0xbb, 0x19, 0x63, 0x33, 0x03, 0x90, 0x9a, 0x09, 0x08, 0x00, 0x63, 0x45, 0x33, - 0x81, 0xeb, 0xbb, 0x8a, 0x32, 0x12, 0xca, 0xbc, 0x28, 0x56, 0x23, 0x82, 0xb9, 0xab, 0x28, 0x35, - 0x24, 0x01, 0x11, 0x80, 0xdc, 0xcd, 0xbb, 0x08, 0x53, 0x23, 0xb0, 0xce, 0xbb, 0x89, 0x21, 0x02, - 0xa8, 0xcc, 0xaa, 0x99, 0x99, 0x9a, 0x31, 0x47, 0x23, 0x90, 0xcc, 0xab, 0x28, 0x53, 0x12, 0xb9, - 0xab, 0x71, 0x44, 0x23, 0x90, 0xba, 0x9b, 0x20, 0x33, 0x03, 0x80, 0x88, 0xc8, 0xdf, 0xbd, 0xab, - 0x30, 0x36, 0x14, 0x90, 0xbc, 0x9a, 0x30, 0x35, 0x23, 0x80, 0x99, 0x08, 0x21, 0x00, 0x18, 0x64, - 0x35, 0x23, 0xc9, 0xdc, 0x9a, 0x10, 0x32, 0x80, 0xbc, 0x9b, 0x52, 0x36, 0x12, 0xa0, 0xba, 0x08, - 0x52, 0x33, 0x01, 0x00, 0x10, 0xa8, 0xee, 0xbd, 0x9a, 0x30, 0x35, 0x02, 0xeb, 0xbc, 0x9a, 0x18, - 0x12, 0x80, 0xcb, 0xbb, 0x99, 0x90, 0xb9, 0x8a, 0x73, 0x35, 0x12, 0xca, 0xbd, 0x0a, 0x41, 0x33, - 0x81, 0xcb, 0x09, 0x45, 0x34, 0x02, 0xb8, 0xab, 0x29, 0x53, 0x12, 0xa8, 0x9a, 0x89, 0xc9, 0xdf, - 0xcb, 0x09, 0x42, 0x25, 0x82, 0xc9, 0xab, 0x09, 0x53, 0x33, 0x01, 0x99, 0x08, 0x31, 0x23, 0x80, - 0x30, 0x57, 0x33, 0x92, 0xcd, 0xad, 0x09, 0x22, 0x12, 0xb8, 0xad, 0x19, 0x73, 0x23, 0x82, 0xa9, - 0x8a, 0x40, 0x24, 0x03, 0x98, 0x09, 0x01, 0xc8, 0xcf, 0xbc, 0x09, 0x43, 0x24, 0xa8, 0xcd, 0xbb, - 0x89, 0x21, 0x81, 0xca, 0xbb, 0x9a, 0x10, 0x91, 0xba, 0x19, 0x56, 0x33, 0xb1, 0xde, 0xaa, 0x20, - 0x53, 0x12, 0xa9, 0x9b, 0x40, 0x55, 0x22, 0x80, 0xaa, 0x89, 0x31, 0x33, 0xa0, 0xcb, 0x8b, 0x98, - 0xfa, 0xce, 0xaa, 0x28, 0x45, 0x13, 0x90, 0xbc, 0x9a, 0x30, 0x35, 0x12, 0x98, 0x89, 0x41, 0x43, - 0x12, 0x88, 0x21, 0x46, 0x12, 0xc9, 0xcd, 0x9a, 0x10, 0x23, 0x82, 0xdb, 0xaa, 0x41, 0x35, 0x23, - 0x98, 0x9b, 0x28, 0x36, 0x23, 0x91, 0xaa, 0x89, 0x81, 0xfb, 0xbe, 0x9c, 0x20, 0x44, 0x01, 0xda, - 0xbc, 0xaa, 0x00, 0x11, 0xa8, 0xcc, 0x9a, 0x08, 0x11, 0x90, 0x9a, 0x30, 0x46, 0x02, 0xea, 0xbc, - 0x89, 0x32, 0x35, 0x81, 0xa9, 0x1a, 0x73, 0x43, 0x02, 0x99, 0x9a, 0x30, 0x35, 0x01, 0xc9, 0xac, - 0x99, 0x89, 0xeb, 0xbc, 0x0a, 0x62, 0x43, 0x01, 0xc9, 0xba, 0x08, 0x53, 0x23, 0x91, 0x99, 0x28, - 0x54, 0x23, 0x02, 0x10, 0x32, 0x25, 0xa1, 0xde, 0xac, 0x09, 0x31, 0x22, 0xa8, 0xbc, 0x19, 0x73, - 0x33, 0x01, 0x99, 0x09, 0x44, 0x34, 0x82, 0xb9, 0xaa, 0x09, 0x98, 0xce, 0xad, 0x09, 0x42, 0x23, - 0xb8, 0xcf, 0xbb, 0x89, 0x00, 0xa0, 0xeb, 0xab, 0x09, 0x21, 0x12, 0x90, 0x09, 0x31, 0x15, 0xd8, - 0xbe, 0x9c, 0x28, 0x44, 0x12, 0x88, 0x9a, 0x31, 0x46, 0x23, 0x80, 0xa9, 0x18, 0x44, 0x22, 0xa8, - 0xbd, 0xbb, 0x99, 0xba, 0xce, 0xaa, 0x20, 0x36, 0x14, 0xa0, 0xbb, 0x8b, 0x42, 0x34, 0x02, 0xb9, - 0x09, 0x55, 0x34, 0x23, 0x01, 0x11, 0x22, 0x82, 0xfc, 0xbc, 0x9b, 0x10, 0x33, 0x81, 0xca, 0x9a, - 0x52, 0x35, 0x13, 0x88, 0x89, 0x63, 0x44, 0x22, 0x98, 0xba, 0xab, 0x99, 0xba, 0xbe, 0xab, 0x42, - 0x25, 0x91, 0xdd, 0xac, 0x9b, 0x08, 0x88, 0xcb, 0xbd, 0x9a, 0x20, 0x22, 0x02, 0x00, 0x10, 0x21, - 0xc8, 0xcf, 0xbc, 0x09, 0x42, 0x43, 0x01, 0x08, 0x28, 0x44, 0x24, 0x01, 0x98, 0x18, 0x54, 0x43, - 0x81, 0xca, 0xbc, 0xab, 0xaa, 0xba, 0xab, 0x29, 0x55, 0x24, 0x80, 0xca, 0x8a, 0x20, 0x44, 0x12, - 0xa8, 0x9a, 0x50, 0x36, 0x25, 0x22, 0x11, 0x11, 0x80, 0xda, 0xcc, 0xab, 0x89, 0x22, 0x12, 0xa8, - 0x9a, 0x21, 0x46, 0x33, 0x00, 0x19, 0x72, 0x54, 0x22, 0x81, 0xa9, 0xbb, 0xbb, 0xba, 0xbb, 0x9b, - 0x40, 0x35, 0xa2, 0xde, 0xbc, 0xab, 0x99, 0xa8, 0xdc, 0xcc, 0xaa, 0x08, 0x31, 0x32, 0x21, 0x11, - 0x80, 0xca, 0xce, 0xac, 0x8a, 0x31, 0x43, 0x03, 0x00, 0x31, 0x54, 0x24, 0x12, 0x88, 0x18, 0x73, - 0x43, 0x02, 0xa9, 0xcc, 0xcb, 0xaa, 0xab, 0x9a, 0x18, 0x34, 0x25, 0x80, 0xba, 0x9b, 0x42, 0x35, - 0x13, 0xc9, 0xab, 0x28, 0x57, 0x43, 0x33, 0x22, 0x22, 0x80, 0xda, 0xcc, 0xab, 0x89, 0x10, 0x01, - 0x98, 0x0a, 0x41, 0x35, 0x23, 0x90, 0x8a, 0x73, 0x46, 0x33, 0x11, 0x98, 0xbb, 0xbc, 0xcb, 0xaa, - 0x0a, 0x41, 0x43, 0x81, 0xec, 0xcb, 0xaa, 0x88, 0x88, 0xdb, 0xcd, 0xaa, 0x8a, 0x10, 0x32, 0x32, - 0x23, 0x13, 0xb9, 0xdf, 0xcb, 0x8a, 0x10, 0x22, 0x12, 0x01, 0x42, 0x36, 0x24, 0x01, 0x99, 0x89, - 0x44, 0x45, 0x22, 0x90, 0xba, 0xbd, 0xbc, 0xbb, 0xaa, 0x28, 0x44, 0x23, 0x91, 0xdb, 0x9b, 0x31, - 0x45, 0x12, 0xa0, 0xac, 0x0a, 0x42, 0x36, 0x34, 0x33, 0x24, 0x02, 0xb9, 0xcd, 0xbb, 0x9a, 0x11, - 0x10, 0xa9, 0x9a, 0x41, 0x36, 0x13, 0xa0, 0xab, 0x48, 0x57, 0x33, 0x13, 0x91, 0xb9, 0xca, 0xbc, - 0xcb, 0x8a, 0x31, 0x35, 0x83, 0xea, 0xcc, 0x9a, 0x08, 0x01, 0xb9, 0xce, 0xac, 0x9a, 0x00, 0x21, - 0x21, 0x43, 0x32, 0x80, 0xdc, 0xcc, 0x9a, 0x18, 0x22, 0x02, 0x80, 0x18, 0x55, 0x43, 0x12, 0x99, - 0x9a, 0x40, 0x45, 0x33, 0x81, 0xb9, 0xcb, 0xbc, 0xcc, 0xab, 0x0a, 0x51, 0x33, 0x02, 0xca, 0xad, - 0x18, 0x53, 0x23, 0x80, 0xdb, 0x9a, 0x10, 0x44, 0x24, 0x33, 0x34, 0x23, 0x91, 0xdc, 0xbc, 0x8a, - 0x18, 0x11, 0x98, 0xab, 0x19, 0x64, 0x33, 0x81, 0xbb, 0x8c, 0x63, 0x35, 0x14, 0x01, 0x98, 0x9a, - 0xca, 0xcb, 0xab, 0x19, 0x45, 0x23, 0xa0, 0xbe, 0xac, 0x89, 0x21, 0x80, 0xfb, 0xdb, 0x9a, 0x88, - 0x10, 0x11, 0x31, 0x43, 0x13, 0xb8, 0xcf, 0xbb, 0x09, 0x31, 0x22, 0x90, 0x89, 0x62, 0x45, 0x22, - 0x90, 0xba, 0x09, 0x73, 0x34, 0x02, 0x90, 0xba, 0xcb, 0xdb, 0xcb, 0x9b, 0x20, 0x54, 0x12, 0xa0, - 0xbc, 0x8b, 0x41, 0x34, 0x03, 0xb9, 0xad, 0x89, 0x42, 0x34, 0x42, 0x43, 0x33, 0x13, 0xc9, 0xcd, - 0xab, 0x09, 0x21, 0x81, 0xba, 0x9b, 0x51, 0x45, 0x02, 0xa8, 0xac, 0x28, 0x64, 0x33, 0x02, 0x90, - 0xa8, 0xb9, 0xdb, 0xbc, 0x9b, 0x42, 0x26, 0x02, 0xca, 0xbd, 0x9a, 0x20, 0x12, 0xb8, 0xde, 0xab, - 0x8a, 0x18, 0x11, 0x11, 0x43, 0x24, 0x82, 0xeb, 0xcc, 0x9a, 0x10, 0x32, 0x01, 0xa9, 0x19, 0x55, - 0x24, 0x12, 0xb9, 0xab, 0x40, 0x45, 0x23, 0x00, 0xa9, 0xbb, 0xdb, 0xbc, 0xbc, 0x0a, 0x52, 0x24, - 0x02, 0xcb, 0xac, 0x19, 0x53, 0x33, 0x90, 0xcb, 0x9b, 0x28, 0x44, 0x33, 0x43, 0x44, 0x22, 0x81, - 0xeb, 0xcb, 0x8a, 0x10, 0x02, 0xa0, 0xbb, 0x1a, 0x45, 0x34, 0x91, 0xca, 0x8b, 0x51, 0x35, 0x23, - 0x81, 0x98, 0xa9, 0xca, 0xbc, 0xad, 0x08, 0x44, 0x33, 0xa0, 0xdd, 0xab, 0x88, 0x22, 0x01, 0xdb, - 0xcd, 0x9a, 0x09, 0x10, 0x01, 0x31, 0x43, 0x33, 0xb8, 0xcf, 0xbb, 0x89, 0x32, 0x13, 0xa0, 0x9a, - 0x61, 0x45, 0x23, 0x90, 0xbb, 0x0a, 0x73, 0x24, 0x03, 0x90, 0xaa, 0xbb, 0xcc, 0xcc, 0x9a, 0x28, - 0x63, 0x13, 0xa0, 0xcc, 0x9a, 0x31, 0x44, 0x02, 0xb8, 0xbb, 0x8a, 0x42, 0x34, 0x24, 0x34, 0x34, - 0x22, 0xb9, 0xce, 0xab, 0x88, 0x22, 0x81, 0xba, 0x9c, 0x40, 0x44, 0x13, 0xb8, 0xac, 0x19, 0x64, - 0x33, 0x12, 0x90, 0xa8, 0xa9, 0xcc, 0xbc, 0x9a, 0x41, 0x35, 0x03, 0xda, 0xcc, 0x8a, 0x18, 0x22, - 0xa8, 0xcd, 0xac, 0x8a, 0x08, 0x01, 0x21, 0x42, 0x43, 0x82, 0xda, 0xbd, 0xab, 0x10, 0x33, 0x01, - 0xaa, 0x19, 0x56, 0x34, 0x02, 0xb8, 0xab, 0x38, 0x56, 0x22, 0x01, 0x99, 0xba, 0xcb, 0xcc, 0xcb, - 0x89, 0x42, 0x24, 0x02, 0xca, 0xbc, 0x08, 0x43, 0x24, 0x81, 0xbb, 0xbb, 0x10, 0x54, 0x32, 0x34, - 0x34, 0x24, 0x81, 0xda, 0xbc, 0x9a, 0x18, 0x12, 0x98, 0xbc, 0x19, 0x73, 0x33, 0x81, 0xbb, 0x8c, - 0x41, 0x45, 0x23, 0x01, 0x98, 0x99, 0xbb, 0xcd, 0xbb, 0x19, 0x45, 0x33, 0xa0, 0xdd, 0xab, 0x89, - 0x22, 0x01, 0xea, 0xbc, 0x9c, 0x89, 0x00, 0x01, 0x22, 0x44, 0x22, 0xa8, 0xcd, 0xac, 0x8a, 0x21, - 0x22, 0x90, 0x8a, 0x51, 0x45, 0x23, 0x80, 0xba, 0x89, 0x63, 0x25, 0x13, 0x90, 0xaa, 0xbb, 0xcd, - 0xcb, 0xaa, 0x28, 0x44, 0x23, 0xa8, 0xcc, 0x9b, 0x21, 0x45, 0x02, 0x98, 0xbb, 0x8a, 0x31, 0x45, - 0x43, 0x43, 0x43, 0x12, 0xa8, 0xbd, 0xac, 0x89, 0x11, 0x80, 0xb9, 0x9b, 0x41, 0x36, 0x13, 0xa8, - 0xbb, 0x29, 0x56, 0x34, 0x12, 0x81, 0xa8, 0xb9, 0xcc, 0xbc, 0x8a, 0x31, 0x36, 0x12, 0xda, 0xcc, - 0x9a, 0x18, 0x01, 0xb0, 0xdc, 0xac, 0x9a, 0x09, 0x00, 0x31, 0x43, 0x24, 0x82, 0xea, 0xdb, 0x9a, - 0x08, 0x12, 0x81, 0x98, 0x20, 0x55, 0x34, 0x02, 0x98, 0x9a, 0x20, 0x46, 0x23, 0x02, 0xa0, 0xca, - 0xdb, 0xcc, 0xba, 0x09, 0x41, 0x24, 0x01, 0xca, 0xbb, 0x08, 0x53, 0x14, 0x81, 0xb9, 0xaa, 0x28, - 0x53, 0x44, 0x53, 0x43, 0x23, 0x80, 0xca, 0xbc, 0xaa, 0x08, 0x81, 0xa8, 0xab, 0x28, 0x46, 0x24, - 0x80, 0xa9, 0x0a, 0x62, 0x35, 0x23, 0x12, 0x80, 0xb9, 0xcc, 0xcc, 0xaa, 0x28, 0x53, 0x13, 0xb0, - 0xcd, 0xac, 0x09, 0x00, 0x90, 0xdb, 0xcc, 0xba, 0x99, 0x88, 0x11, 0x53, 0x33, 0x23, 0xc8, 0xcd, - 0xbb, 0x89, 0x10, 0x01, 0x80, 0x28, 0x64, 0x34, 0x23, 0x81, 0x99, 0x20, 0x55, 0x43, 0x21, 0x80, - 0xa9, 0xcc, 0xbc, 0xbd, 0x99, 0x20, 0x43, 0x12, 0xb9, 0xbc, 0x8a, 0x41, 0x34, 0x12, 0x99, 0xbb, - 0x09, 0x52, 0x44, 0x45, 0x44, 0x22, 0x02, 0xa8, 0xbc, 0xab, 0x89, 0x88, 0xa9, 0x9c, 0x19, 0x63, - 0x43, 0x01, 0xa8, 0x09, 0x42, 0x36, 0x34, 0x22, 0x11, 0x90, 0xdb, 0xcc, 0xac, 0x09, 0x32, 0x24, - 0x90, 0xeb, 0xbb, 0x9a, 0x88, 0xa8, 0xcd, 0xbc, 0xac, 0xaa, 0x99, 0x09, 0x41, 0x35, 0x23, 0x90, - 0xdc, 0xab, 0x9a, 0x08, 0x80, 0xa9, 0x29, 0x55, 0x35, 0x33, 0x01, 0x89, 0x20, 0x54, 0x33, 0x23, - 0x11, 0x81, 0xda, 0xce, 0xbc, 0xab, 0x19, 0x43, 0x12, 0xb0, 0xcb, 0x8a, 0x31, 0x34, 0x02, 0xa9, - 0x9a, 0x20, 0x44, 0x24, 0x55, 0x54, 0x43, 0x12, 0x90, 0xba, 0xab, 0x99, 0x98, 0xda, 0xbb, 0x09, - 0x44, 0x24, 0x02, 0xa9, 0x89, 0x63, 0x44, 0x23, 0x12, 0x11, 0x12, 0xb8, 0xde, 0xcb, 0x99, 0x31, - 0x24, 0x91, 0xdb, 0xac, 0x8a, 0x08, 0xa8, 0xdc, 0xbc, 0xab, 0xaa, 0xaa, 0xaa, 0x29, 0x55, 0x24, - 0x01, 0xca, 0xcb, 0x8a, 0x08, 0x80, 0xba, 0x9b, 0x73, 0x45, 0x22, 0x00, 0x89, 0x28, 0x54, 0x33, - 0x12, 0x80, 0x08, 0x98, 0xfb, 0xcc, 0xac, 0x88, 0x22, 0x13, 0xa8, 0xbd, 0x8a, 0x41, 0x33, 0x02, - 0xca, 0xaa, 0x30, 0x44, 0x22, 0x32, 0x56, 0x35, 0x14, 0x81, 0xb9, 0xaa, 0x09, 0x81, 0xc9, 0xbd, - 0x9b, 0x41, 0x34, 0x03, 0xa9, 0x9b, 0x51, 0x45, 0x33, 0x11, 0x08, 0x11, 0x12, 0xda, 0xbe, 0xab, - 0x38, 0x44, 0x01, 0xdb, 0xbc, 0x89, 0x10, 0x91, 0xfb, 0xbc, 0xbb, 0x89, 0x90, 0xa9, 0x9a, 0x30, - 0x37, 0x03, 0xc8, 0xcc, 0x8a, 0x10, 0x11, 0xba, 0xbe, 0x18, 0x64, 0x33, 0x01, 0x98, 0x89, 0x53, - 0x35, 0x12, 0x80, 0x89, 0x08, 0x90, 0xdd, 0xbc, 0x9b, 0x30, 0x34, 0x90, 0xdc, 0xaa, 0x20, 0x25, - 0x03, 0xb9, 0xac, 0x09, 0x53, 0x33, 0x02, 0x31, 0x46, 0x34, 0x03, 0xb8, 0xbb, 0x89, 0x32, 0xa1, - 0xdf, 0xab, 0x19, 0x34, 0x24, 0xa0, 0xbb, 0x19, 0x55, 0x34, 0x02, 0x90, 0x08, 0x10, 0x80, 0xeb, - 0xbc, 0x08, 0x43, 0x14, 0xc8, 0xbd, 0x9b, 0x10, 0x22, 0xc0, 0xdd, 0xbb, 0x9a, 0x00, 0x80, 0xaa, - 0x09, 0x42, 0x34, 0x90, 0xdd, 0xaa, 0x18, 0x32, 0xa1, 0xdc, 0x9b, 0x51, 0x44, 0x12, 0x98, 0x9a, - 0x20, 0x46, 0x33, 0x81, 0x99, 0x9a, 0x08, 0xb9, 0xce, 0xab, 0x28, 0x53, 0x02, 0xea, 0xcb, 0x09, - 0x43, 0x33, 0x90, 0xdb, 0x9b, 0x30, 0x44, 0x22, 0x10, 0x41, 0x34, 0x24, 0x98, 0xbb, 0x9b, 0x41, - 0x14, 0xb8, 0xbf, 0x9b, 0x31, 0x35, 0x82, 0xc9, 0x9b, 0x41, 0x45, 0x23, 0x91, 0x99, 0x88, 0x01, - 0x98, 0xcd, 0x8a, 0x41, 0x34, 0xa1, 0xdd, 0xbb, 0x09, 0x32, 0x03, 0xec, 0xbc, 0xab, 0x08, 0x01, - 0x91, 0xa9, 0x18, 0x33, 0x02, 0xed, 0xac, 0x0a, 0x42, 0x13, 0xb9, 0xbe, 0x09, 0x63, 0x24, 0x81, - 0xa9, 0x89, 0x53, 0x35, 0x12, 0x98, 0x9a, 0x8a, 0x88, 0xca, 0xbd, 0x89, 0x43, 0x24, 0xb8, 0xce, - 0x9b, 0x21, 0x35, 0x12, 0xc9, 0xcb, 0x09, 0x42, 0x33, 0x13, 0x11, 0x42, 0x34, 0x01, 0xda, 0x9b, - 0x28, 0x44, 0x01, 0xeb, 0xbb, 0x1a, 0x53, 0x33, 0xa8, 0xbc, 0x1a, 0x64, 0x43, 0x02, 0x98, 0x99, - 0x88, 0x80, 0xb9, 0xac, 0x30, 0x46, 0x12, 0xda, 0xcd, 0x8a, 0x10, 0x23, 0xa0, 0xdd, 0xbb, 0x8a, - 0x10, 0x11, 0x98, 0x98, 0x11, 0x02, 0xd9, 0xbe, 0x8c, 0x20, 0x24, 0x82, 0xdb, 0xab, 0x40, 0x44, - 0x13, 0xa8, 0xab, 0x48, 0x55, 0x23, 0x01, 0xa9, 0xab, 0x99, 0x99, 0xdb, 0x9a, 0x41, 0x35, 0x81, - 0xdc, 0xac, 0x1a, 0x42, 0x24, 0x91, 0xda, 0x9a, 0x18, 0x53, 0x32, 0x11, 0x21, 0x32, 0x12, 0xc8, - 0xbd, 0x89, 0x53, 0x33, 0xb0, 0xdd, 0x9a, 0x20, 0x34, 0x82, 0xca, 0x9b, 0x40, 0x46, 0x22, 0x81, - 0xa9, 0x99, 0x89, 0x98, 0xaa, 0x29, 0x65, 0x23, 0xb0, 0xde, 0xab, 0x09, 0x32, 0x12, 0xea, 0xbd, - 0xab, 0x09, 0x21, 0x11, 0x08, 0x88, 0x00, 0xc9, 0xdd, 0xab, 0x19, 0x53, 0x23, 0xa8, 0xcc, 0x89, - 0x43, 0x25, 0x01, 0xaa, 0x8a, 0x73, 0x34, 0x13, 0x90, 0xba, 0xab, 0xaa, 0xba, 0xab, 0x40, 0x46, - 0x13, 0xc9, 0xbe, 0x9c, 0x20, 0x34, 0x13, 0xb9, 0xbd, 0x8a, 0x32, 0x36, 0x32, 0x21, 0x22, 0x11, - 0xb8, 0xdc, 0xaa, 0x31, 0x36, 0x02, 0xca, 0xcb, 0x09, 0x42, 0x23, 0xa8, 0xbd, 0x19, 0x54, 0x25, - 0x12, 0x88, 0xaa, 0x9a, 0xa9, 0x99, 0x19, 0x73, 0x34, 0x02, 0xdc, 0xbc, 0x9b, 0x10, 0x33, 0xa1, - 0xed, 0xcb, 0x8a, 0x18, 0x11, 0x11, 0x00, 0x08, 0xa9, 0xcd, 0xbc, 0x9a, 0x41, 0x43, 0x82, 0xb9, - 0xab, 0x30, 0x46, 0x12, 0xa8, 0xaa, 0x48, 0x47, 0x23, 0x02, 0xa8, 0xbb, 0xac, 0xba, 0x9a, 0x20, - 0x55, 0x33, 0x90, 0xdd, 0xbb, 0x0a, 0x43, 0x24, 0x92, 0xca, 0xbb, 0x18, 0x63, 0x43, 0x32, 0x22, - 0x02, 0x98, 0xcc, 0xab, 0x19, 0x44, 0x14, 0x80, 0xbb, 0x9b, 0x30, 0x34, 0x82, 0xcc, 0x9b, 0x61, - 0x45, 0x23, 0x01, 0xa8, 0xbb, 0xbb, 0xab, 0x09, 0x73, 0x35, 0x13, 0xc8, 0xbe, 0xbb, 0x09, 0x31, - 0x02, 0xe9, 0xcc, 0xbb, 0x89, 0x20, 0x31, 0x22, 0x01, 0xb8, 0xde, 0xbc, 0x9a, 0x18, 0x53, 0x12, - 0x90, 0xa9, 0x19, 0x52, 0x33, 0x90, 0xba, 0x19, 0x57, 0x35, 0x12, 0x81, 0xb9, 0xdb, 0xbb, 0xaa, - 0x19, 0x54, 0x24, 0x02, 0xda, 0xbc, 0x9a, 0x20, 0x34, 0x03, 0xb8, 0xbc, 0x8b, 0x31, 0x46, 0x34, - 0x33, 0x22, 0x90, 0xeb, 0xbb, 0x8a, 0x42, 0x34, 0x11, 0xa9, 0xaa, 0x18, 0x32, 0x03, 0xeb, 0xbb, - 0x40, 0x56, 0x24, 0x12, 0x81, 0xa9, 0xbc, 0xbc, 0x9a, 0x31, 0x37, 0x24, 0x90, 0xdb, 0xbc, 0x8a, - 0x18, 0x12, 0xa8, 0xdc, 0xac, 0x9b, 0x88, 0x11, 0x33, 0x24, 0x91, 0xeb, 0xcd, 0xaa, 0x09, 0x21, - 0x14, 0x01, 0x98, 0x08, 0x22, 0x14, 0x81, 0xbb, 0x09, 0x65, 0x35, 0x24, 0x11, 0x88, 0xca, 0xdb, - 0xbb, 0x8a, 0x51, 0x34, 0x14, 0xa8, 0xbc, 0xac, 0x08, 0x31, 0x23, 0x91, 0xcb, 0xaa, 0x19, 0x63, - 0x44, 0x35, 0x23, 0x02, 0xca, 0xbc, 0xab, 0x20, 0x34, 0x23, 0x90, 0x99, 0x20, 0x32, 0x82, 0xfb, - 0xbb, 0x28, 0x65, 0x34, 0x22, 0x11, 0x80, 0xda, 0xcc, 0xba, 0x19, 0x73, 0x33, 0x02, 0xc9, 0xbd, - 0xaa, 0x08, 0x10, 0x98, 0xcb, 0xad, 0xbb, 0x9a, 0x88, 0x32, 0x36, 0x14, 0xb0, 0xce, 0xbc, 0x8a, - 0x20, 0x22, 0x12, 0x88, 0x18, 0x43, 0x23, 0x90, 0xbc, 0x9b, 0x73, 0x35, 0x24, 0x12, 0x00, 0x98, - 0xeb, 0xcc, 0x9b, 0x18, 0x54, 0x23, 0x81, 0xda, 0xab, 0x8a, 0x21, 0x13, 0x91, 0xb9, 0x9b, 0x08, - 0x42, 0x54, 0x55, 0x43, 0x13, 0x90, 0xcc, 0xbb, 0x09, 0x32, 0x24, 0x81, 0x88, 0x20, 0x33, 0x13, - 0xfb, 0xac, 0x09, 0x53, 0x34, 0x23, 0x11, 0x10, 0x98, 0xec, 0xbc, 0x9c, 0x21, 0x36, 0x23, 0xa0, - 0xcc, 0xbb, 0x89, 0x01, 0x90, 0xdb, 0xcb, 0xaa, 0x99, 0x9a, 0x08, 0x63, 0x44, 0x01, 0xda, 0xbd, - 0x9c, 0x08, 0x21, 0x12, 0x08, 0x08, 0x32, 0x35, 0x81, 0xcb, 0x9c, 0x28, 0x55, 0x32, 0x11, 0x80, - 0x00, 0xa8, 0xdd, 0xbc, 0x8a, 0x41, 0x35, 0x13, 0xb8, 0xcc, 0x8a, 0x10, 0x12, 0x80, 0xba, 0x9a, - 0x20, 0x33, 0x33, 0x65, 0x55, 0x33, 0x03, 0xda, 0xbc, 0x8b, 0x20, 0x33, 0x02, 0x98, 0x28, 0x45, - 0x23, 0xa8, 0xcd, 0x9b, 0x31, 0x45, 0x13, 0x01, 0x00, 0x00, 0xa8, 0xce, 0xbc, 0x09, 0x63, 0x24, - 0x82, 0xc9, 0xbb, 0x9a, 0x00, 0x80, 0xea, 0xcb, 0x9a, 0x08, 0x98, 0x99, 0x29, 0x64, 0x33, 0xa0, - 0xcf, 0xcb, 0x99, 0x11, 0x12, 0x00, 0x09, 0x31, 0x45, 0x12, 0xb8, 0xcc, 0x89, 0x52, 0x43, 0x12, - 0x08, 0x08, 0x88, 0xb9, 0xcf, 0xab, 0x29, 0x54, 0x24, 0x80, 0xba, 0xbb, 0x08, 0x23, 0x82, 0xda, - 0xbb, 0x28, 0x34, 0x23, 0x21, 0x64, 0x45, 0x23, 0x90, 0xdc, 0xab, 0x09, 0x22, 0x13, 0x80, 0x19, - 0x62, 0x34, 0x82, 0xda, 0xac, 0x19, 0x53, 0x33, 0x11, 0x98, 0x08, 0x80, 0xc9, 0xce, 0x9b, 0x38, - 0x46, 0x22, 0xa8, 0xdb, 0x9a, 0x08, 0x01, 0xc8, 0xcc, 0xaa, 0x09, 0x01, 0x88, 0x8a, 0x30, 0x36, - 0x04, 0xe9, 0xcc, 0xab, 0x08, 0x21, 0x02, 0x88, 0x18, 0x45, 0x43, 0x91, 0xcb, 0xab, 0x38, 0x55, - 0x22, 0x81, 0x89, 0x88, 0x88, 0xda, 0xcc, 0x9a, 0x51, 0x34, 0x12, 0xb8, 0xbc, 0x0a, 0x31, 0x13, - 0xd8, 0xbc, 0x8a, 0x41, 0x24, 0x12, 0x10, 0x44, 0x35, 0x02, 0xc9, 0xbd, 0x9b, 0x20, 0x23, 0x82, - 0x89, 0x40, 0x46, 0x22, 0xa0, 0xcc, 0x9a, 0x30, 0x45, 0x12, 0x90, 0x98, 0x80, 0x88, 0xea, 0xcb, - 0x89, 0x53, 0x34, 0x82, 0xda, 0xab, 0x89, 0x11, 0x90, 0xdd, 0xcb, 0x89, 0x10, 0x01, 0x90, 0x89, - 0x41, 0x43, 0x90, 0xde, 0xcb, 0x8a, 0x10, 0x11, 0x90, 0x88, 0x52, 0x35, 0x23, 0xb9, 0xbd, 0x8b, - 0x52, 0x34, 0x12, 0x98, 0x99, 0x88, 0x99, 0xcd, 0xac, 0x18, 0x54, 0x14, 0x81, 0xba, 0x9b, 0x20, - 0x33, 0xa2, 0xde, 0xaa, 0x18, 0x34, 0x33, 0x01, 0x21, 0x45, 0x33, 0x91, 0xdd, 0xbb, 0x09, 0x21, - 0x03, 0x88, 0x29, 0x65, 0x34, 0x01, 0xc9, 0xac, 0x09, 0x53, 0x33, 0x01, 0x99, 0x9a, 0x88, 0xb8, - 0xdc, 0xab, 0x30, 0x47, 0x12, 0xa8, 0xbc, 0x9b, 0x20, 0x02, 0xfa, 0xcc, 0x9b, 0x09, 0x22, 0x01, - 0x88, 0x08, 0x42, 0x12, 0xfb, 0xbd, 0xac, 0x88, 0x11, 0x81, 0x98, 0x30, 0x46, 0x24, 0x81, 0xca, - 0x9c, 0x18, 0x34, 0x24, 0x80, 0xa9, 0x99, 0x89, 0xb9, 0xcc, 0x0a, 0x52, 0x35, 0x03, 0xb9, 0xbc, - 0x18, 0x53, 0x12, 0xca, 0xbe, 0x99, 0x31, 0x35, 0x22, 0x10, 0x22, 0x43, 0x02, 0xd9, 0xbd, 0x9b, - 0x10, 0x12, 0x91, 0x89, 0x72, 0x45, 0x23, 0x90, 0xdb, 0xaa, 0x30, 0x35, 0x23, 0x90, 0xb9, 0x9a, - 0x99, 0xca, 0xac, 0x1a, 0x45, 0x24, 0x81, 0xbc, 0xac, 0x08, 0x22, 0xc0, 0xed, 0xbb, 0x9a, 0x20, - 0x23, 0x01, 0x80, 0x18, 0x12, 0xc9, 0xdf, 0xbb, 0x8a, 0x18, 0x00, 0x99, 0x19, 0x74, 0x34, 0x23, - 0xa8, 0xbd, 0x8a, 0x41, 0x34, 0x13, 0x98, 0xab, 0x9b, 0xba, 0xdb, 0x9a, 0x50, 0x35, 0x24, 0x98, - 0xca, 0x89, 0x52, 0x23, 0xb0, 0xdd, 0xab, 0x19, 0x53, 0x33, 0x23, 0x21, 0x22, 0x12, 0xc8, 0xcd, - 0xab, 0x09, 0x11, 0x80, 0x9a, 0x50, 0x47, 0x34, 0x02, 0xb9, 0xac, 0x09, 0x52, 0x24, 0x02, 0x99, - 0xaa, 0xaa, 0xab, 0xac, 0x09, 0x63, 0x34, 0x01, 0xdb, 0xbb, 0x0a, 0x32, 0x02, 0xee, 0xcc, 0xab, - 0x88, 0x21, 0x23, 0x11, 0x00, 0x00, 0xb9, 0xde, 0xbb, 0x9c, 0x09, 0x80, 0xa8, 0x8a, 0x62, 0x55, - 0x32, 0x81, 0xba, 0x9c, 0x18, 0x44, 0x23, 0x81, 0xa9, 0xbc, 0xba, 0xbb, 0x8a, 0x51, 0x45, 0x23, - 0x90, 0xbb, 0x8b, 0x62, 0x34, 0x83, 0xeb, 0xbc, 0x9b, 0x31, 0x44, 0x43, 0x22, 0x21, 0x00, 0xa8, - 0xcc, 0xaa, 0x89, 0x10, 0xa0, 0xba, 0x19, 0x67, 0x44, 0x22, 0x80, 0xba, 0x9a, 0x31, 0x36, 0x13, - 0x81, 0xb9, 0xcc, 0xab, 0xbb, 0x19, 0x53, 0x25, 0x02, 0xda, 0xbb, 0x8a, 0x31, 0x14, 0xd9, 0xbf, - 0xbc, 0x9a, 0x00, 0x32, 0x32, 0x13, 0x81, 0xb9, 0xcf, 0xbb, 0xaa, 0x08, 0x80, 0xca, 0xbb, 0x39, - 0x67, 0x33, 0x12, 0xa8, 0xba, 0x0a, 0x52, 0x34, 0x11, 0x90, 0xca, 0xcc, 0xba, 0x9b, 0x30, 0x46, - 0x23, 0x81, 0xbb, 0xab, 0x51, 0x35, 0x23, 0xb9, 0xbf, 0xab, 0x09, 0x43, 0x34, 0x34, 0x33, 0x01, - 0xb8, 0xcc, 0xab, 0x09, 0x12, 0x91, 0xeb, 0x9b, 0x52, 0x45, 0x24, 0x01, 0x98, 0x8a, 0x28, 0x43, - 0x33, 0x11, 0x98, 0xcc, 0xcc, 0xbb, 0x8b, 0x51, 0x44, 0x02, 0xb9, 0xcc, 0x8a, 0x20, 0x32, 0xa0, - 0xed, 0xbc, 0xaa, 0x89, 0x20, 0x32, 0x34, 0x13, 0xa0, 0xcd, 0xbd, 0x9a, 0x18, 0x01, 0xb8, 0xbc, - 0x8b, 0x63, 0x35, 0x23, 0x80, 0xaa, 0x09, 0x41, 0x43, 0x02, 0x00, 0xb9, 0xdc, 0xbd, 0xbb, 0x19, - 0x45, 0x25, 0x01, 0xb9, 0xbb, 0x28, 0x45, 0x23, 0x91, 0xeb, 0xab, 0x8a, 0x11, 0x53, 0x53, 0x43, - 0x12, 0x90, 0xdb, 0xab, 0x0a, 0x31, 0x12, 0xca, 0xbc, 0x19, 0x55, 0x24, 0x12, 0x90, 0x89, 0x20, - 0x43, 0x13, 0x01, 0x80, 0xa9, 0xce, 0xbd, 0xab, 0x28, 0x45, 0x14, 0xa0, 0xdb, 0x9b, 0x18, 0x33, - 0x12, 0xeb, 0xbd, 0xbb, 0x9a, 0x18, 0x20, 0x44, 0x43, 0x02, 0xca, 0xcd, 0xaa, 0x19, 0x11, 0x81, - 0xda, 0xab, 0x28, 0x45, 0x23, 0x82, 0x99, 0x09, 0x32, 0x25, 0x82, 0x98, 0x99, 0xca, 0xdd, 0xbc, - 0x9a, 0x41, 0x36, 0x13, 0xa8, 0xbc, 0x0a, 0x52, 0x34, 0x02, 0xc9, 0xbb, 0x9b, 0x00, 0x32, 0x44, - 0x45, 0x33, 0x02, 0xca, 0xbd, 0x9a, 0x10, 0xa3, 0x02, 0x01, 0x0d, 0x7d, 0x0b, 0x02, 0xe3, 0x00, - 0xe1, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x4f, 0x77, 0x0b, 0x13, 0xa8, 0x51, - 0x82, 0x8b, 0x26, 0xb8, 0x38, 0x47, 0xc9, 0x11, 0xa0, 0x1a, 0x03, 0xbb, 0x61, 0xf8, 0x18, 0x18, - 0x06, 0xbd, 0x41, 0x13, 0xfb, 0x0a, 0x22, 0xa0, 0xad, 0xab, 0x55, 0xc9, 0x28, 0x04, 0xaa, 0x28, - 0x92, 0x28, 0x88, 0xbb, 0x76, 0xb0, 0x1b, 0x24, 0xa8, 0x9b, 0x21, 0x23, 0xbc, 0x40, 0xa2, 0xbf, - 0xbb, 0x41, 0x91, 0x18, 0x45, 0x04, 0xcb, 0x50, 0x23, 0x90, 0x08, 0xa9, 0xca, 0xce, 0x9a, 0x88, - 0xa9, 0x29, 0x54, 0x81, 0x89, 0x31, 0x12, 0x32, 0x33, 0xc8, 0xcf, 0x8a, 0x42, 0x14, 0x80, 0x20, - 0x02, 0xcb, 0x89, 0x80, 0x9a, 0x18, 0x43, 0x84, 0xcd, 0x8a, 0x21, 0x22, 0x47, 0x13, 0xb9, 0x9a, - 0x52, 0x35, 0x90, 0xaa, 0xa9, 0xfc, 0xab, 0xaa, 0x9a, 0x09, 0x20, 0x43, 0x90, 0x8b, 0x33, 0x02, - 0x73, 0x16, 0xc9, 0xbb, 0x19, 0x45, 0x12, 0x08, 0x31, 0x92, 0xaa, 0x98, 0x88, 0x20, 0x22, 0x45, - 0xa1, 0xbf, 0x18, 0x01, 0x51, 0x36, 0x82, 0xab, 0x8a, 0x64, 0x13, 0xb9, 0x8a, 0xd9, 0xbd, 0xcb, - 0xaa, 0x89, 0x08, 0x30, 0x13, 0xb8, 0x28, 0x13, 0x30, 0x77, 0x81, 0xca, 0x9b, 0x48, 0x34, 0x82, - 0x10, 0x24, 0x98, 0x99, 0xa9, 0x18, 0x23, 0x21, 0x36, 0xe9, 0x8b, 0x00, 0x19, 0x76, 0x12, 0x90, - 0xa9, 0x28, 0x45, 0x91, 0x9a, 0xa8, 0xec, 0xbb, 0xcb, 0xaa, 0x88, 0x80, 0x32, 0x83, 0x8a, 0x33, - 0xa0, 0x72, 0x27, 0xa8, 0xab, 0x9b, 0x73, 0x13, 0x80, 0x52, 0x81, 0x89, 0x80, 0xaa, 0x30, 0x83, - 0x40, 0x05, 0xbc, 0x19, 0xa1, 0x5b, 0x57, 0x81, 0x89, 0x90, 0x30, 0x34, 0xb9, 0x09, 0xd8, 0xbf, - 0x9a, 0xcb, 0x8b, 0x80, 0x18, 0x42, 0xa0, 0x18, 0x04, 0x8a, 0x74, 0x82, 0xaa, 0x99, 0x0a, 0x45, - 0x01, 0x18, 0x26, 0xa8, 0x19, 0x91, 0x8b, 0x22, 0x80, 0x61, 0xb2, 0x9d, 0x21, 0xc9, 0x78, 0x24, - 0x98, 0x08, 0x80, 0x42, 0x83, 0xbb, 0x30, 0xfa, 0xbf, 0x98, 0xbb, 0x0a, 0x90, 0x10, 0x14, 0xa9, - 0x51, 0x91, 0x1a, 0x37, 0xb1, 0xab, 0x80, 0x28, 0x26, 0x90, 0x61, 0x04, 0xaa, 0x20, 0xa1, 0x0b, - 0x13, 0x09, 0x34, 0xf8, 0x1b, 0x12, 0xac, 0x73, 0x85, 0x98, 0x18, 0x10, 0x32, 0xc1, 0x8b, 0x14, - 0xed, 0x9b, 0x98, 0xbb, 0x09, 0x80, 0x30, 0x83, 0x9b, 0x46, 0xb0, 0x49, 0x26, 0xb9, 0x8b, 0x10, - 0x40, 0x02, 0x8a, 0x75, 0x81, 0x9a, 0x11, 0xa0, 0x19, 0x01, 0x18, 0x04, 0xcc, 0x39, 0xa3, 0x8d, - 0x56, 0x91, 0x8a, 0x11, 0x21, 0x13, 0xea, 0x29, 0x93, 0xdf, 0x89, 0xa8, 0x9a, 0x08, 0x88, 0x31, - 0xa0, 0x2a, 0x17, 0xb8, 0x61, 0x03, 0xdb, 0x09, 0x11, 0x32, 0xa0, 0x2b, 0x67, 0xa0, 0x89, 0x11, - 0x98, 0x18, 0x80, 0x20, 0xa2, 0x9f, 0x30, 0xa0, 0x3b, 0x57, 0xa0, 0x0a, 0x31, 0x23, 0x92, 0xae, - 0x30, 0xc2, 0xcf, 0x88, 0xa8, 0x8a, 0x88, 0x18, 0x21, 0xb9, 0x50, 0x03, 0x9a, 0x55, 0x92, 0xad, - 0x18, 0x22, 0x13, 0xbb, 0x79, 0x25, 0xa9, 0x1a, 0x02, 0x98, 0x18, 0x08, 0x22, 0xf8, 0x0b, 0x23, - 0xb9, 0x78, 0x16, 0xa9, 0x09, 0x43, 0x23, 0xc9, 0x9b, 0x42, 0xe8, 0xad, 0x88, 0xa9, 0x99, 0x08, - 0x10, 0x81, 0x9a, 0x73, 0x81, 0x19, 0x45, 0xb8, 0xac, 0x30, 0x53, 0x91, 0xab, 0x72, 0x03, 0xaa, - 0x29, 0x02, 0x89, 0x80, 0x20, 0x83, 0xdd, 0x29, 0x03, 0x9a, 0x75, 0x82, 0xba, 0x28, 0x45, 0x02, - 0xda, 0x09, 0x12, 0xeb, 0x9c, 0x88, 0xa9, 0x89, 0x09, 0x21, 0xa8, 0x1a, 0x45, 0x90, 0x40, 0x14, - 0xea, 0x9a, 0x32, 0x25, 0xb0, 0x8b, 0x45, 0x92, 0x9a, 0x28, 0x01, 0x80, 0x98, 0x32, 0xc1, 0xae, - 0x21, 0x92, 0x39, 0x57, 0x90, 0xab, 0x40, 0x45, 0x91, 0xcb, 0x28, 0x81, 0xbd, 0xab, 0x99, 0x99, - 0xaa, 0x29, 0x03, 0xdb, 0x40, 0x04, 0x08, 0x44, 0x92, 0xbd, 0x8a, 0x54, 0x14, 0xba, 0x19, 0x25, - 0xa1, 0x99, 0x10, 0x11, 0x91, 0x89, 0x24, 0xf9, 0x8a, 0x13, 0x88, 0x71, 0x13, 0xaa, 0x9b, 0x71, - 0x26, 0xb0, 0xab, 0x21, 0xb8, 0xbd, 0xab, 0x9a, 0x90, 0xbb, 0x30, 0xa2, 0x9f, 0x52, 0x81, 0x20, - 0x25, 0xb9, 0xbc, 0x19, 0x47, 0x83, 0xbb, 0x48, 0x13, 0x98, 0x98, 0x00, 0x42, 0xa0, 0x2a, 0x04, - 0xcd, 0x29, 0x02, 0x19, 0x46, 0x91, 0xaa, 0x89, 0x74, 0x14, 0xc8, 0x8a, 0x01, 0xc9, 0xaa, 0xba, - 0x0a, 0x90, 0x9c, 0x31, 0xd8, 0x0a, 0x15, 0x80, 0x52, 0x83, 0xdb, 0x9a, 0x20, 0x47, 0x91, 0x9b, - 0x32, 0x82, 0x09, 0x88, 0x19, 0x25, 0xa8, 0x28, 0xc3, 0xaf, 0x21, 0x91, 0x58, 0x25, 0xa9, 0x9a, - 0x18, 0x56, 0x03, 0xcb, 0x1a, 0x90, 0xbb, 0xba, 0xbd, 0x18, 0xa0, 0x8c, 0x12, 0xdb, 0x28, 0x14, - 0x09, 0x46, 0xa0, 0xbb, 0x98, 0x61, 0x26, 0xa8, 0x0a, 0x22, 0x90, 0x28, 0x98, 0x3a, 0x26, 0xa9, - 0x30, 0xe8, 0x8c, 0x22, 0x98, 0x72, 0x03, 0xca, 0x88, 0x20, 0x46, 0x92, 0xac, 0x18, 0xa9, 0x9c, - 0xa8, 0xac, 0x28, 0xa8, 0x1a, 0x91, 0xae, 0x41, 0x81, 0x49, 0x26, 0xb9, 0x9c, 0x00, 0x62, 0x23, - 0xba, 0x28, 0x83, 0x99, 0x32, 0xc9, 0x58, 0x14, 0x99, 0x01, 0xfb, 0x19, 0x02, 0x1a, 0x56, 0x91, - 0xab, 0x18, 0x41, 0x35, 0xb0, 0x9c, 0x80, 0xdb, 0x0a, 0xb9, 0x9c, 0x20, 0xa8, 0x19, 0xc8, 0x8d, - 0x23, 0x90, 0x71, 0x05, 0xca, 0x89, 0x10, 0x63, 0x82, 0xa9, 0x21, 0x90, 0x0a, 0x14, 0xa9, 0x50, - 0x03, 0x09, 0xa0, 0xaf, 0x38, 0x91, 0x48, 0x37, 0xc0, 0x9a, 0x10, 0x43, 0x14, 0xb9, 0x8a, 0xb8, - 0xbf, 0x08, 0xb9, 0x8c, 0x11, 0x98, 0x80, 0xeb, 0x19, 0x13, 0x0a, 0x66, 0x91, 0xcb, 0x19, 0x31, - 0x34, 0x91, 0x0a, 0x13, 0xcb, 0x49, 0x13, 0x9b, 0x62, 0x02, 0x08, 0xda, 0x9b, 0x22, 0xa0, 0x72, - 0x27, 0xba, 0x8a, 0x22, 0x44, 0x81, 0xaa, 0x08, 0xfb, 0xab, 0x00, 0xba, 0x0b, 0x11, 0x00, 0xc9, - 0xae, 0x20, 0x92, 0x49, 0x37, 0xc0, 0x9c, 0x18, 0x33, 0x14, 0x98, 0x30, 0x91, 0x9e, 0x30, 0x83, - 0x8a, 0x42, 0x13, 0xb1, 0xce, 0x19, 0x01, 0x09, 0x57, 0x82, 0xbb, 0x0a, 0x53, 0x23, 0xa8, 0x89, - 0xa0, 0xef, 0x89, 0x80, 0x99, 0x09, 0x10, 0x81, 0xda, 0x8b, 0x12, 0x98, 0x71, 0x15, 0xc9, 0x9b, - 0x30, 0x25, 0x01, 0x09, 0x33, 0xd9, 0x9b, 0x33, 0x82, 0x09, 0x42, 0x24, 0xd8, 0xad, 0x20, 0x80, - 0x49, 0x27, 0xa1, 0xbb, 0x18, 0x45, 0x82, 0xa9, 0x10, 0xd8, 0xae, 0x09, 0x88, 0x99, 0x88, 0x31, - 0x91, 0xbf, 0x08, 0x82, 0x89, 0x55, 0x82, 0xbc, 0x9a, 0x62, 0x13, 0xa0, 0x30, 0x04, 0xdb, 0x09, - 0x22, 0x81, 0x80, 0x31, 0x25, 0xfa, 0x0b, 0x11, 0x99, 0x72, 0x13, 0xb8, 0xbb, 0x40, 0x26, 0xa1, - 0x8a, 0x12, 0xfb, 0xac, 0x08, 0x90, 0x88, 0x89, 0x42, 0xb0, 0xae, 0x20, 0x98, 0x39, 0x36, 0xb0, - 0xbc, 0x0a, 0x55, 0x02, 0x99, 0x42, 0x92, 0xad, 0x18, 0x11, 0x11, 0x88, 0x40, 0x04, 0xdc, 0x19, - 0x81, 0x09, 0x45, 0x82, 0xaa, 0x9a, 0x61, 0x14, 0xb8, 0x2a, 0x83, 0xde, 0x9a, 0x80, 0x08, 0x90, - 0x09, 0x33, 0xf8, 0x9b, 0x11, 0xb8, 0x61, 0x13, 0xba, 0xac, 0x29, 0x47, 0x91, 0x0a, 0x34, 0xb0, - 0xac, 0x10, 0x11, 0x12, 0x98, 0x71, 0xa2, 0xbc, 0x38, 0x90, 0x39, 0x47, 0x90, 0x9a, 0x89, 0x63, - 0x03, 0xcb, 0x20, 0xa2, 0xcf, 0x89, 0x08, 0x00, 0x88, 0x19, 0x14, 0xdb, 0x0a, 0x01, 0x8b, 0x73, - 0x92, 0xba, 0x9a, 0x40, 0x27, 0xa0, 0x29, 0x15, 0xc8, 0x8a, 0x10, 0x20, 0x02, 0x99, 0x44, 0xb0, - 0x9e, 0x11, 0x98, 0x60, 0x14, 0xa9, 0x89, 0x08, 0x54, 0x91, 0x9c, 0x31, 0xc8, 0xae, 0x88, 0x88, - 0x11, 0x98, 0x28, 0x84, 0xcc, 0x19, 0xa1, 0x1a, 0x36, 0xb8, 0xab, 0x89, 0x72, 0x15, 0xa9, 0x40, - 0x03, 0xca, 0x0a, 0x00, 0x31, 0x82, 0x09, 0x35, 0xe9, 0x0b, 0x11, 0x8a, 0x55, 0x83, 0xaa, 0x89, - 0x30, 0x36, 0xc8, 0x8b, 0x24, 0xfa, 0x9b, 0x89, 0x08, 0x12, 0x99, 0x31, 0xb2, 0xaf, 0x00, 0xb8, - 0x58, 0x14, 0xca, 0x8a, 0x18, 0x73, 0x02, 0x9a, 0x62, 0x92, 0xab, 0x09, 0x08, 0x43, 0x92, 0x19, - 0x05, 0xda, 0x19, 0x81, 0x3a, 0x47, 0x90, 0x9a, 0x00, 0x41, 0x23, 0xcc, 0x2a, 0x83, 0xdd, 0x9b, - 0x98, 0x28, 0x02, 0x98, 0x32, 0xd8, 0x9c, 0x81, 0xab, 0x72, 0x93, 0xbc, 0x89, 0x31, 0x36, 0x91, - 0x1b, 0x37, 0xa0, 0xab, 0x88, 0x18, 0x44, 0x80, 0x28, 0x81, 0xad, 0x10, 0xa8, 0x71, 0x16, 0xa8, - 0x89, 0x10, 0x43, 0x91, 0xbc, 0x30, 0xc1, 0xbe, 0x9b, 0x9a, 0x31, 0x03, 0x88, 0x13, 0xcc, 0x0b, - 0xc8, 0x0b, 0x37, 0xc0, 0xac, 0x00, 0x43, 0x23, 0xb8, 0x50, 0x15, 0xa8, 0x9b, 0x99, 0x30, 0x26, - 0x00, 0x00, 0xb0, 0x8a, 0x91, 0x0b, 0x77, 0x84, 0xa9, 0x19, 0x31, 0x33, 0xd9, 0x9b, 0x12, 0xf9, - 0xac, 0xaa, 0x89, 0x32, 0x12, 0x18, 0xa0, 0xac, 0x90, 0xcd, 0x38, 0x07, 0xc9, 0x9b, 0x21, 0x35, - 0x01, 0x8a, 0x63, 0x82, 0xa9, 0x99, 0x9b, 0x61, 0x23, 0x00, 0x90, 0xaa, 0x20, 0xd8, 0x59, 0x37, - 0xa1, 0xaa, 0x28, 0x44, 0x82, 0xcb, 0x09, 0x91, 0xdc, 0xab, 0xcb, 0x19, 0x32, 0x13, 0x81, 0xcb, - 0x19, 0xd8, 0x9d, 0x52, 0x91, 0xcc, 0x89, 0x42, 0x24, 0x98, 0x29, 0x25, 0x90, 0x89, 0xb9, 0x8b, - 0x63, 0x22, 0x02, 0xc9, 0x1a, 0x03, 0xbc, 0x72, 0x17, 0x99, 0x99, 0x21, 0x24, 0xa0, 0xac, 0x01, - 0xc8, 0xac, 0xb9, 0xbc, 0x10, 0x33, 0x33, 0xc1, 0x9c, 0x21, 0xfa, 0x1b, 0x43, 0xd8, 0xab, 0x19, - 0x54, 0x02, 0x99, 0x41, 0x03, 0x99, 0x00, 0xdb, 0x09, 0x33, 0x34, 0x82, 0xae, 0x38, 0x92, 0x8c, - 0x65, 0x82, 0xaa, 0x88, 0x42, 0x15, 0xc9, 0x0a, 0x81, 0xcb, 0x9a, 0xc9, 0xab, 0x21, 0x42, 0x24, - 0xd9, 0x0a, 0x03, 0xcc, 0x28, 0x84, 0xda, 0x9a, 0x20, 0x45, 0x91, 0x8a, 0x34, 0xa1, 0x09, 0x81, - 0xdb, 0x18, 0x23, 0x53, 0xa1, 0x9e, 0x41, 0xa0, 0x2a, 0x36, 0xa0, 0x9a, 0x18, 0x73, 0x83, 0xbc, - 0x29, 0xb1, 0xbd, 0x08, 0xca, 0x0b, 0x11, 0x52, 0x13, 0xeb, 0x18, 0x82, 0xad, 0x31, 0xa1, 0xbd, - 0x8a, 0x51, 0x25, 0xa8, 0x29, 0x24, 0xb8, 0x18, 0x92, 0xac, 0x10, 0x22, 0x27, 0xc0, 0x0c, 0x23, - 0xc8, 0x48, 0x15, 0xa9, 0x89, 0x20, 0x54, 0xa1, 0x9d, 0x10, 0xb8, 0x9d, 0x00, 0xba, 0x09, 0x11, - 0x63, 0x82, 0xbc, 0x31, 0xb1, 0x8e, 0x32, 0xd9, 0xab, 0x09, 0x63, 0x14, 0xaa, 0x40, 0x03, 0xab, - 0x30, 0xa1, 0x9c, 0x01, 0x42, 0x25, 0xea, 0x19, 0x13, 0xa9, 0x72, 0x02, 0xab, 0x88, 0x32, 0x27, - 0xc8, 0x8b, 0x11, 0xeb, 0x8a, 0x80, 0xaa, 0x08, 0x20, 0x45, 0xa1, 0x9c, 0x32, 0xd8, 0x1a, 0x03, - 0xfb, 0x8b, 0x28, 0x63, 0x82, 0xaa, 0x43, 0x92, 0x9b, 0x32, 0xc0, 0x8a, 0x10, 0x62, 0x84, 0xcb, - 0x38, 0x84, 0x0a, 0x45, 0xa1, 0xab, 0x10, 0x53, 0x14, 0xdb, 0x1a, 0x91, 0xbd, 0x1a, 0x90, 0x9b, - 0x08, 0x41, 0x26, 0xb0, 0x0c, 0x22, 0xca, 0x28, 0xa2, 0xcf, 0x89, 0x21, 0x34, 0x91, 0x0b, 0x35, - 0xb0, 0x0b, 0x14, 0xa8, 0x8a, 0x08, 0x45, 0x92, 0x9e, 0x31, 0x81, 0x39, 0x27, 0xb8, 0x8b, 0x30, - 0x54, 0x92, 0xbc, 0x19, 0xc0, 0xbd, 0x18, 0x90, 0x9a, 0x80, 0x62, 0x14, 0xb9, 0x2a, 0x82, 0xab, - 0x42, 0xf8, 0xad, 0x09, 0x42, 0x23, 0xa8, 0x39, 0x25, 0xba, 0x29, 0x13, 0xa9, 0xaa, 0x28, 0x47, - 0xb0, 0x8c, 0x33, 0x00, 0x72, 0x03, 0xda, 0x89, 0x42, 0x43, 0xa8, 0x9d, 0x00, 0xda, 0x9c, 0x00, - 0x90, 0x98, 0x18, 0x53, 0x03, 0xbb, 0x20, 0xa1, 0x1b, 0x05, 0xee, 0x9b, 0x18, 0x34, 0x03, 0x99, - 0x51, 0x82, 0xab, 0x20, 0x13, 0x99, 0xcb, 0x40, 0x25, 0xc9, 0x1a, 0x13, 0x41, 0x36, 0xa1, 0xbc, - 0x08, 0x45, 0x13, 0xda, 0x0a, 0xa0, 0xdc, 0x8a, 0x08, 0x00, 0x99, 0x28, 0x45, 0x91, 0x89, 0x00, - 0x99, 0x32, 0xe0, 0xbf, 0x9b, 0x31, 0x35, 0x91, 0x19, 0x43, 0xa0, 0x8b, 0x11, 0x23, 0xa0, 0xae, - 0x41, 0x83, 0xab, 0x21, 0x10, 0x67, 0x23, 0xc9, 0x9a, 0x28, 0x37, 0x91, 0xbb, 0x08, 0xda, 0xad, - 0x8a, 0x08, 0x01, 0xa8, 0x48, 0x25, 0x90, 0x18, 0xa8, 0x29, 0x16, 0xfb, 0xac, 0x89, 0x41, 0x14, - 0x98, 0x20, 0x03, 0xa9, 0x09, 0x00, 0x34, 0xb0, 0x9e, 0x23, 0xa1, 0x19, 0x92, 0x6a, 0x57, 0x81, - 0xaa, 0x89, 0x40, 0x25, 0xb0, 0x9b, 0x80, 0xec, 0x9a, 0x99, 0x18, 0x02, 0x9a, 0x51, 0x03, 0x18, - 0x02, 0xcc, 0x51, 0x93, 0xce, 0xaa, 0x09, 0x63, 0x82, 0x89, 0x32, 0x91, 0x9a, 0x81, 0x18, 0x44, - 0xb8, 0x0c, 0x13, 0xaa, 0x52, 0xb8, 0x78, 0x27, 0xa0, 0x9a, 0x08, 0x51, 0x13, 0xca, 0x09, 0xb0, - 0xbe, 0x8a, 0xaa, 0x30, 0x03, 0x9b, 0x44, 0x81, 0x30, 0xa4, 0x9e, 0x63, 0xa0, 0xbd, 0x8a, 0x18, - 0x25, 0x91, 0x19, 0x15, 0xa8, 0x09, 0x91, 0x18, 0x16, 0xb8, 0x19, 0xa1, 0x1a, 0x16, 0xc9, 0x71, - 0x05, 0xa8, 0x8a, 0x10, 0x42, 0x92, 0xbb, 0x10, 0xf9, 0xac, 0x88, 0x9a, 0x31, 0x82, 0x0a, 0x33, - 0x89, 0x55, 0xc0, 0x1b, 0x26, 0xd8, 0x9c, 0x89, 0x20, 0x14, 0x98, 0x48, 0x03, 0xba, 0x20, 0xa8, - 0x58, 0x14, 0xaa, 0x08, 0xb9, 0x58, 0x85, 0x9b, 0x75, 0x82, 0xaa, 0x88, 0x11, 0x43, 0xb0, 0x8c, - 0x11, 0xdd, 0x9a, 0x90, 0x9a, 0x33, 0x92, 0x19, 0x82, 0x29, 0x47, 0xc9, 0x39, 0x15, 0xeb, 0x8b, - 0x88, 0x41, 0x02, 0x8a, 0x52, 0x91, 0x9b, 0x12, 0xa8, 0x50, 0x04, 0xaa, 0x90, 0xba, 0x72, 0x92, - 0x0b, 0x57, 0x91, 0x9b, 0x18, 0x21, 0x14, 0xc9, 0x1a, 0x91, 0xbf, 0x8a, 0x98, 0x0a, 0x24, 0x80, - 0x10, 0x98, 0x58, 0x15, 0xbb, 0x60, 0x93, 0xcd, 0x8a, 0x00, 0x32, 0x91, 0x09, 0x36, 0xa8, 0x0b, - 0x02, 0x99, 0x62, 0x02, 0x9a, 0xc9, 0x8b, 0x45, 0xa0, 0x49, 0x27, 0xb0, 0x9a, 0x20, 0x42, 0x82, - 0xbc, 0x28, 0xd0, 0xae, 0x09, 0xa9, 0x18, 0x23, 0x01, 0x81, 0x9b, 0x73, 0x84, 0x9b, 0x53, 0xb1, - 0xaf, 0x8a, 0x21, 0x22, 0xa8, 0x38, 0x17, 0xb9, 0x19, 0x82, 0x89, 0x53, 0x82, 0xa8, 0xcc, 0x2a, - 0x25, 0xa8, 0x61, 0x15, 0xb9, 0x8a, 0x31, 0x24, 0xa0, 0x9d, 0x11, 0xfa, 0xab, 0x88, 0x99, 0x28, - 0x33, 0x12, 0xb8, 0x0b, 0x57, 0x91, 0x0a, 0x24, 0xe8, 0xac, 0x09, 0x22, 0x02, 0x9a, 0x62, 0x02, - 0xab, 0x18, 0x81, 0x08, 0x34, 0x13, 0xea, 0xbd, 0x30, 0x14, 0x09, 0x73, 0x83, 0xba, 0x0a, 0x63, - 0x12, 0xba, 0x1b, 0x91, 0xdf, 0x9a, 0x88, 0x89, 0x10, 0x43, 0x02, 0xca, 0x39, 0x35, 0x98, 0x38, - 0x03, 0xed, 0x9c, 0x29, 0x32, 0xa0, 0x1a, 0x35, 0xa1, 0x9b, 0x10, 0x81, 0x20, 0x53, 0x24, 0xfb, - 0x9d, 0x31, 0x01, 0x28, 0x25, 0x81, 0xbb, 0x19, 0x37, 0x92, 0xac, 0x18, 0xc0, 0xcd, 0x99, 0x89, - 0x08, 0x10, 0x44, 0x92, 0xbb, 0x50, 0x13, 0x08, 0x22, 0xb0, 0xcf, 0xab, 0x40, 0x13, 0xba, 0x40, - 0x15, 0x99, 0x0a, 0x08, 0x01, 0x01, 0x61, 0x04, 0xec, 0x0a, 0x12, 0x01, 0x32, 0x14, 0xa8, 0xaa, - 0x48, 0x27, 0xb0, 0x9b, 0x02, 0xfb, 0xbb, 0xa9, 0x89, 0x00, 0x20, 0x47, 0xa1, 0x8c, 0x31, 0x01, - 0x21, 0x03, 0xcc, 0xcb, 0x8c, 0x51, 0x81, 0xaa, 0x53, 0x81, 0x99, 0x88, 0x08, 0x21, 0x80, 0x72, - 0x95, 0xbd, 0x19, 0x12, 0x30, 0x25, 0x91, 0x89, 0x99, 0x61, 0x15, 0xca, 0x09, 0x92, 0xbd, 0x9b, - 0xba, 0x19, 0x81, 0x50, 0x36, 0xb8, 0x0b, 0x33, 0x10, 0x54, 0xa0, 0xbc, 0xaa, 0x0b, 0x54, 0xa0, - 0x0b, 0x26, 0xa0, 0x09, 0x90, 0x09, 0x23, 0x98, 0x75, 0xa1, 0xae, 0x10, 0x00, 0x51, 0x03, 0xa8, - 0x08, 0x88, 0x72, 0x82, 0xac, 0x28, 0xb8, 0xae, 0xa9, 0xaa, 0x28, 0x80, 0x61, 0x15, 0xb9, 0x29, - 0x02, 0x30, 0x27, 0xc8, 0x9b, 0x99, 0x19, 0x24, 0xd9, 0x28, 0x15, 0x9a, 0x18, 0xa8, 0x29, 0x14, - 0x89, 0x36, 0xd0, 0x9d, 0x01, 0x00, 0x54, 0x81, 0xa9, 0x10, 0x00, 0x43, 0xb1, 0x9e, 0x11, 0xda, - 0xab, 0xa8, 0x9c, 0x20, 0x80, 0x72, 0x03, 0xba, 0x20, 0x81, 0x72, 0x14, 0xcb, 0x9a, 0x88, 0x20, - 0x83, 0xbc, 0x61, 0x82, 0xaa, 0x11, 0xb8, 0x48, 0x83, 0x29, 0x27, 0xda, 0x8b, 0x00, 0x48, 0x37, - 0xa1, 0x8b, 0x11, 0x21, 0x23, 0xfa, 0x8a, 0x82, 0xcd, 0x8a, 0xa9, 0x8b, 0x12, 0x00, 0x74, 0x81, - 0x8a, 0x10, 0x08, 0x55, 0x93, 0xcc, 0x09, 0x08, 0x11, 0x90, 0x8c, 0x43, 0xb1, 0x8a, 0x03, 0xbb, - 0x52, 0x82, 0x38, 0x06, 0xeb, 0x89, 0x88, 0x71, 0x15, 0xa8, 0x89, 0x21, 0x21, 0x82, 0xcc, 0x19, - 0xb1, 0xaf, 0x89, 0xb9, 0x0a, 0x12, 0x20, 0x45, 0x91, 0x0a, 0x80, 0x38, 0x77, 0xa1, 0xbb, 0x08, - 0x01, 0x11, 0xba, 0x2a, 0x16, 0xb8, 0x19, 0x82, 0x8c, 0x42, 0x81, 0x40, 0x91, 0xbc, 0x9a, 0x8b, - 0x77, 0x05, 0xa9, 0x19, 0x21, 0x12, 0xa8, 0x9c, 0x10, 0xea, 0x9c, 0x98, 0xaa, 0x19, 0x12, 0x21, - 0x25, 0x91, 0x00, 0xb9, 0x71, 0x47, 0xb8, 0x9c, 0x18, 0x11, 0x91, 0xab, 0x40, 0x02, 0xbb, 0x30, - 0xa1, 0x0a, 0x34, 0x11, 0x22, 0xc8, 0xac, 0xeb, 0x3b, 0x77, 0x83, 0xaa, 0x29, 0x43, 0x01, 0xca, - 0x89, 0x91, 0xdc, 0x9a, 0x99, 0xaa, 0x10, 0x22, 0x33, 0x23, 0x31, 0xa2, 0xaf, 0x75, 0x04, 0xc9, - 0x9b, 0x21, 0x12, 0xb9, 0x8b, 0x43, 0xa0, 0x8c, 0x21, 0x98, 0x18, 0x32, 0x23, 0xb0, 0x8b, 0xa1, - 0xff, 0x5a, 0x27, 0x91, 0x9b, 0x38, 0x25, 0xa1, 0xab, 0x19, 0xc0, 0xbd, 0x9a, 0xa8, 0x9a, 0x10, - 0x43, 0x13, 0x10, 0x35, 0xc0, 0x1c, 0x56, 0x92, 0xda, 0x99, 0x32, 0x02, 0xbc, 0x29, 0x03, 0xb9, - 0x1a, 0x11, 0x08, 0x00, 0x61, 0x13, 0xdb, 0x38, 0xb2, 0xcf, 0x71, 0x13, 0xa0, 0x9b, 0x51, 0x24, - 0xb8, 0x8c, 0x00, 0xc9, 0x9c, 0x89, 0x99, 0x98, 0x18, 0x34, 0x92, 0x39, 0x27, 0xb9, 0x39, 0x37, - 0xa1, 0xbc, 0x0b, 0x44, 0xa2, 0xac, 0x30, 0x91, 0x9b, 0x10, 0x08, 0x11, 0x88, 0x71, 0x93, 0xbc, - 0x42, 0xc1, 0x8d, 0x54, 0x02, 0x99, 0x9a, 0x63, 0x04, 0xc9, 0x09, 0x91, 0xcb, 0x9a, 0xa8, 0x89, - 0x90, 0x28, 0x26, 0xa0, 0x58, 0x14, 0xba, 0x60, 0x13, 0xa9, 0xbc, 0x29, 0x45, 0xb0, 0x9c, 0x22, - 0xb0, 0x8a, 0x01, 0x08, 0x12, 0x99, 0x73, 0xc2, 0x8c, 0x33, 0xd8, 0x2b, 0x27, 0x81, 0x99, 0x09, - 0x64, 0x82, 0xcb, 0x18, 0xa0, 0xad, 0x89, 0x99, 0x08, 0x90, 0x38, 0x16, 0xa9, 0x61, 0x83, 0x9b, - 0x53, 0x82, 0xba, 0xbb, 0x58, 0x17, 0xb9, 0x0a, 0x13, 0xca, 0x19, 0x80, 0x28, 0x03, 0x8b, 0x36, - 0xe8, 0x1b, 0x24, 0xc9, 0x38, 0x25, 0x98, 0x98, 0x18, 0x57, 0x90, 0xab, 0x10, 0xd8, 0xab, 0x98, - 0x99, 0x10, 0x99, 0x61, 0x83, 0xab, 0x55, 0xa2, 0x09, 0x43, 0xa0, 0x9b, 0x9b, 0x71, 0x14, 0xdb, - 0x18, 0x82, 0xab, 0x18, 0x80, 0x20, 0x83, 0x2b, 0x26, 0xdc, 0x39, 0x04, 0xaa, 0x61, 0x02, 0x99, - 0x80, 0x40, 0x27, 0xc0, 0x9a, 0x01, 0xdb, 0x9a, 0x98, 0x8a, 0x11, 0x89, 0x62, 0x91, 0x1b, 0x46, - 0xa0, 0x28, 0x13, 0xba, 0x9a, 0x89, 0x65, 0x82, 0xad, 0x30, 0xb0, 0x9c, 0x01, 0x88, 0x32, 0x91, - 0x39, 0x85, 0xaf, 0x30, 0x83, 0x8a, 0x36, 0xa0, 0x09, 0x11, 0x73, 0x24, 0xda, 0x89, 0xa1, 0xbd, - 0x9a, 0xa8, 0x09, 0x02, 0x88, 0x35, 0xb8, 0x5a, 0x26, 0x88, 0x30, 0xa2, 0xac, 0x08, 0x10, 0x36, - 0xb1, 0x9d, 0x22, 0xea, 0x0a, 0x00, 0x08, 0x32, 0x90, 0x30, 0xd2, 0x9e, 0x32, 0x82, 0x38, 0x15, - 0xba, 0x39, 0x34, 0x45, 0x83, 0xbc, 0x09, 0xfa, 0xbc, 0x89, 0x99, 0x18, 0x01, 0x28, 0x13, 0xc9, - 0x71, 0x23, 0x10, 0x14, 0xc9, 0x8c, 0x20, 0x31, 0x15, 0xb9, 0x1a, 0x92, 0xcf, 0x09, 0x81, 0x18, - 0x23, 0x80, 0x11, 0xfa, 0x8a, 0x24, 0x11, 0x53, 0xa1, 0xad, 0x31, 0x44, 0x22, 0xb0, 0xab, 0xa8, - 0xef, 0x9b, 0x89, 0x89, 0x10, 0x01, 0x11, 0x81, 0x0a, 0x55, 0x22, 0x52, 0x92, 0xcc, 0x0a, 0x42, - 0x22, 0x91, 0x9a, 0x12, 0xf9, 0xac, 0x08, 0x80, 0x21, 0x22, 0x10, 0xb0, 0xae, 0x18, 0x23, 0x55, - 0x14, 0xd9, 0x8a, 0x51, 0x33, 0x81, 0xaa, 0x08, 0xfa, 0xbd, 0x9a, 0x99, 0x09, 0x11, 0x21, 0x02, - 0x9a, 0x50, 0x23, 0x54, 0x35, 0xb8, 0xbd, 0x28, 0x53, 0x12, 0x9a, 0x28, 0x92, 0xbe, 0x8b, 0x98, - 0x18, 0x22, 0x33, 0x12, 0xed, 0x0a, 0x11, 0x28, 0x67, 0x81, 0xbb, 0x09, 0x63, 0x23, 0xb8, 0x0a, - 0x01, 0xde, 0xaa, 0xa9, 0x99, 0x10, 0x10, 0x33, 0xa0, 0x0c, 0x34, 0x81, 0x75, 0x13, 0xca, 0xab, - 0x31, 0x35, 0x92, 0x9b, 0x42, 0xc1, 0xad, 0x88, 0x98, 0x10, 0x02, 0x22, 0xa3, 0xbf, 0x20, 0xa1, - 0x58, 0x37, 0xa0, 0xac, 0x18, 0x63, 0x12, 0xba, 0x29, 0xa2, 0xcf, 0x8a, 0x99, 0x09, 0x00, 0x11, - 0x23, 0xc9, 0x29, 0x15, 0x09, 0x66, 0x92, 0xca, 0x89, 0x21, 0x25, 0xb0, 0x0a, 0x24, 0xc9, 0x9b, - 0x90, 0x89, 0x21, 0x10, 0x52, 0xc0, 0x9d, 0x31, 0xa8, 0x70, 0x15, 0xb8, 0xab, 0x20, 0x45, 0x92, - 0xab, 0x30, 0xd1, 0xbd, 0x89, 0x99, 0x19, 0x01, 0x30, 0x14, 0xcb, 0x58, 0x82, 0x19, 0x47, 0xa1, - 0xac, 0x09, 0x42, 0x23, 0xc9, 0x29, 0x14, 0xdb, 0x89, 0x90, 0x09, 0x11, 0x00, 0x43, 0xe9, 0x0b, - 0x13, 0xaa, 0x73, 0x07, 0xaa, 0x89, 0x20, 0x34, 0xb1, 0x9c, 0x32, 0xe9, 0xab, 0x98, 0xa9, 0x10, - 0x01, 0x51, 0x92, 0x9c, 0x51, 0xa1, 0x38, 0x47, 0xb8, 0xab, 0x18, 0x63, 0x02, 0xba, 0x40, 0x93, - 0xbc, 0x09, 0xa8, 0x19, 0x02, 0x30, 0x15, 0xec, 0x19, 0x02, 0x8a, 0x56, 0x92, 0xbb, 0x89, 0x42, - 0x25, 0xb9, 0x0b, 0x23, 0xec, 0x8b, 0x98, 0x99, 0x11, 0x00, 0x43, 0xb1, 0x8c, 0x34, 0xa8, 0x70, - 0x15, 0xc9, 0x9a, 0x10, 0x44, 0x91, 0x9a, 0x32, 0xb2, 0xae, 0x08, 0x99, 0x10, 0x00, 0x31, 0x93, - 0xcf, 0x20, 0x91, 0x29, 0x47, 0xa1, 0xbb, 0x09, 0x44, 0x13, 0xda, 0x19, 0x82, 0xcd, 0x99, 0x98, - 0x88, 0x01, 0x11, 0x24, 0xb9, 0x2b, 0x15, 0x89, 0x74, 0x03, 0xbc, 0x9a, 0x41, 0x34, 0xa0, 0x0b, - 0x34, 0xc9, 0xab, 0x88, 0x99, 0x20, 0x10, 0x42, 0xd1, 0x9d, 0x30, 0x90, 0x78, 0x25, 0xb8, 0xbb, - 0x20, 0x45, 0x81, 0xbb, 0x20, 0xb0, 0xbf, 0x8a, 0x99, 0x19, 0x11, 0x41, 0x03, 0xbb, 0x49, 0x04, - 0x29, 0x57, 0x91, 0xcb, 0x0a, 0x52, 0x23, 0xa9, 0x29, 0x13, 0xea, 0x9a, 0x99, 0x88, 0x10, 0x20, - 0x23, 0xfa, 0x8c, 0x12, 0x08, 0x64, 0x04, 0xb9, 0xab, 0x41, 0x25, 0xa1, 0x9c, 0x10, 0xc9, 0xbc, - 0xa9, 0x89, 0x18, 0x21, 0x53, 0x92, 0xab, 0x32, 0x82, 0x72, 0x27, 0xa8, 0xac, 0x19, 0x63, 0x12, - 0x9a, 0x20, 0x82, 0xdb, 0x9a, 0x99, 0x08, 0x00, 0x32, 0x83, 0xce, 0x09, 0x01, 0x41, 0x37, 0x83, - 0xcb, 0x9b, 0x62, 0x14, 0xa9, 0x8a, 0x80, 0xeb, 0xab, 0x9b, 0x09, 0x00, 0x32, 0x26, 0x98, 0x0a, - 0x02, 0x20, 0x57, 0x02, 0xb9, 0xbc, 0x38, 0x37, 0x81, 0x09, 0x11, 0xa0, 0xbb, 0xad, 0x8a, 0x80, - 0x08, 0x34, 0xc0, 0xac, 0x10, 0x08, 0x75, 0x23, 0x91, 0xca, 0x8a, 0x54, 0x02, 0xaa, 0x88, 0xca, - 0xcb, 0xcb, 0xab, 0x00, 0x10, 0x62, 0x03, 0xa9, 0x11, 0x90, 0x70, 0x25, 0x91, 0xaa, 0xac, 0x61, - 0x33, 0x88, 0x20, 0x91, 0xaa, 0xba, 0xbf, 0x09, 0x80, 0x29, 0x15, 0xca, 0x1a, 0x90, 0x4a, 0x57, - 0x01, 0x88, 0xa9, 0x19, 0x35, 0xa0, 0x89, 0xa0, 0xbf, 0xa9, 0xda, 0x9a, 0x01, 0x10, 0x53, 0x91, - 0x09, 0x12, 0x9b, 0x75, 0x03, 0x99, 0xa9, 0x8a, 0x64, 0x02, 0x18, 0x22, 0xc8, 0x8a, 0xc0, 0xad, - 0x00, 0x98, 0x30, 0x93, 0xae, 0x11, 0xb8, 0x78, 0x26, 0x90, 0x88, 0x98, 0x20, 0x15, 0xaa, 0x10, - 0xe8, 0xac, 0x89, 0xdb, 0x09, 0x00, 0x20, 0x24, 0xa8, 0x38, 0xa3, 0x0d, 0x47, 0x91, 0x9a, 0x90, - 0x18, 0x35, 0x91, 0x40, 0x04, 0xcb, 0x08, 0xc0, 0xab, 0x00, 0x98, 0x32, 0xe1, 0x8b, 0x23, 0xbc, - 0x73, 0x17, 0x99, 0x80, 0x80, 0x21, 0x91, 0x8b, 0x23, 0xfc, 0x8d, 0x90, 0xaa, 0x08, 0x81, 0x31, - 0x04, 0x9a, 0x52, 0xb0, 0x3b, 0x47, 0xb0, 0x8a, 0x81, 0x21, 0x15, 0x89, 0x72, 0x92, 0xbb, 0x10, - 0xc8, 0x9b, 0x80, 0x88, 0x13, 0xfb, 0x29, 0x83, 0x9c, 0x66, 0x82, 0x9a, 0x10, 0x00, 0x12, 0xc9, - 0x2a, 0x04, 0xde, 0x0a, 0x90, 0xaa, 0x18, 0x10, 0x41, 0x92, 0x1b, 0x34, 0xd9, 0x58, 0x15, 0xaa, - 0x0a, 0x11, 0x32, 0x82, 0x1b, 0x67, 0xa0, 0x9b, 0x11, 0xc9, 0x0a, 0x88, 0x18, 0x81, 0xbd, 0x50, - 0xa1, 0x1a, 0x57, 0x91, 0x8a, 0x10, 0x12, 0x81, 0xcc, 0x30, 0xb2, 0xcf, 0x09, 0x90, 0x9a, 0x10, - 0x10, 0x33, 0xb8, 0x49, 0x15, 0xbb, 0x73, 0x84, 0xbb, 0x18, 0x32, 0x23, 0xc8, 0x48, 0x27, 0xc8, - 0x8a, 0x01, 0xb9, 0x89, 0x88, 0x10, 0xc8, 0x8d, 0x32, 0xc0, 0x68, 0x25, 0xa8, 0x8a, 0x32, 0x23, - 0xc8, 0x9e, 0x31, 0xc0, 0xae, 0x08, 0x98, 0x99, 0x10, 0x21, 0x13, 0xaa, 0x71, 0x82, 0x8b, 0x55, - 0xa1, 0xac, 0x10, 0x34, 0x01, 0xab, 0x71, 0x13, 0xca, 0x0a, 0x01, 0xba, 0x99, 0x08, 0x01, 0xdc, - 0x1a, 0x14, 0x99, 0x72, 0x15, 0xaa, 0x09, 0x53, 0x02, 0xda, 0x0a, 0x22, 0xea, 0x9c, 0x80, 0x90, - 0x89, 0x10, 0x32, 0x91, 0x0a, 0x45, 0xa0, 0x29, 0x27, 0xc8, 0xab, 0x41, 0x34, 0xa0, 0x8b, 0x54, - 0x82, 0xbb, 0x19, 0x81, 0xba, 0x9b, 0x10, 0xc0, 0xbe, 0x30, 0x83, 0x1a, 0x67, 0x01, 0xab, 0x28, - 0x45, 0x91, 0xdb, 0x19, 0x02, 0xdb, 0x9b, 0x08, 0x88, 0x89, 0x30, 0x24, 0xb8, 0x38, 0x16, 0x98, - 0x51, 0x03, 0xfb, 0x8b, 0x62, 0x23, 0xb9, 0x1a, 0x36, 0x90, 0xab, 0x08, 0x81, 0xb9, 0x8c, 0x10, - 0xe9, 0x9b, 0x32, 0x80, 0x60, 0x25, 0x90, 0x9c, 0x48, 0x35, 0xb0, 0xad, 0x20, 0x90, 0xcc, 0x9a, - 0x00, 0x08, 0x89, 0x41, 0x83, 0xaa, 0x62, 0x82, 0x08, 0x34, 0xb1, 0xce, 0x0a, 0x45, 0x03, 0xba, - 0x48, 0x14, 0x98, 0x9a, 0x88, 0x01, 0xca, 0x8a, 0x01, 0xce, 0x09, 0x12, 0x08, 0x54, 0x03, 0xa9, - 0x9b, 0x72, 0x26, 0xb9, 0x9c, 0x11, 0xb8, 0xbb, 0xab, 0x18, 0x82, 0x0a, 0x64, 0xa1, 0x0a, 0x34, - 0x90, 0x50, 0x03, 0xda, 0xbb, 0x3a, 0x77, 0x81, 0x9a, 0x21, 0x02, 0x98, 0xa9, 0x09, 0x11, 0xdb, - 0x09, 0xb1, 0xaf, 0x28, 0x81, 0x30, 0x27, 0x91, 0xa9, 0x09, 0x74, 0x13, 0xeb, 0x89, 0x81, 0xa9, - 0xaa, 0x9b, 0x20, 0x92, 0x19, 0x35, 0xc8, 0x39, 0x14, 0x88, 0x54, 0x91, 0xad, 0x9a, 0x40, 0x37, - 0xa0, 0x8a, 0x33, 0x91, 0x88, 0xb9, 0x0a, 0x04, 0xcc, 0x08, 0xd8, 0xac, 0x22, 0x88, 0x72, 0x23, - 0xa9, 0x8a, 0x18, 0x57, 0x92, 0xcb, 0x09, 0xa0, 0xaa, 0xb9, 0x9c, 0x31, 0x92, 0x39, 0x15, 0xca, - 0x41, 0x82, 0x29, 0x27, 0xc8, 0xab, 0x89, 0x72, 0x24, 0xa8, 0x19, 0x13, 0x98, 0x01, 0xca, 0x2a, - 0x83, 0xbd, 0x08, 0xfb, 0x8b, 0x12, 0x88, 0x56, 0x82, 0xaa, 0x80, 0x31, 0x46, 0xb1, 0xac, 0x08, - 0xba, 0x8b, 0xb9, 0x8e, 0x22, 0x81, 0x38, 0x93, 0x9c, 0x63, 0x90, 0x50, 0x14, 0xeb, 0x8a, 0x00, - 0x52, 0x04, 0x99, 0x20, 0x81, 0x09, 0x02, 0xcb, 0x28, 0x92, 0xad, 0x98, 0xce, 0x08, 0x82, 0x39, - 0x47, 0x90, 0x9a, 0x10, 0x41, 0x24, 0xc8, 0xab, 0xa0, 0xcc, 0x08, 0xb9, 0x8b, 0x34, 0x00, 0x30, - 0xb0, 0x2b, 0x26, 0x99, 0x65, 0x92, 0xbd, 0x09, 0x20, 0x44, 0x02, 0x8a, 0x22, 0xa8, 0x38, 0x83, - 0xbe, 0x30, 0x91, 0xac, 0xda, 0xad, 0x20, 0x88, 0x70, 0x15, 0xb8, 0x89, 0x21, 0x42, 0x03, 0xcb, - 0x9a, 0xe9, 0xab, 0x18, 0xca, 0x1a, 0x24, 0x10, 0x00, 0xa9, 0x58, 0x02, 0x2a, 0x67, 0xb0, 0xac, - 0x18, 0x31, 0x43, 0x80, 0x28, 0x82, 0xba, 0x61, 0x81, 0x9c, 0x20, 0x90, 0xba, 0xce, 0x8b, 0x01, - 0x89, 0x75, 0x03, 0xba, 0x1a, 0x42, 0x23, 0x91, 0xac, 0xa8, 0xde, 0x8a, 0x00, 0xaa, 0x18, 0x33, - 0x12, 0xa0, 0x8b, 0x44, 0x90, 0x70, 0x16, 0xc9, 0xab, 0x20, 0x43, 0x12, 0x80, 0x32, 0xa0, 0x9d, - 0x43, 0xa1, 0x9b, 0x30, 0x91, 0xfc, 0xac, 0x09, 0x80, 0x29, 0x57, 0x91, 0xaa, 0x18, 0x43, 0x03, - 0xa9, 0x89, 0xe9, 0xbd, 0x0a, 0x80, 0xa9, 0x28, 0x34, 0x03, 0xbb, 0x29, 0x15, 0x89, 0x65, 0x03, - 0xdc, 0x9a, 0x31, 0x24, 0x80, 0x20, 0x14, 0xba, 0x1b, 0x24, 0x90, 0x9b, 0x30, 0x92, 0xff, 0x9a, - 0x18, 0x89, 0x50, 0x34, 0xa8, 0xab, 0x48, 0x35, 0x91, 0x9a, 0x00, 0xfb, 0xad, 0x08, 0x80, 0x99, - 0x10, 0x34, 0x81, 0x9c, 0x30, 0x81, 0x29, 0x47, 0xa1, 0xcc, 0x0a, 0x42, 0x13, 0x89, 0x52, 0x82, - 0xbb, 0x29, 0x23, 0x90, 0xab, 0x41, 0xb3, 0xff, 0x8a, 0x80, 0x89, 0x63, 0x03, 0xb8, 0xaa, 0x52, - 0x15, 0xa8, 0x09, 0x92, 0xed, 0x9a, 0x08, 0x80, 0x88, 0x10, 0x35, 0xb0, 0x8b, 0x33, 0xa8, 0x60, - 0x25, 0xb9, 0xad, 0x1a, 0x44, 0x82, 0x89, 0x44, 0xa1, 0xab, 0x20, 0x12, 0x80, 0xba, 0x61, 0xb1, - 0xcf, 0x09, 0x80, 0x09, 0x45, 0x81, 0x9a, 0x8a, 0x63, 0x13, 0xca, 0x28, 0xa1, 0xcf, 0x89, 0x08, - 0x00, 0x88, 0x38, 0x34, 0xc9, 0x09, 0x13, 0x99, 0x73, 0x83, 0xcb, 0xab, 0x38, 0x37, 0xa0, 0x29, - 0x26, 0xb8, 0x9a, 0x21, 0x11, 0x91, 0x9b, 0x52, 0xf0, 0xac, 0x00, 0xa8, 0x30, 0x26, 0xa0, 0x99, - 0x19, 0x64, 0x82, 0x9c, 0x20, 0xc0, 0xbd, 0x89, 0x08, 0x10, 0x88, 0x50, 0x04, 0xb9, 0x39, 0x82, - 0x0a, 0x37, 0xb1, 0xcb, 0x9a, 0x50, 0x25, 0xa9, 0x40, 0x14, 0xba, 0x0a, 0x11, 0x21, 0xa2, 0x9b, - 0x34, 0xfb, 0x8f, 0x80, 0x98, 0x41, 0x03, 0xa9, 0x89, 0x38, 0x37, 0xa0, 0x9c, 0x23, 0xfa, 0xab, - 0x89, 0x08, 0x11, 0x98, 0x62, 0x83, 0xab, 0x30, 0xa1, 0x48, 0x27, 0xb9, 0xab, 0x8a, 0x73, 0x04, - 0x9a, 0x51, 0x83, 0xba, 0x09, 0x01, 0x33, 0xb1, 0x0c, 0x04, 0xdd, 0x0b, 0x90, 0x89, 0x45, 0x92, - 0x9a, 0x08, 0x41, 0x26, 0xc9, 0x1a, 0x02, 0xdc, 0xab, 0x98, 0x10, 0x12, 0x89, 0x73, 0x91, 0x8a, - 0x21, 0x99, 0x71, 0x03, 0xdb, 0x99, 0x18, 0x63, 0x81, 0x8a, 0x44, 0xa2, 0xaa, 0x08, 0x28, 0x43, - 0xb0, 0x1a, 0xa3, 0xdf, 0x89, 0x98, 0x28, 0x26, 0xa0, 0x8a, 0x10, 0x63, 0x03, 0xdb, 0x29, 0xa2, - 0xce, 0x9a, 0x89, 0x20, 0x02, 0x08, 0x34, 0xa0, 0x1a, 0x82, 0x0a, 0x67, 0xa1, 0xbb, 0x89, 0x31, - 0x26, 0xa0, 0x29, 0x37, 0x98, 0x9a, 0x88, 0x38, 0x24, 0xa8, 0x19, 0xd8, 0xbd, 0x98, 0xa9, 0x71, - 0x04, 0xa9, 0x09, 0x31, 0x44, 0xa1, 0xac, 0x11, 0xd0, 0xbd, 0xaa, 0x99, 0x32, 0x03, 0x10, 0x24, - 0x98, 0x10, 0xa8, 0x78, 0x26, 0xc8, 0xab, 0x18, 0x42, 0x13, 0xa9, 0x71, 0x23, 0xa9, 0xa9, 0x89, - 0x51, 0x14, 0x98, 0x99, 0xca, 0x9c, 0xaa, 0x0b, 0x56, 0x82, 0xbb, 0x28, 0x44, 0x13, 0xc9, 0x8a, - 0x01, 0xdc, 0xbc, 0xba, 0x0a, 0x43, 0x12, 0x20, 0x01, 0x10, 0x81, 0xab, 0x75, 0x04, 0xda, 0x9a, - 0x21, 0x43, 0x80, 0x1a, 0x44, 0x82, 0x98, 0xa9, 0x8b, 0x54, 0x12, 0x90, 0xca, 0xab, 0xa9, 0xbe, - 0x49, 0x26, 0xa8, 0x9a, 0x30, 0x36, 0x91, 0xba, 0x18, 0xb8, 0xbf, 0xbb, 0xad, 0x19, 0x33, 0x23, - 0x01, 0x09, 0x34, 0xc0, 0x1b, 0x57, 0x90, 0xcb, 0x89, 0x42, 0x13, 0xa9, 0x40, 0x24, 0x88, 0x00, - 0xba, 0x1b, 0x45, 0x22, 0xa0, 0xbe, 0x09, 0xb8, 0xae, 0x51, 0x03, 0xb9, 0x8a, 0x62, 0x24, 0xb8, - 0x8a, 0x01, 0xeb, 0x9b, 0xcb, 0xac, 0x10, 0x42, 0x22, 0xa0, 0x39, 0x25, 0xc9, 0x49, 0x15, 0xb9, - 0xbb, 0x29, 0x55, 0x91, 0x8a, 0x43, 0x82, 0x09, 0x02, 0xcb, 0x29, 0x43, 0x33, 0xd0, 0xae, 0x28, - 0xc8, 0x8c, 0x53, 0x91, 0xaa, 0x19, 0x73, 0x12, 0xca, 0x08, 0x91, 0xbc, 0x99, 0xda, 0x9b, 0x20, - 0x52, 0x13, 0xb9, 0x58, 0x13, 0xac, 0x51, 0x83, 0xcb, 0x9b, 0x40, 0x25, 0xb0, 0x1a, 0x35, 0x98, - 0x29, 0x82, 0xbb, 0x38, 0x53, 0x34, 0xf9, 0x9b, 0x11, 0xd9, 0x1a, 0x25, 0xb8, 0x9a, 0x20, 0x46, - 0x81, 0xac, 0x20, 0xc0, 0xac, 0x80, 0xca, 0x8a, 0x20, 0x43, 0x04, 0xab, 0x51, 0x93, 0x9b, 0x54, - 0x90, 0xac, 0x89, 0x51, 0x23, 0xca, 0x38, 0x15, 0x9a, 0x20, 0x92, 0xab, 0x11, 0x52, 0x24, 0xfb, - 0x8a, 0x02, 0xca, 0x38, 0x05, 0xba, 0x89, 0x31, 0x37, 0xb0, 0x9c, 0x12, 0xe9, 0x8b, 0x80, 0xcb, - 0x09, 0x20, 0x63, 0x92, 0x9b, 0x53, 0xa1, 0x1a, 0x25, 0xc8, 0xab, 0x18, 0x63, 0x83, 0xbb, 0x61, - 0x82, 0x9a, 0x32, 0xa1, 0x8b, 0x10, 0x63, 0x04, 0xcd, 0x19, 0x82, 0x9c, 0x41, 0x91, 0xbb, 0x19, - 0x63, 0x24, 0xd9, 0x0a, 0x02, 0xcc, 0x0a, 0x90, 0xab, 0x09, 0x30, 0x37, 0xa0, 0x1b, 0x34, 0xb0, - 0x48, 0x04, 0xdb, 0x8b, 0x20, 0x35, 0xa2, 0x9c, 0x63, 0xa1, 0x0a, 0x22, 0xa0, 0x09, 0x18, 0x73, - 0x92, 0xae, 0x18, 0x91, 0x0b, 0x53, 0xb8, 0x9d, 0x10, 0x44, 0x02, 0xdb, 0x29, 0xa1, 0xbd, 0x09, - 0x98, 0xab, 0x88, 0x52, 0x25, 0xb8, 0x29, 0x15, 0x98, 0x41, 0xa2, 0xcd, 0x09, 0x31, 0x25, 0xb8, - 0x1a, 0x35, 0xb8, 0x1a, 0x24, 0x98, 0x89, 0x28, 0x45, 0xc1, 0x9d, 0x10, 0xa0, 0x28, 0x13, 0xfb, - 0x8b, 0x31, 0x45, 0xa1, 0xac, 0x20, 0xc8, 0xad, 0x08, 0x98, 0x99, 0x09, 0x62, 0x13, 0xb9, 0x40, - 0x03, 0x18, 0x43, 0xe8, 0xac, 0x19, 0x53, 0x13, 0xba, 0x38, 0x15, 0xba, 0x38, 0x33, 0x88, 0xaa, - 0x68, 0x25, 0xd9, 0x8b, 0x10, 0x88, 0x41, 0xa1, 0xbe, 0x8a, 0x63, 0x24, 0xb9, 0x8b, 0x00, 0xfb, - 0xab, 0x80, 0x88, 0xa9, 0x09, 0x46, 0x82, 0x99, 0x31, 0x11, 0x42, 0x03, 0xde, 0xaa, 0x30, 0x44, - 0x92, 0x9a, 0x42, 0x81, 0x9b, 0x30, 0x33, 0x91, 0xbb, 0x72, 0x85, 0xba, 0x0b, 0x88, 0x40, 0x24, - 0xea, 0xac, 0x18, 0x54, 0x02, 0xba, 0x0a, 0xa0, 0xce, 0x8a, 0x09, 0x80, 0xa9, 0x28, 0x36, 0x80, - 0x08, 0x12, 0x41, 0x35, 0xc0, 0xbd, 0x8a, 0x51, 0x24, 0x98, 0x19, 0x22, 0xa8, 0x0a, 0x30, 0x44, - 0x91, 0x9b, 0x63, 0xa1, 0xab, 0xa8, 0x0b, 0x66, 0x92, 0xbc, 0xab, 0x30, 0x47, 0x90, 0xaa, 0x00, - 0xca, 0xac, 0x9a, 0x09, 0x01, 0xba, 0x60, 0x23, 0x08, 0x12, 0x88, 0x73, 0x17, 0xba, 0xab, 0x09, - 0x54, 0x03, 0x9a, 0x30, 0x82, 0xaa, 0x00, 0x20, 0x36, 0xa1, 0x0b, 0x24, 0xb9, 0x09, 0xf9, 0x2a, - 0x47, 0xa8, 0xac, 0x99, 0x51, 0x23, 0xc8, 0x0a, 0x90, 0xbd, 0xaa, 0xaa, 0x29, 0x83, 0xab, 0x63, - 0x02, 0x48, 0x03, 0x8b, 0x67, 0x82, 0xac, 0x9a, 0x18, 0x35, 0x92, 0x8a, 0x33, 0xc0, 0x0a, 0x82, - 0x28, 0x36, 0xa0, 0x1a, 0x82, 0x9c, 0x22, 0xfc, 0x48, 0x15, 0xc9, 0xaa, 0x08, 0x52, 0x02, 0xbb, - 0x10, 0xd8, 0xad, 0x98, 0xa9, 0x20, 0x82, 0x8a, 0x33, 0x98, 0x74, 0xa2, 0x1a, 0x47, 0xb1, 0xbb, - 0x8a, 0x31, 0x27, 0xa8, 0x28, 0x13, 0xbb, 0x39, 0x91, 0x49, 0x17, 0x98, 0x18, 0xb8, 0x19, 0x05, - 0xad, 0x71, 0x83, 0xcb, 0x8a, 0x18, 0x53, 0xa1, 0xab, 0x12, 0xfb, 0x9b, 0x98, 0x9a, 0x40, 0x81, - 0x19, 0x81, 0x19, 0x37, 0xb0, 0x5a, 0x27, 0xb9, 0xab, 0x08, 0x42, 0x04, 0x99, 0x40, 0x93, 0xac, - 0x21, 0x98, 0x30, 0x16, 0x98, 0x80, 0xca, 0x40, 0xa3, 0x9e, 0x54, 0x91, 0xac, 0x89, 0x11, 0x14, - 0xb8, 0x0b, 0x83, 0xcf, 0x0a, 0x98, 0x99, 0x32, 0x81, 0x18, 0xa8, 0x5a, 0x17, 0xa8, 0x68, 0x13, - 0xda, 0x9a, 0x10, 0x42, 0x81, 0x8a, 0x34, 0xb0, 0x9c, 0x22, 0x98, 0x60, 0x12, 0x88, 0xa8, 0x9d, - 0x52, 0xa0, 0x1b, 0x37, 0xb0, 0xad, 0x09, 0x32, 0x02, 0xdb, 0x18, 0xb2, 0xcf, 0x88, 0x90, 0x0a, - 0x22, 0x01, 0x80, 0xba, 0x70, 0x14, 0x9a, 0x72, 0x82, 0xdb, 0x89, 0x21, 0x32, 0xa8, 0x29, 0x26, - 0xc9, 0x0a, 0x12, 0x89, 0x32, 0x14, 0x80, 0xeb, 0x0a, 0x34, 0xb9, 0x59, 0x25, 0xd9, 0x9b, 0x18, - 0x33, 0xa1, 0xad, 0x21, 0xe9, 0xac, 0x88, 0x98, 0x19, 0x32, 0x12, 0xb8, 0x9d, 0x73, 0x82, 0x09, - 0x54, 0x90, 0xad, 0x09, 0x32, 0x13, 0xaa, 0x51, 0x03, 0xdb, 0x19, 0x02, 0x09, 0x43, 0x23, 0xa0, - 0xbf, 0x29, 0x15, 0xa9, 0x51, 0x13, 0xcc, 0x9b, 0x30, 0x14, 0xc9, 0x8a, 0x12, 0xec, 0x9b, 0x88, - 0x98, 0x18, 0x33, 0x14, 0xda, 0x0a, 0x44, 0x91, 0x28, 0x25, 0xc8, 0xac, 0x29, 0x34, 0x92, 0x8a, - 0x63, 0x91, 0xbb, 0x10, 0x01, 0x18, 0x53, 0x24, 0xd0, 0xac, 0x30, 0x83, 0x88, 0x45, 0x91, 0xbd, - 0x8b, 0x43, 0x82, 0xbc, 0x29, 0xa1, 0xcf, 0x8a, 0x88, 0x09, 0x18, 0x53, 0x82, 0xcb, 0x29, 0x25, - 0x08, 0x31, 0x04, 0xdb, 0x9c, 0x30, 0x25, 0xa8, 0x18, 0x25, 0xa8, 0x9b, 0x00, 0x11, 0x10, 0x72, - 0x14, 0xe9, 0x8a, 0x21, 0x81, 0x21, 0x14, 0xb8, 0xbe, 0x09, 0x34, 0xc1, 0x9c, 0x10, 0xc8, 0xad, - 0x8a, 0x89, 0x00, 0x10, 0x45, 0x91, 0xac, 0x30, 0x12, 0x21, 0x34, 0xa0, 0xcd, 0x9a, 0x72, 0x12, - 0xaa, 0x41, 0x03, 0xba, 0x99, 0x00, 0x21, 0x01, 0x73, 0x06, 0xda, 0x1a, 0x11, 0x10, 0x33, 0x92, - 0xcb, 0xbc, 0x39, 0x17, 0xc9, 0x0b, 0x01, 0xeb, 0xab, 0xa9, 0x08, 0x01, 0x38, 0x47, 0xb0, 0x9b, - 0x22, 0x02, 0x63, 0x02, 0xba, 0xbb, 0x0a, 0x57, 0x81, 0x8b, 0x53, 0x80, 0x9a, 0x88, 0x09, 0x32, - 0x08, 0x74, 0x82, 0xbd, 0x18, 0x01, 0x41, 0x14, 0xa8, 0x9b, 0xab, 0x60, 0x83, 0xcd, 0x19, 0xa1, - 0xcc, 0x99, 0xaa, 0x28, 0x81, 0x50, 0x25, 0xb9, 0x0b, 0x22, 0x20, 0x47, 0xa0, 0xaa, 0x98, 0x39, - 0x36, 0xb0, 0x2a, 0x26, 0xa8, 0x89, 0x98, 0x19, 0x24, 0x09, 0x46, 0xb1, 0xad, 0x10, 0x00, 0x54, - 0x02, 0xba, 0x8a, 0x89, 0x52, 0xb1, 0xaf, 0x10, 0xc8, 0x9c, 0x99, 0x9a, 0x20, 0x81, 0x61, 0x14, - 0xca, 0x08, 0x01, 0x40, 0x16, 0xb8, 0x8b, 0x80, 0x40, 0x14, 0xb9, 0x58, 0x13, 0xab, 0x18, 0xb9, - 0x38, 0x06, 0x18, 0x35, 0xd8, 0x9b, 0x01, 0x28, 0x57, 0x91, 0x9b, 0x88, 0x00, 0x32, 0xfa, 0x9b, - 0x01, 0xea, 0x9a, 0x99, 0x8b, 0x31, 0x00, 0x73, 0x83, 0xab, 0x18, 0x90, 0x74, 0x04, 0xca, 0x09, - 0x00, 0x32, 0x82, 0xab, 0x73, 0x92, 0x8b, 0x01, 0xba, 0x40, 0x03, 0x38, 0x17, 0xca, 0x89, 0x80, - 0x68, 0x36, 0xb8, 0x9b, 0x10, 0x11, 0x82, 0xce, 0x0a, 0x91, 0xbd, 0x8a, 0xa9, 0x0b, 0x23, 0x11, - 0x36, 0xa2, 0x9a, 0x80, 0x1a, 0x77, 0x93, 0xcb, 0x19, 0x21, 0x23, 0xa8, 0x2b, 0x36, 0xb8, 0x0a, - 0x82, 0xbb, 0x62, 0x01, 0x31, 0x83, 0xbd, 0x08, 0xba, 0x75, 0x17, 0xa9, 0x8a, 0x11, 0x11, 0xb0, - 0xae, 0x18, 0xc8, 0xac, 0x88, 0xb9, 0x19, 0x23, 0x21, 0x25, 0xa0, 0x08, 0xc8, 0x49, 0x67, 0xa0, - 0xab, 0x10, 0x32, 0x02, 0xaa, 0x58, 0x04, 0xb9, 0x28, 0x90, 0x8b, 0x42, 0x12, 0x31, 0xb0, 0x9b, - 0xd0, 0x8d, 0x77, 0x03, 0xbb, 0x09, 0x31, 0x02, 0xeb, 0x9b, 0x00, 0xcc, 0x9c, 0x90, 0xa9, 0x28, - 0x22, 0x23, 0x03, 0x18, 0x81, 0xce, 0x71, 0x15, 0xc8, 0x9a, 0x30, 0x33, 0xa0, 0x9a, 0x63, 0x91, - 0x9a, 0x20, 0x98, 0x0a, 0x32, 0x24, 0x91, 0xaa, 0x32, 0xfc, 0x4b, 0x67, 0x80, 0xaa, 0x08, 0x23, - 0x91, 0xcd, 0x09, 0x90, 0xad, 0x8a, 0x98, 0x99, 0x10, 0x33, 0x14, 0x88, 0x32, 0xc2, 0x9e, 0x73, - 0x03, 0xda, 0x8a, 0x32, 0x15, 0xa9, 0x19, 0x24, 0xa8, 0x0a, 0x01, 0x98, 0x09, 0x31, 0x25, 0xc9, - 0x19, 0x05, 0xbc, 0x70, 0x25, 0xa0, 0xab, 0x38, 0x25, 0xb8, 0xae, 0x00, 0xb9, 0xad, 0x88, 0x89, - 0x89, 0x10, 0x34, 0x02, 0x0a, 0x44, 0xc8, 0x0b, 0x37, 0x91, 0xcb, 0x0a, 0x54, 0x02, 0xba, 0x30, - 0x03, 0xba, 0x28, 0x00, 0x89, 0x88, 0x71, 0x03, 0xdb, 0x30, 0x94, 0x9d, 0x73, 0x13, 0xa9, 0xab, - 0x41, 0x15, 0xe9, 0x8a, 0x80, 0xca, 0x9a, 0x98, 0x98, 0x80, 0x20, 0x35, 0xb1, 0x29, 0x17, 0xb9, - 0x3a, 0x17, 0xa0, 0xab, 0x19, 0x37, 0x92, 0x8c, 0x31, 0x91, 0x8b, 0x10, 0x80, 0x80, 0x99, 0x73, - 0x92, 0xad, 0x52, 0xa1, 0x0b, 0x55, 0x01, 0xa9, 0x9a, 0x62, 0x83, 0xcc, 0x0a, 0xa0, 0xbc, 0x8a, - 0x89, 0x09, 0x80, 0x40, 0x25, 0xb8, 0x58, 0x13, 0xac, 0x40, 0x13, 0xca, 0xba, 0x58, 0x27, 0xa0, - 0x0a, 0x32, 0xb8, 0x0a, 0x02, 0x09, 0x82, 0x9a, 0x55, 0xc0, 0x0c, 0x43, 0xa8, 0x4a, 0x25, 0x80, - 0x9a, 0x0a, 0x55, 0xa1, 0xbd, 0x08, 0xc8, 0xac, 0x88, 0x89, 0x00, 0x80, 0x50, 0x13, 0xab, 0x72, - 0x92, 0x9a, 0x42, 0x91, 0xab, 0xaa, 0x72, 0x17, 0x99, 0x19, 0x03, 0xb9, 0x18, 0x81, 0x18, 0x92, - 0x0b, 0x36, 0xea, 0x2a, 0x24, 0xa9, 0x60, 0x13, 0x99, 0x89, 0x29, 0x37, 0xd0, 0xac, 0x80, 0xda, - 0x9a, 0x98, 0x89, 0x11, 0x88, 0x62, 0x82, 0x8b, 0x44, 0xa1, 0x1a, 0x14, 0xb9, 0x9a, 0x89, 0x76, - 0x02, 0xa9, 0x30, 0x92, 0xab, 0x20, 0x88, 0x30, 0xb1, 0x2a, 0x27, 0xdd, 0x38, 0x04, 0x89, 0x53, - 0x81, 0x8a, 0x80, 0x41, 0x25, 0xfb, 0x9a, 0x90, 0xcc, 0x8a, 0x98, 0x09, 0x02, 0x08, 0x44, 0x90, - 0x1a, 0x25, 0xa0, 0x30, 0x92, 0xbd, 0x09, 0x30, 0x57, 0x81, 0x8a, 0x32, 0xc0, 0x8a, 0x11, 0x09, - 0x22, 0xa8, 0x49, 0xb3, 0xcf, 0x41, 0x02, 0x38, 0x25, 0xb8, 0x09, 0x21, 0x63, 0x93, 0xce, 0x8a, - 0xc9, 0xbc, 0x8a, 0x99, 0x28, 0x01, 0x20, 0x25, 0xa8, 0x48, 0x24, 0x88, 0x33, 0xf8, 0xab, 0x10, - 0x52, 0x34, 0xa0, 0x29, 0x14, 0xca, 0x09, 0x01, 0x19, 0x23, 0xa9, 0x31, 0xf9, 0x8e, 0x32, 0x12, - 0x73, 0x82, 0xba, 0x20, 0x42, 0x33, 0xe0, 0xbc, 0xa9, 0xec, 0xab, 0x89, 0x99, 0x11, 0x11, 0x31, - 0x03, 0x99, 0x63, 0x13, 0x41, 0x03, 0xde, 0x0b, 0x21, 0x53, 0x02, 0x88, 0x31, 0x92, 0xad, 0x18, - 0x80, 0x30, 0x03, 0x88, 0xa1, 0xdf, 0x18, 0x22, 0x63, 0x25, 0xa0, 0x8c, 0x30, 0x34, 0x82, 0xeb, - 0x9a, 0xca, 0xbe, 0xaa, 0xa8, 0x88, 0x21, 0x21, 0x32, 0x90, 0x38, 0x25, 0x21, 0x37, 0xb1, 0xcf, - 0x08, 0x31, 0x33, 0x90, 0x38, 0x24, 0xc9, 0x8a, 0x00, 0x08, 0x32, 0x11, 0x00, 0xfb, 0x9d, 0x21, - 0x10, 0x66, 0x13, 0xba, 0x0b, 0x52, 0x24, 0xa0, 0x9d, 0x98, 0xfa, 0xbb, 0x99, 0x99, 0x18, 0x11, - 0x22, 0x03, 0x9a, 0x44, 0x81, 0x60, 0x25, 0xd9, 0xbb, 0x10, 0x44, 0x02, 0x99, 0x42, 0x82, 0xbb, - 0x18, 0x90, 0x28, 0x13, 0x21, 0xa3, 0xff, 0x19, 0x01, 0x29, 0x57, 0x81, 0xaa, 0x09, 0x43, 0x14, - 0xc9, 0x8a, 0x90, 0xce, 0xaa, 0x98, 0x8a, 0x10, 0x20, 0x42, 0xa0, 0x19, 0x34, 0x99, 0x72, 0x06, - 0xca, 0x9a, 0x20, 0x34, 0x91, 0x0a, 0x44, 0xa0, 0x8b, 0x00, 0x88, 0x20, 0x82, 0x41, 0xd1, 0xbd, - 0x21, 0xa1, 0x68, 0x27, 0x90, 0xab, 0x10, 0x44, 0x02, 0xbc, 0x19, 0xb0, 0xcf, 0x89, 0x99, 0x09, - 0x00, 0x21, 0x22, 0xb9, 0x48, 0x14, 0x8b, 0x56, 0x92, 0xad, 0x8a, 0x31, 0x25, 0x98, 0x2a, 0x25, - 0xa9, 0x8a, 0x01, 0x89, 0x21, 0x00, 0x33, 0xf9, 0x9e, 0x22, 0x99, 0x70, 0x24, 0xa9, 0x8b, 0x20, - 0x45, 0xa1, 0xac, 0x10, 0xd8, 0xac, 0x99, 0x99, 0x08, 0x10, 0x31, 0x04, 0xbb, 0x52, 0x93, 0x1a, - 0x57, 0xb0, 0xbb, 0x0a, 0x63, 0x13, 0xb9, 0x48, 0x14, 0xba, 0x19, 0x91, 0x08, 0x12, 0x18, 0x14, - 0xfc, 0x0a, 0x03, 0x99, 0x74, 0x03, 0xba, 0x0a, 0x41, 0x34, 0xd0, 0x9b, 0x11, 0xfa, 0x9b, 0x89, - 0x8a, 0x18, 0x00, 0x42, 0x92, 0x8c, 0x43, 0x90, 0x49, 0x17, 0xc8, 0x9b, 0x08, 0x34, 0x03, 0xab, - 0x62, 0x82, 0xba, 0x10, 0x88, 0x18, 0x02, 0x20, 0x84, 0xdf, 0x18, 0x82, 0x1a, 0x56, 0x81, 0xba, - 0x88, 0x43, 0x14, 0xd9, 0x0a, 0x81, 0xcc, 0x9b, 0x99, 0x99, 0x10, 0x20, 0x34, 0xb8, 0x1b, 0x36, - 0x99, 0x71, 0x13, 0xeb, 0x9a, 0x28, 0x44, 0x91, 0x8a, 0x43, 0x91, 0xab, 0x01, 0x88, 0x10, 0x01, - 0x42, 0xc1, 0xbf, 0x20, 0x81, 0x49, 0x37, 0x90, 0xab, 0x29, 0x54, 0x83, 0xdb, 0x19, 0xa0, 0xcd, - 0x99, 0x99, 0x09, 0x00, 0x21, 0x14, 0xb9, 0x38, 0x14, 0x89, 0x65, 0x92, 0xbc, 0x8b, 0x41, 0x25, - 0x98, 0x19, 0x24, 0xb0, 0x9a, 0x81, 0x08, 0x11, 0x20, 0x43, 0xfa, 0x9d, 0x21, 0x88, 0x71, 0x23, - 0xa8, 0xab, 0x48, 0x45, 0xa1, 0xbb, 0x18, 0xd9, 0xbd, 0x9a, 0x99, 0x88, 0x01, 0x42, 0x83, 0xaa, - 0x41, 0x83, 0x38, 0x57, 0xa0, 0xbc, 0x8a, 0x63, 0x03, 0xa8, 0x30, 0x14, 0xb9, 0x89, 0x08, 0x00, - 0x01, 0x32, 0x04, 0xcf, 0x8a, 0x02, 0x18, 0x56, 0x12, 0xa9, 0x9b, 0x62, 0x24, 0xb8, 0x9b, 0x88, - 0xec, 0xab, 0x9b, 0x8a, 0x88, 0x21, 0x34, 0xa1, 0x89, 0x43, 0x00, 0x54, 0x14, 0xc9, 0xbc, 0x19, - 0x45, 0x01, 0x89, 0x32, 0x82, 0x9a, 0x99, 0x09, 0x11, 0x10, 0x54, 0xb1, 0xbf, 0x08, 0x80, 0x61, - 0x35, 0x81, 0xaa, 0x0a, 0x64, 0x03, 0xba, 0x89, 0xba, 0xbf, 0xbb, 0xac, 0x09, 0x08, 0x40, 0x13, - 0xa8, 0x20, 0x02, 0x40, 0x37, 0x81, 0xdb, 0xbb, 0x30, 0x37, 0x80, 0x18, 0x23, 0x88, 0x89, 0xb9, - 0x29, 0x13, 0x28, 0x37, 0xea, 0x9b, 0x80, 0x09, 0x57, 0x13, 0x98, 0xa8, 0x18, 0x37, 0x91, 0xaa, - 0x98, 0xcd, 0xac, 0xca, 0xaa, 0x08, 0x08, 0x42, 0x82, 0x89, 0x22, 0x90, 0x72, 0x16, 0x99, 0xaa, - 0xaa, 0x62, 0x13, 0x88, 0x42, 0x92, 0x09, 0x81, 0xbb, 0x40, 0x81, 0x40, 0x85, 0xcc, 0x19, 0xa8, - 0x39, 0x77, 0x00, 0x09, 0x88, 0x20, 0x24, 0xa9, 0x89, 0xc0, 0xaf, 0x9a, 0xcb, 0x9a, 0x00, 0x19, - 0x43, 0x90, 0x29, 0x04, 0x8a, 0x65, 0x82, 0xab, 0x99, 0x09, 0x44, 0x92, 0x28, 0x26, 0xa8, 0x18, - 0x92, 0x9c, 0x31, 0x90, 0x51, 0xa1, 0x9f, 0x01, 0xb9, 0x70, 0x24, 0x98, 0x08, 0x00, 0x42, 0x83, - 0xbb, 0x20, 0xfa, 0xaf, 0x89, 0xbb, 0x8a, 0x00, 0x28, 0x14, 0xa9, 0x51, 0x91, 0x2a, 0x47, 0xa0, - 0xaa, 0x80, 0x28, 0x24, 0xa8, 0x71, 0x03, 0xaa, 0x30, 0xa1, 0x8c, 0x13, 0x88, 0x53, 0xd9, 0x0b, - 0x02, 0xbc, 0x74, 0x13, 0xaa, 0x10, 0x12, 0x43, 0xb0, 0x8c, 0x13, 0xfe, 0x9a, 0x98, 0xba, 0x09, - 0x80, 0x30, 0x83, 0x8b, 0x54, 0xb0, 0x48, 0x27, 0xb9, 0x8a, 0x00, 0x31, 0x83, 0x9b, 0x66, 0x92, - 0x9a, 0x31, 0xa8, 0x1a, 0x02, 0x18, 0x14, 0xdd, 0x18, 0xa2, 0x0c, 0x56, 0x91, 0x8a, 0x11, 0x22, - 0x03, 0xda, 0x2a, 0x93, 0xef, 0x89, 0xa8, 0x9a, 0x09, 0x80, 0x22, 0x90, 0x2a, 0x26, 0xb9, 0x71, - 0x04, 0xbb, 0x09, 0x21, 0x22, 0xb0, 0x2b, 0x77, 0x90, 0x0a, 0x11, 0x98, 0x08, 0x81, 0x20, 0xa1, - 0xae, 0x21, 0xc1, 0x3a, 0x57, 0x98, 0x0a, 0x21, 0x33, 0x91, 0xbd, 0x40, 0xc1, 0xbe, 0x89, 0xa8, - 0x9b, 0x88, 0x10, 0x22, 0xb9, 0x60, 0x04, 0x9a, 0x64, 0xa2, 0xbb, 0x29, 0x42, 0x12, 0xda, 0x48, - 0x25, 0xa9, 0x1a, 0x12, 0xa8, 0x00, 0x00, 0x22, 0xe9, 0x8c, 0x23, 0xca, 0x70, 0x14, 0xa9, 0x1a, - 0x43, 0x14, 0xb8, 0x9c, 0x32, 0xf9, 0xac, 0x88, 0xa9, 0x9a, 0x08, 0x20, 0x82, 0x9b, 0x54, 0x92, - 0x2a, 0x37, 0xc0, 0xab, 0x38, 0x25, 0x91, 0xbb, 0x72, 0x04, 0xaa, 0x28, 0x01, 0x88, 0x08, 0x10, - 0x82, 0xdc, 0x19, 0x03, 0x9b, 0x75, 0x02, 0xab, 0x29, 0x36, 0x03, 0xdb, 0x1a, 0x12, 0xfb, 0xab, - 0x88, 0x9a, 0x9a, 0x08, 0x22, 0xb8, 0x2a, 0x27, 0x90, 0x50, 0x14, 0xd9, 0x9b, 0x51, 0x23, 0xb8, - 0x8b, 0x55, 0x81, 0x9a, 0x28, 0x01, 0x90, 0x88, 0x22, 0xc1, 0xae, 0x21, 0x91, 0x29, 0x47, 0x91, - 0xbb, 0x50, 0x35, 0xa2, 0xbc, 0x28, 0x92, 0xbe, 0xab, 0x89, 0x9a, 0xaa, 0x28, 0x13, 0xbc, 0x50, - 0x14, 0x09, 0x73, 0x81, 0xcb, 0x0b, 0x73, 0x03, 0xc9, 0x19, 0x24, 0x90, 0x99, 0x10, 0x12, 0x90, - 0x1a, 0x33, 0xfa, 0x8c, 0x22, 0x98, 0x61, 0x23, 0xb9, 0x9c, 0x72, 0x25, 0xb0, 0xab, 0x30, 0xb8, - 0xbe, 0x9b, 0x8a, 0xa8, 0xaa, 0x40, 0x91, 0x9c, 0x62, 0x81, 0x20, 0x25, 0xb8, 0xbc, 0x1a, 0x47, - 0x82, 0xbb, 0x40, 0x13, 0x98, 0x89, 0x18, 0x33, 0xb8, 0x39, 0x05, 0xce, 0x18, 0x82, 0x19, 0x45, - 0x92, 0xaa, 0x8a, 0x75, 0x14, 0xc9, 0x0a, 0x01, 0xb9, 0xbb, 0xbb, 0x0a, 0xa8, 0x9c, 0x32, 0xe0, - 0x0a, 0x25, 0x88, 0x52, 0x83, 0xda, 0x9a, 0x38, 0x47, 0xa1, 0x9b, 0x32, 0x02, 0x89, 0x98, 0x28, - 0x25, 0xa9, 0x38, 0xc3, 0xaf, 0x21, 0x90, 0x40, 0x25, 0xa8, 0xaa, 0x18, 0x67, 0x02, 0xbb, 0x1a, - 0x91, 0xcb, 0xba, 0xac, 0x08, 0xb0, 0x0b, 0x23, 0xdc, 0x38, 0x13, 0x19, 0x47, 0xa1, 0xac, 0x89, - 0x51, 0x35, 0xb8, 0x0b, 0x33, 0x90, 0x18, 0xa8, 0x48, 0x15, 0xa9, 0x21, 0xe8, 0x8c, 0x22, 0x99, - 0x73, 0x03, 0xba, 0x89, 0x30, 0x77, 0x91, 0xaa, 0x08, 0xa8, 0xaa, 0xba, 0x9d, 0x10, 0xb8, 0x19, - 0x92, 0xae, 0x41, 0x81, 0x48, 0x16, 0xc8, 0x8a, 0x88, 0x53, 0x15, 0xaa, 0x29, 0x02, 0x89, 0x12, - 0xb9, 0x60, 0x03, 0x8a, 0x11, 0xec, 0x19, 0x02, 0x0a, 0x47, 0xa1, 0xaa, 0x00, 0x41, 0x26, 0xb0, - 0x9b, 0x80, 0xdb, 0x99, 0xc9, 0x9b, 0x11, 0xa9, 0x18, 0xd0, 0x8c, 0x33, 0xa0, 0x73, 0x06, 0xbb, - 0x89, 0x10, 0x45, 0x82, 0xaa, 0x21, 0x91, 0x1a, 0x04, 0xaa, 0x62, 0x82, 0x88, 0x91, 0xaf, 0x20, - 0x91, 0x49, 0x27, 0xa8, 0x9b, 0x11, 0x63, 0x23, 0xca, 0x8a, 0xa0, 0xae, 0x88, 0xc9, 0x0b, 0x11, - 0x99, 0x80, 0xda, 0x2a, 0x04, 0x09, 0x56, 0xa2, 0xbc, 0x08, 0x31, 0x35, 0x91, 0x0b, 0x22, 0xba, - 0x48, 0x84, 0x8b, 0x63, 0x81, 0x08, 0xd8, 0x9b, 0x22, 0x98, 0x72, 0x17, 0xaa, 0x0a, 0x21, 0x53, - 0x82, 0xab, 0x09, 0xfa, 0x9b, 0x80, 0xcb, 0x09, 0x02, 0x89, 0xb0, 0xad, 0x30, 0x92, 0x59, 0x37, - 0xc0, 0x9c, 0x18, 0x42, 0x13, 0x98, 0x28, 0x81, 0x9d, 0x41, 0x81, 0x0a, 0x43, 0x01, 0x90, 0xcd, - 0x1a, 0x02, 0x09, 0x57, 0x82, 0xcb, 0x19, 0x42, 0x23, 0xa0, 0x8b, 0xa8, 0xcf, 0x8a, 0x80, 0xbb, - 0x19, 0x11, 0x80, 0xfb, 0x9a, 0x22, 0x98, 0x71, 0x06, 0xb9, 0x9b, 0x31, 0x34, 0x83, 0x09, 0x32, - 0xe8, 0x8b, 0x43, 0x91, 0x09, 0x24, 0x12, 0xd8, 0xad, 0x20, 0x80, 0x49, 0x37, 0xb1, 0xac, 0x28, - 0x34, 0x03, 0xaa, 0x18, 0xf9, 0xad, 0x09, 0x90, 0xaa, 0x00, 0x21, 0xa0, 0xcd, 0x19, 0x01, 0x89, - 0x56, 0x82, 0xbc, 0x0b, 0x52, 0x23, 0x90, 0x38, 0x04, 0xeb, 0x19, 0x22, 0x90, 0x00, 0x42, 0x12, - 0xfb, 0x8b, 0x12, 0x98, 0x71, 0x15, 0xa9, 0x9b, 0x40, 0x43, 0x90, 0x8a, 0x11, 0xec, 0x9c, 0x08, - 0x90, 0x99, 0x18, 0x22, 0xd8, 0xac, 0x20, 0x90, 0x39, 0x37, 0xa0, 0xbd, 0x19, 0x44, 0x03, 0x8a, - 0x30, 0x05, 0xcb, 0x39, 0x02, 0x01, 0x09, 0x7d, 0x0b, 0x02, 0xcd, 0x08, 0x98, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x77, 0x97, 0xbc, 0xaa, 0xab, 0x22, 0x90, 0xbb, 0xdc, 0xce, 0xcb, - 0xbc, 0x0a, 0x82, 0x09, 0x43, 0x12, 0x63, 0x12, 0x20, 0x46, 0x22, 0x45, 0x82, 0xdc, 0x9c, 0x73, - 0x24, 0x80, 0x99, 0xa9, 0x88, 0xeb, 0xcd, 0xab, 0x28, 0x65, 0x44, 0x23, 0xb8, 0xbd, 0x8b, 0x00, - 0x01, 0xa8, 0xa9, 0xb9, 0xaa, 0x99, 0x18, 0x81, 0xda, 0xcc, 0x99, 0x41, 0x23, 0x00, 0x10, 0x65, - 0x47, 0x23, 0x01, 0x99, 0x08, 0x42, 0x33, 0x01, 0x98, 0x08, 0x12, 0xc9, 0xec, 0xcd, 0xab, 0xa9, - 0xaa, 0x48, 0x47, 0x23, 0x98, 0xba, 0x89, 0x08, 0x80, 0xb9, 0x8a, 0x11, 0x01, 0x21, 0x24, 0xa0, - 0xfd, 0xcb, 0xaa, 0x89, 0x18, 0x91, 0xdb, 0x0a, 0x54, 0x25, 0x01, 0x88, 0x09, 0x52, 0x23, 0x98, - 0x9a, 0x10, 0x34, 0x03, 0xfd, 0xac, 0xaa, 0xca, 0xbd, 0x19, 0x46, 0x33, 0x81, 0xa9, 0xaa, 0xa9, - 0xa9, 0xba, 0x9a, 0x08, 0x02, 0x00, 0x81, 0xfb, 0xac, 0x99, 0x08, 0x40, 0x36, 0x03, 0xcb, 0x38, - 0x47, 0x34, 0x03, 0x80, 0x88, 0x42, 0x43, 0x02, 0xaa, 0x09, 0x43, 0x13, 0xb9, 0xcd, 0xda, 0xcd, - 0xbc, 0x89, 0x43, 0x24, 0x02, 0x00, 0x80, 0x98, 0xaa, 0xdb, 0xab, 0x09, 0x10, 0x01, 0x88, 0xdb, - 0xac, 0xbb, 0xad, 0x0a, 0x43, 0x14, 0xb9, 0x0b, 0x47, 0x34, 0x23, 0x02, 0x00, 0x31, 0x25, 0xa0, - 0xbd, 0x0a, 0x22, 0x11, 0x11, 0x82, 0xfa, 0xff, 0xbb, 0x9a, 0x11, 0x32, 0x21, 0x21, 0x23, 0x11, - 0xa8, 0xdb, 0xab, 0x19, 0x54, 0x33, 0x13, 0x01, 0xca, 0xcc, 0xab, 0x1a, 0x53, 0x82, 0xcb, 0x0a, - 0x55, 0x35, 0x33, 0x12, 0x11, 0x43, 0x13, 0xd9, 0xbd, 0x9a, 0x00, 0x88, 0x89, 0x10, 0xc8, 0xef, - 0xbc, 0xaa, 0x88, 0x20, 0x10, 0x21, 0x33, 0x22, 0x01, 0xb8, 0xbd, 0x8b, 0x51, 0x53, 0x22, 0x32, - 0x82, 0xdc, 0xac, 0x09, 0x00, 0x88, 0xcb, 0xbc, 0x48, 0x46, 0x33, 0x11, 0x31, 0x44, 0x13, 0xb0, - 0xcd, 0x9a, 0x88, 0x88, 0x28, 0x53, 0x91, 0xfb, 0xcc, 0xab, 0x9a, 0x08, 0x11, 0x22, 0x53, 0x23, - 0x02, 0x98, 0xcb, 0x9a, 0x20, 0x23, 0x54, 0x36, 0x03, 0xb9, 0xad, 0x99, 0x08, 0x01, 0xc9, 0xbd, - 0x19, 0x45, 0x23, 0x02, 0x52, 0x34, 0x24, 0x90, 0xba, 0x9a, 0xba, 0xbb, 0x29, 0x55, 0x03, 0xea, - 0xdc, 0xbb, 0xab, 0x8a, 0x88, 0x10, 0x21, 0x42, 0x12, 0xa0, 0xad, 0xab, 0xaa, 0x19, 0x65, 0x44, - 0x22, 0x90, 0xba, 0x9a, 0x10, 0x11, 0xb8, 0xbf, 0x09, 0x45, 0x23, 0x01, 0x62, 0x35, 0x32, 0x11, - 0x88, 0x98, 0xaa, 0xbc, 0x18, 0x54, 0x33, 0xa0, 0xce, 0xbc, 0xbb, 0xab, 0x89, 0x88, 0x10, 0x54, - 0x12, 0x90, 0x98, 0xba, 0xbd, 0x8b, 0x41, 0x46, 0x24, 0x01, 0x99, 0x8a, 0x21, 0x13, 0xb0, 0xcd, - 0x19, 0x44, 0x22, 0x10, 0x52, 0x45, 0x32, 0x11, 0x01, 0x90, 0xbb, 0xbd, 0x9b, 0x30, 0x25, 0x91, - 0xcd, 0xbd, 0xbd, 0xba, 0xa9, 0x9a, 0x08, 0x32, 0x22, 0x22, 0x01, 0xc9, 0xbf, 0x9c, 0x08, 0x53, - 0x44, 0x11, 0xa8, 0x8a, 0x21, 0x13, 0xc9, 0xab, 0x19, 0x44, 0x13, 0x11, 0x73, 0x35, 0x33, 0x33, - 0x33, 0x02, 0xda, 0xcc, 0x9a, 0x19, 0x43, 0x12, 0xca, 0xce, 0xcb, 0xca, 0xaa, 0x9a, 0x89, 0x21, - 0x32, 0x43, 0x32, 0x90, 0xdc, 0xbc, 0x89, 0x31, 0x46, 0x12, 0x99, 0x0a, 0x21, 0x03, 0xc9, 0xac, - 0x18, 0x22, 0x12, 0x21, 0x45, 0x36, 0x34, 0x42, 0x43, 0x02, 0xa0, 0xba, 0xac, 0x8a, 0x42, 0x23, - 0xb9, 0xbf, 0xbd, 0xbc, 0xad, 0xaa, 0x99, 0x08, 0x21, 0x43, 0x43, 0x01, 0xb8, 0xcd, 0xab, 0x28, - 0x35, 0x13, 0x98, 0x9a, 0x42, 0x03, 0xd9, 0xaa, 0x88, 0x01, 0x81, 0x20, 0x45, 0x45, 0x43, 0x43, - 0x44, 0x22, 0x81, 0x98, 0xba, 0x89, 0x41, 0x33, 0x90, 0xdb, 0xcc, 0xbd, 0xbd, 0xab, 0xaa, 0x99, - 0x20, 0x43, 0x53, 0x23, 0x90, 0xec, 0xaa, 0x19, 0x42, 0x02, 0x90, 0x08, 0x32, 0x13, 0xb9, 0xad, - 0x18, 0x00, 0xba, 0x18, 0x63, 0x53, 0x44, 0x44, 0x53, 0x33, 0x22, 0x98, 0xab, 0x8a, 0x20, 0x43, - 0x02, 0xa9, 0xdc, 0xdd, 0xbc, 0xac, 0xab, 0xaa, 0x08, 0x21, 0x44, 0x34, 0x02, 0xda, 0xac, 0x09, - 0x12, 0x02, 0x80, 0x00, 0x32, 0x04, 0xa9, 0x9b, 0x11, 0x80, 0xaa, 0x09, 0x11, 0x73, 0x46, 0x44, - 0x53, 0x35, 0x22, 0x80, 0xa9, 0x9a, 0x88, 0x10, 0x22, 0x82, 0xea, 0xcd, 0xcd, 0xcb, 0xab, 0xab, - 0x99, 0x09, 0x52, 0x35, 0x23, 0xb9, 0xbc, 0x89, 0x21, 0x01, 0x00, 0x31, 0x34, 0x22, 0x90, 0x88, - 0x00, 0x80, 0x9a, 0xba, 0x8b, 0x54, 0x53, 0x46, 0x55, 0x44, 0x23, 0x01, 0x98, 0x98, 0x99, 0x18, - 0x21, 0x12, 0x80, 0xdc, 0xed, 0xbc, 0xbb, 0xbb, 0xbc, 0x9a, 0x41, 0x45, 0x23, 0x90, 0xbb, 0x8a, - 0x01, 0x88, 0x88, 0x42, 0x33, 0x13, 0x21, 0x98, 0x09, 0x01, 0xca, 0xbc, 0x9a, 0x98, 0x00, 0x62, - 0x77, 0x37, 0x32, 0x12, 0x80, 0x99, 0x99, 0x9a, 0x11, 0x12, 0x12, 0x90, 0xff, 0xbd, 0xba, 0xcb, - 0xbc, 0xab, 0x29, 0x54, 0x23, 0x81, 0xa9, 0x99, 0x90, 0x99, 0x09, 0x31, 0x53, 0x23, 0x12, 0x11, - 0x00, 0x11, 0x92, 0xdb, 0x19, 0x92, 0xcf, 0x0a, 0x73, 0x46, 0x43, 0x22, 0x11, 0x98, 0xa8, 0x89, - 0x89, 0x20, 0x43, 0x82, 0xdd, 0xbd, 0xbb, 0xcc, 0xdc, 0xab, 0x09, 0x42, 0x23, 0x02, 0x00, 0x89, - 0x89, 0x9a, 0xaa, 0x30, 0x34, 0x33, 0x34, 0x12, 0x42, 0x33, 0x80, 0x09, 0x32, 0x83, 0xdf, 0xab, - 0x61, 0x45, 0x35, 0x24, 0x03, 0x00, 0x08, 0xa9, 0x9a, 0x18, 0x34, 0x02, 0xfb, 0xcb, 0xaa, 0xeb, - 0xcd, 0xbc, 0x89, 0x10, 0x32, 0x22, 0x01, 0x80, 0x98, 0xaa, 0xaa, 0x8a, 0x52, 0x32, 0x11, 0x43, - 0x24, 0x22, 0x80, 0x08, 0x44, 0x83, 0xfb, 0xac, 0x08, 0x52, 0x56, 0x33, 0x22, 0x12, 0x10, 0xa9, - 0xbb, 0x19, 0x34, 0x03, 0xcc, 0xac, 0x89, 0xfb, 0xce, 0xbc, 0xaa, 0x18, 0x11, 0x22, 0x22, 0x02, - 0x08, 0x98, 0xba, 0x9a, 0x32, 0x23, 0x32, 0x65, 0x43, 0x02, 0x88, 0x31, 0x34, 0x23, 0xb1, 0xcf, - 0x9b, 0x20, 0x47, 0x34, 0x42, 0x22, 0x11, 0x98, 0xbb, 0x0a, 0x53, 0x81, 0xbc, 0x8a, 0x80, 0xd9, - 0xff, 0xbb, 0x9c, 0x8a, 0x00, 0x21, 0x12, 0x12, 0x11, 0x88, 0x99, 0x9a, 0x28, 0x01, 0x18, 0x65, - 0x23, 0x11, 0x10, 0x20, 0x53, 0x34, 0x02, 0xdc, 0xac, 0x28, 0x53, 0x63, 0x33, 0x34, 0x23, 0x90, - 0xbb, 0x19, 0x33, 0x92, 0xcd, 0x8b, 0x22, 0xb0, 0xff, 0xbd, 0xbc, 0xa9, 0x88, 0x10, 0x11, 0x23, - 0x12, 0x81, 0x99, 0x09, 0x88, 0x88, 0x20, 0x54, 0x34, 0x12, 0x10, 0x10, 0x42, 0x46, 0x02, 0xb9, - 0xbd, 0x89, 0x32, 0x35, 0x46, 0x35, 0x13, 0x80, 0x99, 0x09, 0x32, 0x90, 0xcc, 0x89, 0x21, 0x82, - 0xfc, 0xce, 0xcb, 0xaa, 0x8a, 0x88, 0x10, 0x32, 0x23, 0x01, 0x08, 0x80, 0x88, 0x88, 0x21, 0x45, - 0x34, 0x33, 0x01, 0x09, 0x42, 0x45, 0x23, 0xc0, 0xbc, 0x8a, 0x88, 0x30, 0x77, 0x34, 0x14, 0x81, - 0x88, 0x08, 0x11, 0x90, 0xbb, 0x9c, 0x30, 0x13, 0xd9, 0xef, 0xcb, 0xbb, 0xab, 0xa9, 0x00, 0x32, - 0x33, 0x12, 0x21, 0x11, 0x88, 0x08, 0x22, 0x64, 0x35, 0x33, 0x12, 0x88, 0x30, 0x37, 0x12, 0xa0, - 0xca, 0xaa, 0xca, 0xac, 0x71, 0x46, 0x23, 0x01, 0x88, 0x10, 0x11, 0x91, 0xca, 0xab, 0x20, 0x35, - 0x91, 0xde, 0xcc, 0xac, 0xbb, 0xab, 0x09, 0x21, 0x22, 0x32, 0x21, 0x22, 0x01, 0x88, 0x01, 0x31, - 0x57, 0x34, 0x01, 0x88, 0x11, 0x34, 0x23, 0x80, 0x88, 0xa0, 0xef, 0xbb, 0x28, 0x57, 0x23, 0x02, - 0x00, 0x11, 0x23, 0x02, 0xc9, 0xac, 0x29, 0x53, 0x02, 0xca, 0xce, 0xcc, 0xcb, 0x9b, 0x9a, 0x08, - 0x11, 0x11, 0x22, 0x22, 0x21, 0x01, 0x90, 0x20, 0x65, 0x33, 0x03, 0x88, 0x30, 0x36, 0x01, 0x21, - 0x33, 0x91, 0xdf, 0xad, 0x0a, 0x53, 0x24, 0x22, 0x00, 0x21, 0x43, 0x12, 0xa8, 0xbc, 0x1a, 0x43, - 0x12, 0x91, 0xed, 0xcd, 0xcc, 0xba, 0x9a, 0x99, 0x08, 0x01, 0x21, 0x11, 0x23, 0x82, 0x99, 0x88, - 0x73, 0x34, 0x01, 0x00, 0x31, 0x24, 0x01, 0x31, 0x47, 0x02, 0xea, 0xbc, 0x9a, 0x31, 0x35, 0x23, - 0x12, 0x32, 0x46, 0x12, 0x98, 0x9a, 0x8a, 0x30, 0x34, 0x22, 0xb1, 0xef, 0xbd, 0xac, 0xbb, 0xaa, - 0x89, 0x00, 0x11, 0x31, 0x43, 0x03, 0x99, 0x19, 0x44, 0x24, 0x12, 0x11, 0x53, 0x23, 0x80, 0x40, - 0x46, 0x23, 0xc8, 0xbd, 0xab, 0x18, 0x53, 0x23, 0x11, 0x52, 0x34, 0x13, 0x81, 0xaa, 0xa9, 0x09, - 0x52, 0x34, 0x02, 0xea, 0xdd, 0xbc, 0xac, 0xba, 0xa9, 0x88, 0x08, 0x21, 0x24, 0x02, 0x88, 0x19, - 0x42, 0x33, 0x11, 0x63, 0x43, 0x13, 0x80, 0x30, 0x57, 0x23, 0x90, 0xdc, 0xab, 0x08, 0x21, 0x13, - 0x12, 0x44, 0x35, 0x14, 0x11, 0x88, 0xa9, 0x8a, 0x21, 0x35, 0x14, 0x91, 0xec, 0xdc, 0xbb, 0xac, - 0x9a, 0x9a, 0x89, 0x10, 0x32, 0x02, 0xa8, 0x18, 0x33, 0x03, 0x10, 0x64, 0x35, 0x12, 0x88, 0x18, - 0x74, 0x34, 0x82, 0xdb, 0xbb, 0x8a, 0x20, 0x11, 0x10, 0x54, 0x44, 0x33, 0x23, 0x81, 0xa8, 0xab, - 0x29, 0x35, 0x34, 0x22, 0xc0, 0xef, 0xbb, 0xac, 0xab, 0xbb, 0x9b, 0x18, 0x21, 0x02, 0x88, 0x10, - 0x34, 0x00, 0x18, 0x55, 0x34, 0x13, 0x88, 0x09, 0x74, 0x25, 0x12, 0xb9, 0xac, 0x8a, 0x88, 0x08, - 0x10, 0x52, 0x54, 0x43, 0x33, 0x12, 0x98, 0xaa, 0x88, 0x41, 0x44, 0x33, 0x01, 0xec, 0xbd, 0xbb, - 0xbd, 0xcb, 0xaa, 0x88, 0x01, 0x80, 0x00, 0x20, 0x22, 0x01, 0x08, 0x72, 0x35, 0x12, 0x90, 0x89, - 0x71, 0x35, 0x13, 0x98, 0xbb, 0xbb, 0x9a, 0xaa, 0x89, 0x42, 0x64, 0x54, 0x33, 0x22, 0x00, 0xa9, - 0x9b, 0x18, 0x73, 0x34, 0x02, 0xb8, 0xbe, 0xbc, 0xcc, 0xbc, 0xbb, 0x89, 0x88, 0x88, 0x00, 0x11, - 0x22, 0x91, 0x89, 0x62, 0x36, 0x14, 0x98, 0x9a, 0x41, 0x36, 0x33, 0x80, 0xaa, 0xba, 0xbb, 0xac, - 0x9a, 0x8a, 0x72, 0x54, 0x34, 0x33, 0x12, 0x90, 0xbb, 0x8a, 0x63, 0x44, 0x12, 0x90, 0xa9, 0xdb, - 0xdd, 0xcb, 0xab, 0x9a, 0x99, 0x99, 0x08, 0x11, 0x22, 0x00, 0x9a, 0x68, 0x36, 0x14, 0x90, 0x99, - 0x30, 0x36, 0x24, 0x12, 0x98, 0xaa, 0xb9, 0xbb, 0xbc, 0xac, 0x18, 0x46, 0x35, 0x34, 0x22, 0x01, - 0xaa, 0xab, 0x30, 0x37, 0x13, 0x12, 0x00, 0xb9, 0xef, 0xdb, 0xab, 0xaa, 0xaa, 0xa9, 0x89, 0x28, - 0x21, 0x90, 0xaa, 0x28, 0x67, 0x13, 0x91, 0x9a, 0x10, 0x44, 0x34, 0x22, 0x01, 0x99, 0x99, 0xba, - 0xdc, 0xab, 0x0a, 0x51, 0x45, 0x34, 0x34, 0x12, 0xa9, 0xaa, 0x18, 0x44, 0x32, 0x22, 0x24, 0x82, - 0xfb, 0xdc, 0xbb, 0xac, 0xaa, 0xaa, 0x9a, 0x10, 0x21, 0x90, 0xac, 0x19, 0x55, 0x33, 0x81, 0x99, - 0x09, 0x53, 0x44, 0x33, 0x12, 0x08, 0x08, 0xa9, 0xbd, 0xbd, 0x9b, 0x18, 0x52, 0x46, 0x34, 0x12, - 0x90, 0x9a, 0x19, 0x22, 0x23, 0x44, 0x53, 0x22, 0xa8, 0xce, 0xcc, 0xba, 0xcb, 0xba, 0xab, 0x18, - 0x11, 0x90, 0xbb, 0x09, 0x54, 0x34, 0x12, 0x98, 0x99, 0x31, 0x46, 0x33, 0x23, 0x02, 0x01, 0xa1, - 0xec, 0xab, 0xbb, 0xbb, 0x29, 0x57, 0x35, 0x23, 0x80, 0x98, 0x09, 0x18, 0x12, 0x32, 0x47, 0x24, - 0x81, 0xca, 0xcc, 0xbb, 0xcc, 0xcb, 0xaa, 0x88, 0x11, 0x90, 0xaa, 0x8a, 0x31, 0x45, 0x13, 0x80, - 0x9a, 0x10, 0x54, 0x34, 0x32, 0x32, 0x23, 0x80, 0xb9, 0xbd, 0xbc, 0xcd, 0x8b, 0x61, 0x44, 0x23, - 0x01, 0x80, 0x00, 0x08, 0x10, 0x31, 0x56, 0x43, 0x12, 0xa8, 0xcb, 0xdb, 0xcc, 0xdb, 0x9b, 0x89, - 0x80, 0x80, 0xa9, 0xaa, 0x10, 0x42, 0x24, 0x81, 0xaa, 0x19, 0x53, 0x43, 0x53, 0x23, 0x23, 0x01, - 0x98, 0x88, 0xdc, 0xcd, 0xaa, 0x28, 0x36, 0x34, 0x12, 0x02, 0x01, 0x00, 0x08, 0x28, 0x74, 0x44, - 0x12, 0x80, 0x99, 0xb9, 0xde, 0xbc, 0xcb, 0x99, 0x88, 0x90, 0xa9, 0x9a, 0x89, 0x31, 0x24, 0x01, - 0x99, 0x89, 0x52, 0x43, 0x53, 0x35, 0x22, 0x11, 0x11, 0x01, 0xb8, 0xdf, 0xbb, 0x0a, 0x52, 0x24, - 0x23, 0x22, 0x12, 0x00, 0x99, 0x0a, 0x73, 0x46, 0x12, 0x01, 0x01, 0x98, 0xdc, 0xcd, 0xbb, 0x9b, - 0x99, 0x88, 0xb9, 0xcb, 0x8a, 0x21, 0x33, 0x03, 0xa9, 0x08, 0x30, 0x63, 0x45, 0x44, 0x22, 0x02, - 0x22, 0x33, 0x92, 0xdd, 0xbc, 0x9b, 0x31, 0x44, 0x24, 0x33, 0x33, 0x03, 0xb8, 0x8a, 0x72, 0x44, - 0x23, 0x32, 0x32, 0x02, 0xfa, 0xcd, 0xac, 0xbb, 0x99, 0x98, 0xb9, 0xbc, 0x9b, 0x18, 0x21, 0x00, - 0x80, 0x98, 0x8a, 0x30, 0x66, 0x34, 0x14, 0x11, 0x22, 0x34, 0x02, 0xda, 0xbd, 0xbb, 0x0a, 0x42, - 0x32, 0x54, 0x24, 0x12, 0x98, 0x9a, 0x20, 0x44, 0x33, 0x44, 0x33, 0x24, 0x90, 0xdd, 0xbc, 0xbc, - 0xa9, 0x98, 0xa9, 0xcc, 0x9a, 0x89, 0x00, 0x00, 0x01, 0x80, 0x99, 0x19, 0x54, 0x44, 0x23, 0x21, - 0x42, 0x44, 0x22, 0xa0, 0xeb, 0xba, 0x89, 0x08, 0x31, 0x45, 0x45, 0x12, 0x80, 0x89, 0x08, 0x22, - 0x42, 0x43, 0x35, 0x34, 0x02, 0xb9, 0xcf, 0xac, 0x9a, 0x99, 0xaa, 0xbb, 0xbc, 0x8a, 0x89, 0x08, - 0x11, 0x81, 0xba, 0x8b, 0x73, 0x34, 0x24, 0x12, 0x42, 0x44, 0x34, 0x80, 0xaa, 0xbc, 0xab, 0xaa, - 0x89, 0x64, 0x35, 0x14, 0x01, 0x89, 0x00, 0x01, 0x12, 0x63, 0x53, 0x34, 0x24, 0x91, 0xdb, 0xbc, - 0xbb, 0x9a, 0xab, 0xcc, 0xba, 0xab, 0xa9, 0x88, 0x11, 0x81, 0xcb, 0x9b, 0x31, 0x46, 0x23, 0x22, - 0x52, 0x45, 0x24, 0x02, 0x98, 0xa9, 0xca, 0xcb, 0x8a, 0x30, 0x37, 0x34, 0x01, 0x00, 0x80, 0x11, - 0x11, 0x21, 0x64, 0x55, 0x33, 0x02, 0xc9, 0xcb, 0xbb, 0xab, 0xbb, 0xbc, 0xbc, 0xcb, 0xaa, 0x89, - 0x18, 0x80, 0xaa, 0xac, 0x29, 0x34, 0x24, 0x11, 0x52, 0x46, 0x34, 0x12, 0x80, 0x88, 0xba, 0xcd, - 0xab, 0x18, 0x44, 0x43, 0x12, 0x01, 0x10, 0x11, 0x11, 0x08, 0x61, 0x56, 0x34, 0x13, 0x90, 0xcb, - 0xcb, 0xba, 0xac, 0xba, 0xcb, 0xbc, 0xba, 0x9a, 0x08, 0x80, 0xb9, 0xbb, 0x1a, 0x54, 0x12, 0x80, - 0x41, 0x46, 0x35, 0x22, 0x11, 0x11, 0xa8, 0xdd, 0xab, 0x89, 0x31, 0x53, 0x23, 0x12, 0x11, 0x22, - 0x81, 0xb9, 0x39, 0x77, 0x27, 0x13, 0x01, 0x99, 0xba, 0xac, 0xbb, 0xcb, 0xca, 0xbc, 0xac, 0x9a, - 0x89, 0x88, 0xa8, 0xbb, 0x1a, 0x43, 0x12, 0x99, 0x30, 0x67, 0x43, 0x32, 0x43, 0x22, 0x81, 0xda, - 0xbc, 0x9a, 0x18, 0x42, 0x32, 0x23, 0x42, 0x33, 0x02, 0xda, 0x8b, 0x73, 0x37, 0x33, 0x22, 0x88, - 0xba, 0xcb, 0xac, 0xbb, 0xdb, 0xbc, 0xbc, 0xbb, 0x89, 0x88, 0xaa, 0xac, 0x89, 0x33, 0x81, 0xba, - 0x28, 0x47, 0x34, 0x34, 0x34, 0x34, 0x12, 0xb0, 0xcd, 0xbb, 0x89, 0x11, 0x23, 0x33, 0x35, 0x35, - 0x03, 0xb9, 0xbb, 0x60, 0x55, 0x43, 0x22, 0x02, 0x98, 0xba, 0xcb, 0xba, 0xcb, 0xbd, 0xae, 0xab, - 0x99, 0x99, 0xb9, 0xac, 0x89, 0x11, 0x91, 0xa9, 0x19, 0x53, 0x44, 0x43, 0x44, 0x34, 0x23, 0x91, - 0xda, 0xbb, 0x9a, 0x10, 0x11, 0x22, 0x55, 0x34, 0x23, 0x98, 0xab, 0x29, 0x55, 0x44, 0x34, 0x12, - 0x01, 0x99, 0xab, 0xbb, 0xca, 0xdc, 0xcc, 0xbb, 0xa9, 0xa8, 0xbb, 0xbc, 0x99, 0x10, 0x88, 0x9a, - 0x89, 0x32, 0x35, 0x53, 0x45, 0x44, 0x33, 0x12, 0xa9, 0xbc, 0x9b, 0x88, 0x80, 0x19, 0x73, 0x45, - 0x22, 0x80, 0xa9, 0x9a, 0x41, 0x45, 0x44, 0x33, 0x11, 0x80, 0xa9, 0x9a, 0xa9, 0xdc, 0xbe, 0xbb, - 0xaa, 0xa9, 0xbc, 0xbb, 0x9a, 0x88, 0x88, 0xaa, 0x8a, 0x21, 0x22, 0x42, 0x57, 0x54, 0x43, 0x12, - 0x90, 0xaa, 0x9b, 0x88, 0xb9, 0x9b, 0x50, 0x55, 0x23, 0x02, 0xa9, 0xab, 0x19, 0x55, 0x45, 0x24, - 0x23, 0x81, 0x88, 0x88, 0x98, 0xea, 0xcc, 0xbb, 0xab, 0xaa, 0xdb, 0xab, 0x9b, 0x99, 0x99, 0x9a, - 0x8a, 0x08, 0x11, 0x08, 0x72, 0x47, 0x44, 0x23, 0x00, 0x99, 0x98, 0x88, 0xa9, 0xac, 0x19, 0x54, - 0x34, 0x22, 0xa0, 0xbb, 0x9b, 0x41, 0x47, 0x35, 0x24, 0x02, 0x00, 0x00, 0x81, 0xb9, 0xbf, 0xac, - 0xab, 0xaa, 0xdb, 0xba, 0xaa, 0xa9, 0xaa, 0xa9, 0x9a, 0x88, 0x01, 0xb8, 0x8b, 0x77, 0x45, 0x23, - 0x11, 0x88, 0x88, 0x90, 0xa9, 0xbc, 0x8a, 0x52, 0x35, 0x24, 0x81, 0xa9, 0xbb, 0x0a, 0x73, 0x37, - 0x24, 0x12, 0x01, 0x21, 0x12, 0xa8, 0xcd, 0xcb, 0xab, 0xbb, 0xbc, 0xcb, 0xaa, 0xba, 0xba, 0xba, - 0xaa, 0x09, 0x01, 0xc9, 0xad, 0x61, 0x46, 0x33, 0x12, 0x11, 0x00, 0x80, 0xb9, 0xdc, 0xaa, 0x20, - 0x44, 0x33, 0x13, 0x90, 0xbd, 0xac, 0x20, 0x47, 0x24, 0x13, 0x12, 0x32, 0x24, 0x80, 0xba, 0xbd, - 0xcb, 0xcb, 0xcb, 0xbb, 0xbb, 0xab, 0xcb, 0xac, 0xaa, 0x88, 0x01, 0xb8, 0xbd, 0x29, 0x47, 0x34, - 0x23, 0x22, 0x12, 0x02, 0xa8, 0xcc, 0xbb, 0x08, 0x52, 0x53, 0x24, 0x02, 0xc9, 0xcb, 0x09, 0x62, - 0x34, 0x22, 0x22, 0x34, 0x24, 0x01, 0xa8, 0xca, 0xdb, 0xbb, 0xcc, 0xbb, 0xac, 0xaa, 0xba, 0xbc, - 0xaa, 0x09, 0x11, 0xb8, 0xbe, 0x89, 0x62, 0x34, 0x24, 0x23, 0x23, 0x22, 0x81, 0xca, 0xbb, 0xaa, - 0x18, 0x55, 0x44, 0x13, 0xb8, 0xbd, 0x9b, 0x31, 0x45, 0x32, 0x42, 0x43, 0x34, 0x22, 0x00, 0xa9, - 0xca, 0xdb, 0xdb, 0xbb, 0xac, 0xaa, 0xba, 0xbd, 0x9b, 0x09, 0x01, 0xa8, 0xcc, 0xaa, 0x28, 0x44, - 0x34, 0x34, 0x43, 0x23, 0x11, 0x98, 0xb9, 0xbb, 0xab, 0x60, 0x46, 0x23, 0x91, 0xcc, 0xaa, 0x10, - 0x33, 0x43, 0x34, 0x44, 0x34, 0x33, 0x11, 0x80, 0xa9, 0xdb, 0xcc, 0xbc, 0xbb, 0xab, 0xdb, 0xbc, - 0xab, 0x88, 0x00, 0xa0, 0xca, 0xac, 0x09, 0x31, 0x34, 0x35, 0x45, 0x32, 0x21, 0x00, 0x90, 0xca, - 0xbb, 0x09, 0x65, 0x43, 0x81, 0xb9, 0x9c, 0x09, 0x11, 0x22, 0x44, 0x44, 0x53, 0x33, 0x12, 0x01, - 0x00, 0xa8, 0xdc, 0xbc, 0xbb, 0xbb, 0xeb, 0xbc, 0xac, 0x99, 0x80, 0x88, 0xb9, 0xbb, 0x9a, 0x18, - 0x31, 0x55, 0x35, 0x24, 0x23, 0x23, 0x11, 0xb9, 0xcc, 0x8a, 0x72, 0x34, 0x02, 0xa8, 0xaa, 0x89, - 0x00, 0x20, 0x52, 0x45, 0x44, 0x33, 0x23, 0x12, 0x12, 0x81, 0xdb, 0xbd, 0xac, 0xbb, 0xdb, 0xbc, - 0xbc, 0xaa, 0x88, 0x98, 0xa9, 0xbb, 0xab, 0xaa, 0x18, 0x73, 0x44, 0x43, 0x33, 0x43, 0x33, 0xa0, - 0xdc, 0x9a, 0x21, 0x35, 0x23, 0x90, 0xba, 0x9a, 0x89, 0x89, 0x28, 0x57, 0x35, 0x25, 0x22, 0x22, - 0x22, 0x02, 0xb8, 0xcd, 0xba, 0xbb, 0xcc, 0xdc, 0xbb, 0xab, 0x99, 0x98, 0xaa, 0xaa, 0xbb, 0xac, - 0x8a, 0x38, 0x45, 0x34, 0x34, 0x45, 0x23, 0x82, 0xca, 0x9b, 0x18, 0x34, 0x24, 0x01, 0x99, 0x89, - 0x98, 0xa8, 0x8a, 0x73, 0x47, 0x33, 0x23, 0x34, 0x33, 0x23, 0x90, 0xda, 0xab, 0xab, 0xcc, 0xdd, - 0xbb, 0xac, 0x99, 0x98, 0x99, 0xa9, 0xb9, 0xdb, 0xaa, 0x08, 0x31, 0x42, 0x63, 0x54, 0x24, 0x02, - 0xa8, 0xbb, 0x0a, 0x41, 0x33, 0x02, 0x80, 0x89, 0x88, 0xcb, 0xac, 0x40, 0x46, 0x43, 0x43, 0x43, - 0x43, 0x33, 0x01, 0xb8, 0xaa, 0xa9, 0xeb, 0xcd, 0xbc, 0xac, 0x9a, 0x99, 0x99, 0x98, 0xa9, 0xcb, - 0xac, 0x09, 0x00, 0x08, 0x40, 0x47, 0x44, 0x12, 0x98, 0xaa, 0x8a, 0x21, 0x33, 0x14, 0x11, 0x11, - 0x01, 0xb9, 0xad, 0x19, 0x45, 0x43, 0x53, 0x53, 0x53, 0x43, 0x11, 0x88, 0x89, 0x89, 0xb9, 0xcd, - 0xbd, 0xbb, 0xbb, 0xab, 0x9a, 0x99, 0xa9, 0xcc, 0xac, 0x99, 0x88, 0xaa, 0x19, 0x57, 0x44, 0x23, - 0x01, 0xaa, 0x9b, 0x10, 0x22, 0x32, 0x32, 0x24, 0x02, 0xb9, 0xbe, 0x9b, 0x31, 0x34, 0x44, 0x45, - 0x36, 0x34, 0x22, 0x00, 0x89, 0x80, 0xa8, 0xdc, 0xcc, 0xbb, 0xcb, 0xba, 0x99, 0x89, 0x98, 0xcb, - 0xab, 0x9a, 0xa8, 0xcc, 0x9a, 0x62, 0x46, 0x33, 0x02, 0xa8, 0x9a, 0x18, 0x11, 0x21, 0x53, 0x33, - 0x23, 0x81, 0xcc, 0xab, 0x00, 0x11, 0x21, 0x66, 0x55, 0x43, 0x23, 0x11, 0x00, 0x00, 0xa8, 0xda, - 0xbc, 0xbc, 0xbd, 0xcb, 0x8a, 0x89, 0x88, 0xaa, 0xab, 0x89, 0xa9, 0xcd, 0xac, 0x09, 0x45, 0x25, - 0x13, 0x88, 0x99, 0x88, 0x08, 0x10, 0x32, 0x45, 0x22, 0x80, 0xb9, 0xab, 0x89, 0x90, 0xac, 0x69, - 0x57, 0x44, 0x32, 0x12, 0x11, 0x11, 0x80, 0xba, 0xdb, 0xcc, 0xbc, 0xbc, 0xaa, 0x88, 0x99, 0xab, - 0x9b, 0x89, 0x90, 0xfb, 0xbd, 0x8b, 0x51, 0x44, 0x22, 0x11, 0x88, 0x88, 0x80, 0x88, 0x30, 0x54, - 0x43, 0x01, 0x90, 0x8a, 0x08, 0xa8, 0xcc, 0x0b, 0x75, 0x34, 0x34, 0x32, 0x22, 0x22, 0x00, 0x98, - 0xbb, 0xdd, 0xdc, 0xbb, 0xaa, 0x9a, 0xa9, 0xbb, 0xab, 0x0a, 0x10, 0xfa, 0xcd, 0x9b, 0x28, 0x34, - 0x24, 0x22, 0x00, 0x00, 0x98, 0x99, 0x19, 0x73, 0x34, 0x13, 0x08, 0x88, 0x11, 0xa1, 0xdd, 0xab, - 0x51, 0x45, 0x34, 0x33, 0x43, 0x22, 0x11, 0x00, 0x88, 0xda, 0xdd, 0xcb, 0xba, 0x9a, 0x9a, 0xbb, - 0xac, 0x08, 0x10, 0xb0, 0xed, 0xab, 0x09, 0x32, 0x25, 0x33, 0x23, 0x21, 0x00, 0xa8, 0x8b, 0x73, - 0x34, 0x23, 0x80, 0x18, 0x32, 0x91, 0xdd, 0xbc, 0x28, 0x54, 0x34, 0x35, 0x43, 0x22, 0x11, 0x12, - 0x12, 0xa8, 0xec, 0xcc, 0xba, 0xaa, 0xaa, 0xcb, 0xab, 0x8a, 0x11, 0x90, 0xdc, 0xbc, 0x9b, 0x18, - 0x22, 0x34, 0x34, 0x33, 0x01, 0xa8, 0x9b, 0x51, 0x45, 0x12, 0x00, 0x20, 0x43, 0x82, 0xeb, 0xac, - 0x8a, 0x31, 0x45, 0x45, 0x33, 0x24, 0x21, 0x22, 0x33, 0x02, 0xd9, 0xcd, 0xac, 0xaa, 0xaa, 0xbc, - 0xac, 0x99, 0x01, 0x00, 0xba, 0xdc, 0xaa, 0x99, 0x00, 0x22, 0x44, 0x43, 0x12, 0x98, 0x89, 0x38, - 0x44, 0x12, 0x98, 0x31, 0x35, 0x03, 0xda, 0xbc, 0xab, 0x89, 0x72, 0x54, 0x53, 0x32, 0x22, 0x32, - 0x53, 0x12, 0x90, 0xdb, 0xbc, 0xaa, 0xcb, 0xcc, 0xab, 0x9a, 0x08, 0x81, 0xb8, 0xeb, 0xbb, 0x9a, - 0x88, 0x28, 0x63, 0x34, 0x23, 0x91, 0x89, 0x30, 0x34, 0x12, 0x89, 0x50, 0x35, 0x13, 0x90, 0xba, - 0xcd, 0xaa, 0x29, 0x55, 0x45, 0x33, 0x32, 0x33, 0x35, 0x34, 0x01, 0xba, 0xbc, 0xac, 0xcb, 0xcc, - 0xcb, 0x9a, 0x89, 0x80, 0x98, 0xbb, 0xbc, 0xaa, 0x9a, 0x89, 0x72, 0x44, 0x13, 0x81, 0x88, 0x20, - 0x32, 0x81, 0x88, 0x40, 0x45, 0x22, 0x01, 0xa8, 0xdc, 0xbc, 0x8a, 0x41, 0x64, 0x33, 0x23, 0x33, - 0x45, 0x34, 0x11, 0x98, 0xba, 0xaa, 0xcc, 0xbc, 0xae, 0xab, 0x8a, 0x88, 0x88, 0xba, 0xac, 0xba, - 0xba, 0x9c, 0x38, 0x46, 0x33, 0x81, 0x88, 0x31, 0x22, 0x81, 0x88, 0x30, 0x45, 0x24, 0x12, 0x91, - 0xdc, 0xcc, 0xbb, 0x18, 0x45, 0x34, 0x33, 0x33, 0x36, 0x35, 0x22, 0x00, 0x98, 0x99, 0xc9, 0xcc, - 0xcd, 0xba, 0x8a, 0x09, 0x89, 0xa9, 0xaa, 0xba, 0xdc, 0xab, 0x19, 0x63, 0x23, 0x02, 0x00, 0x21, - 0x22, 0x21, 0x20, 0x21, 0x52, 0x54, 0x33, 0x22, 0xa1, 0xcf, 0xbc, 0x89, 0x32, 0x35, 0x32, 0x42, - 0x36, 0x35, 0x22, 0x02, 0x80, 0x80, 0xa8, 0xdc, 0xbe, 0xac, 0x9b, 0x99, 0x89, 0x99, 0x89, 0xa9, - 0xdc, 0xab, 0x0a, 0x32, 0x25, 0x22, 0x21, 0x12, 0x22, 0x11, 0x11, 0x20, 0x53, 0x44, 0x54, 0x23, - 0x12, 0xda, 0xbd, 0x9a, 0x20, 0x23, 0x11, 0x52, 0x46, 0x44, 0x32, 0x11, 0x10, 0x00, 0x00, 0xda, - 0xbe, 0xbd, 0xaa, 0x9a, 0x9a, 0x99, 0x00, 0x80, 0xeb, 0xcb, 0x99, 0x20, 0x32, 0x43, 0x22, 0x23, - 0x23, 0x01, 0x11, 0x10, 0x22, 0x45, 0x45, 0x44, 0x23, 0xb8, 0xcd, 0x9b, 0x18, 0x11, 0x08, 0x18, - 0x65, 0x45, 0x32, 0x22, 0x11, 0x11, 0x21, 0xa8, 0xcf, 0xbc, 0xbb, 0xbb, 0xbb, 0x9b, 0x18, 0x81, - 0xeb, 0xcc, 0x9a, 0x09, 0x10, 0x22, 0x32, 0x32, 0x24, 0x12, 0x01, 0x11, 0x02, 0x08, 0x75, 0x47, - 0x23, 0x81, 0xca, 0xaa, 0x08, 0x12, 0x80, 0x8a, 0x73, 0x45, 0x24, 0x23, 0x12, 0x21, 0x14, 0x81, - 0xeb, 0xbc, 0xbc, 0xbc, 0xbb, 0x9b, 0x88, 0x81, 0xb9, 0xbd, 0xac, 0x99, 0x00, 0x11, 0x32, 0x34, - 0x34, 0x12, 0x22, 0x34, 0x81, 0xaa, 0x70, 0x47, 0x24, 0x11, 0x99, 0xaa, 0x08, 0x01, 0x90, 0x9a, - 0x38, 0x77, 0x43, 0x22, 0x12, 0x23, 0x34, 0x02, 0xb8, 0xcc, 0xcc, 0xdb, 0xab, 0xab, 0x89, 0x80, - 0xa8, 0xcb, 0xbc, 0x9a, 0x8a, 0x89, 0x10, 0x33, 0x33, 0x22, 0x54, 0x43, 0x90, 0xcc, 0x09, 0x56, - 0x34, 0x22, 0x90, 0x99, 0x88, 0x10, 0x90, 0xbc, 0x0b, 0x74, 0x34, 0x33, 0x32, 0x44, 0x24, 0x13, - 0x80, 0xa9, 0xeb, 0xdc, 0xbb, 0xbb, 0x8a, 0x89, 0x98, 0xca, 0xac, 0x9a, 0x9a, 0x99, 0x18, 0x22, - 0x01, 0x10, 0x55, 0x43, 0x90, 0xcc, 0x8b, 0x62, 0x35, 0x33, 0x02, 0x88, 0x08, 0x11, 0xa0, 0xdc, - 0x8b, 0x51, 0x44, 0x23, 0x42, 0x53, 0x33, 0x24, 0x21, 0x00, 0xa9, 0xce, 0xbc, 0xbc, 0xa9, 0x89, - 0x98, 0xaa, 0xbb, 0xba, 0xbb, 0x9b, 0x18, 0x01, 0xba, 0x9c, 0x73, 0x26, 0x81, 0xcb, 0xbb, 0x30, - 0x47, 0x24, 0x11, 0x00, 0x18, 0x11, 0x90, 0xeb, 0xab, 0x20, 0x44, 0x32, 0x34, 0x45, 0x43, 0x32, - 0x33, 0x22, 0x81, 0xea, 0xcc, 0xac, 0x9b, 0x9a, 0x99, 0xa9, 0xa9, 0xba, 0xbc, 0xbb, 0x89, 0x90, - 0xeb, 0x9b, 0x20, 0x35, 0x12, 0xea, 0xbc, 0x09, 0x62, 0x24, 0x12, 0x00, 0x20, 0x33, 0x91, 0xfb, - 0xba, 0x08, 0x32, 0x42, 0x44, 0x35, 0x25, 0x33, 0x34, 0x32, 0x22, 0xa0, 0xec, 0xbc, 0xaa, 0xab, - 0xaa, 0x99, 0xa9, 0xba, 0xbd, 0x9c, 0x88, 0x98, 0xca, 0xbb, 0x28, 0x45, 0x23, 0xa0, 0xcd, 0x9b, - 0x31, 0x26, 0x12, 0x01, 0x32, 0x25, 0x02, 0xb9, 0xac, 0x9a, 0x08, 0x11, 0x64, 0x44, 0x34, 0x34, - 0x34, 0x43, 0x33, 0x01, 0xc9, 0xbc, 0xbc, 0xab, 0xac, 0x99, 0x89, 0xaa, 0xbd, 0xaa, 0x99, 0x98, - 0xbc, 0xad, 0x0a, 0x52, 0x24, 0x91, 0xda, 0xaa, 0x28, 0x33, 0x12, 0x18, 0x54, 0x34, 0x12, 0x98, - 0xba, 0xbb, 0xbb, 0x99, 0x41, 0x67, 0x53, 0x32, 0x43, 0x44, 0x33, 0x13, 0x98, 0xcb, 0xbc, 0xcb, - 0xbb, 0x9a, 0x89, 0xb9, 0xbd, 0xbb, 0x9a, 0xb9, 0xcc, 0xcc, 0x9a, 0x31, 0x35, 0x01, 0xc9, 0xab, - 0x19, 0x32, 0x02, 0x20, 0x74, 0x43, 0x22, 0x81, 0x98, 0xba, 0xaa, 0xac, 0x0a, 0x73, 0x35, 0x34, - 0x34, 0x45, 0x43, 0x22, 0x01, 0x98, 0xca, 0xbc, 0xcb, 0xa9, 0x88, 0xa9, 0xcb, 0xbb, 0x9a, 0x99, - 0xdb, 0xdc, 0xaa, 0x10, 0x44, 0x02, 0x98, 0xab, 0x89, 0x11, 0x00, 0x11, 0x62, 0x35, 0x34, 0x01, - 0x80, 0xa8, 0xdb, 0xcb, 0x8a, 0x30, 0x36, 0x23, 0x44, 0x55, 0x43, 0x23, 0x22, 0x81, 0xb8, 0xdc, - 0xba, 0xaa, 0x99, 0x9a, 0xbc, 0xcb, 0x99, 0x89, 0xc9, 0xcd, 0xbb, 0x09, 0x43, 0x12, 0xa0, 0xaa, - 0x99, 0x00, 0x80, 0x08, 0x73, 0x44, 0x24, 0x12, 0x01, 0x81, 0xd9, 0xbc, 0xab, 0x20, 0x24, 0x23, - 0x63, 0x46, 0x34, 0x24, 0x33, 0x23, 0x90, 0xda, 0xcb, 0xaa, 0x9a, 0xaa, 0xdb, 0xcb, 0x99, 0x08, - 0xa9, 0xcd, 0xbc, 0x89, 0x21, 0x23, 0x80, 0x99, 0x09, 0x00, 0x80, 0x18, 0x51, 0x55, 0x33, 0x33, - 0x43, 0x33, 0xc9, 0xcd, 0x9a, 0x18, 0x01, 0x01, 0x31, 0x47, 0x54, 0x43, 0x34, 0x33, 0x12, 0xa9, - 0xbc, 0xcb, 0xaa, 0xb9, 0xdb, 0xbc, 0xaa, 0x00, 0xa8, 0xdc, 0xbc, 0x9a, 0x10, 0x22, 0x00, 0x88, - 0x18, 0x00, 0x00, 0x18, 0x51, 0x35, 0x43, 0x42, 0x44, 0x24, 0x81, 0xbb, 0xab, 0x98, 0x98, 0x99, - 0x19, 0x51, 0x56, 0x45, 0x44, 0x24, 0x22, 0x80, 0xa9, 0xbb, 0xaa, 0xba, 0xcd, 0xcc, 0x8a, 0x08, - 0x80, 0xca, 0xcc, 0x9a, 0x88, 0x01, 0x81, 0x88, 0x10, 0x10, 0x80, 0x08, 0x32, 0x26, 0x22, 0x63, - 0x45, 0x24, 0x01, 0x98, 0x98, 0x88, 0xa8, 0x99, 0x88, 0x09, 0x51, 0x57, 0x55, 0x43, 0x33, 0x02, - 0x98, 0xaa, 0x9a, 0xaa, 0xcd, 0xcc, 0x9a, 0x09, 0x00, 0xc9, 0xbc, 0xbb, 0x99, 0x08, 0x88, 0x88, - 0x00, 0x11, 0x99, 0x29, 0x64, 0x12, 0x88, 0x41, 0x47, 0x34, 0x11, 0x81, 0x88, 0x08, 0x98, 0x9a, - 0xaa, 0xdb, 0x9a, 0x71, 0x65, 0x44, 0x33, 0x23, 0x80, 0xa9, 0x89, 0x99, 0xec, 0xcb, 0xab, 0x89, - 0x80, 0xb8, 0xcd, 0xab, 0xaa, 0x89, 0x99, 0x09, 0x10, 0x01, 0xa8, 0x29, 0x54, 0x13, 0x99, 0x41, - 0x57, 0x43, 0x22, 0x11, 0x01, 0x80, 0x80, 0x90, 0xa9, 0xdb, 0xbc, 0x9a, 0x73, 0x57, 0x43, 0x23, - 0x01, 0x88, 0x08, 0x80, 0xda, 0xcc, 0xbb, 0x99, 0x08, 0xa9, 0xdb, 0xbb, 0xab, 0xab, 0xab, 0x09, - 0x00, 0x80, 0xbb, 0x19, 0x44, 0x02, 0xa9, 0x39, 0x77, 0x26, 0x22, 0x13, 0x11, 0x10, 0x10, 0x80, - 0x98, 0xba, 0xcf, 0xac, 0x19, 0x55, 0x45, 0x23, 0x12, 0x00, 0x10, 0x01, 0xc8, 0xcc, 0xbc, 0x9a, - 0x88, 0x99, 0xcb, 0xab, 0xbb, 0xcb, 0xbb, 0x09, 0x08, 0x98, 0x99, 0x09, 0x42, 0x91, 0xcb, 0x0a, - 0x65, 0x44, 0x34, 0x33, 0x22, 0x11, 0x11, 0x10, 0x11, 0x82, 0xfc, 0xcd, 0x9a, 0x50, 0x45, 0x24, - 0x22, 0x10, 0x21, 0x12, 0x90, 0xeb, 0xbc, 0xaa, 0x99, 0xa9, 0xcb, 0xbb, 0xcb, 0xcb, 0xab, 0x8a, - 0x99, 0xb9, 0xaa, 0x08, 0x22, 0x90, 0xba, 0xbc, 0x51, 0x47, 0x53, 0x33, 0x24, 0x12, 0x00, 0x10, - 0x31, 0x43, 0xa1, 0xee, 0xbb, 0x29, 0x65, 0x24, 0x23, 0x22, 0x22, 0x33, 0x02, 0xda, 0xbd, 0xba, - 0xaa, 0xbb, 0xbb, 0xcb, 0xbc, 0xcc, 0xba, 0x99, 0x98, 0xba, 0xab, 0x89, 0x11, 0x23, 0x81, 0xab, - 0x19, 0x65, 0x45, 0x35, 0x43, 0x12, 0x00, 0x00, 0x30, 0x35, 0x03, 0xfb, 0xbd, 0x89, 0x42, 0x35, - 0x43, 0x22, 0x32, 0x25, 0x12, 0xa8, 0xcb, 0xbb, 0xcb, 0xba, 0xaa, 0xab, 0xcc, 0xcc, 0xba, 0x99, - 0x9a, 0xbb, 0xbc, 0x8a, 0x18, 0x01, 0x88, 0xb9, 0xab, 0x28, 0x65, 0x45, 0x34, 0x33, 0x02, 0x88, - 0x30, 0x46, 0x22, 0xc9, 0xcd, 0x9a, 0x20, 0x35, 0x34, 0x32, 0x53, 0x34, 0x22, 0x80, 0xb9, 0xcb, - 0xcb, 0xbb, 0xaa, 0xa9, 0xdb, 0xbc, 0xcb, 0xaa, 0xa9, 0xba, 0xbc, 0xaa, 0x08, 0x80, 0x00, 0xa8, - 0xdb, 0x9a, 0x18, 0x74, 0x54, 0x33, 0x02, 0x90, 0x20, 0x45, 0x24, 0xa0, 0xcc, 0x9c, 0x18, 0x33, - 0x25, 0x33, 0x54, 0x43, 0x23, 0x12, 0x88, 0xb9, 0xcc, 0xab, 0xaa, 0xa9, 0xba, 0xcd, 0xba, 0xbb, - 0xba, 0xbc, 0xbc, 0xbb, 0x9a, 0x98, 0x08, 0x88, 0xa9, 0xcb, 0xab, 0x40, 0x77, 0x24, 0x12, 0x80, - 0x18, 0x44, 0x34, 0x01, 0xdb, 0xac, 0x09, 0x21, 0x33, 0x43, 0x45, 0x34, 0x24, 0x23, 0x02, 0x98, - 0xca, 0xbc, 0xaa, 0x99, 0xa9, 0xbc, 0xbc, 0xba, 0xac, 0xbb, 0xbc, 0xac, 0x9a, 0x89, 0x89, 0x88, - 0x98, 0xca, 0xbd, 0x8b, 0x73, 0x35, 0x13, 0x90, 0x08, 0x64, 0x34, 0x13, 0xc9, 0xcb, 0x8a, 0x00, - 0x21, 0x32, 0x46, 0x44, 0x33, 0x24, 0x23, 0x00, 0xb9, 0xcc, 0xaa, 0x9a, 0xba, 0xcb, 0xbc, 0xba, - 0xcb, 0xba, 0xbc, 0xbc, 0xaa, 0x89, 0x99, 0x00, 0x11, 0xc8, 0xcd, 0xaa, 0x30, 0x47, 0x13, 0x80, - 0x89, 0x73, 0x34, 0x14, 0x98, 0xba, 0xaa, 0x89, 0x08, 0x10, 0x54, 0x54, 0x43, 0x34, 0x33, 0x22, - 0x98, 0xba, 0xac, 0xaa, 0xbb, 0xcc, 0xbb, 0xcb, 0xba, 0xbb, 0xbd, 0xac, 0xab, 0xab, 0x9a, 0x09, - 0x22, 0xa1, 0xde, 0xcb, 0x08, 0x63, 0x22, 0x80, 0x8a, 0x72, 0x44, 0x33, 0x00, 0xa9, 0xaa, 0xab, - 0x99, 0x09, 0x52, 0x45, 0x44, 0x44, 0x33, 0x23, 0x00, 0x99, 0xaa, 0xba, 0xba, 0xcc, 0xcb, 0xba, - 0xba, 0xcb, 0xdb, 0xbb, 0xcb, 0xba, 0xbb, 0x99, 0x21, 0x91, 0xfb, 0xae, 0x89, 0x32, 0x24, 0x90, - 0xaa, 0x61, 0x45, 0x43, 0x11, 0x88, 0x99, 0xaa, 0xaa, 0x8a, 0x10, 0x53, 0x55, 0x44, 0x34, 0x33, - 0x12, 0x88, 0xa8, 0xa9, 0xb9, 0xdb, 0xcb, 0xab, 0xab, 0xbc, 0xbc, 0xcc, 0xba, 0xbb, 0xac, 0x9a, - 0x10, 0x12, 0xd9, 0xbd, 0x9a, 0x32, 0x25, 0x90, 0xbb, 0x28, 0x57, 0x43, 0x22, 0x01, 0x98, 0xaa, - 0xab, 0xab, 0x9a, 0x18, 0x73, 0x47, 0x44, 0x33, 0x22, 0x01, 0x88, 0x88, 0x98, 0xb9, 0xbc, 0xac, - 0xab, 0xcb, 0xbc, 0xbb, 0xcc, 0xdb, 0xba, 0x9b, 0x18, 0x23, 0xb8, 0xce, 0x9a, 0x21, 0x33, 0x90, - 0xbc, 0x0a, 0x55, 0x35, 0x33, 0x23, 0x02, 0xa9, 0xcb, 0xaa, 0xbb, 0xbc, 0x18, 0x75, 0x54, 0x33, - 0x24, 0x11, 0x00, 0x08, 0x98, 0xaa, 0xcb, 0xab, 0xbb, 0xdb, 0xcb, 0xbb, 0xbb, 0xbe, 0xbd, 0x9b, - 0x19, 0x21, 0x90, 0xcd, 0xaa, 0x20, 0x33, 0x81, 0xca, 0x9b, 0x52, 0x46, 0x43, 0x23, 0x12, 0x90, - 0xa9, 0xb9, 0xcb, 0xbc, 0xab, 0x51, 0x65, 0x34, 0x24, 0x12, 0x02, 0x01, 0x88, 0x99, 0xbb, 0xcb, - 0xab, 0xcb, 0xbc, 0xbb, 0xba, 0xdd, 0xbd, 0xab, 0x09, 0x11, 0x90, 0xcc, 0xab, 0x08, 0x33, 0x02, - 0xb9, 0xab, 0x28, 0x67, 0x34, 0x34, 0x22, 0x01, 0x89, 0xa9, 0xba, 0xcd, 0xbb, 0x09, 0x64, 0x45, - 0x33, 0x33, 0x32, 0x21, 0x00, 0x88, 0xbb, 0xcb, 0xbb, 0xcc, 0xac, 0xab, 0xa9, 0xfb, 0xdc, 0xaa, - 0x89, 0x00, 0x80, 0xcb, 0xbb, 0x0a, 0x11, 0x02, 0x90, 0xcb, 0x8a, 0x61, 0x55, 0x43, 0x22, 0x11, - 0x00, 0x80, 0x98, 0xdb, 0xbc, 0xab, 0x41, 0x56, 0x43, 0x33, 0x33, 0x23, 0x22, 0x80, 0xa8, 0xba, - 0xcb, 0xcc, 0xbc, 0x9a, 0x99, 0xda, 0xbe, 0xbc, 0x8a, 0x18, 0x80, 0xba, 0xad, 0x9a, 0x10, 0x12, - 0x01, 0xa9, 0xcb, 0x29, 0x56, 0x35, 0x23, 0x13, 0x12, 0x10, 0x88, 0xda, 0xcd, 0xbb, 0x09, 0x62, - 0x34, 0x35, 0x42, 0x22, 0x13, 0x02, 0x88, 0x88, 0xaa, 0xcd, 0xcb, 0x9a, 0x88, 0xa9, 0xde, 0xcb, - 0x99, 0x08, 0x80, 0xa8, 0xbb, 0x9c, 0x09, 0x10, 0x02, 0xa0, 0xcc, 0x8a, 0x62, 0x44, 0x43, 0x22, - 0x21, 0x21, 0x12, 0xb8, 0xdd, 0xbc, 0x9a, 0x20, 0x54, 0x53, 0x33, 0x34, 0x33, 0x12, 0x01, 0x01, - 0x98, 0xcc, 0xbd, 0xab, 0x08, 0xa8, 0xdd, 0xbc, 0xab, 0x89, 0x88, 0xa8, 0xcb, 0xbb, 0x9b, 0x08, - 0x22, 0x98, 0xcc, 0xbb, 0x28, 0x47, 0x34, 0x33, 0x33, 0x43, 0x33, 0x82, 0xea, 0xcc, 0xab, 0x09, - 0x42, 0x44, 0x44, 0x34, 0x32, 0x22, 0x11, 0x12, 0x01, 0xea, 0xdb, 0x9a, 0x09, 0x88, 0xdb, 0xbd, - 0xbb, 0x9a, 0x98, 0x99, 0xba, 0xbd, 0x9b, 0x19, 0x11, 0x81, 0xc9, 0xbc, 0x0a, 0x73, 0x25, 0x33, - 0x32, 0x24, 0x24, 0x13, 0xa0, 0xce, 0xab, 0x9a, 0x18, 0x52, 0x54, 0x34, 0x33, 0x33, 0x22, 0x43, - 0x12, 0xb0, 0xcd, 0xab, 0x09, 0x88, 0xda, 0xbd, 0xbc, 0xaa, 0x99, 0x88, 0xba, 0xdb, 0xbb, 0x89, - 0x00, 0x01, 0xb8, 0xcd, 0x9a, 0x30, 0x46, 0x42, 0x22, 0x33, 0x35, 0x33, 0x82, 0xdb, 0xbc, 0xbb, - 0x9a, 0x18, 0x55, 0x35, 0x34, 0x33, 0x32, 0x53, 0x22, 0x90, 0xdb, 0xab, 0x89, 0x90, 0xb9, 0xce, - 0xac, 0xab, 0x9a, 0x88, 0xaa, 0xdb, 0xcb, 0x99, 0x09, 0x01, 0x98, 0xbc, 0xbb, 0x29, 0x64, 0x43, - 0x32, 0x34, 0x35, 0x34, 0x02, 0x98, 0xcb, 0xac, 0xcb, 0x9a, 0x31, 0x46, 0x34, 0x33, 0x43, 0x43, - 0x24, 0x81, 0xa9, 0xba, 0x99, 0x09, 0xa9, 0xec, 0xbc, 0xcb, 0x9a, 0x99, 0x99, 0xcb, 0xcb, 0xab, - 0x8a, 0x80, 0x98, 0xbc, 0xad, 0x8a, 0x22, 0x44, 0x22, 0x34, 0x46, 0x33, 0x23, 0x81, 0xa8, 0xdb, - 0xbc, 0xac, 0x19, 0x53, 0x44, 0x22, 0x43, 0x34, 0x34, 0x12, 0x98, 0xaa, 0x9b, 0x88, 0x98, 0xda, - 0xcd, 0xbc, 0xaa, 0x9a, 0xa9, 0xca, 0xbc, 0xbb, 0x9b, 0x08, 0x80, 0xca, 0xbc, 0x9b, 0x10, 0x43, - 0x32, 0x54, 0x54, 0x34, 0x33, 0x13, 0x01, 0xa9, 0xdc, 0xbc, 0x89, 0x31, 0x35, 0x33, 0x54, 0x53, - 0x24, 0x13, 0x81, 0x99, 0x9a, 0x88, 0x80, 0xb8, 0xcd, 0xcc, 0xab, 0xaa, 0x9a, 0xbb, 0xcd, 0xbb, - 0xab, 0x09, 0x88, 0xb9, 0xbc, 0xab, 0x19, 0x21, 0x10, 0x62, 0x46, 0x35, 0x33, 0x24, 0x21, 0x01, - 0xea, 0xdb, 0x99, 0x18, 0x22, 0x22, 0x53, 0x45, 0x44, 0x22, 0x02, 0x90, 0x99, 0x98, 0x00, 0x80, - 0xda, 0xdc, 0xba, 0xaa, 0xaa, 0xaa, 0xdc, 0xcb, 0xaa, 0x89, 0x88, 0x99, 0xbb, 0xaa, 0x08, 0x01, - 0x88, 0x18, 0x67, 0x44, 0x22, 0x33, 0x35, 0x12, 0xb8, 0xbe, 0xab, 0x09, 0x11, 0x21, 0x43, 0x56, - 0x44, 0x33, 0x23, 0x01, 0x89, 0x09, 0x10, 0x11, 0xb8, 0xdd, 0xcb, 0xbb, 0xa9, 0xb9, 0xcc, 0xcc, - 0xbb, 0x99, 0x89, 0xb9, 0xcb, 0xaa, 0x88, 0x00, 0xa9, 0x09, 0x74, 0x34, 0x43, 0x43, 0x35, 0x33, - 0x90, 0xca, 0xcb, 0x99, 0x00, 0x80, 0x10, 0x64, 0x45, 0x43, 0x33, 0x11, 0x80, 0x09, 0x08, 0x10, - 0x90, 0xeb, 0xcc, 0xbb, 0xaa, 0xba, 0xdb, 0xcc, 0xbb, 0x9a, 0x89, 0xa9, 0xbc, 0xaa, 0x09, 0x98, - 0xaa, 0x8a, 0x72, 0x43, 0x32, 0x55, 0x44, 0x24, 0x01, 0xa8, 0xaa, 0x9a, 0x88, 0x89, 0x8a, 0x40, - 0x66, 0x34, 0x34, 0x22, 0x01, 0x80, 0x00, 0x11, 0x01, 0xc9, 0xdc, 0xcb, 0xaa, 0xa9, 0xca, 0xbc, - 0xbc, 0xab, 0x98, 0xa9, 0xbc, 0xab, 0x89, 0xb9, 0xbc, 0x8a, 0x22, 0x24, 0x43, 0x55, 0x46, 0x33, - 0x23, 0x90, 0xaa, 0x9a, 0xaa, 0xa9, 0xbc, 0x8b, 0x73, 0x46, 0x34, 0x23, 0x12, 0x01, 0x00, 0x21, - 0x21, 0x98, 0xcd, 0xcc, 0xaa, 0x99, 0xba, 0xcd, 0xcb, 0x9a, 0x99, 0xa9, 0xcb, 0x9a, 0x98, 0xba, - 0xac, 0x89, 0x21, 0x11, 0x10, 0x73, 0x57, 0x34, 0x23, 0x01, 0x98, 0x99, 0x89, 0xb9, 0xdb, 0xaa, - 0x18, 0x56, 0x35, 0x43, 0x12, 0x01, 0x10, 0x21, 0x22, 0x01, 0xca, 0xcd, 0xba, 0x99, 0xba, 0xdd, - 0xcb, 0xaa, 0xa9, 0xaa, 0xac, 0x9a, 0x99, 0xbb, 0xac, 0x9a, 0x10, 0x81, 0x99, 0x51, 0x57, 0x35, - 0x24, 0x12, 0x81, 0x80, 0x80, 0x98, 0xca, 0xcb, 0x8a, 0x51, 0x45, 0x34, 0x32, 0x12, 0x01, 0x22, - 0x33, 0x13, 0xa8, 0xce, 0xbb, 0x9a, 0xc9, 0xdc, 0xcb, 0xaa, 0xb9, 0xca, 0xaa, 0xaa, 0xa9, 0xcb, - 0xcb, 0x8a, 0x00, 0x88, 0xba, 0x8a, 0x74, 0x37, 0x34, 0x13, 0x02, 0x00, 0x00, 0x88, 0xba, 0xcd, - 0xbb, 0x08, 0x64, 0x53, 0x33, 0x23, 0x12, 0x32, 0x43, 0x33, 0x91, 0xdb, 0xab, 0x9a, 0xb9, 0xde, - 0xbb, 0xcb, 0xba, 0xbc, 0xba, 0xab, 0xb9, 0xdb, 0xbc, 0x9a, 0x00, 0x90, 0xca, 0xbb, 0x30, 0x77, - 0x43, 0x23, 0x12, 0x11, 0x11, 0x00, 0xa8, 0xcc, 0xcc, 0x8a, 0x20, 0x54, 0x43, 0x23, 0x12, 0x22, - 0x34, 0x34, 0x01, 0xb9, 0xaa, 0x89, 0xb9, 0xec, 0xac, 0xbb, 0xbc, 0xbc, 0xac, 0x9a, 0xaa, 0xbb, - 0xbd, 0xaa, 0x09, 0x80, 0xda, 0xcb, 0x0a, 0x62, 0x45, 0x33, 0x23, 0x13, 0x22, 0x22, 0x80, 0xeb, - 0xcc, 0xab, 0x0a, 0x42, 0x45, 0x23, 0x22, 0x22, 0x35, 0x24, 0x12, 0x98, 0x99, 0x89, 0xa9, 0xdb, - 0xbc, 0xbb, 0xcd, 0xcb, 0xbb, 0xaa, 0xa9, 0xcb, 0xbc, 0xbb, 0x09, 0x80, 0xc9, 0xcd, 0x9a, 0x28, - 0x55, 0x43, 0x23, 0x23, 0x32, 0x32, 0x03, 0xb8, 0xcf, 0xcb, 0x9a, 0x18, 0x53, 0x33, 0x23, 0x43, - 0x44, 0x34, 0x12, 0x80, 0x88, 0x88, 0x98, 0xbb, 0xdb, 0xcb, 0xdb, 0xcc, 0xbb, 0xaa, 0xaa, 0xcb, - 0xcc, 0xaa, 0x99, 0x80, 0xb8, 0xdc, 0xab, 0x09, 0x52, 0x44, 0x33, 0x33, 0x43, 0x43, 0x22, 0x00, - 0xca, 0xcd, 0xab, 0x89, 0x32, 0x34, 0x23, 0x43, 0x45, 0x34, 0x22, 0x00, 0x00, 0x00, 0x88, 0xa9, - 0x9a, 0xba, 0xcd, 0xcd, 0xac, 0xab, 0xa9, 0xca, 0xcb, 0xbb, 0x9a, 0x09, 0xa8, 0xcd, 0xbc, 0x9a, - 0x28, 0x54, 0x43, 0x23, 0x24, 0x24, 0x33, 0x22, 0xa0, 0xec, 0xbb, 0x9b, 0x20, 0x23, 0x23, 0x44, - 0x45, 0x43, 0x23, 0x02, 0x11, 0x00, 0x98, 0x99, 0x98, 0x89, 0xea, 0xdc, 0xcb, 0xab, 0x9a, 0xcb, - 0xcc, 0xab, 0xaa, 0x89, 0x88, 0xdb, 0xcc, 0xab, 0x89, 0x32, 0x35, 0x34, 0x34, 0x34, 0x43, 0x33, - 0x02, 0xda, 0xcc, 0xaa, 0x08, 0x10, 0x10, 0x31, 0x55, 0x43, 0x33, 0x23, 0x21, 0x11, 0x80, 0x98, - 0x89, 0x80, 0xb8, 0xdf, 0xcb, 0xbb, 0xaa, 0xcb, 0xdc, 0xbb, 0xab, 0x8a, 0x88, 0xb9, 0xce, 0xbb, - 0x9a, 0x10, 0x53, 0x44, 0x23, 0x34, 0x34, 0x35, 0x22, 0xa8, 0xcc, 0xaa, 0x8a, 0x88, 0x88, 0x10, - 0x63, 0x44, 0x33, 0x33, 0x23, 0x22, 0x00, 0x99, 0x89, 0x10, 0x90, 0xde, 0xbc, 0xac, 0xaa, 0xca, - 0xcc, 0xbc, 0xac, 0x8a, 0x88, 0x99, 0xbc, 0xcc, 0xaa, 0x89, 0x10, 0x34, 0x33, 0x53, 0x54, 0x44, - 0x22, 0x81, 0xb9, 0xab, 0x9b, 0x99, 0xa9, 0x0a, 0x52, 0x45, 0x34, 0x43, 0x33, 0x23, 0x12, 0x80, - 0x08, 0x20, 0x01, 0xda, 0xbd, 0xbc, 0xba, 0xca, 0xcc, 0xcd, 0xab, 0xaa, 0x88, 0x99, 0xca, 0xcc, - 0xba, 0x9b, 0x18, 0x32, 0x23, 0x32, 0x67, 0x44, 0x33, 0x12, 0x98, 0xaa, 0xaa, 0xa9, 0xbb, 0x9b, - 0x30, 0x55, 0x44, 0x43, 0x43, 0x32, 0x12, 0x81, 0x00, 0x11, 0x81, 0xa9, 0xdc, 0xbb, 0x9c, 0xa9, - 0xfb, 0xcc, 0xcb, 0x9a, 0x99, 0x88, 0xa9, 0xbc, 0xbd, 0xab, 0x89, 0x21, 0x01, 0x10, 0x73, 0x57, - 0x32, 0x13, 0x81, 0x98, 0x99, 0xa9, 0xcb, 0xaa, 0x89, 0x31, 0x63, 0x34, 0x35, 0x34, 0x22, 0x01, - 0x01, 0x11, 0x12, 0x80, 0xcb, 0xcc, 0x9a, 0x89, 0xdb, 0xce, 0xbb, 0xac, 0x99, 0x89, 0x88, 0xca, - 0xcd, 0xbb, 0x8a, 0x08, 0x80, 0x89, 0x40, 0x67, 0x43, 0x23, 0x12, 0x00, 0x98, 0xa8, 0xba, 0xac, - 0x99, 0x18, 0x21, 0x45, 0x45, 0x33, 0x33, 0x12, 0x11, 0x21, 0x32, 0x81, 0xda, 0xbc, 0xab, 0xa9, - 0xfa, 0xcc, 0xbc, 0xac, 0xab, 0x99, 0x88, 0xc9, 0xcd, 0xcb, 0x9a, 0x88, 0x88, 0x9a, 0x1a, 0x64, - 0x45, 0x23, 0x22, 0x02, 0x81, 0x90, 0xb9, 0xab, 0x9b, 0x89, 0x20, 0x64, 0x54, 0x43, 0x32, 0x12, - 0x11, 0x12, 0x23, 0x03, 0xb8, 0xad, 0xaa, 0x89, 0xca, 0xdd, 0xcc, 0xac, 0xbb, 0x9a, 0x88, 0xb9, - 0xed, 0xbb, 0xab, 0x99, 0x99, 0xbb, 0x9b, 0x72, 0x45, 0x43, 0x23, 0x23, 0x12, 0x80, 0x99, 0xba, - 0xaa, 0x9a, 0x09, 0x41, 0x56, 0x44, 0x32, 0x22, 0x12, 0x21, 0x33, 0x14, 0x90, 0xba, 0xaa, 0x9a, - 0xba, 0xec, 0xcd, 0xbd, 0xbc, 0x9a, 0x88, 0xa8, 0xdc, 0xcc, 0xaa, 0x89, 0x99, 0xaa, 0xbb, 0x18, - 0x55, 0x34, 0x34, 0x32, 0x33, 0x11, 0x88, 0x99, 0xaa, 0xaa, 0x9a, 0x18, 0x65, 0x45, 0x33, 0x33, - 0x22, 0x32, 0x34, 0x24, 0x00, 0x99, 0x98, 0x88, 0x09, 0xa9, 0xfd, 0xdc, 0xcb, 0x9a, 0x09, 0x98, - 0xdb, 0xbd, 0xbb, 0x9a, 0xa9, 0xdb, 0xbb, 0x9a, 0x31, 0x55, 0x43, 0x43, 0x23, 0x13, 0x01, 0x88, - 0x99, 0xaa, 0xbb, 0xab, 0x40, 0x47, 0x25, 0x23, 0x22, 0x22, 0x34, 0x23, 0x13, 0x80, 0x88, 0x99, - 0x18, 0x22, 0xc8, 0xff, 0xbd, 0xaa, 0x88, 0x90, 0xd9, 0xcc, 0xab, 0xaa, 0xa9, 0xbc, 0xcb, 0x9b, - 0x09, 0x41, 0x44, 0x34, 0x43, 0x23, 0x12, 0x11, 0x08, 0xa9, 0xbb, 0xbc, 0x0b, 0x73, 0x35, 0x23, - 0x23, 0x43, 0x33, 0x24, 0x23, 0x00, 0x80, 0x89, 0x08, 0x44, 0x12, 0xfc, 0xbd, 0xbb, 0x8a, 0x80, - 0xb9, 0xbf, 0xbc, 0xaa, 0xb9, 0xcb, 0xcc, 0xaa, 0x9a, 0x08, 0x42, 0x44, 0x34, 0x33, 0x33, 0x22, - 0x11, 0x80, 0xda, 0xbc, 0xab, 0x20, 0x45, 0x43, 0x32, 0x32, 0x34, 0x33, 0x24, 0x11, 0x81, 0xa9, - 0x18, 0x54, 0x24, 0xa8, 0xcf, 0xbb, 0x9a, 0x80, 0xb8, 0xcc, 0xbc, 0xab, 0xba, 0xbc, 0xcd, 0xba, - 0xab, 0x8a, 0x30, 0x63, 0x44, 0x33, 0x33, 0x32, 0x22, 0x12, 0xc8, 0xcc, 0xab, 0x89, 0x42, 0x43, - 0x33, 0x34, 0x34, 0x33, 0x43, 0x32, 0x80, 0x99, 0x09, 0x54, 0x35, 0x81, 0xdc, 0xbc, 0x99, 0x89, - 0xa8, 0xcb, 0xcc, 0xaa, 0xab, 0xbc, 0xcc, 0xbb, 0xbc, 0xaa, 0x88, 0x41, 0x53, 0x34, 0x24, 0x32, - 0x33, 0x32, 0x01, 0xca, 0xac, 0x9a, 0x10, 0x43, 0x53, 0x33, 0x34, 0x32, 0x44, 0x33, 0x02, 0x98, - 0x89, 0x63, 0x35, 0x03, 0xc9, 0xbd, 0xaa, 0x99, 0xa8, 0xcb, 0xbc, 0xbc, 0xba, 0xdb, 0xdb, 0xcb, - 0xac, 0xab, 0x9b, 0x08, 0x42, 0x44, 0x33, 0x24, 0x24, 0x33, 0x12, 0xa8, 0xcb, 0xba, 0x8a, 0x20, - 0x34, 0x35, 0x33, 0x43, 0x63, 0x33, 0x14, 0x88, 0x8a, 0x40, 0x35, 0x23, 0xa0, 0xbd, 0x9c, 0x9a, - 0x98, 0xbb, 0xbd, 0xbc, 0xbb, 0xdb, 0xdb, 0xcb, 0xbc, 0xbc, 0xab, 0x8a, 0x10, 0x43, 0x34, 0x43, - 0x34, 0x35, 0x12, 0x01, 0x99, 0xaa, 0xaa, 0x08, 0x32, 0x36, 0x22, 0x33, 0x55, 0x34, 0x23, 0x91, - 0x99, 0x30, 0x46, 0x23, 0x81, 0xca, 0xba, 0xaa, 0xaa, 0xcb, 0xbd, 0xdb, 0xaa, 0xcb, 0xbb, 0xbd, - 0xbd, 0xcc, 0xbb, 0xaa, 0x08, 0x11, 0x33, 0x44, 0x44, 0x34, 0x23, 0x22, 0x80, 0xa8, 0xba, 0x9a, - 0x20, 0x34, 0x23, 0x32, 0x56, 0x45, 0x23, 0x01, 0x89, 0x18, 0x44, 0x43, 0x11, 0x99, 0xaa, 0xab, - 0xb9, 0xda, 0xbc, 0xcb, 0xbb, 0xbc, 0xcb, 0xcc, 0xbc, 0xbd, 0xcc, 0xaa, 0x89, 0x88, 0x10, 0x31, - 0x63, 0x34, 0x43, 0x23, 0x01, 0x80, 0xaa, 0xaa, 0x08, 0x21, 0x12, 0x10, 0x75, 0x35, 0x25, 0x02, - 0x80, 0x00, 0x42, 0x24, 0x22, 0x81, 0x99, 0x9a, 0xa9, 0xcb, 0xbc, 0xbd, 0xbb, 0xbc, 0xdb, 0xbb, - 0xdc, 0xcc, 0xdb, 0xba, 0x9a, 0x99, 0x88, 0x00, 0x32, 0x36, 0x34, 0x24, 0x22, 0x81, 0xa8, 0xaa, - 0x89, 0x11, 0x01, 0x09, 0x73, 0x56, 0x33, 0x23, 0x01, 0x10, 0x42, 0x35, 0x24, 0x11, 0x00, 0x80, - 0x80, 0xa8, 0xca, 0xbc, 0xbc, 0xbc, 0xbb, 0xcb, 0xdb, 0xdc, 0xcc, 0xbb, 0xba, 0x9a, 0x9a, 0x89, - 0x21, 0x53, 0x44, 0x43, 0x23, 0x12, 0xa8, 0xaa, 0x89, 0x00, 0x80, 0xbb, 0x38, 0x77, 0x25, 0x13, - 0x11, 0x08, 0x32, 0x35, 0x34, 0x23, 0x12, 0x11, 0x00, 0x90, 0xca, 0xdb, 0xcb, 0xbc, 0xac, 0x9a, - 0xba, 0xec, 0xcc, 0xac, 0xbb, 0xab, 0xaa, 0x9a, 0x09, 0x31, 0x63, 0x44, 0x33, 0x13, 0x90, 0xaa, - 0x99, 0x01, 0x90, 0xcc, 0x8a, 0x72, 0x44, 0x33, 0x11, 0x00, 0x22, 0x55, 0x33, 0x34, 0x22, 0x22, - 0x11, 0x01, 0x88, 0xa9, 0xcc, 0xbd, 0xbb, 0x9b, 0xa9, 0xec, 0xdc, 0xcb, 0xbb, 0xac, 0xaa, 0x9a, - 0x89, 0x00, 0x42, 0x54, 0x43, 0x23, 0x80, 0x98, 0x88, 0x10, 0x98, 0xeb, 0xaa, 0x38, 0x45, 0x24, - 0x22, 0x10, 0x20, 0x63, 0x34, 0x24, 0x23, 0x23, 0x12, 0x00, 0x00, 0x99, 0xdb, 0xcc, 0xac, 0x9a, - 0x99, 0xca, 0xdd, 0xdb, 0xbb, 0xbc, 0xba, 0xaa, 0x9a, 0x88, 0x28, 0x54, 0x35, 0x24, 0x11, 0x88, - 0x08, 0x00, 0x90, 0xcc, 0xcb, 0x09, 0x41, 0x43, 0x22, 0x12, 0x20, 0x53, 0x44, 0x43, 0x33, 0x33, - 0x22, 0x12, 0x11, 0x11, 0xa9, 0xdc, 0xad, 0x9b, 0x99, 0xba, 0xce, 0xcc, 0xbc, 0xbc, 0xbb, 0xab, - 0xaa, 0xaa, 0x89, 0x52, 0x55, 0x33, 0x12, 0x00, 0x00, 0x11, 0x80, 0xdb, 0xcc, 0x9a, 0x18, 0x53, - 0x23, 0x22, 0x21, 0x32, 0x45, 0x34, 0x44, 0x32, 0x22, 0x12, 0x21, 0x12, 0x91, 0xea, 0xcb, 0xba, - 0xa9, 0xb9, 0xdd, 0xdb, 0xdb, 0xcb, 0xbb, 0xab, 0xba, 0xbb, 0xab, 0x28, 0x56, 0x34, 0x22, 0x11, - 0x21, 0x22, 0x11, 0xa8, 0xce, 0xab, 0x09, 0x31, 0x43, 0x23, 0x22, 0x32, 0x44, 0x44, 0x53, 0x43, - 0x22, 0x22, 0x32, 0x32, 0x02, 0xa9, 0xcd, 0xab, 0xaa, 0xbb, 0xbd, 0xcd, 0xeb, 0xdb, 0xba, 0xab, - 0xba, 0xbb, 0xbc, 0x89, 0x52, 0x44, 0x23, 0x12, 0x22, 0x32, 0x33, 0x92, 0xcc, 0xad, 0x9a, 0x28, - 0x32, 0x43, 0x23, 0x32, 0x42, 0x63, 0x34, 0x35, 0x32, 0x23, 0x32, 0x43, 0x12, 0xa0, 0xcb, 0xcb, - 0xbb, 0xac, 0xba, 0xbd, 0xdd, 0xdb, 0xcb, 0xaa, 0xba, 0xcb, 0xcb, 0x9a, 0x10, 0x53, 0x33, 0x22, - 0x33, 0x34, 0x25, 0x02, 0x98, 0xbc, 0xab, 0x09, 0x21, 0x43, 0x24, 0x23, 0x21, 0x44, 0x45, 0x53, - 0x23, 0x32, 0x42, 0x32, 0x23, 0x00, 0xa9, 0xcb, 0xcb, 0xcb, 0xaa, 0xca, 0xcc, 0xcd, 0xbc, 0xba, - 0xba, 0xbc, 0xbd, 0xab, 0x89, 0x22, 0x34, 0x32, 0x32, 0x54, 0x43, 0x22, 0x80, 0xb9, 0xab, 0x9b, - 0x08, 0x42, 0x34, 0x32, 0x12, 0x43, 0x46, 0x35, 0x33, 0x33, 0x43, 0x34, 0x23, 0x11, 0x88, 0xb9, - 0xdb, 0xcb, 0x9a, 0xa9, 0xfb, 0xcc, 0xcc, 0xaa, 0xba, 0xcb, 0xcc, 0xab, 0x9a, 0x10, 0x22, 0x32, - 0x32, 0x35, 0x36, 0x33, 0x12, 0x98, 0xaa, 0xab, 0x0a, 0x20, 0x35, 0x24, 0x02, 0x31, 0x55, 0x44, - 0x33, 0x33, 0x34, 0x34, 0x33, 0x23, 0x01, 0x88, 0xcb, 0xbc, 0x9b, 0x99, 0xeb, 0xce, 0xbc, 0xbb, - 0xcb, 0xcb, 0xbd, 0xbc, 0xaa, 0x89, 0x10, 0x11, 0x11, 0x43, 0x35, 0x34, 0x23, 0x81, 0xa8, 0xba, - 0xaa, 0x18, 0x53, 0x33, 0x22, 0x32, 0x47, 0x53, 0x33, 0x43, 0x43, 0x33, 0x34, 0x23, 0x23, 0x01, - 0xa8, 0xbd, 0x9a, 0x08, 0xc9, 0xdd, 0xcc, 0xbb, 0xba, 0xdb, 0xcc, 0xbc, 0xbb, 0x9a, 0x88, 0x00, - 0x01, 0x32, 0x36, 0x35, 0x32, 0x12, 0x80, 0xb9, 0xba, 0x89, 0x42, 0x32, 0x22, 0x32, 0x55, 0x35, - 0x34, 0x33, 0x35, 0x34, 0x33, 0x34, 0x33, 0x33, 0x90, 0xbb, 0x9c, 0x09, 0xa0, 0xed, 0xcc, 0xab, - 0xbb, 0xbc, 0xcd, 0xbd, 0xbb, 0xab, 0x99, 0x89, 0x88, 0x10, 0x63, 0x34, 0x43, 0x22, 0x11, 0x98, - 0xab, 0x89, 0x11, 0x23, 0x22, 0x31, 0x55, 0x44, 0x43, 0x42, 0x43, 0x33, 0x43, 0x34, 0x34, 0x23, - 0x02, 0xa8, 0x9a, 0x09, 0x80, 0xea, 0xcd, 0xcb, 0xaa, 0xba, 0xec, 0xdb, 0xcb, 0xaa, 0x9a, 0x99, - 0x99, 0x08, 0x31, 0x44, 0x34, 0x34, 0x12, 0x90, 0xa9, 0x99, 0x00, 0x11, 0x11, 0x10, 0x52, 0x44, - 0x33, 0x54, 0x33, 0x44, 0x32, 0x44, 0x53, 0x23, 0x12, 0x00, 0x89, 0x08, 0x10, 0xb8, 0xcd, 0xbc, - 0xab, 0xba, 0xdc, 0xcd, 0xbc, 0xac, 0xaa, 0x9a, 0xaa, 0x99, 0x08, 0x32, 0x36, 0x25, 0x23, 0x01, - 0x98, 0x99, 0x08, 0x00, 0x08, 0x08, 0x21, 0x53, 0x53, 0x53, 0x53, 0x33, 0x43, 0x63, 0x53, 0x33, - 0x33, 0x01, 0x80, 0x00, 0x11, 0x90, 0xdc, 0xcb, 0xaa, 0x9a, 0xdb, 0xdd, 0xbc, 0xcb, 0xbb, 0xba, - 0xac, 0x9a, 0x9a, 0x00, 0x53, 0x34, 0x34, 0x12, 0x80, 0x89, 0x09, 0x88, 0x88, 0x08, 0x28, 0x21, - 0x42, 0x55, 0x44, 0x32, 0x23, 0x44, 0x54, 0x34, 0x23, 0x12, 0x10, 0x00, 0x11, 0x81, 0xca, 0xcc, - 0xab, 0x98, 0xb9, 0xed, 0xcc, 0xcb, 0xbb, 0xcb, 0xba, 0xba, 0xaa, 0x99, 0x31, 0x55, 0x43, 0x22, - 0x01, 0x00, 0x08, 0x08, 0x89, 0x08, 0x10, 0x08, 0x11, 0x55, 0x53, 0x33, 0x22, 0x43, 0x46, 0x35, - 0x24, 0x22, 0x11, 0x10, 0x12, 0x13, 0xa8, 0xbd, 0xab, 0x89, 0x99, 0xdc, 0xdd, 0xcb, 0xbc, 0xbb, - 0xcb, 0xba, 0xbb, 0xab, 0x09, 0x63, 0x53, 0x22, 0x22, 0x10, 0x10, 0x88, 0x88, 0x88, 0x80, 0x98, - 0x08, 0x62, 0x44, 0x43, 0x11, 0x31, 0x55, 0x35, 0x35, 0x22, 0x11, 0x12, 0x32, 0x33, 0x91, 0xcb, - 0xbb, 0x9a, 0x98, 0xca, 0xde, 0xcc, 0xbc, 0xbc, 0xbb, 0xbc, 0xbb, 0xbc, 0x99, 0x20, 0x53, 0x43, - 0x32, 0x12, 0x02, 0x00, 0x88, 0x88, 0x88, 0xa9, 0x99, 0x30, 0x47, 0x33, 0x11, 0x11, 0x73, 0x47, - 0x43, 0x23, 0x21, 0x11, 0x32, 0x24, 0x01, 0xa8, 0xbb, 0xaa, 0x98, 0x99, 0xdd, 0xdc, 0xbd, 0xbc, - 0xcb, 0xbb, 0xbc, 0xbc, 0xaa, 0x88, 0x22, 0x34, 0x43, 0x33, 0x12, 0x11, 0x80, 0x88, 0x88, 0xa9, - 0xbb, 0x28, 0x56, 0x33, 0x02, 0x88, 0x41, 0x67, 0x44, 0x32, 0x21, 0x21, 0x32, 0x43, 0x12, 0x80, - 0xa9, 0x9a, 0x8a, 0x98, 0xc9, 0xce, 0xdd, 0xcb, 0xba, 0xbc, 0xcb, 0xbc, 0xab, 0x9a, 0x10, 0x31, - 0x44, 0x32, 0x33, 0x21, 0x10, 0x00, 0x81, 0xa8, 0xbb, 0x1a, 0x64, 0x43, 0x12, 0x98, 0x0a, 0x74, - 0x46, 0x32, 0x23, 0x21, 0x33, 0x34, 0x33, 0x02, 0x99, 0xaa, 0xab, 0x88, 0x99, 0xfc, 0xcd, 0xbc, - 0xbc, 0xcb, 0xbc, 0xbc, 0xbc, 0x9a, 0x89, 0x10, 0x33, 0x44, 0x32, 0x12, 0x12, 0x11, 0x02, 0x80, - 0xa9, 0x9b, 0x50, 0x36, 0x12, 0xa8, 0xaa, 0x62, 0x56, 0x33, 0x24, 0x22, 0x33, 0x34, 0x24, 0x11, - 0x80, 0x99, 0xaa, 0x88, 0x08, 0xc8, 0xde, 0xbc, 0xcb, 0xcb, 0xbc, 0xcc, 0xcb, 0xaa, 0x9a, 0x08, - 0x20, 0x43, 0x33, 0x23, 0x32, 0x22, 0x23, 0x02, 0xb9, 0xbb, 0x50, 0x55, 0x12, 0x98, 0xbb, 0x38, - 0x66, 0x34, 0x43, 0x32, 0x42, 0x33, 0x34, 0x22, 0x01, 0x98, 0xaa, 0x09, 0x10, 0x90, 0xdd, 0xbd, - 0xad, 0xcb, 0xdb, 0xbc, 0xbc, 0xac, 0xab, 0x99, 0x18, 0x31, 0x43, 0x23, 0x22, 0x32, 0x33, 0x13, - 0xa8, 0xcb, 0x19, 0x45, 0x14, 0xa0, 0xbb, 0x8b, 0x72, 0x35, 0x35, 0x32, 0x43, 0x43, 0x33, 0x33, - 0x13, 0x90, 0xaa, 0x89, 0x20, 0x02, 0xda, 0xce, 0xcb, 0xcb, 0xcc, 0xcc, 0xbb, 0xad, 0xbb, 0xab, - 0x89, 0x20, 0x33, 0x34, 0x32, 0x33, 0x34, 0x23, 0x90, 0xba, 0x8a, 0x73, 0x24, 0x81, 0xaa, 0xab, - 0x30, 0x57, 0x34, 0x33, 0x44, 0x32, 0x34, 0x24, 0x13, 0x01, 0x98, 0x88, 0x11, 0x12, 0xa1, 0xdc, - 0xcb, 0xdb, 0xbc, 0xbd, 0xbd, 0xcc, 0xba, 0xbb, 0x9b, 0x08, 0x21, 0x32, 0x33, 0x33, 0x36, 0x22, - 0x81, 0xaa, 0x9a, 0x41, 0x35, 0x12, 0xb8, 0xbb, 0x19, 0x64, 0x35, 0x44, 0x32, 0x43, 0x53, 0x33, - 0x33, 0x11, 0x90, 0x09, 0x20, 0x23, 0x01, 0xba, 0xcd, 0xbc, 0xcd, 0xcc, 0xdb, 0xbc, 0xbc, 0xbb, - 0xbb, 0x8a, 0x10, 0x21, 0x33, 0x43, 0x44, 0x32, 0x01, 0xa8, 0x99, 0x38, 0x45, 0x22, 0x90, 0xaa, - 0x99, 0x31, 0x56, 0x34, 0x34, 0x43, 0x34, 0x35, 0x33, 0x12, 0x00, 0x09, 0x00, 0x21, 0x11, 0x80, - 0xba, 0xcd, 0xbc, 0xbe, 0xcd, 0xdb, 0xdb, 0xbb, 0xbb, 0x9b, 0x09, 0x00, 0x11, 0x22, 0x35, 0x34, - 0x12, 0x88, 0x99, 0x08, 0x53, 0x32, 0x00, 0xba, 0xac, 0x1a, 0x73, 0x34, 0x34, 0x43, 0x44, 0x44, - 0x33, 0x22, 0x01, 0x08, 0x00, 0x11, 0x21, 0x01, 0x80, 0xaa, 0xcc, 0xbd, 0xcd, 0xdc, 0xdb, 0xbc, - 0xcb, 0xaa, 0x89, 0x88, 0x00, 0x10, 0x42, 0x43, 0x22, 0x00, 0x98, 0x08, 0x22, 0x43, 0x12, 0xb8, - 0xcb, 0x9a, 0x41, 0x55, 0x33, 0x24, 0x44, 0x45, 0x33, 0x33, 0x12, 0x00, 0x00, 0x11, 0x21, 0x11, - 0x02, 0xa8, 0xca, 0xbd, 0xcd, 0xeb, 0xdc, 0xdb, 0xcb, 0xba, 0xa9, 0x98, 0x88, 0x08, 0x21, 0x53, - 0x32, 0x01, 0x88, 0x89, 0x20, 0x43, 0x13, 0x80, 0xdb, 0xab, 0x19, 0x53, 0x34, 0x24, 0x54, 0x54, - 0x43, 0x33, 0x22, 0x11, 0x01, 0x21, 0x22, 0x22, 0x12, 0x01, 0xa9, 0xcb, 0xbb, 0xde, 0xdd, 0xdc, - 0xcb, 0xbb, 0xab, 0xa9, 0xa9, 0x89, 0x20, 0x53, 0x33, 0x13, 0x81, 0x08, 0x10, 0x53, 0x43, 0x02, - 0xa8, 0xbb, 0x89, 0x43, 0x24, 0x23, 0x54, 0x46, 0x35, 0x24, 0x23, 0x22, 0x11, 0x11, 0x21, 0x22, - 0x22, 0x12, 0x99, 0xcb, 0xaa, 0xcb, 0xee, 0xcd, 0xbd, 0xbc, 0xba, 0xaa, 0xab, 0xaa, 0x09, 0x30, - 0x44, 0x12, 0x01, 0x80, 0x00, 0x22, 0x35, 0x23, 0x90, 0xca, 0x8a, 0x18, 0x21, 0x00, 0x41, 0x77, - 0x34, 0x35, 0x43, 0x22, 0x21, 0x11, 0x12, 0x32, 0x32, 0x23, 0x80, 0xa9, 0x09, 0x10, 0xe8, 0xff, - 0xcc, 0xcb, 0xab, 0xbb, 0xbb, 0xbb, 0x9a, 0x18, 0x43, 0x33, 0x12, 0x81, 0x88, 0x30, 0x55, 0x23, - 0x82, 0xb9, 0x8a, 0x08, 0x01, 0x90, 0x0a, 0x74, 0x67, 0x33, 0x25, 0x33, 0x32, 0x21, 0x22, 0x22, - 0x33, 0x33, 0x02, 0xa9, 0x8b, 0x42, 0x82, 0xfe, 0xce, 0xbc, 0xcb, 0xbb, 0xcb, 0xba, 0xaa, 0x89, - 0x11, 0x23, 0x33, 0x01, 0x98, 0x10, 0x45, 0x34, 0x11, 0x90, 0x88, 0x08, 0x01, 0x98, 0x9b, 0x68, - 0x66, 0x44, 0x43, 0x24, 0x32, 0x12, 0x12, 0x22, 0x33, 0x24, 0x02, 0x98, 0x88, 0x32, 0x25, 0xa0, - 0xef, 0xcc, 0xbb, 0xbc, 0xac, 0xcb, 0xaa, 0x99, 0x08, 0x21, 0x22, 0x01, 0x88, 0x18, 0x42, 0x44, - 0x22, 0x80, 0x88, 0x00, 0x08, 0xb8, 0xdb, 0x8a, 0x72, 0x45, 0x35, 0x34, 0x43, 0x22, 0x12, 0x21, - 0x43, 0x32, 0x22, 0x88, 0x89, 0x21, 0x45, 0x02, 0xda, 0xdd, 0xcb, 0xbc, 0xcb, 0xac, 0xbb, 0xba, - 0x89, 0x18, 0x22, 0x01, 0x88, 0x08, 0x41, 0x34, 0x24, 0x01, 0x00, 0x08, 0x81, 0xa9, 0xcc, 0xbb, - 0x28, 0x57, 0x35, 0x35, 0x34, 0x23, 0x13, 0x22, 0x43, 0x33, 0x23, 0x01, 0x99, 0x20, 0x54, 0x33, - 0xa0, 0xec, 0xcc, 0xbc, 0xcc, 0xbb, 0xbc, 0xac, 0x99, 0x09, 0x11, 0x01, 0x80, 0x08, 0x11, 0x34, - 0x24, 0x11, 0x01, 0x80, 0x08, 0x98, 0xdb, 0xac, 0x8a, 0x51, 0x55, 0x44, 0x43, 0x33, 0x22, 0x22, - 0x42, 0x43, 0x23, 0x11, 0x08, 0x18, 0x34, 0x25, 0x02, 0xb8, 0xce, 0xbc, 0xbd, 0xbd, 0xdb, 0xab, - 0xab, 0x89, 0x00, 0x01, 0x80, 0x88, 0x10, 0x33, 0x34, 0x23, 0x00, 0x10, 0x20, 0x01, 0xeb, 0xac, - 0xbb, 0x09, 0x73, 0x37, 0x35, 0x24, 0x23, 0x21, 0x32, 0x44, 0x33, 0x22, 0x10, 0x20, 0x43, 0x25, - 0x23, 0x81, 0xca, 0xdc, 0xbc, 0xbd, 0xbd, 0xad, 0xab, 0x9a, 0x08, 0x00, 0x00, 0x88, 0x00, 0x22, - 0x33, 0x24, 0x11, 0x00, 0x21, 0x80, 0xaa, 0xcd, 0xcb, 0xbb, 0x1a, 0x56, 0x45, 0x43, 0x22, 0x22, - 0x31, 0x44, 0x24, 0x12, 0x11, 0x10, 0x32, 0x35, 0x33, 0x22, 0x98, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xba, 0x9b, 0x99, 0x08, 0x80, 0x88, 0x88, 0x20, 0x32, 0x33, 0x22, 0x23, 0x33, 0x22, 0x81, 0xb9, - 0xcf, 0xbd, 0x9b, 0x31, 0x57, 0x34, 0x33, 0x23, 0x32, 0x45, 0x43, 0x22, 0x12, 0x01, 0x22, 0x53, - 0x34, 0x22, 0x01, 0x99, 0xcb, 0xdc, 0xcd, 0xcc, 0xbc, 0xba, 0x9a, 0x88, 0x88, 0x88, 0x09, 0x10, - 0x22, 0x32, 0x33, 0x33, 0x33, 0x22, 0x13, 0x88, 0xfc, 0xcc, 0xbb, 0x0a, 0x73, 0x35, 0x34, 0x22, - 0x22, 0x34, 0x35, 0x23, 0x23, 0x11, 0x22, 0x43, 0x35, 0x33, 0x13, 0x80, 0x98, 0xda, 0xed, 0xcd, - 0xbc, 0xac, 0xaa, 0x99, 0x89, 0x89, 0x89, 0x08, 0x11, 0x21, 0x32, 0x33, 0x24, 0x32, 0x23, 0x12, - 0xa8, 0xfd, 0xdb, 0x9a, 0x28, 0x54, 0x33, 0x33, 0x43, 0x53, 0x43, 0x33, 0x23, 0x22, 0x21, 0x42, - 0x44, 0x33, 0x23, 0x01, 0x00, 0x90, 0xfb, 0xcf, 0xcc, 0xbc, 0xba, 0xa9, 0x99, 0x89, 0x89, 0x88, - 0x10, 0x21, 0x23, 0x33, 0x34, 0x33, 0x53, 0x12, 0x11, 0xca, 0xcf, 0xab, 0x0a, 0x32, 0x45, 0x32, - 0x32, 0x34, 0x45, 0x33, 0x33, 0x33, 0x21, 0x33, 0x46, 0x32, 0x13, 0x12, 0x11, 0x22, 0x80, 0xee, - 0xce, 0xdb, 0xba, 0xaa, 0xaa, 0x9a, 0xa9, 0x98, 0x08, 0x00, 0x21, 0x32, 0x42, 0x23, 0x33, 0x44, - 0x13, 0xa0, 0xde, 0xac, 0x8b, 0x18, 0x43, 0x33, 0x34, 0x43, 0x44, 0x43, 0x24, 0x23, 0x21, 0x31, - 0x53, 0x24, 0x23, 0x21, 0x11, 0x32, 0x23, 0xd0, 0xdf, 0xcc, 0xbb, 0xcb, 0xaa, 0xaa, 0xaa, 0x99, - 0x09, 0x08, 0x10, 0x22, 0x33, 0x33, 0x42, 0x44, 0x33, 0x02, 0xdc, 0xbd, 0x9c, 0x89, 0x21, 0x32, - 0x34, 0x42, 0x53, 0x44, 0x43, 0x22, 0x22, 0x22, 0x43, 0x44, 0x22, 0x12, 0x11, 0x32, 0x43, 0x82, - 0xfa, 0xcd, 0xbc, 0xcb, 0xab, 0xab, 0xab, 0xaa, 0x9a, 0x89, 0x88, 0x21, 0x22, 0x13, 0x32, 0x36, - 0x36, 0x12, 0xb0, 0xdc, 0xbb, 0x9b, 0x18, 0x31, 0x25, 0x21, 0x44, 0x45, 0x43, 0x33, 0x22, 0x23, - 0x43, 0x44, 0x33, 0x12, 0x11, 0x32, 0x44, 0x22, 0xb0, 0xed, 0xcc, 0xbb, 0xbc, 0xbb, 0xbb, 0xab, - 0xab, 0x9a, 0x89, 0x10, 0x21, 0x12, 0x11, 0x45, 0x45, 0x32, 0x81, 0xca, 0xcc, 0xaa, 0x8a, 0x01, - 0x12, 0x12, 0x53, 0x55, 0x53, 0x33, 0x32, 0x32, 0x43, 0x44, 0x33, 0x22, 0x11, 0x22, 0x44, 0x33, - 0x02, 0xd9, 0xdd, 0xcb, 0xcb, 0xbb, 0xbb, 0xbb, 0xba, 0xba, 0x99, 0x08, 0x10, 0x00, 0x00, 0x61, - 0x45, 0x33, 0x22, 0x98, 0xcd, 0xbb, 0x9b, 0x08, 0x00, 0x01, 0x22, 0x56, 0x54, 0x33, 0x33, 0x22, - 0x42, 0x34, 0x25, 0x22, 0x12, 0x21, 0x53, 0x43, 0x22, 0x91, 0xeb, 0xcc, 0xdb, 0xbb, 0xac, 0xab, - 0xab, 0xab, 0x9a, 0x09, 0x08, 0x80, 0x98, 0x20, 0x55, 0x34, 0x33, 0x81, 0xda, 0xbc, 0xab, 0x99, - 0x00, 0x00, 0x20, 0x73, 0x45, 0x34, 0x33, 0x32, 0x32, 0x35, 0x25, 0x33, 0x12, 0x21, 0x42, 0x44, - 0x23, 0x12, 0xa9, 0xdc, 0xbd, 0xcc, 0xbb, 0xbb, 0xcb, 0xab, 0x9b, 0x8a, 0x80, 0x88, 0x98, 0x88, - 0x52, 0x54, 0x33, 0x13, 0xa0, 0xcc, 0xab, 0x9b, 0x89, 0x98, 0x89, 0x40, 0x66, 0x53, 0x22, 0x22, - 0x23, 0x53, 0x53, 0x22, 0x22, 0x11, 0x31, 0x44, 0x43, 0x22, 0x01, 0xb9, 0xce, 0xbc, 0xad, 0xbb, - 0xbc, 0xbb, 0xba, 0x9a, 0x98, 0x88, 0x99, 0x99, 0x29, 0x55, 0x34, 0x33, 0x01, 0xba, 0xcc, 0xaa, - 0x99, 0xa9, 0xba, 0x09, 0x65, 0x44, 0x33, 0x24, 0x22, 0x43, 0x44, 0x23, 0x13, 0x12, 0x21, 0x44, - 0x43, 0x24, 0x22, 0x80, 0xca, 0xcd, 0xbc, 0xcb, 0xbb, 0xbc, 0xbb, 0xaa, 0x99, 0x99, 0x99, 0xaa, - 0x0a, 0x61, 0x44, 0x33, 0x12, 0xa0, 0xcb, 0xbb, 0xb9, 0xca, 0xdb, 0x9a, 0x21, 0x46, 0x53, 0x22, - 0x22, 0x43, 0x34, 0x25, 0x23, 0x11, 0x21, 0x33, 0x54, 0x33, 0x24, 0x22, 0xa8, 0xcc, 0xcc, 0xcb, - 0xcb, 0xcb, 0xab, 0xab, 0x9a, 0x98, 0xa8, 0xaa, 0x9b, 0x18, 0x64, 0x43, 0x23, 0x01, 0xa9, 0xab, - 0xa9, 0xcb, 0xdb, 0xab, 0x19, 0x73, 0x34, 0x33, 0x23, 0x44, 0x44, 0x34, 0x32, 0x12, 0x12, 0x22, - 0x34, 0x44, 0x34, 0x32, 0x00, 0xb9, 0xdc, 0xbc, 0xbd, 0xdb, 0xba, 0xbb, 0xaa, 0x9a, 0x99, 0xab, - 0xbb, 0x9b, 0x41, 0x55, 0x23, 0x12, 0x90, 0x98, 0x99, 0xaa, 0xcd, 0xcb, 0x99, 0x21, 0x45, 0x32, - 0x32, 0x52, 0x44, 0x53, 0x23, 0x23, 0x22, 0x12, 0x33, 0x45, 0x53, 0x32, 0x12, 0x80, 0xb9, 0xcd, - 0xbc, 0xbd, 0xbc, 0xcb, 0x9a, 0x9a, 0x99, 0xa9, 0xbb, 0xab, 0x19, 0x44, 0x34, 0x22, 0x01, 0x98, - 0x88, 0xb9, 0xdc, 0xcc, 0x9a, 0x08, 0x42, 0x33, 0x22, 0x43, 0x55, 0x53, 0x33, 0x24, 0x22, 0x12, - 0x22, 0x43, 0x35, 0x24, 0x33, 0x12, 0x88, 0xcb, 0xdc, 0xbc, 0xbd, 0xac, 0xab, 0xaa, 0x9a, 0xa9, - 0xbb, 0xac, 0x8a, 0x31, 0x44, 0x32, 0x11, 0x01, 0x01, 0x00, 0xda, 0xcd, 0xab, 0x89, 0x31, 0x24, - 0x23, 0x42, 0x45, 0x44, 0x43, 0x24, 0x23, 0x11, 0x12, 0x32, 0x44, 0x53, 0x23, 0x23, 0x01, 0x90, - 0xdb, 0xcd, 0xbc, 0xbd, 0xba, 0xbb, 0x9a, 0xaa, 0xbb, 0xbc, 0xab, 0x18, 0x43, 0x24, 0x13, 0x11, - 0x12, 0x02, 0xc8, 0xdd, 0xbb, 0x9b, 0x18, 0x21, 0x22, 0x33, 0x46, 0x45, 0x34, 0x25, 0x33, 0x22, - 0x12, 0x32, 0x53, 0x34, 0x44, 0x22, 0x12, 0x02, 0xa0, 0xeb, 0xcc, 0xdb, 0xbb, 0xbb, 0xab, 0xba, - 0xca, 0xcb, 0xab, 0x89, 0x20, 0x32, 0x33, 0x22, 0x33, 0x34, 0x91, 0xdd, 0xbc, 0xbb, 0x88, 0x00, - 0x12, 0x22, 0x53, 0x55, 0x54, 0x43, 0x33, 0x23, 0x23, 0x32, 0x43, 0x44, 0x24, 0x43, 0x22, 0x22, - 0x81, 0xa8, 0xcd, 0xcd, 0xcb, 0xab, 0xab, 0xba, 0xba, 0xbc, 0xbc, 0x9a, 0x09, 0x11, 0x12, 0x21, - 0x32, 0x43, 0x82, 0xea, 0xbd, 0xbb, 0x9a, 0x09, 0x00, 0x80, 0x00, 0x73, 0x45, 0x35, 0x34, 0x43, - 0x22, 0x22, 0x42, 0x33, 0x35, 0x43, 0x43, 0x22, 0x12, 0x01, 0xa9, 0xce, 0xcc, 0xbb, 0xbb, 0xba, - 0xca, 0xbb, 0xbd, 0xaa, 0x99, 0x00, 0x10, 0x20, 0x32, 0x53, 0x12, 0xa9, 0xce, 0xbb, 0xab, 0x99, - 0x88, 0x98, 0x99, 0x10, 0x55, 0x55, 0x34, 0x34, 0x32, 0x32, 0x33, 0x34, 0x44, 0x43, 0x24, 0x23, - 0x23, 0x23, 0x80, 0xea, 0xcc, 0xbc, 0xbb, 0xab, 0xbb, 0xcc, 0xcb, 0xab, 0xaa, 0x88, 0x08, 0x18, - 0x31, 0x44, 0x22, 0x81, 0xca, 0xcc, 0xab, 0x99, 0x89, 0x98, 0xa9, 0x9a, 0x30, 0x57, 0x45, 0x43, - 0x33, 0x32, 0x33, 0x34, 0x34, 0x44, 0x33, 0x34, 0x33, 0x43, 0x12, 0xa0, 0xeb, 0xcc, 0xba, 0xbb, - 0xba, 0xbc, 0xcc, 0xbb, 0xaa, 0x9a, 0x89, 0x89, 0x21, 0x43, 0x24, 0x03, 0xb8, 0xcd, 0xac, 0xaa, - 0x99, 0x9a, 0xa9, 0xab, 0xab, 0x52, 0x37, 0x36, 0x43, 0x33, 0x33, 0x33, 0x44, 0x43, 0x43, 0x43, - 0x42, 0x32, 0x23, 0x02, 0xb9, 0xdd, 0xbb, 0xac, 0xba, 0xcb, 0xbc, 0xbc, 0xab, 0xaa, 0xaa, 0x99, - 0x00, 0x32, 0x36, 0x22, 0x81, 0xca, 0xbc, 0xbb, 0xab, 0xaa, 0xca, 0xcb, 0xac, 0x08, 0x52, 0x45, - 0x53, 0x33, 0x33, 0x34, 0x42, 0x33, 0x34, 0x34, 0x34, 0x34, 0x24, 0x23, 0x80, 0xba, 0xcd, 0xab, - 0xba, 0xbc, 0xbd, 0xbc, 0xca, 0xaa, 0xa9, 0xaa, 0x89, 0x20, 0x43, 0x33, 0x12, 0xa9, 0xcc, 0xcb, - 0xaa, 0x9a, 0xb9, 0xdb, 0xbb, 0x9b, 0x28, 0x46, 0x45, 0x43, 0x33, 0x32, 0x24, 0x43, 0x33, 0x43, - 0x34, 0x44, 0x43, 0x33, 0x12, 0xa8, 0xcb, 0xac, 0xcb, 0xca, 0xcb, 0xac, 0xac, 0xaa, 0xab, 0xab, - 0x9b, 0x09, 0x42, 0x43, 0x12, 0x81, 0xb9, 0xbc, 0xbb, 0xaa, 0xaa, 0xdc, 0xcb, 0xba, 0x89, 0x41, - 0x46, 0x34, 0x43, 0x33, 0x24, 0x33, 0x24, 0x33, 0x53, 0x34, 0x35, 0x34, 0x22, 0x81, 0xa9, 0xbb, - 0xbc, 0xbc, 0xbd, 0xbc, 0xbc, 0xbb, 0xcb, 0xbb, 0xab, 0x9a, 0x20, 0x42, 0x24, 0x02, 0x98, 0xbb, - 0xbb, 0xab, 0xbb, 0xbc, 0xbe, 0xbc, 0xab, 0x18, 0x64, 0x44, 0x43, 0x33, 0x43, 0x23, 0x43, 0x23, - 0x33, 0x44, 0x45, 0x43, 0x33, 0x11, 0x80, 0xb9, 0xbb, 0xbc, 0xbd, 0xbd, 0xbc, 0xba, 0xac, 0xac, - 0xbb, 0xaa, 0x88, 0x31, 0x33, 0x14, 0x80, 0xba, 0xcb, 0xba, 0xaa, 0xcb, 0xdb, 0xbc, 0xcb, 0x99, - 0x21, 0x36, 0x35, 0x34, 0x43, 0x33, 0x43, 0x32, 0x32, 0x53, 0x54, 0x34, 0x24, 0x13, 0x02, 0x98, - 0x99, 0xba, 0xcc, 0xcc, 0xbb, 0xbb, 0xbc, 0xbc, 0xbc, 0xab, 0x9a, 0x10, 0x32, 0x33, 0x02, 0xa8, - 0xbc, 0xbb, 0xbb, 0xbb, 0xcc, 0xcc, 0xbc, 0xaa, 0x08, 0x62, 0x53, 0x34, 0x43, 0x33, 0x34, 0x33, - 0x32, 0x42, 0x54, 0x44, 0x24, 0x33, 0x12, 0x00, 0x88, 0x9a, 0xdb, 0xcc, 0xbb, 0xcb, 0xcb, 0xbb, - 0xbd, 0xbb, 0xab, 0x88, 0x21, 0x32, 0x13, 0x90, 0xba, 0xcb, 0xbb, 0xaa, 0xcb, 0xdc, 0xcb, 0xab, - 0x9b, 0x20, 0x54, 0x34, 0x35, 0x53, 0x43, 0x22, 0x22, 0x21, 0x63, 0x44, 0x53, 0x23, 0x23, 0x11, - 0x00, 0x90, 0xb9, 0xbd, 0xcc, 0xca, 0xba, 0xcb, 0xbc, 0xbc, 0xbb, 0x9a, 0x18, 0x11, 0x12, 0x01, - 0xa9, 0xba, 0xac, 0xab, 0xbb, 0xcc, 0xcc, 0xca, 0xaa, 0x09, 0x31, 0x44, 0x44, 0x44, 0x43, 0x23, - 0x23, 0x12, 0x42, 0x54, 0x34, 0x25, 0x23, 0x22, 0x11, 0x01, 0xa8, 0xca, 0xbc, 0xbc, 0xcb, 0xbb, - 0xcd, 0xac, 0xaa, 0xbb, 0x98, 0x08, 0x10, 0x00, 0xa0, 0xaa, 0xcb, 0xba, 0xba, 0xcb, 0xcc, 0xbc, - 0xbc, 0x9a, 0x08, 0x21, 0x63, 0x54, 0x53, 0x33, 0x23, 0x22, 0x21, 0x63, 0x45, 0x24, 0x43, 0x22, - 0x12, 0x12, 0x00, 0x99, 0xbc, 0xcb, 0xbb, 0xbc, 0xbd, 0xcd, 0xbb, 0xbb, 0x9a, 0x89, 0x01, 0x11, - 0x81, 0x98, 0xaa, 0xba, 0xbb, 0xca, 0xcc, 0xcc, 0xac, 0xaa, 0x8a, 0x88, 0x21, 0x54, 0x45, 0x34, - 0x24, 0x11, 0x01, 0x31, 0x55, 0x53, 0x33, 0x43, 0x32, 0x22, 0x11, 0x80, 0xba, 0xbc, 0xbb, 0xcc, - 0xdb, 0xbc, 0xbd, 0xac, 0xab, 0x99, 0x80, 0x01, 0x01, 0x81, 0x89, 0xa9, 0x9a, 0x99, 0xcb, 0xbe, - 0xbc, 0xac, 0xa9, 0x89, 0x88, 0x31, 0x57, 0x44, 0x33, 0x13, 0x11, 0x21, 0x44, 0x45, 0x43, 0x33, - 0x24, 0x23, 0x23, 0x01, 0x98, 0xba, 0xbb, 0xcc, 0xcb, 0xcd, 0xdb, 0xcb, 0xab, 0x9b, 0x99, 0x08, - 0x11, 0x00, 0x80, 0x99, 0x89, 0x88, 0xb9, 0xdd, 0xdb, 0xab, 0xab, 0x9a, 0xaa, 0x8a, 0x64, 0x55, - 0x33, 0x33, 0x11, 0x01, 0x32, 0x55, 0x44, 0x33, 0x34, 0x33, 0x43, 0x12, 0x00, 0x99, 0xab, 0xbb, - 0xdb, 0xdc, 0xdb, 0xbc, 0xbc, 0xab, 0x9a, 0x89, 0x00, 0x00, 0x00, 0x88, 0x08, 0x00, 0x88, 0xdb, - 0xcd, 0xcb, 0x9a, 0x9a, 0xbb, 0xaa, 0x39, 0x77, 0x33, 0x24, 0x12, 0x01, 0x11, 0x43, 0x45, 0x43, - 0x43, 0x33, 0x43, 0x23, 0x12, 0x88, 0x99, 0xaa, 0xba, 0xdc, 0xdc, 0xdb, 0xcb, 0xbb, 0xab, 0x9a, - 0x08, 0x08, 0x80, 0x88, 0x80, 0x18, 0x11, 0xb8, 0xce, 0xbc, 0xba, 0xba, 0xdb, 0xcb, 0x8a, 0x51, - 0x45, 0x33, 0x14, 0x02, 0x11, 0x32, 0x54, 0x34, 0x34, 0x34, 0x43, 0x33, 0x13, 0x01, 0x88, 0x9a, - 0xa9, 0xcb, 0xcc, 0xcd, 0xcc, 0xbb, 0xac, 0x9a, 0x99, 0x88, 0x80, 0x88, 0x88, 0x18, 0x11, 0x80, - 0xda, 0xbc, 0xaa, 0xbb, 0xfb, 0xcb, 0xaa, 0x19, 0x64, 0x43, 0x33, 0x22, 0x11, 0x42, 0x53, 0x53, - 0x33, 0x35, 0x53, 0x32, 0x23, 0x12, 0x00, 0x98, 0x98, 0xa8, 0xda, 0xcc, 0xcd, 0xbc, 0xcb, 0xab, - 0x9a, 0x89, 0x88, 0x88, 0x89, 0x18, 0x21, 0x01, 0xa8, 0xcc, 0xaa, 0xaa, 0xcc, 0xcd, 0xac, 0x9a, - 0x30, 0x45, 0x33, 0x23, 0x22, 0x32, 0x44, 0x44, 0x43, 0x53, 0x33, 0x35, 0x32, 0x23, 0x01, 0x00, - 0x89, 0x88, 0xaa, 0xeb, 0xcd, 0xbd, 0xbc, 0xac, 0xab, 0x99, 0x88, 0x99, 0x98, 0x88, 0x10, 0x01, - 0x98, 0xbb, 0xac, 0xaa, 0xea, 0xdc, 0xdb, 0xaa, 0x09, 0x42, 0x34, 0x33, 0x32, 0x33, 0x44, 0x53, - 0x33, 0x35, 0x35, 0x34, 0x34, 0x32, 0x22, 0x01, 0x00, 0x80, 0x80, 0xa9, 0xec, 0xdc, 0xdb, 0xbb, - 0xac, 0xa9, 0x89, 0x99, 0x9a, 0x88, 0x18, 0x10, 0x88, 0xb9, 0xbb, 0x99, 0xba, 0xee, 0xbd, 0xbc, - 0x9a, 0x10, 0x53, 0x33, 0x33, 0x43, 0x33, 0x35, 0x34, 0x34, 0x35, 0x35, 0x34, 0x24, 0x22, 0x12, - 0x01, 0x00, 0x00, 0x00, 0xa9, 0xde, 0xcc, 0xbc, 0xbb, 0xbb, 0xaa, 0xa9, 0xaa, 0x8a, 0x08, 0x01, - 0x80, 0xba, 0xdb, 0x8a, 0x98, 0xfb, 0xcd, 0xbc, 0xab, 0x89, 0x21, 0x34, 0x33, 0x43, 0x43, 0x33, - 0x34, 0x44, 0x53, 0x34, 0x35, 0x34, 0x32, 0x23, 0x11, 0x11, 0x11, 0x21, 0x01, 0xda, 0xce, 0xbd, - 0xbc, 0xba, 0xaa, 0xaa, 0xab, 0x9a, 0x88, 0x00, 0x81, 0xa9, 0xac, 0x9a, 0x08, 0xb8, 0xef, 0xbc, - 0xbc, 0x9a, 0x19, 0x21, 0x33, 0x43, 0x43, 0x43, 0x33, 0x34, 0x44, 0x44, 0x53, 0x34, 0x33, 0x24, - 0x12, 0x11, 0x11, 0x21, 0x32, 0x81, 0xfb, 0xbd, 0xbd, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x9a, 0x00, - 0x00, 0xa9, 0xdb, 0x9b, 0x08, 0x90, 0xfc, 0xdc, 0xcb, 0xab, 0x99, 0x18, 0x11, 0x22, 0x34, 0x43, - 0x24, 0x33, 0x34, 0x44, 0x54, 0x43, 0x34, 0x33, 0x23, 0x22, 0x21, 0x22, 0x43, 0x23, 0xb0, 0xde, - 0xbc, 0xbc, 0xbb, 0xcb, 0xab, 0xbb, 0x9b, 0x88, 0x80, 0x90, 0xaa, 0xab, 0x09, 0x22, 0xc8, 0xef, - 0xbc, 0xac, 0x9a, 0x89, 0x10, 0x21, 0x43, 0x34, 0x43, 0x32, 0x33, 0x53, 0x54, 0x63, 0x43, 0x42, - 0x12, 0x12, 0x11, 0x21, 0x32, 0x33, 0x02, 0xda, 0xbe, 0xcc, 0xab, 0xcb, 0xba, 0xac, 0xaa, 0x89, - 0x88, 0x80, 0xa9, 0xaa, 0x89, 0x22, 0x01, 0xfb, 0xbe, 0xad, 0xbb, 0x99, 0x88, 0x10, 0x31, 0x44, - 0x43, 0x33, 0x32, 0x32, 0x54, 0x45, 0x53, 0x43, 0x33, 0x23, 0x12, 0x21, 0x42, 0x43, 0x13, 0x91, - 0xdb, 0xbd, 0xcb, 0xcb, 0xbb, 0xbc, 0xbb, 0x9a, 0x88, 0x88, 0xa9, 0xaa, 0x9a, 0x21, 0x23, 0xc0, - 0xdf, 0xbc, 0xbc, 0xab, 0x9a, 0x89, 0x10, 0x32, 0x54, 0x33, 0x23, 0x23, 0x34, 0x55, 0x44, 0x34, - 0x34, 0x33, 0x12, 0x21, 0x32, 0x44, 0x33, 0x02, 0xa9, 0xcd, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x9a, - 0x89, 0x88, 0x99, 0x9a, 0x9a, 0x18, 0x32, 0x02, 0xea, 0xbd, 0xbd, 0xcb, 0x9a, 0x99, 0x08, 0x21, - 0x34, 0x35, 0x23, 0x23, 0x22, 0x44, 0x54, 0x35, 0x35, 0x23, 0x23, 0x11, 0x31, 0x53, 0x33, 0x23, - 0x80, 0xcb, 0xbc, 0xbd, 0xbc, 0xbd, 0xbc, 0xab, 0xa9, 0x88, 0x99, 0xa9, 0xaa, 0x09, 0x31, 0x23, - 0xa0, 0xce, 0xbe, 0xbc, 0xba, 0xaa, 0x89, 0x28, 0x53, 0x34, 0x24, 0x23, 0x22, 0x21, 0x54, 0x45, - 0x44, 0x43, 0x22, 0x11, 0x11, 0x32, 0x25, 0x23, 0x01, 0xa8, 0xcb, 0xcb, 0xdb, 0xcc, 0xcb, 0xbb, - 0xaa, 0x99, 0x98, 0xa9, 0x9b, 0x8a, 0x11, 0x43, 0x02, 0xc9, 0xcd, 0xcc, 0xbb, 0xba, 0xaa, 0x89, - 0x31, 0x63, 0x34, 0x32, 0x22, 0x01, 0x52, 0x64, 0x44, 0x43, 0x33, 0x12, 0x21, 0x33, 0x44, 0x43, - 0x11, 0x81, 0x99, 0xb9, 0xdb, 0xdc, 0xbc, 0xbc, 0xba, 0xa9, 0x99, 0xa9, 0xab, 0x9b, 0x08, 0x31, - 0x23, 0x98, 0xed, 0xbc, 0xad, 0xbb, 0xbb, 0xa9, 0x08, 0x32, 0x45, 0x43, 0x22, 0x11, 0x10, 0x53, - 0x56, 0x34, 0x33, 0x23, 0x22, 0x22, 0x54, 0x33, 0x33, 0x02, 0x00, 0x98, 0xcb, 0xcd, 0xcd, 0xcb, - 0xab, 0x9b, 0x9a, 0xaa, 0xaa, 0xab, 0x9a, 0x20, 0x33, 0x13, 0xb8, 0xcf, 0xdb, 0xcb, 0xab, 0x9b, - 0x8a, 0x18, 0x53, 0x34, 0x34, 0x12, 0x00, 0x31, 0x57, 0x34, 0x25, 0x23, 0x12, 0x21, 0x42, 0x34, - 0x33, 0x22, 0x11, 0x00, 0x99, 0xfb, 0xcd, 0xbc, 0xcb, 0xaa, 0xaa, 0xaa, 0xba, 0xbb, 0xba, 0x89, - 0x11, 0x23, 0x01, 0xca, 0xcd, 0xbc, 0xcc, 0xba, 0x9a, 0x99, 0x21, 0x54, 0x43, 0x13, 0x11, 0x20, - 0x54, 0x45, 0x34, 0x33, 0x22, 0x22, 0x33, 0x26, 0x24, 0x22, 0x22, 0x11, 0x01, 0xb8, 0xed, 0xbc, - 0xcc, 0xaa, 0xaa, 0xaa, 0xba, 0xbb, 0xbb, 0x9b, 0x09, 0x22, 0x22, 0x81, 0xba, 0xdf, 0xcb, 0xbb, - 0xac, 0x9b, 0x09, 0x42, 0x35, 0x24, 0x11, 0x01, 0x41, 0x55, 0x44, 0x33, 0x23, 0x22, 0x33, 0x44, - 0x43, 0x23, 0x32, 0x32, 0x32, 0x82, 0xea, 0xcd, 0xbc, 0xbc, 0xba, 0xaa, 0xbb, 0xbc, 0xbb, 0xac, - 0x99, 0x00, 0x00, 0x01, 0x98, 0xbc, 0xbe, 0xcb, 0xac, 0xbb, 0x9a, 0x28, 0x53, 0x34, 0x22, 0x01, - 0x21, 0x65, 0x54, 0x33, 0x33, 0x23, 0x33, 0x44, 0x43, 0x32, 0x33, 0x43, 0x23, 0x23, 0x90, 0xdc, - 0xcd, 0xcb, 0xba, 0xab, 0xbb, 0xcb, 0xbb, 0xac, 0x9a, 0x89, 0x00, 0x12, 0x01, 0xba, 0xbd, 0xbd, - 0xcc, 0xbb, 0xab, 0x8a, 0x31, 0x45, 0x22, 0x01, 0x09, 0x51, 0x46, 0x34, 0x43, 0x22, 0x23, 0x43, - 0x34, 0x33, 0x34, 0x33, 0x34, 0x24, 0x02, 0xa8, 0xcd, 0xbc, 0xbc, 0xbb, 0xbb, 0xac, 0xcb, 0xab, - 0xab, 0xaa, 0x08, 0x10, 0x00, 0x98, 0xca, 0xdc, 0xcb, 0xdb, 0xba, 0xab, 0x18, 0x43, 0x24, 0x02, - 0x98, 0x10, 0x55, 0x35, 0x44, 0x22, 0x32, 0x42, 0x33, 0x34, 0x43, 0x33, 0x34, 0x34, 0x22, 0x01, - 0xca, 0xcd, 0xbb, 0xbc, 0xbb, 0xbc, 0xca, 0xba, 0xbb, 0xba, 0x99, 0x80, 0x00, 0x80, 0xa9, 0xcc, - 0xbc, 0xcc, 0xcc, 0xaa, 0x89, 0x30, 0x43, 0x12, 0x90, 0x08, 0x52, 0x46, 0x34, 0x33, 0x34, 0x33, - 0x44, 0x32, 0x24, 0x33, 0x44, 0x33, 0x34, 0x21, 0x88, 0xcb, 0xbd, 0xbc, 0xcb, 0xba, 0xbb, 0xcb, - 0xac, 0xab, 0x9a, 0x89, 0x00, 0x10, 0x80, 0xa9, 0xba, 0xce, 0xdc, 0xbb, 0xaa, 0x18, 0x42, 0x12, - 0x81, 0x99, 0x20, 0x56, 0x44, 0x33, 0x34, 0x43, 0x33, 0x34, 0x42, 0x32, 0x34, 0x34, 0x44, 0x22, - 0x01, 0x99, 0xcb, 0xcc, 0xbb, 0xac, 0xbb, 0xcb, 0xcb, 0xba, 0xab, 0x9a, 0x08, 0x08, 0x08, 0x80, - 0x98, 0xca, 0xcf, 0xbc, 0xbb, 0x8a, 0x20, 0x12, 0x81, 0xba, 0x9a, 0x62, 0x55, 0x43, 0x34, 0x33, - 0x25, 0x33, 0x43, 0x33, 0x53, 0x43, 0x34, 0x24, 0x12, 0x81, 0xa8, 0xcc, 0xcb, 0xbb, 0xcb, 0xbb, - 0xbc, 0xcb, 0xbb, 0xaa, 0x99, 0x98, 0x08, 0x08, 0x11, 0x90, 0xfb, 0xce, 0xbb, 0x9a, 0x08, 0x20, - 0x00, 0xa9, 0xa9, 0x10, 0x45, 0x36, 0x44, 0x43, 0x33, 0x34, 0x33, 0x43, 0x33, 0x44, 0x34, 0x34, - 0x23, 0x12, 0x91, 0xca, 0xcc, 0xbb, 0xbc, 0xcb, 0xbb, 0xbc, 0xac, 0xab, 0xaa, 0x99, 0x89, 0x08, - 0x20, 0x22, 0xa8, 0xdf, 0xdb, 0xaa, 0x8a, 0x00, 0x01, 0x99, 0xaa, 0x99, 0x31, 0x46, 0x45, 0x43, - 0x34, 0x33, 0x34, 0x23, 0x43, 0x53, 0x43, 0x43, 0x33, 0x33, 0x11, 0x98, 0xdb, 0xbc, 0xbc, 0xbb, - 0xbc, 0xbc, 0xbc, 0xbb, 0xab, 0xaa, 0xa9, 0x99, 0x20, 0x32, 0x13, 0xfb, 0xbe, 0xbc, 0xaa, 0x88, - 0x80, 0x98, 0xaa, 0xaa, 0x0a, 0x63, 0x45, 0x34, 0x44, 0x43, 0x23, 0x33, 0x33, 0x34, 0x44, 0x34, - 0x34, 0x33, 0x23, 0x01, 0xb9, 0xcc, 0xbc, 0xcb, 0xbb, 0xcc, 0xbb, 0xbc, 0xba, 0xaa, 0x9a, 0x9a, - 0x00, 0x33, 0x25, 0x91, 0xeb, 0xad, 0xab, 0x9a, 0x88, 0x99, 0xc9, 0xba, 0xaa, 0x18, 0x44, 0x54, - 0x44, 0x43, 0x43, 0x23, 0x23, 0x33, 0x44, 0x53, 0x43, 0x33, 0x24, 0x22, 0x80, 0xaa, 0xbc, 0xac, - 0xbc, 0xcb, 0xbc, 0xbc, 0xba, 0xab, 0xbb, 0xba, 0x89, 0x31, 0x44, 0x02, 0xc8, 0xdb, 0xac, 0xaa, - 0x89, 0x89, 0xaa, 0xbb, 0xac, 0x99, 0x30, 0x64, 0x54, 0x43, 0x43, 0x33, 0x33, 0x32, 0x34, 0x44, - 0x43, 0x44, 0x33, 0x33, 0x11, 0xa0, 0xca, 0xbb, 0xbd, 0xbc, 0xcc, 0xbb, 0xac, 0xab, 0xbb, 0xbb, - 0xaa, 0x28, 0x43, 0x33, 0x91, 0xda, 0xcc, 0xba, 0x99, 0x99, 0xa9, 0xcb, 0xcb, 0x9a, 0x89, 0x42, - 0x46, 0x44, 0x43, 0x33, 0x43, 0x22, 0x33, 0x33, 0x55, 0x43, 0x53, 0x32, 0x13, 0x01, 0xa9, 0xba, - 0xdb, 0xcb, 0xbc, 0xbc, 0xbc, 0xba, 0xbb, 0xbc, 0xbb, 0x89, 0x31, 0x43, 0x12, 0xa0, 0xcc, 0xbb, - 0xab, 0xa9, 0xaa, 0xbc, 0xbc, 0xbc, 0x9a, 0x18, 0x73, 0x54, 0x43, 0x43, 0x32, 0x33, 0x33, 0x33, - 0x44, 0x44, 0x44, 0x33, 0x24, 0x12, 0x80, 0x99, 0xab, 0xbc, 0xcd, 0xcb, 0xab, 0xcb, 0xca, 0xba, - 0xbb, 0x9b, 0x08, 0x32, 0x24, 0x81, 0xb9, 0xcc, 0xaa, 0xab, 0xaa, 0xbb, 0xcc, 0xac, 0xbb, 0x99, - 0x30, 0x37, 0x45, 0x43, 0x43, 0x32, 0x32, 0x23, 0x33, 0x45, 0x44, 0x44, 0x32, 0x22, 0x02, 0x88, - 0xa8, 0xba, 0xcd, 0xdb, 0xba, 0xbb, 0xcb, 0xbc, 0xac, 0xab, 0x89, 0x20, 0x32, 0x13, 0x90, 0xba, - 0xbd, 0xba, 0xab, 0xba, 0xdb, 0xdb, 0xbb, 0xaa, 0x09, 0x53, 0x55, 0x43, 0x34, 0x42, 0x32, 0x23, - 0x22, 0x43, 0x54, 0x44, 0x24, 0x23, 0x12, 0x81, 0x90, 0x99, 0xbc, 0xcd, 0xba, 0xac, 0xbb, 0xcc, - 0xbb, 0xac, 0xaa, 0x08, 0x21, 0x22, 0x11, 0x99, 0xbb, 0xcb, 0xab, 0xab, 0xca, 0xbc, 0xbd, 0xbb, - 0xaa, 0x20, 0x64, 0x34, 0x35, 0x53, 0x33, 0x33, 0x32, 0x32, 0x64, 0x44, 0x53, 0x32, 0x22, 0x12, - 0x00, 0x88, 0xb9, 0xcd, 0xbb, 0xbc, 0xcb, 0xcb, 0xbc, 0xbc, 0xab, 0x8a, 0x18, 0x11, 0x12, 0x80, - 0xa9, 0xbb, 0xbc, 0xba, 0xbb, 0xcc, 0xbc, 0xbc, 0xab, 0x0a, 0x41, 0x44, 0x54, 0x43, 0x34, 0x33, - 0x22, 0x22, 0x33, 0x47, 0x44, 0x33, 0x23, 0x23, 0x12, 0x01, 0xa8, 0xdb, 0xbc, 0xbc, 0xbb, 0xbd, - 0xcc, 0xbb, 0xbb, 0x6c, 0x02, 0x01, 0x39, 0x7d, 0x0a, 0x02, 0xd3, 0x06, 0x19, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x9f, 0x80, 0x88, 0x88, 0x8b, 0x32, 0x92, 0x70, 0x24, - 0x34, 0x14, 0x88, 0x89, 0x09, 0x80, 0xcc, 0xcc, 0xbc, 0xcb, 0x89, 0x31, 0xa0, 0x40, 0xda, 0x41, - 0x24, 0xf8, 0x5a, 0x04, 0x08, 0x22, 0x91, 0x10, 0x90, 0xa9, 0x50, 0xf0, 0x9d, 0x18, 0xa9, 0x18, - 0x02, 0x09, 0x32, 0x32, 0xfa, 0x49, 0x15, 0x08, 0x21, 0x31, 0x26, 0xa0, 0xaa, 0x50, 0x04, 0xdc, - 0x8a, 0xb8, 0x18, 0xa0, 0x9a, 0x31, 0x46, 0x91, 0x9b, 0x00, 0x42, 0x15, 0x98, 0x30, 0x35, 0x82, - 0xbd, 0x50, 0x91, 0x98, 0xee, 0x8a, 0x00, 0xa0, 0xaa, 0x30, 0x15, 0x90, 0x98, 0x88, 0x22, 0x02, - 0x98, 0x62, 0x36, 0xb8, 0x9a, 0x10, 0x54, 0xd8, 0xbd, 0x9a, 0x88, 0xa9, 0x9c, 0x32, 0x23, 0x01, - 0x99, 0x20, 0x34, 0x92, 0x8c, 0x76, 0x12, 0x08, 0xa9, 0x29, 0x27, 0xa0, 0xdc, 0x9a, 0x88, 0xb9, - 0x89, 0x10, 0x35, 0x22, 0x80, 0x19, 0x45, 0xa0, 0x39, 0x36, 0x21, 0x01, 0xab, 0x41, 0x55, 0xa1, - 0xbd, 0x8a, 0xb9, 0xcb, 0x9a, 0x20, 0x34, 0x24, 0xa8, 0x50, 0x04, 0x99, 0x10, 0x52, 0x33, 0x90, - 0xbb, 0x5a, 0x27, 0xa0, 0xbb, 0xbb, 0xbc, 0xcc, 0xab, 0x19, 0x53, 0x83, 0x18, 0x32, 0x02, 0x98, - 0x39, 0x36, 0x54, 0x91, 0xbc, 0x40, 0x33, 0x90, 0xbc, 0xbb, 0xce, 0xab, 0xcc, 0x19, 0x31, 0x01, - 0x22, 0x43, 0x82, 0x88, 0x00, 0x51, 0x36, 0xa1, 0x9a, 0x62, 0x34, 0x81, 0xa8, 0xca, 0xab, 0xec, - 0xcb, 0x99, 0x00, 0x88, 0x09, 0x23, 0x11, 0x12, 0x10, 0x67, 0x34, 0x12, 0x21, 0x73, 0x23, 0x01, - 0xa8, 0xbb, 0xdb, 0xdc, 0xbb, 0xab, 0x88, 0x9a, 0x18, 0x31, 0x24, 0x03, 0x30, 0x57, 0x24, 0x02, - 0x11, 0x43, 0x33, 0x02, 0xca, 0xdb, 0xdb, 0xcc, 0xcb, 0x9a, 0x88, 0x09, 0x18, 0x21, 0x24, 0x02, - 0x11, 0x55, 0x24, 0x11, 0x11, 0x32, 0x34, 0x02, 0xb9, 0xbc, 0xdc, 0xdc, 0xbb, 0xab, 0x9a, 0x98, - 0x08, 0x32, 0x44, 0x82, 0x10, 0x54, 0x43, 0x12, 0x11, 0x32, 0x34, 0x13, 0xa8, 0xaa, 0xfb, 0xce, - 0xbb, 0xbb, 0xaa, 0xaa, 0x99, 0x31, 0x26, 0x11, 0x32, 0x45, 0x24, 0x12, 0x00, 0x21, 0x44, 0x02, - 0x88, 0x80, 0xc9, 0xdd, 0xbc, 0xcb, 0xa9, 0xa9, 0x9a, 0x10, 0x23, 0x11, 0x51, 0x45, 0x34, 0x22, - 0x02, 0x31, 0x34, 0x12, 0x00, 0x81, 0xea, 0xdd, 0xbc, 0xbb, 0xaa, 0xbb, 0x9b, 0x10, 0x33, 0x22, - 0x63, 0x54, 0x34, 0x23, 0x11, 0x32, 0x43, 0x11, 0x00, 0x81, 0xb9, 0xee, 0xcc, 0xbb, 0xba, 0xac, - 0x9a, 0x18, 0x21, 0x21, 0x32, 0x65, 0x34, 0x22, 0x22, 0x32, 0x33, 0x21, 0x11, 0x00, 0x98, 0xef, - 0xcc, 0xba, 0xbb, 0xdb, 0x9a, 0x08, 0x12, 0x13, 0x22, 0x64, 0x34, 0x22, 0x21, 0x22, 0x23, 0x21, - 0x90, 0x00, 0x90, 0xfd, 0xcc, 0xba, 0xba, 0xbc, 0xab, 0x89, 0x11, 0x02, 0x18, 0x55, 0x35, 0x23, - 0x32, 0x32, 0x33, 0x12, 0x10, 0x20, 0x13, 0xfd, 0xbc, 0xcb, 0xbc, 0xcb, 0xac, 0x09, 0x00, 0x81, - 0x08, 0x63, 0x43, 0x33, 0x22, 0x32, 0x43, 0x12, 0x00, 0x41, 0x12, 0xc9, 0xcc, 0xbc, 0xcc, 0xcb, - 0xac, 0x9a, 0x80, 0x98, 0x09, 0x41, 0x44, 0x33, 0x23, 0x24, 0x34, 0x12, 0x10, 0x32, 0x23, 0xa8, - 0xdd, 0xcb, 0xdb, 0xdb, 0xbb, 0x9a, 0x08, 0x99, 0x99, 0x31, 0x46, 0x33, 0x33, 0x53, 0x34, 0x22, - 0x21, 0x33, 0x23, 0x90, 0xcd, 0xbc, 0xbc, 0xdd, 0xbb, 0xaa, 0x99, 0xa9, 0x99, 0x20, 0x45, 0x24, - 0x32, 0x44, 0x32, 0x12, 0x12, 0x32, 0x22, 0x90, 0xdc, 0xbb, 0xeb, 0xdc, 0xbb, 0xaa, 0x99, 0x99, - 0x99, 0x20, 0x45, 0x24, 0x32, 0x34, 0x24, 0x12, 0x22, 0x22, 0x33, 0x91, 0xcc, 0xab, 0xdc, 0xdc, - 0xcb, 0x9a, 0x8a, 0x99, 0x9a, 0x18, 0x43, 0x43, 0x42, 0x34, 0x33, 0x32, 0x12, 0x52, 0x23, 0x82, - 0xba, 0x9a, 0xea, 0xce, 0xcb, 0xab, 0x99, 0xa9, 0xab, 0x89, 0x33, 0x34, 0x45, 0x34, 0x43, 0x22, - 0x11, 0x32, 0x34, 0x81, 0xa9, 0x99, 0xea, 0xdc, 0xcc, 0xab, 0x99, 0xa9, 0xba, 0x09, 0x20, 0x42, - 0x35, 0x44, 0x24, 0x23, 0x21, 0x42, 0x24, 0x00, 0x88, 0x99, 0xa9, 0xdd, 0xcc, 0xab, 0xa9, 0xb9, - 0xab, 0x9a, 0x18, 0x43, 0x54, 0x43, 0x34, 0x13, 0x21, 0x42, 0x33, 0x12, 0x80, 0x08, 0xa9, 0xdf, - 0xbd, 0xac, 0xa9, 0xaa, 0xaa, 0x9a, 0x08, 0x31, 0x44, 0x54, 0x43, 0x13, 0x12, 0x43, 0x32, 0x12, - 0x80, 0x09, 0x00, 0xfb, 0xbf, 0xba, 0xbb, 0xbb, 0xcb, 0xaa, 0x88, 0x11, 0x42, 0x45, 0x34, 0x23, - 0x21, 0x33, 0x43, 0x22, 0x88, 0x20, 0x23, 0xfa, 0xbe, 0xbc, 0xbb, 0xbb, 0xcb, 0xab, 0x8a, 0x08, - 0x38, 0x56, 0x34, 0x23, 0x32, 0x43, 0x34, 0x12, 0x80, 0x20, 0x01, 0xd9, 0xbe, 0xcc, 0xba, 0xba, - 0xcb, 0xaa, 0x98, 0x08, 0x10, 0x46, 0x43, 0x23, 0x22, 0x42, 0x43, 0x12, 0x00, 0x21, 0x12, 0xb0, - 0xed, 0xbc, 0xcb, 0xba, 0xcc, 0x9a, 0xa9, 0x99, 0x08, 0x42, 0x54, 0x32, 0x21, 0x53, 0x33, 0x13, - 0x10, 0x22, 0x12, 0x91, 0xec, 0xcc, 0xab, 0xbc, 0xbc, 0xab, 0xaa, 0xab, 0x89, 0x40, 0x36, 0x33, - 0x23, 0x45, 0x43, 0x12, 0x12, 0x22, 0x22, 0x82, 0xfa, 0xcb, 0xcb, 0xcb, 0xac, 0xaa, 0xab, 0xaa, - 0x9a, 0x30, 0x46, 0x23, 0x32, 0x54, 0x23, 0x23, 0x12, 0x22, 0x33, 0x13, 0xda, 0xbd, 0xdb, 0xbc, - 0xbc, 0xab, 0xbb, 0xbb, 0xbb, 0x28, 0x46, 0x23, 0x33, 0x45, 0x33, 0x23, 0x13, 0x22, 0x34, 0x13, - 0xb8, 0xbd, 0xcc, 0xcc, 0xbb, 0xac, 0xab, 0xbb, 0xad, 0x19, 0x22, 0x33, 0x43, 0x44, 0x34, 0x33, - 0x22, 0x32, 0x36, 0x13, 0x81, 0xa8, 0xda, 0xbc, 0xbd, 0xbc, 0xaa, 0xdb, 0xbb, 0x09, 0x21, 0x22, - 0x33, 0x45, 0x34, 0x24, 0x11, 0x22, 0x44, 0x22, 0x01, 0x98, 0xba, 0xdc, 0xbc, 0xac, 0xaa, 0xcc, - 0xbb, 0x99, 0x10, 0x12, 0x33, 0x44, 0x36, 0x23, 0x12, 0x32, 0x35, 0x23, 0x12, 0x80, 0xb9, 0xec, - 0xcc, 0xaa, 0xba, 0xcc, 0xbb, 0x9a, 0x00, 0x21, 0x21, 0x63, 0x35, 0x23, 0x23, 0x42, 0x43, 0x33, - 0x12, 0x00, 0x98, 0xfb, 0xbd, 0xab, 0xba, 0xcd, 0xbb, 0x9b, 0x09, 0x11, 0x20, 0x53, 0x36, 0x33, - 0x22, 0x23, 0x35, 0x24, 0x12, 0x00, 0x91, 0xfb, 0xbc, 0xba, 0xcb, 0xcb, 0xbc, 0xab, 0x89, 0x00, - 0x10, 0x63, 0x34, 0x24, 0x22, 0x32, 0x53, 0x23, 0x22, 0x31, 0x01, 0xeb, 0xcc, 0xba, 0xbb, 0xcc, - 0xcc, 0xaa, 0x88, 0x88, 0x08, 0x31, 0x35, 0x25, 0x13, 0x32, 0x34, 0x24, 0x21, 0x33, 0x03, 0xc9, - 0xcc, 0xbb, 0xbc, 0xeb, 0xbc, 0xbb, 0x9a, 0x98, 0x88, 0x31, 0x55, 0x43, 0x22, 0x31, 0x34, 0x32, - 0x32, 0x34, 0x22, 0xa8, 0xcc, 0xac, 0xbb, 0xdc, 0xcc, 0xab, 0x9a, 0x99, 0x89, 0x00, 0x44, 0x34, - 0x22, 0x42, 0x33, 0x33, 0x34, 0x34, 0x23, 0x80, 0xda, 0xac, 0xba, 0xdc, 0xcc, 0xba, 0xaa, 0xa9, - 0x99, 0x08, 0x52, 0x34, 0x22, 0x43, 0x43, 0x22, 0x43, 0x43, 0x32, 0x01, 0xba, 0xbb, 0xbc, 0xdd, - 0xbc, 0xad, 0xab, 0xa9, 0x9a, 0x0a, 0x32, 0x35, 0x43, 0x43, 0x43, 0x22, 0x33, 0x44, 0x33, 0x02, - 0xa8, 0xaa, 0xcb, 0xdc, 0xbc, 0xbd, 0xab, 0xba, 0xba, 0x9a, 0x21, 0x24, 0x34, 0x34, 0x34, 0x33, - 0x34, 0x54, 0x23, 0x12, 0x90, 0x99, 0xa9, 0xdb, 0xcd, 0xbc, 0xab, 0xbb, 0xac, 0x9a, 0x00, 0x22, - 0x34, 0x44, 0x43, 0x22, 0x33, 0x45, 0x43, 0x12, 0x81, 0x98, 0x88, 0xb9, 0xde, 0xbb, 0xac, 0xbb, - 0xbc, 0x9a, 0x88, 0x21, 0x32, 0x35, 0x35, 0x22, 0x32, 0x45, 0x34, 0x23, 0x01, 0x88, 0x08, 0xb8, - 0xce, 0xbc, 0xcb, 0xcb, 0xbb, 0xab, 0x8a, 0x18, 0x22, 0x44, 0x25, 0x13, 0x32, 0x54, 0x43, 0x33, - 0x11, 0x80, 0x10, 0x98, 0xcd, 0xac, 0xcb, 0xcb, 0xac, 0xab, 0x9a, 0x88, 0x10, 0x52, 0x43, 0x22, - 0x31, 0x44, 0x35, 0x24, 0x02, 0x00, 0x01, 0x90, 0xdb, 0xbc, 0xcb, 0xbc, 0xbc, 0xbb, 0xaa, 0x89, - 0x08, 0x53, 0x34, 0x32, 0x22, 0x63, 0x35, 0x34, 0x12, 0x10, 0x11, 0x80, 0xca, 0xbc, 0xcc, 0xcb, - 0xbc, 0xbb, 0xaa, 0x9a, 0x09, 0x41, 0x34, 0x33, 0x22, 0x53, 0x46, 0x33, 0x12, 0x12, 0x21, 0x80, - 0xb9, 0xcd, 0xcb, 0xdb, 0xbc, 0xab, 0xbb, 0xaa, 0x8a, 0x31, 0x44, 0x24, 0x11, 0x32, 0x47, 0x33, - 0x22, 0x22, 0x22, 0x11, 0xa9, 0xbd, 0xbc, 0xcd, 0xbc, 0xbb, 0xcb, 0xba, 0x99, 0x18, 0x42, 0x24, - 0x11, 0x42, 0x35, 0x35, 0x22, 0x22, 0x22, 0x12, 0xa8, 0xbb, 0xcd, 0xcc, 0xbc, 0xbc, 0xca, 0xaa, - 0x9a, 0x09, 0x32, 0x34, 0x11, 0x42, 0x45, 0x43, 0x23, 0x22, 0x33, 0x22, 0x80, 0xaa, 0xcc, 0xdc, - 0xcb, 0xac, 0xbb, 0xac, 0xaa, 0x0a, 0x31, 0x33, 0x22, 0x53, 0x45, 0x34, 0x32, 0x43, 0x22, 0x13, - 0x00, 0x89, 0xca, 0xcc, 0xbd, 0xbc, 0xbb, 0xbc, 0xcb, 0x99, 0x21, 0x22, 0x12, 0x31, 0x46, 0x43, - 0x24, 0x32, 0x43, 0x12, 0x01, 0x80, 0x98, 0xcc, 0xcc, 0xcb, 0xcb, 0xca, 0xba, 0x9a, 0x10, 0x22, - 0x22, 0x31, 0x54, 0x44, 0x32, 0x43, 0x33, 0x23, 0x12, 0x01, 0x98, 0xda, 0xcd, 0xbc, 0xbb, 0xcc, - 0xac, 0x9b, 0x00, 0x11, 0x01, 0x21, 0x52, 0x44, 0x32, 0x34, 0x24, 0x23, 0x12, 0x11, 0x88, 0xb8, - 0xce, 0xcb, 0xbb, 0xbd, 0xbd, 0xaa, 0x08, 0x10, 0x10, 0x20, 0x52, 0x43, 0x43, 0x34, 0x43, 0x23, - 0x22, 0x11, 0x01, 0xa9, 0xdd, 0xcb, 0xbb, 0xcd, 0xcb, 0x9b, 0x89, 0x18, 0x00, 0x10, 0x33, 0x35, - 0x53, 0x34, 0x24, 0x33, 0x23, 0x12, 0x12, 0x90, 0xcd, 0xcb, 0xcb, 0xcc, 0xdb, 0xba, 0x89, 0x88, - 0x00, 0x00, 0x22, 0x43, 0x34, 0x35, 0x34, 0x34, 0x22, 0x12, 0x22, 0x81, 0xcb, 0xbc, 0xbc, 0xdc, - 0xcc, 0xba, 0x9a, 0x88, 0x88, 0x10, 0x11, 0x33, 0x35, 0x35, 0x44, 0x33, 0x33, 0x33, 0x24, 0x01, - 0xa9, 0xcb, 0xcb, 0xdc, 0xcc, 0xac, 0x9a, 0x99, 0x88, 0x80, 0x11, 0x21, 0x43, 0x34, 0x45, 0x33, - 0x23, 0x43, 0x32, 0x02, 0x98, 0xca, 0xba, 0xdc, 0xbe, 0xbc, 0xba, 0xa9, 0x98, 0x88, 0x18, 0x22, - 0x33, 0x55, 0x34, 0x34, 0x33, 0x43, 0x33, 0x22, 0x90, 0xba, 0xb9, 0xde, 0xdc, 0xcb, 0xaa, 0x9a, - 0x99, 0x88, 0x08, 0x12, 0x22, 0x63, 0x34, 0x34, 0x43, 0x33, 0x43, 0x13, 0x91, 0x98, 0x98, 0xea, - 0xcd, 0xbc, 0xac, 0xaa, 0xa9, 0x89, 0x08, 0x01, 0x12, 0x53, 0x44, 0x43, 0x33, 0x34, 0x24, 0x23, - 0x00, 0x88, 0x88, 0xc9, 0xdd, 0xcc, 0xab, 0xab, 0xaa, 0x99, 0x88, 0x01, 0x11, 0x42, 0x54, 0x43, - 0x33, 0x44, 0x24, 0x23, 0x01, 0x00, 0x00, 0x98, 0xcd, 0xcd, 0xbb, 0xcb, 0xaa, 0xa9, 0x88, 0x88, - 0x00, 0x31, 0x54, 0x24, 0x43, 0x53, 0x43, 0x22, 0x11, 0x01, 0x01, 0x80, 0xeb, 0xcc, 0xbc, 0xbb, - 0xac, 0x9a, 0x89, 0x88, 0x80, 0x20, 0x44, 0x43, 0x33, 0x54, 0x34, 0x23, 0x22, 0x10, 0x11, 0x81, - 0xd9, 0xcd, 0xbc, 0xac, 0xbb, 0xab, 0x99, 0x98, 0x88, 0x20, 0x63, 0x33, 0x34, 0x54, 0x53, 0x22, - 0x12, 0x11, 0x10, 0x11, 0xb9, 0xcd, 0xbd, 0xcc, 0xba, 0xaa, 0x99, 0x98, 0x88, 0x08, 0x43, 0x43, - 0x42, 0x53, 0x44, 0x33, 0x22, 0x11, 0x12, 0x12, 0xa0, 0xdc, 0xcc, 0xdb, 0xbb, 0xba, 0x9a, 0x89, - 0x9a, 0x08, 0x42, 0x33, 0x53, 0x44, 0x44, 0x43, 0x12, 0x12, 0x11, 0x12, 0x80, 0xbb, 0xbf, 0xbd, - 0xbc, 0xac, 0x99, 0x99, 0x99, 0x09, 0x30, 0x22, 0x43, 0x63, 0x44, 0x34, 0x32, 0x21, 0x22, 0x13, - 0x01, 0xb8, 0xce, 0xcc, 0xbc, 0xbb, 0xaa, 0xa9, 0xab, 0x8a, 0x20, 0x32, 0x23, 0x55, 0x45, 0x34, - 0x32, 0x22, 0x32, 0x22, 0x12, 0xa8, 0xeb, 0xdc, 0xbc, 0xac, 0x9b, 0xaa, 0xaa, 0x99, 0x00, 0x22, - 0x21, 0x53, 0x55, 0x34, 0x32, 0x33, 0x32, 0x33, 0x12, 0x91, 0xda, 0xcd, 0xcd, 0xab, 0xab, 0xba, - 0xba, 0x9a, 0x18, 0x11, 0x12, 0x43, 0x47, 0x53, 0x23, 0x33, 0x32, 0x33, 0x22, 0x11, 0xa8, 0xed, - 0xbd, 0xbc, 0xab, 0xab, 0xbb, 0xaa, 0x09, 0x10, 0x11, 0x32, 0x47, 0x35, 0x34, 0x32, 0x33, 0x24, - 0x22, 0x21, 0x81, 0xea, 0xcd, 0xcb, 0xaa, 0xab, 0xab, 0xab, 0x89, 0x00, 0x01, 0x20, 0x64, 0x44, - 0x34, 0x32, 0x43, 0x32, 0x22, 0x12, 0x12, 0xc8, 0xce, 0xbc, 0xcb, 0xaa, 0xbb, 0xba, 0x8a, 0x08, - 0x80, 0x18, 0x63, 0x45, 0x43, 0x33, 0x43, 0x23, 0x23, 0x23, 0x23, 0xa8, 0xde, 0xbc, 0xac, 0xab, - 0xcb, 0xaa, 0x9a, 0x08, 0x08, 0x88, 0x41, 0x36, 0x34, 0x34, 0x34, 0x32, 0x32, 0x32, 0x14, 0x81, - 0xfa, 0xcb, 0xcb, 0xba, 0xcb, 0xab, 0x9a, 0x89, 0x90, 0x88, 0x31, 0x46, 0x24, 0x34, 0x34, 0x33, - 0x32, 0x32, 0x24, 0x82, 0xd9, 0xdc, 0xab, 0xac, 0xcb, 0xba, 0x9a, 0x89, 0x98, 0x88, 0x10, 0x44, - 0x43, 0x35, 0x34, 0x24, 0x13, 0x33, 0x33, 0x23, 0xb8, 0xbf, 0xcc, 0xbb, 0xdb, 0xbb, 0xaa, 0x99, - 0x99, 0x99, 0x10, 0x53, 0x53, 0x53, 0x34, 0x33, 0x33, 0x43, 0x43, 0x12, 0x80, 0xdb, 0xcb, 0xbc, - 0xbc, 0xbc, 0xaa, 0x99, 0xa9, 0x99, 0x18, 0x31, 0x63, 0x63, 0x43, 0x33, 0x33, 0x43, 0x34, 0x23, - 0x00, 0xba, 0xbd, 0xbd, 0xcc, 0xcb, 0x9a, 0x9a, 0x99, 0x9a, 0x88, 0x01, 0x32, 0x46, 0x34, 0x34, - 0x32, 0x43, 0x43, 0x23, 0x02, 0x99, 0xdb, 0xcb, 0xbd, 0xbc, 0xbb, 0xaa, 0xaa, 0xaa, 0x98, 0x08, - 0x21, 0x55, 0x34, 0x25, 0x33, 0x43, 0x53, 0x23, 0x02, 0x90, 0xa9, 0xcc, 0xcc, 0xcb, 0xbb, 0xaa, - 0xab, 0x9a, 0x9a, 0x89, 0x20, 0x53, 0x55, 0x33, 0x43, 0x42, 0x43, 0x43, 0x12, 0x80, 0x98, 0xba, - 0xcd, 0xcc, 0xaa, 0xab, 0xab, 0xaa, 0xa9, 0x89, 0x08, 0x41, 0x45, 0x34, 0x33, 0x53, 0x34, 0x34, - 0x22, 0x01, 0x90, 0xb8, 0xdc, 0xbc, 0xbc, 0xbb, 0xba, 0xab, 0xba, 0x9a, 0x99, 0x30, 0x37, 0x35, - 0x33, 0x34, 0x45, 0x33, 0x24, 0x11, 0x00, 0x98, 0xcb, 0xbd, 0xbc, 0xac, 0xab, 0xbb, 0xaa, 0xaa, - 0x9b, 0x18, 0x54, 0x43, 0x43, 0x33, 0x45, 0x34, 0x23, 0x22, 0x02, 0x81, 0xca, 0xcc, 0xbc, 0xac, - 0xbb, 0xab, 0xab, 0xbb, 0xbb, 0x09, 0x52, 0x34, 0x34, 0x43, 0x45, 0x34, 0x23, 0x23, 0x23, 0x00, - 0xa9, 0xcd, 0xcc, 0xba, 0xac, 0xab, 0xaa, 0xb9, 0xab, 0x8a, 0x31, 0x35, 0x24, 0x43, 0x54, 0x34, - 0x33, 0x24, 0x22, 0x02, 0xa0, 0xda, 0xdb, 0xcb, 0xbb, 0xbb, 0xba, 0xca, 0xab, 0x9b, 0x18, 0x34, - 0x23, 0x43, 0x46, 0x34, 0x34, 0x24, 0x22, 0x12, 0x80, 0xa9, 0xbd, 0xcc, 0xcb, 0xba, 0xaa, 0xba, - 0xbb, 0xbb, 0x08, 0x53, 0x22, 0x41, 0x54, 0x53, 0x24, 0x33, 0x43, 0x12, 0x11, 0x99, 0xca, 0xcc, - 0xbc, 0xba, 0xbb, 0xca, 0xbb, 0xbc, 0x09, 0x12, 0x11, 0x32, 0x54, 0x35, 0x35, 0x43, 0x32, 0x33, - 0x11, 0x80, 0xc9, 0xcc, 0xbc, 0xbb, 0xac, 0xba, 0xdb, 0xab, 0x0a, 0x10, 0x10, 0x21, 0x44, 0x44, - 0x44, 0x42, 0x42, 0x12, 0x12, 0x81, 0x98, 0xbc, 0xbd, 0xcb, 0xab, 0xaa, 0xcc, 0xab, 0x9a, 0x00, - 0x10, 0x11, 0x42, 0x54, 0x34, 0x34, 0x34, 0x24, 0x21, 0x01, 0x90, 0xca, 0xcc, 0xac, 0xab, 0xaa, - 0xdb, 0xab, 0x9a, 0x88, 0x01, 0x01, 0x32, 0x55, 0x43, 0x44, 0x33, 0x24, 0x23, 0x21, 0x80, 0xb9, - 0xdd, 0xcb, 0xaa, 0xb9, 0xcb, 0xcb, 0x9a, 0x89, 0x81, 0x10, 0x21, 0x43, 0x35, 0x36, 0x25, 0x33, - 0x33, 0x22, 0x11, 0xa8, 0xdd, 0xcb, 0xaa, 0xab, 0xbc, 0xbc, 0xab, 0x89, 0x88, 0x08, 0x20, 0x32, - 0x45, 0x45, 0x34, 0x34, 0x33, 0x32, 0x12, 0x81, 0xeb, 0xbc, 0xba, 0xbb, 0xbc, 0xbd, 0xbb, 0x9a, - 0x88, 0x09, 0x11, 0x21, 0x54, 0x44, 0x35, 0x53, 0x23, 0x32, 0x22, 0x82, 0xc9, 0xbc, 0xac, 0xbb, - 0xdb, 0xdb, 0xaa, 0x9a, 0x9a, 0x88, 0x10, 0x20, 0x42, 0x45, 0x63, 0x43, 0x32, 0x23, 0x24, 0x11, - 0xa8, 0xbc, 0xcb, 0xbb, 0xdb, 0xbc, 0xba, 0xab, 0xaa, 0x89, 0x08, 0x10, 0x42, 0x44, 0x45, 0x25, - 0x33, 0x43, 0x32, 0x13, 0x88, 0xdb, 0xbb, 0xcb, 0xcb, 0xbc, 0xac, 0xab, 0x9b, 0x99, 0x88, 0x10, - 0x22, 0x52, 0x55, 0x34, 0x24, 0x43, 0x32, 0x13, 0x81, 0xc9, 0xab, 0xac, 0xbc, 0xbc, 0xac, 0xbb, - 0xbb, 0xa9, 0x09, 0x00, 0x10, 0x31, 0x57, 0x44, 0x32, 0x34, 0x24, 0x33, 0x01, 0x99, 0xbb, 0xdb, - 0xcb, 0xcb, 0xcb, 0xcb, 0xaa, 0x9a, 0x89, 0x88, 0x80, 0x28, 0x64, 0x34, 0x34, 0x34, 0x44, 0x32, - 0x11, 0x88, 0x9a, 0xbb, 0xbc, 0xbd, 0xcb, 0xac, 0xbb, 0xbb, 0x8a, 0x98, 0x99, 0x18, 0x73, 0x53, - 0x34, 0x34, 0x44, 0x33, 0x12, 0x00, 0xa8, 0xba, 0xcb, 0xcc, 0xcb, 0xbb, 0xbc, 0xbb, 0x9a, 0x99, - 0x99, 0x09, 0x51, 0x44, 0x34, 0x44, 0x34, 0x34, 0x12, 0x11, 0x98, 0xa9, 0xcb, 0xcb, 0xdb, 0xbb, - 0xbc, 0xbb, 0xaa, 0xa9, 0xa9, 0x89, 0x32, 0x55, 0x34, 0x44, 0x44, 0x33, 0x33, 0x21, 0x90, 0x99, - 0xbb, 0xbd, 0xbd, 0xcb, 0xbc, 0xab, 0xaa, 0x9a, 0x9a, 0x8a, 0x28, 0x35, 0x34, 0x55, 0x53, 0x43, - 0x32, 0x12, 0x00, 0x88, 0xaa, 0xcb, 0xbc, 0xbc, 0xbd, 0xbb, 0xab, 0xaa, 0xba, 0x9b, 0x28, 0x42, - 0x43, 0x55, 0x44, 0x34, 0x33, 0x23, 0x11, 0x80, 0xa9, 0xbb, 0xbd, 0xcd, 0xbb, 0xbc, 0xab, 0xba, - 0xba, 0xab, 0x08, 0x21, 0x42, 0x55, 0x44, 0x44, 0x33, 0x33, 0x12, 0x81, 0x98, 0xb9, 0xdb, 0xbc, - 0xbd, 0xac, 0xbb, 0xaa, 0xbb, 0xbb, 0x09, 0x10, 0x22, 0x45, 0x64, 0x44, 0x33, 0x33, 0x23, 0x02, - 0x90, 0xa9, 0xcb, 0xcc, 0xbc, 0xcc, 0xaa, 0x9a, 0xbb, 0xab, 0x89, 0x08, 0x21, 0x41, 0x64, 0x35, - 0x35, 0x33, 0x33, 0x11, 0x81, 0x98, 0xaa, 0xcc, 0xcc, 0xbc, 0xab, 0xba, 0xac, 0xab, 0x9a, 0x89, - 0x00, 0x10, 0x73, 0x36, 0x35, 0x24, 0x33, 0x21, 0x01, 0x08, 0x99, 0xca, 0xcc, 0xbc, 0xbb, 0xbb, - 0xbc, 0xac, 0x9a, 0x89, 0x88, 0x88, 0x52, 0x55, 0x34, 0x34, 0x24, 0x12, 0x02, 0x00, 0x88, 0xb8, - 0xdc, 0xbb, 0xac, 0xac, 0xbb, 0xbb, 0xab, 0x9a, 0x99, 0xa9, 0x30, 0x57, 0x35, 0x35, 0x33, 0x23, - 0x13, 0x10, 0x00, 0xa8, 0xcd, 0xcb, 0xcb, 0xbb, 0xcb, 0xbb, 0xab, 0x9a, 0x9a, 0xaa, 0x19, 0x64, - 0x45, 0x34, 0x34, 0x33, 0x22, 0x01, 0x11, 0x98, 0xbc, 0xbd, 0xbc, 0xac, 0xbb, 0xad, 0x9b, 0x9a, - 0xa9, 0x9a, 0x8a, 0x40, 0x55, 0x44, 0x53, 0x32, 0x12, 0x11, 0x12, 0x90, 0xb9, 0xbc, 0xbd, 0xca, - 0xcb, 0xbb, 0xbb, 0xaa, 0xab, 0xbb, 0xaa, 0x28, 0x65, 0x35, 0x36, 0x33, 0x23, 0x32, 0x13, 0x01, - 0xa8, 0xcc, 0xac, 0xcb, 0xbc, 0xcb, 0xba, 0xaa, 0xaa, 0xba, 0xbb, 0x89, 0x52, 0x65, 0x44, 0x33, - 0x32, 0x33, 0x22, 0x12, 0x98, 0xca, 0xbc, 0xdb, 0xbc, 0xbc, 0xba, 0xbb, 0xaa, 0xbb, 0xab, 0x9a, - 0x18, 0x66, 0x45, 0x33, 0x24, 0x32, 0x22, 0x12, 0x91, 0xb9, 0xcb, 0xdb, 0xbc, 0xbc, 0xcb, 0xaa, - 0xa9, 0xbb, 0xaa, 0xba, 0x8a, 0x72, 0x46, 0x43, 0x33, 0x33, 0x33, 0x23, 0x01, 0xa9, 0xbb, 0xbe, - 0xbd, 0xbc, 0xcb, 0xaa, 0xba, 0xba, 0xa9, 0xcb, 0x9a, 0x40, 0x46, 0x44, 0x33, 0x43, 0x32, 0x22, - 0x11, 0x88, 0xa9, 0xbc, 0xcc, 0xbc, 0xac, 0xba, 0xba, 0xab, 0xab, 0xbc, 0xab, 0x18, 0x55, 0x45, - 0x33, 0x34, 0x33, 0x33, 0x22, 0x00, 0xb9, 0xca, 0xdc, 0xcb, 0xbb, 0xcb, 0xba, 0xab, 0xbb, 0xbc, - 0xab, 0x8a, 0x62, 0x45, 0x34, 0x43, 0x33, 0x33, 0x23, 0x01, 0x98, 0xaa, 0xcd, 0xbd, 0xbb, 0xcb, - 0xbb, 0xab, 0xab, 0xbc, 0xcb, 0x9a, 0x31, 0x56, 0x43, 0x43, 0x24, 0x23, 0x23, 0x01, 0x00, 0x99, - 0xea, 0xcb, 0xbb, 0xbc, 0xac, 0xaa, 0xab, 0xba, 0xbc, 0xaa, 0x38, 0x45, 0x44, 0x44, 0x33, 0x33, - 0x33, 0x21, 0x00, 0xa0, 0xdb, 0xbc, 0xbc, 0xbc, 0xac, 0xab, 0xaa, 0xaa, 0xcc, 0x9a, 0x08, 0x41, - 0x54, 0x34, 0x34, 0x43, 0x32, 0x21, 0x10, 0x80, 0xba, 0xcc, 0xcb, 0xbc, 0xbb, 0xbb, 0xbb, 0xcb, - 0xbc, 0xbb, 0x99, 0x31, 0x56, 0x53, 0x43, 0x43, 0x22, 0x22, 0x11, 0x00, 0xa9, 0xcb, 0xbc, 0xcc, - 0xbb, 0xbb, 0xab, 0xbb, 0xbd, 0xcb, 0x9a, 0x10, 0x53, 0x44, 0x44, 0x43, 0x32, 0x22, 0x12, 0x01, - 0x98, 0xba, 0xcd, 0xcb, 0xcb, 0xab, 0xab, 0xba, 0xcb, 0xcb, 0xaa, 0x19, 0x32, 0x46, 0x44, 0x34, - 0x33, 0x33, 0x22, 0x11, 0x80, 0xba, 0xcc, 0xbc, 0xbd, 0xac, 0x9a, 0xaa, 0xbb, 0xad, 0xab, 0x89, - 0x11, 0x73, 0x44, 0x43, 0x43, 0x22, 0x13, 0x12, 0x00, 0x99, 0xba, 0xdc, 0xbc, 0xbb, 0xbb, 0xbb, - 0xbc, 0xcc, 0xaa, 0x9a, 0x08, 0x42, 0x55, 0x43, 0x34, 0x32, 0x33, 0x22, 0x01, 0x88, 0xb9, 0xcd, - 0xbc, 0xbc, 0xba, 0xab, 0xcb, 0xbc, 0xab, 0xaa, 0x99, 0x31, 0x56, 0x34, 0x44, 0x32, 0x33, 0x23, - 0x02, 0x81, 0xa8, 0xcc, 0xbc, 0xbc, 0xac, 0xaa, 0xbb, 0xbc, 0xac, 0xaa, 0x99, 0x18, 0x44, 0x45, - 0x24, 0x24, 0x33, 0x23, 0x22, 0x01, 0x98, 0xca, 0xcc, 0xbc, 0xbb, 0xba, 0xcb, 0xac, 0xbb, 0xbb, - 0xba, 0x09, 0x62, 0x45, 0x43, 0x34, 0x33, 0x24, 0x22, 0x01, 0x80, 0xb8, 0xeb, 0xbc, 0xba, 0xbb, - 0xcb, 0xcb, 0xab, 0xcb, 0xaa, 0x9a, 0x30, 0x45, 0x44, 0x34, 0x34, 0x23, 0x33, 0x21, 0x10, 0x98, - 0xeb, 0xdb, 0xba, 0xab, 0xcb, 0xbb, 0xcb, 0xbb, 0xbc, 0x9a, 0x19, 0x43, 0x45, 0x35, 0x43, 0x33, - 0x33, 0x23, 0x11, 0x80, 0xcb, 0xcc, 0xcb, 0xbb, 0xbb, 0xcc, 0xba, 0xac, 0xbb, 0xab, 0x89, 0x30, - 0x55, 0x44, 0x34, 0x43, 0x32, 0x22, 0x22, 0x01, 0xa9, 0xcc, 0xcb, 0xbb, 0xac, 0xac, 0xbb, 0xbc, - 0xbb, 0xac, 0x89, 0x18, 0x53, 0x35, 0x35, 0x34, 0x33, 0x33, 0x23, 0x12, 0xa8, 0xdb, 0xcc, 0xba, - 0xcb, 0xbb, 0xbb, 0xcc, 0xbb, 0xba, 0xab, 0x09, 0x42, 0x55, 0x53, 0x43, 0x33, 0x33, 0x33, 0x22, - 0x80, 0xba, 0xbe, 0xbc, 0xcb, 0xbb, 0xbb, 0xad, 0xcb, 0xba, 0xab, 0x9a, 0x20, 0x54, 0x44, 0x34, - 0x43, 0x33, 0x24, 0x22, 0x10, 0xa8, 0xca, 0xcb, 0xbb, 0xbc, 0xcb, 0xcb, 0xca, 0xba, 0xbb, 0xaa, - 0x88, 0x42, 0x45, 0x44, 0x43, 0x33, 0x33, 0x33, 0x22, 0x90, 0xbb, 0xcd, 0xcb, 0xca, 0xba, 0xcb, - 0xbb, 0xbc, 0xbb, 0xab, 0x99, 0x20, 0x46, 0x44, 0x34, 0x33, 0x34, 0x24, 0x12, 0x80, 0xa8, 0xca, - 0xbb, 0xcb, 0xbc, 0xbb, 0xbc, 0xbc, 0xac, 0xba, 0xa9, 0x08, 0x53, 0x44, 0x44, 0x42, 0x42, 0x22, - 0x22, 0x01, 0x98, 0xb9, 0xcb, 0xbc, 0xbb, 0xbc, 0xbc, 0xcb, 0xcb, 0xaa, 0xaa, 0x89, 0x21, 0x36, - 0x45, 0x43, 0x33, 0x25, 0x22, 0x11, 0x80, 0xa9, 0xbb, 0xbd, 0xcb, 0xbb, 0xbc, 0xbc, 0xbb, 0xcb, - 0xab, 0xaa, 0x10, 0x44, 0x35, 0x44, 0x34, 0x33, 0x24, 0x12, 0x81, 0x98, 0xba, 0xcc, 0xbb, 0xcb, - 0xcb, 0xac, 0xbb, 0xbb, 0xbc, 0xaa, 0x09, 0x42, 0x44, 0x44, 0x34, 0x34, 0x33, 0x23, 0x02, 0x80, - 0xaa, 0xcc, 0xbb, 0xbc, 0xbc, 0xdb, 0xba, 0xcb, 0xba, 0xbb, 0x89, 0x20, 0x54, 0x34, 0x35, 0x44, - 0x32, 0x23, 0x22, 0x00, 0x99, 0xbb, 0xcc, 0xcb, 0xcb, 0xbb, 0xbc, 0xbb, 0xbc, 0xab, 0x9a, 0x19, - 0x43, 0x36, 0x35, 0x35, 0x43, 0x32, 0x22, 0x01, 0x90, 0xba, 0xdb, 0xbb, 0xbc, 0xbc, 0xbc, 0xbb, - 0xbc, 0xbb, 0xab, 0x89, 0x31, 0x46, 0x44, 0x43, 0x34, 0x33, 0x33, 0x02, 0x80, 0xa9, 0xbc, 0xbc, - 0xcc, 0xca, 0xba, 0xcb, 0xca, 0xaa, 0xaa, 0x8a, 0x10, 0x43, 0x54, 0x34, 0x35, 0x33, 0x24, 0x22, - 0x00, 0x98, 0xaa, 0xbc, 0xcc, 0xbb, 0xcb, 0xac, 0xbb, 0xac, 0xba, 0x9a, 0x19, 0x41, 0x44, 0x44, - 0x34, 0x34, 0x33, 0x22, 0x11, 0x88, 0xba, 0xbc, 0xcc, 0xbb, 0xbc, 0xcb, 0xbb, 0xbc, 0xbb, 0xaa, - 0x89, 0x21, 0x54, 0x44, 0x44, 0x33, 0x34, 0x33, 0x12, 0x80, 0xa9, 0xca, 0xcb, 0xac, 0xbc, 0xbb, - 0xac, 0xcb, 0xbb, 0xab, 0x9a, 0x00, 0x52, 0x44, 0x35, 0x44, 0x33, 0x33, 0x23, 0x00, 0x98, 0xba, - 0xbc, 0xbd, 0xbc, 0xcb, 0xab, 0xbc, 0xcb, 0xab, 0x9a, 0x88, 0x31, 0x54, 0x35, 0x44, 0x43, 0x33, - 0x22, 0x02, 0x80, 0xa9, 0xcb, 0xbc, 0xbc, 0xac, 0xcb, 0xba, 0xac, 0xbb, 0xaa, 0x89, 0x20, 0x44, - 0x45, 0x43, 0x34, 0x34, 0x32, 0x11, 0x00, 0x98, 0xba, 0xcc, 0xcb, 0xcb, 0xba, 0xcb, 0xbb, 0xac, - 0xab, 0x8a, 0x08, 0x41, 0x35, 0x45, 0x34, 0x43, 0x33, 0x22, 0x01, 0x88, 0xaa, 0xdb, 0xbc, 0xbc, - 0xba, 0xbc, 0xcb, 0xbb, 0xab, 0x9b, 0x89, 0x21, 0x55, 0x63, 0x43, 0x34, 0x33, 0x22, 0x12, 0x80, - 0x99, 0xcb, 0xcc, 0xbb, 0xbb, 0xbd, 0xcb, 0xbb, 0xab, 0xbb, 0x99, 0x18, 0x52, 0x45, 0x44, 0x34, - 0x24, 0x23, 0x12, 0x00, 0x98, 0xb9, 0xcc, 0xbb, 0xbc, 0xcb, 0xcb, 0xbb, 0xbb, 0xbb, 0x9b, 0x89, - 0x30, 0x65, 0x44, 0x34, 0x34, 0x33, 0x23, 0x11, 0x00, 0xaa, 0xbc, 0xbd, 0xcb, 0xbb, 0xbc, 0xbc, - 0xcb, 0xba, 0xa9, 0x99, 0x18, 0x52, 0x35, 0x36, 0x34, 0x43, 0x22, 0x11, 0x01, 0x98, 0xca, 0xbb, - 0xbc, 0xbc, 0xdb, 0xba, 0xac, 0xab, 0xab, 0x99, 0x09, 0x41, 0x54, 0x44, 0x34, 0x34, 0x22, 0x22, - 0x01, 0x90, 0xb9, 0xbc, 0xbc, 0xbc, 0xbb, 0xbd, 0xcb, 0xab, 0xaa, 0x9b, 0x89, 0x20, 0x54, 0x54, - 0x34, 0x34, 0x33, 0x32, 0x11, 0x91, 0xa9, 0xbc, 0xad, 0xac, 0xbb, 0xbc, 0xcb, 0xbb, 0xbb, 0xba, - 0x9a, 0x00, 0x53, 0x46, 0x44, 0x24, 0x33, 0x23, 0x22, 0x00, 0x98, 0xcb, 0xcb, 0xac, 0xbb, 0xbc, - 0xad, 0xab, 0xbb, 0xba, 0xaa, 0x89, 0x10, 0x56, 0x54, 0x33, 0x34, 0x33, 0x23, 0x12, 0x88, 0xca, - 0xbb, 0xbd, 0xca, 0xcb, 0xbb, 0xbc, 0xbb, 0xbb, 0xaa, 0x9a, 0x09, 0x54, 0x46, 0x43, 0x34, 0x42, - 0x22, 0x11, 0x81, 0x99, 0xbb, 0xbc, 0xcb, 0xbc, 0xcb, 0xbb, 0xcb, 0xbb, 0xaa, 0xaa, 0x99, 0x42, - 0x56, 0x43, 0x34, 0x24, 0x33, 0x22, 0x01, 0x98, 0xca, 0xbb, 0xdb, 0xcb, 0xcb, 0xba, 0xac, 0xbb, - 0xaa, 0xba, 0x99, 0x20, 0x46, 0x45, 0x43, 0x33, 0x34, 0x22, 0x02, 0x80, 0xaa, 0xcb, 0xcb, 0xbc, - 0xbb, 0xcc, 0xba, 0xbb, 0xbb, 0xbb, 0xab, 0x18, 0x73, 0x45, 0x34, 0x34, 0x43, 0x22, 0x12, 0x81, - 0x99, 0xba, 0xbc, 0xbc, 0xbc, 0xdb, 0xba, 0xbb, 0xbb, 0xac, 0xab, 0x89, 0x31, 0x46, 0x45, 0x43, - 0x33, 0x43, 0x22, 0x81, 0x90, 0xa9, 0xcb, 0xbc, 0xbb, 0xbd, 0xcb, 0xba, 0xbb, 0xbb, 0xac, 0x9a, - 0x19, 0x44, 0x36, 0x35, 0x34, 0x43, 0x22, 0x01, 0x00, 0xa9, 0xba, 0xbc, 0xdb, 0xbb, 0xbc, 0xbc, - 0xab, 0xac, 0xba, 0xaa, 0x89, 0x52, 0x54, 0x53, 0x43, 0x43, 0x22, 0x12, 0x00, 0x98, 0xb9, 0xcb, - 0xcb, 0xcb, 0xcb, 0xbb, 0xbb, 0xcb, 0xbb, 0xbb, 0x9a, 0x30, 0x56, 0x53, 0x34, 0x34, 0x24, 0x12, - 0x01, 0x80, 0x99, 0xbb, 0xbc, 0xbc, 0xbc, 0xbc, 0xba, 0xcb, 0xba, 0xcb, 0x9a, 0x18, 0x52, 0x44, - 0x44, 0x34, 0x33, 0x23, 0x22, 0x00, 0x99, 0xcb, 0xcb, 0xcb, 0xbc, 0xbb, 0xbc, 0xbb, 0xbb, 0xad, - 0xab, 0x09, 0x31, 0x54, 0x45, 0x34, 0x24, 0x23, 0x22, 0x01, 0x98, 0xaa, 0xcb, 0xcb, 0xbc, 0xac, - 0xbb, 0xac, 0xca, 0xba, 0xbb, 0x89, 0x18, 0x62, 0x54, 0x34, 0x34, 0x33, 0x33, 0x12, 0x80, 0xa9, - 0xcb, 0xdb, 0xcb, 0xcb, 0xab, 0xbb, 0xcb, 0xdb, 0xaa, 0x89, 0x88, 0x30, 0x55, 0x44, 0x24, 0x33, - 0x33, 0x23, 0x00, 0x89, 0xba, 0xcc, 0xdb, 0xbb, 0xcb, 0xba, 0xcb, 0xcb, 0xba, 0x9a, 0x99, 0x18, - 0x54, 0x45, 0x34, 0x43, 0x33, 0x22, 0x01, 0x80, 0xaa, 0xcb, 0xdb, 0xcb, 0xbb, 0xab, 0xbc, 0xcb, - 0xbb, 0xaa, 0x9a, 0x89, 0x63, 0x45, 0x44, 0x43, 0x32, 0x23, 0x11, 0x81, 0x99, 0xba, 0xcc, 0xbc, - 0xbb, 0xbb, 0xbc, 0xbc, 0xcb, 0xaa, 0xaa, 0x9a, 0x21, 0x56, 0x34, 0x35, 0x43, 0x23, 0x12, 0x01, - 0x98, 0xa9, 0xcb, 0xcc, 0xbb, 0xab, 0xcb, 0xcb, 0xbb, 0xbb, 0xcb, 0xaa, 0x08, 0x73, 0x63, 0x43, - 0x24, 0x33, 0x22, 0x02, 0x80, 0x98, 0xca, 0xcc, 0xba, 0xba, 0xca, 0xcb, 0xbb, 0xcb, 0xbb, 0xac, - 0x89, 0x30, 0x64, 0x44, 0x43, 0x33, 0x23, 0x22, 0x00, 0x80, 0xba, 0xbd, 0xbc, 0xbb, 0xcb, 0xcb, - 0xcb, 0xca, 0xba, 0xbb, 0xaa, 0x08, 0x44, 0x36, 0x35, 0x34, 0x33, 0x23, 0x11, 0x80, 0xa8, 0xbc, - 0xbc, 0xcb, 0xba, 0xbc, 0xac, 0xcb, 0xbb, 0xac, 0xab, 0x89, 0x31, 0x46, 0x35, 0x35, 0x33, 0x22, - 0x12, 0x01, 0x98, 0xdb, 0xbb, 0xbb, 0xcb, 0xbc, 0xcb, 0xca, 0xbb, 0xcb, 0xab, 0x9a, 0x28, 0x54, - 0x54, 0x34, 0x43, 0x22, 0x22, 0x11, 0x88, 0xba, 0xcb, 0xbb, 0xcb, 0xac, 0xcb, 0xba, 0xbc, 0xdb, - 0xba, 0x9a, 0x88, 0x41, 0x45, 0x35, 0x34, 0x32, 0x23, 0x22, 0x80, 0xa9, 0xac, 0xcb, 0xbb, 0xbc, - 0xcb, 0xba, 0xbc, 0xbc, 0xac, 0xab, 0x9a, 0x28, 0x64, 0x54, 0x33, 0x33, 0x43, 0x22, 0x01, 0xa8, - 0xaa, 0xbb, 0xbd, 0xbb, 0xbc, 0xcb, 0xbb, 0xcd, 0xab, 0xbb, 0xab, 0x0a, 0x52, 0x46, 0x34, 0x33, - 0x34, 0x32, 0x02, 0x90, 0xa9, 0xba, 0xbd, 0xbb, 0xbc, 0xca, 0xca, 0xcb, 0xac, 0xbb, 0xbb, 0xaa, - 0x20, 0x47, 0x34, 0x34, 0x34, 0x33, 0x12, 0x01, 0x99, 0xba, 0xcb, 0xac, 0xbb, 0xbb, 0xcc, 0xdb, - 0xbb, 0xcb, 0xbb, 0xab, 0x19, 0x64, 0x34, 0x44, 0x33, 0x24, 0x13, 0x11, 0x88, 0xa9, 0xba, 0xbc, - 0xcb, 0xba, 0xcb, 0xbc, 0xbc, 0xcb, 0xcb, 0xab, 0x0a, 0x41, 0x45, 0x43, 0x34, 0x24, 0x23, 0x11, - 0x80, 0x98, 0xba, 0xbc, 0xcb, 0xaa, 0xbb, 0xcc, 0xcb, 0xbb, 0xbc, 0xbc, 0x9a, 0x20, 0x44, 0x44, - 0x34, 0x25, 0x23, 0x12, 0x81, 0x80, 0xa9, 0xcb, 0xbb, 0xac, 0xba, 0xcc, 0xbb, 0xcb, 0xcb, 0xbc, - 0xaa, 0x08, 0x32, 0x46, 0x44, 0x43, 0x32, 0x22, 0x02, 0x80, 0xa8, 0xcb, 0xbb, 0xbb, 0xbc, 0xdb, - 0xbb, 0xac, 0xbc, 0xcc, 0xaa, 0x89, 0x20, 0x63, 0x34, 0x45, 0x32, 0x22, 0x12, 0x01, 0x88, 0xba, - 0xbc, 0xbb, 0xca, 0xdb, 0xba, 0xab, 0xcc, 0xbc, 0xac, 0x99, 0x08, 0x42, 0x44, 0x35, 0x34, 0x32, - 0x22, 0x11, 0x88, 0xb9, 0xcb, 0xbb, 0xbb, 0xbd, 0xac, 0xab, 0xcc, 0xdb, 0xab, 0xab, 0x09, 0x30, - 0x64, 0x44, 0x43, 0x23, 0x23, 0x12, 0x81, 0xa8, 0xbb, 0xac, 0xcb, 0xcb, 0xbb, 0xbb, 0xcc, 0xbc, - 0xbc, 0xbb, 0x99, 0x18, 0x63, 0x45, 0x43, 0x43, 0x22, 0x12, 0x11, 0x98, 0xba, 0xba, 0xdb, 0xbb, - 0xac, 0xab, 0xcb, 0xcc, 0xcb, 0xba, 0x9a, 0x89, 0x41, 0x36, 0x45, 0x33, 0x32, 0x33, 0x22, 0x88, - 0xaa, 0xbb, 0xcc, 0xcb, 0xbb, 0xba, 0xcb, 0xcc, 0xcb, 0xbb, 0xab, 0x9a, 0x38, 0x65, 0x34, 0x25, - 0x33, 0x33, 0x22, 0x81, 0x99, 0xba, 0xcb, 0xbc, 0xac, 0xab, 0xba, 0xdc, 0xcb, 0xbb, 0xac, 0xaa, - 0x09, 0x53, 0x45, 0x24, 0x24, 0x33, 0x23, 0x01, 0x88, 0xa9, 0xba, 0xbd, 0xac, 0xaa, 0xab, 0xcc, - 0xbc, 0xcb, 0xab, 0xbb, 0x9a, 0x52, 0x54, 0x43, 0x34, 0x43, 0x32, 0x11, 0x08, 0x89, 0xaa, 0xcc, - 0xba, 0xab, 0xba, 0xdb, 0xbc, 0xcb, 0xbb, 0xbc, 0x9b, 0x20, 0x45, 0x44, 0x43, 0x34, 0x32, 0x12, - 0x00, 0x90, 0xa9, 0xbc, 0xbc, 0xab, 0xaa, 0xbc, 0xcc, 0xbb, 0xdb, 0xbb, 0xab, 0x18, 0x62, 0x53, - 0x34, 0x35, 0x32, 0x22, 0x11, 0x80, 0x99, 0xbc, 0xbc, 0xba, 0xaa, 0xbb, 0xbe, 0xbb, 0xcc, 0xcb, - 0xbb, 0x89, 0x21, 0x45, 0x63, 0x43, 0x33, 0x32, 0x21, 0x10, 0x98, 0xca, 0xcb, 0xab, 0xaa, 0xca, - 0xcb, 0xcb, 0xcb, 0xbc, 0xac, 0x9a, 0x18, 0x32, 0x46, 0x44, 0x33, 0x23, 0x23, 0x12, 0x80, 0xb9, - 0xcc, 0xaa, 0xaa, 0xbb, 0xcc, 0xcb, 0xcb, 0xbc, 0xbc, 0x9b, 0x09, 0x20, 0x45, 0x54, 0x33, 0x33, - 0x33, 0x22, 0x02, 0xa9, 0xcc, 0xba, 0xaa, 0xca, 0xbb, 0xcb, 0xbc, 0xcd, 0xcb, 0xaa, 0x98, 0x00, - 0x52, 0x54, 0x33, 0x34, 0x32, 0x32, 0x11, 0x90, 0xca, 0xbb, 0xba, 0xcb, 0xac, 0xba, 0xdb, 0xcc, - 0xac, 0xab, 0x9a, 0x89, 0x41, 0x45, 0x34, 0x34, 0x32, 0x33, 0x22, 0x80, 0xba, 0xac, 0xbb, 0xbb, - 0xad, 0xba, 0xdb, 0xcc, 0xbc, 0xac, 0x9a, 0x9a, 0x28, 0x44, 0x35, 0x34, 0x43, 0x32, 0x23, 0x01, - 0xa9, 0xaa, 0xbb, 0xdb, 0xba, 0xba, 0xcb, 0xcd, 0xcc, 0xba, 0xab, 0xab, 0x09, 0x52, 0x54, 0x33, - 0x34, 0x34, 0x32, 0x02, 0x88, 0xa9, 0xaa, 0xbb, 0xbc, 0xaa, 0xda, 0xcc, 0xcc, 0xbb, 0xbb, 0xac, - 0x8a, 0x30, 0x45, 0x34, 0x34, 0x34, 0x24, 0x02, 0x81, 0x98, 0x99, 0xaa, 0xbb, 0xaa, 0xba, 0xce, - 0xcc, 0xcb, 0xbb, 0xbb, 0xab, 0x18, 0x54, 0x34, 0x34, 0x44, 0x33, 0x22, 0x01, 0x88, 0xa8, 0xb9, - 0xac, 0x9a, 0xb9, 0xdc, 0xbc, 0xbc, 0xbc, 0xac, 0xbb, 0x09, 0x41, 0x34, 0x44, 0x53, 0x33, 0x33, - 0x12, 0x00, 0x98, 0xb9, 0xac, 0x9a, 0xaa, 0xcc, 0xcc, 0xbc, 0xcb, 0xbc, 0xbb, 0x8a, 0x10, 0x53, - 0x53, 0x34, 0x35, 0x32, 0x12, 0x01, 0x80, 0xa9, 0xba, 0xaa, 0xa9, 0xcc, 0xcc, 0xbc, 0xdb, 0xcb, - 0xbb, 0xaa, 0x00, 0x31, 0x54, 0x44, 0x43, 0x33, 0x32, 0x21, 0x00, 0x99, 0xbb, 0xaa, 0xa9, 0xdb, - 0xcc, 0xbc, 0xcb, 0xcc, 0xcb, 0x9a, 0x09, 0x10, 0x41, 0x44, 0x44, 0x23, 0x23, 0x23, 0x01, 0x90, - 0xaa, 0xaa, 0x99, 0xbb, 0xce, 0xbb, 0xbd, 0xbd, 0xad, 0xab, 0x99, 0x08, 0x31, 0x54, 0x44, 0x33, - 0x24, 0x22, 0x12, 0x80, 0x99, 0x9a, 0x98, 0xba, 0xcc, 0xcb, 0xcb, 0xcd, 0xcb, 0xab, 0x9a, 0x89, - 0x18, 0x44, 0x44, 0x34, 0x33, 0x43, 0x12, 0x81, 0x98, 0x99, 0x98, 0xaa, 0xcc, 0xba, 0xcc, 0xcc, - 0xdb, 0xba, 0xaa, 0x99, 0x09, 0x42, 0x35, 0x35, 0x34, 0x33, 0x32, 0x01, 0x90, 0x99, 0x98, 0xba, - 0xbc, 0xbc, 0xdb, 0xcc, 0xcc, 0xbb, 0xab, 0xba, 0x89, 0x31, 0x55, 0x34, 0x44, 0x32, 0x23, 0x12, - 0x80, 0x98, 0x98, 0xa9, 0xcb, 0xbb, 0xdb, 0xcc, 0xcc, 0xac, 0xba, 0xaa, 0x9a, 0x10, 0x44, 0x44, - 0x43, 0x34, 0x32, 0x12, 0x00, 0x88, 0x98, 0xa9, 0xbb, 0xac, 0xbb, 0xdd, 0xbc, 0xcc, 0xba, 0xba, - 0xaa, 0x09, 0x52, 0x34, 0x45, 0x33, 0x34, 0x22, 0x10, 0x88, 0x90, 0x99, 0xbb, 0xbb, 0xba, 0xdd, - 0xcc, 0xcb, 0xcb, 0xba, 0xba, 0x89, 0x30, 0x54, 0x34, 0x35, 0x34, 0x22, 0x01, 0x81, 0x80, 0x99, - 0xba, 0xab, 0xaa, 0xcc, 0xcd, 0xcb, 0xac, 0xbb, 0xac, 0x9a, 0x10, 0x42, 0x54, 0x43, 0x34, 0x23, - 0x12, 0x00, 0x00, 0x99, 0xaa, 0xbb, 0xaa, 0xdb, 0xcd, 0xcb, 0xbc, 0xcb, 0xbb, 0x9b, 0x09, 0x31, - 0x55, 0x34, 0x35, 0x33, 0x12, 0x02, 0x01, 0x98, 0xaa, 0xab, 0xab, 0xda, 0xcc, 0xbc, 0xbc, 0xcc, - 0xbb, 0xab, 0x89, 0x10, 0x53, 0x45, 0x44, 0x32, 0x12, 0x12, 0x01, 0x80, 0xaa, 0x9a, 0xaa, 0xb9, - 0xcd, 0xbc, 0xbc, 0xcc, 0xcb, 0xba, 0x99, 0x88, 0x31, 0x46, 0x44, 0x23, 0x33, 0x22, 0x11, 0x81, - 0xa8, 0xba, 0x99, 0xba, 0xcd, 0xbc, 0xcc, 0xcb, 0xbc, 0xbb, 0xaa, 0x89, 0x28, 0x64, 0x44, 0x33, - 0x24, 0x22, 0x12, 0x01, 0x98, 0x9a, 0x9a, 0xb9, 0xdb, 0xdb, 0xbb, 0xcd, 0xbc, 0xbb, 0xbb, 0x9a, - 0x09, 0x62, 0x45, 0x43, 0x23, 0x33, 0x23, 0x02, 0x90, 0xa9, 0x99, 0xb9, 0xdb, 0xcb, 0xbc, 0xbd, - 0xbd, 0xbc, 0xba, 0xaa, 0x8a, 0x31, 0x56, 0x43, 0x33, 0x43, 0x23, 0x12, 0x80, 0x89, 0x99, 0xa9, - 0xbb, 0xbc, 0xcc, 0xcc, 0xcc, 0xbb, 0xbb, 0xbb, 0xab, 0x28, 0x55, 0x44, 0x33, 0x34, 0x42, 0x21, - 0x00, 0x88, 0x89, 0x99, 0xaa, 0xbb, 0xbc, 0xcd, 0xcc, 0xbb, 0xcb, 0xbb, 0xab, 0x09, 0x53, 0x35, - 0x35, 0x33, 0x34, 0x23, 0x11, 0x08, 0x98, 0x99, 0xaa, 0xbb, 0xdb, 0xdc, 0xbc, 0xad, 0xbb, 0xcb, - 0xbb, 0x99, 0x31, 0x45, 0x34, 0x34, 0x34, 0x23, 0x02, 0x01, 0x88, 0x99, 0xaa, 0xaa, 0xba, 0xcd, - 0xcd, 0xcb, 0xbb, 0xbc, 0xcb, 0x9a, 0x18, 0x42, 0x35, 0x34, 0x35, 0x32, 0x12, 0x11, 0x08, 0x98, - 0x9a, 0x9a, 0xa9, 0xcc, 0xcd, 0xac, 0xcb, 0xbb, 0xcc, 0x9a, 0x09, 0x21, 0x34, 0x45, 0x24, 0x33, - 0x23, 0x21, 0x00, 0x98, 0x99, 0x9a, 0xa8, 0xda, 0xbd, 0xbd, 0xbc, 0xbc, 0xbc, 0xbb, 0x8a, 0x10, - 0x53, 0x44, 0x44, 0x32, 0x23, 0x22, 0x01, 0x80, 0x99, 0x99, 0x98, 0xc9, 0xdc, 0xcb, 0xcb, 0xcb, - 0xbc, 0xac, 0x9a, 0x88, 0x31, 0x44, 0x35, 0x34, 0x23, 0x23, 0x12, 0x00, 0x99, 0x89, 0x98, 0xb9, - 0xcd, 0xbc, 0xbd, 0xdb, 0xcb, 0xac, 0x9a, 0x89, 0x28, 0x52, 0x44, 0x43, 0x23, 0x33, 0x12, 0x01, - 0x98, 0x98, 0x88, 0xa8, 0xdb, 0xcc, 0xbb, 0xcd, 0xdb, 0xbb, 0xab, 0x9a, 0x19, 0x41, 0x45, 0x34, - 0x34, 0x32, 0x13, 0x02, 0x80, 0x98, 0x88, 0x98, 0xcb, 0xbc, 0xcc, 0xcb, 0xbd, 0xbc, 0xcb, 0xa9, - 0x89, 0x21, 0x63, 0x34, 0x34, 0x24, 0x23, 0x11, 0x80, 0x88, 0x88, 0x98, 0xaa, 0xbc, 0xbc, 0xcc, - 0xbd, 0xcc, 0xba, 0xab, 0xa9, 0x18, 0x52, 0x44, 0x34, 0x43, 0x23, 0x22, 0x00, 0x88, 0x08, 0x98, - 0xb9, 0xcb, 0xbb, 0xcd, 0xcc, 0xcc, 0xba, 0xab, 0xab, 0x89, 0x32, 0x46, 0x53, 0x33, 0x24, 0x13, - 0x01, 0x80, 0x08, 0x98, 0xa9, 0xbb, 0xbb, 0xdc, 0xcc, 0xcc, 0xbb, 0xbc, 0xba, 0x8a, 0x28, 0x63, - 0x34, 0x35, 0x43, 0x22, 0x01, 0x00, 0x00, 0x88, 0x99, 0xaa, 0xab, 0xcb, 0xce, 0xdb, 0xcb, 0xbb, - 0xac, 0x9a, 0x09, 0x32, 0x45, 0x44, 0x43, 0x22, 0x12, 0x00, 0x80, 0x80, 0x99, 0xaa, 0xa9, 0xb9, - 0xdd, 0xbc, 0xbd, 0xcb, 0xac, 0x9b, 0x8a, 0x10, 0x44, 0x44, 0x43, 0x33, 0x22, 0x11, 0x00, 0x00, - 0x99, 0x9a, 0xaa, 0xb9, 0xdd, 0xdb, 0xdb, 0xbb, 0xbc, 0xac, 0x9a, 0x18, 0x41, 0x44, 0x44, 0x32, - 0x22, 0x12, 0x10, 0x80, 0x88, 0x9a, 0x9a, 0xa9, 0xdb, 0xbd, 0xcc, 0xbc, 0xcc, 0xba, 0xaa, 0x88, - 0x20, 0x54, 0x44, 0x33, 0x33, 0x22, 0x12, 0x10, 0x98, 0x9a, 0x99, 0xa9, 0xcb, 0xdc, 0xbc, 0xcd, - 0xbb, 0xbc, 0xbb, 0x9a, 0x00, 0x63, 0x54, 0x33, 0x43, 0x21, 0x21, 0x10, 0x80, 0x89, 0x89, 0x89, - 0x9a, 0xdb, 0xdc, 0xcb, 0xcc, 0xbb, 0xcb, 0x9a, 0x89, 0x31, 0x45, 0x35, 0x33, 0x23, 0x23, 0x12, - 0x00, 0x88, 0x99, 0x98, 0x99, 0xdb, 0xcc, 0xcc, 0xcc, 0xcb, 0xbb, 0xab, 0x9b, 0x28, 0x73, 0x44, - 0x32, 0x33, 0x32, 0x22, 0x01, 0x08, 0x98, 0x88, 0x99, 0xbb, 0xcd, 0xcc, 0xdc, 0xcb, 0xbb, 0xbb, - 0xbb, 0x09, 0x62, 0x44, 0x43, 0x33, 0x32, 0x22, 0x02, 0x00, 0x88, 0x89, 0x98, 0xab, 0xbc, 0xdd, - 0xcc, 0xbc, 0xac, 0xcb, 0xaa, 0x99, 0x21, 0x45, 0x43, 0x33, 0x34, 0x22, 0x11, 0x00, 0x88, 0x90, - 0x98, 0x9a, 0xba, 0xdc, 0xdc, 0xbc, 0xbc, 0xcb, 0xab, 0x9b, 0x18, 0x44, 0x34, 0x25, 0x33, 0x33, - 0x22, 0x01, 0x08, 0x88, 0x98, 0xaa, 0xa9, 0xcc, 0xdd, 0xbc, 0xcc, 0xca, 0xba, 0xab, 0x09, 0x32, - 0x45, 0x53, 0x32, 0x33, 0x23, 0x11, 0x00, 0x00, 0x98, 0x99, 0x9a, 0xca, 0xce, 0xbc, 0xbd, 0xdb, - 0xbb, 0xac, 0x89, 0x20, 0x43, 0x44, 0x43, 0x33, 0x23, 0x21, 0x11, 0x80, 0x88, 0x99, 0x9a, 0xa9, - 0xdd, 0xcc, 0xbc, 0xbc, 0xcc, 0xab, 0x9a, 0x18, 0x42, 0x53, 0x53, 0x32, 0x23, 0x22, 0x11, 0x01, - 0x88, 0x98, 0x89, 0x90, 0xcc, 0xcd, 0xcb, 0xbc, 0xbd, 0xac, 0x9b, 0x09, 0x21, 0x53, 0x34, 0x44, - 0x22, 0x22, 0x12, 0x01, 0x00, 0x88, 0x08, 0x88, 0xca, 0xbd, 0xcc, 0xbc, 0xcd, 0xbb, 0xab, 0x9a, - 0x10, 0x43, 0x45, 0x33, 0x34, 0x23, 0x22, 0x12, 0x81, 0x88, 0x08, 0x88, 0xc9, 0xcc, 0xdb, 0xdb, - 0xcc, 0xcb, 0xba, 0x9a, 0x08, 0x32, 0x54, 0x43, 0x43, 0x22, 0x22, 0x12, 0x81, 0x88, 0x80, 0x80, - 0xa9, 0xcb, 0xcc, 0xcc, 0xcc, 0xbc, 0xcb, 0x9a, 0x89, 0x20, 0x53, 0x53, 0x43, 0x32, 0x22, 0x23, - 0x01, 0x88, 0x00, 0x80, 0xa8, 0xba, 0xbd, 0xcd, 0xbd, 0xcd, 0xba, 0xbb, 0x9a, 0x08, 0x43, 0x44, - 0x34, 0x33, 0x24, 0x23, 0x01, 0x00, 0x80, 0x00, 0x98, 0xb9, 0xcb, 0xdc, 0xdc, 0xdb, 0xcb, 0xba, - 0xaa, 0x88, 0x20, 0x44, 0x34, 0x43, 0x33, 0x24, 0x11, 0x01, 0x00, 0x00, 0x88, 0xa8, 0xaa, 0xcc, - 0xcd, 0xcc, 0xbc, 0xac, 0xab, 0x99, 0x18, 0x33, 0x45, 0x43, 0x33, 0x24, 0x12, 0x11, 0x00, 0x10, - 0x08, 0x99, 0xa9, 0xca, 0xcd, 0xcd, 0xcc, 0xba, 0xbb, 0x9b, 0x09, 0x32, 0x35, 0x35, 0x44, 0x32, - 0x22, 0x01, 0x01, 0x01, 0x08, 0x89, 0x89, 0xaa, 0xdc, 0xcd, 0xbd, 0xbc, 0xbb, 0xab, 0x8a, 0x21, - 0x34, 0x45, 0x43, 0x43, 0x12, 0x11, 0x01, 0x00, 0x80, 0x88, 0x88, 0x98, 0xb9, 0xcf, 0xcd, 0xbb, - 0xbd, 0xba, 0x99, 0x18, 0x31, 0x54, 0x43, 0x24, 0x23, 0x12, 0x12, 0x10, 0x80, 0x88, 0x88, 0x88, - 0xa8, 0xed, 0xcc, 0xcc, 0xcb, 0xab, 0xaa, 0x88, 0x11, 0x43, 0x54, 0x33, 0x24, 0x22, 0x12, 0x11, - 0x01, 0x81, 0x80, 0x00, 0x90, 0xdc, 0xcd, 0xcc, 0xdb, 0xab, 0xab, 0x89, 0x00, 0x41, 0x53, 0x34, - 0x24, 0x32, 0x21, 0x11, 0x11, 0x80, 0x88, 0x08, 0x98, 0xda, 0xdc, 0xcc, 0xcc, 0xbb, 0xbb, 0x9a, - 0x89, 0x21, 0x45, 0x34, 0x34, 0x33, 0x22, 0x12, 0x12, 0x80, 0x88, 0x08, 0x98, 0xb9, 0xce, 0xdd, - 0xdb, 0xcb, 0xab, 0x9a, 0x8a, 0x18, 0x43, 0x45, 0x33, 0x43, 0x22, 0x12, 0x12, 0x81, 0x80, 0x80, - 0x80, 0x98, 0xdb, 0xdd, 0xcc, 0xbc, 0xac, 0xaa, 0x9a, 0x09, 0x31, 0x45, 0x43, 0x24, 0x22, 0x32, - 0x21, 0x00, 0x00, 0x08, 0x88, 0x90, 0xa8, 0xdd, 0xcd, 0xbd, 0xcb, 0xaa, 0xab, 0x89, 0x20, 0x63, - 0x34, 0x24, 0x33, 0x32, 0x23, 0x11, 0x00, 0x00, 0x80, 0x98, 0xa8, 0xfb, 0xce, 0xcc, 0xbb, 0xac, - 0xab, 0x9a, 0x08, 0x43, 0x44, 0x34, 0x42, 0x32, 0x22, 0x11, 0x01, 0x80, 0x80, 0x88, 0x88, 0xc9, - 0xde, 0xcc, 0xbb, 0xbc, 0xbb, 0xab, 0x89, 0x41, 0x44, 0x34, 0x43, 0x33, 0x32, 0x12, 0x11, 0x80, - 0x90, 0x98, 0x88, 0xb9, 0xdf, 0xcc, 0xbc, 0xac, 0xbb, 0xbb, 0x99, 0x20, 0x35, 0x35, 0x34, 0x43, - 0x23, 0x12, 0x11, 0x00, 0x90, 0x88, 0x08, 0x90, 0xdc, 0xcd, 0xbc, 0xbc, 0xac, 0xcb, 0x99, 0x08, - 0x31, 0x44, 0x43, 0x43, 0x23, 0x13, 0x12, 0x11, 0x88, 0x88, 0x00, 0x81, 0xc9, 0xce, 0xbd, 0xbd, - 0xbb, 0xad, 0x9b, 0x89, 0x20, 0x53, 0x43, 0x34, 0x43, 0x22, 0x21, 0x11, 0x80, 0x88, 0x08, 0x01, - 0x98, 0xec, 0xcc, 0xbc, 0xbc, 0xad, 0xab, 0x99, 0x00, 0x42, 0x43, 0x44, 0x23, 0x23, 0x23, 0x12, - 0x00, 0x88, 0x80, 0x10, 0x90, 0xfb, 0xbd, 0xbd, 0xcc, 0xbb, 0xbc, 0xa9, 0x08, 0x31, 0x63, 0x53, - 0x32, 0x23, 0x33, 0x22, 0x01, 0x90, 0x88, 0x10, 0x01, 0xd9, 0xcd, 0xbc, 0xcd, 0xcb, 0xac, 0xaa, - 0x89, 0x10, 0x43, 0x34, 0x34, 0x43, 0x23, 0x22, 0x02, 0x80, 0x08, 0x00, 0x01, 0xb9, 0xcd, 0xcd, - 0xdb, 0xcb, 0xbc, 0xaa, 0x9a, 0x18, 0x41, 0x34, 0x34, 0x34, 0x33, 0x23, 0x13, 0x80, 0x08, 0x00, - 0x01, 0xa0, 0xcc, 0xcd, 0xbc, 0xbe, 0xbc, 0xbb, 0xab, 0x89, 0x31, 0x54, 0x43, 0x43, 0x33, 0x33, - 0x22, 0x80, 0x80, 0x08, 0x00, 0x80, 0xcb, 0xcc, 0xdc, 0xbd, 0xbc, 0xac, 0xab, 0x8a, 0x10, 0x43, - 0x34, 0x35, 0x43, 0x23, 0x13, 0x11, 0x08, 0x08, 0x00, 0x90, 0xb9, 0xcb, 0xdd, 0xcd, 0xcb, 0xbb, - 0xac, 0x9a, 0x08, 0x32, 0x44, 0x34, 0x43, 0x24, 0x22, 0x11, 0x80, 0x80, 0x00, 0x90, 0x99, 0xa9, - 0xdc, 0xcd, 0xbc, 0xbc, 0xac, 0x9b, 0x09, 0x21, 0x43, 0x44, 0x43, 0x24, 0x23, 0x11, 0x80, 0x00, - 0x00, 0x98, 0x98, 0x98, 0xfb, 0xdb, 0xbc, 0xbd, 0xbc, 0xab, 0x99, 0x10, 0x42, 0x53, 0x43, 0x34, - 0x23, 0x22, 0x00, 0x00, 0x00, 0x98, 0x88, 0x98, 0xda, 0xdc, 0xeb, 0xdb, 0xbb, 0xac, 0x9a, 0x08, - 0x21, 0x34, 0x44, 0x43, 0x24, 0x12, 0x01, 0x10, 0x00, 0x88, 0x88, 0x98, 0xaa, 0xcd, 0xcc, 0xcc, - 0xcb, 0xbb, 0xab, 0x09, 0x20, 0x43, 0x44, 0x44, 0x33, 0x23, 0x11, 0x01, 0x00, 0x88, 0x08, 0x88, - 0x99, 0xdb, 0xcd, 0xcc, 0xbd, 0xcb, 0xab, 0x89, 0x18, 0x21, 0x34, 0x36, 0x34, 0x33, 0x12, 0x12, - 0x00, 0x88, 0x88, 0x80, 0x99, 0xba, 0xdd, 0xdc, 0xcc, 0xac, 0xbb, 0x9a, 0x88, 0x11, 0x42, 0x45, - 0x43, 0x23, 0x23, 0x12, 0x00, 0x80, 0x88, 0x88, 0x88, 0x99, 0xca, 0xed, 0xcc, 0xcc, 0xab, 0x9b, - 0x99, 0x08, 0x21, 0x45, 0x34, 0x33, 0x24, 0x12, 0x01, 0x00, 0x88, 0x88, 0x08, 0x98, 0x98, 0xec, - 0xcd, 0xcc, 0xbc, 0xaa, 0x99, 0x89, 0x10, 0x53, 0x34, 0x34, 0x33, 0x23, 0x12, 0x11, 0x00, 0x18, - 0x08, 0x00, 0x81, 0xda, 0xde, 0xcd, 0xbc, 0xab, 0xaa, 0xaa, 0x08, 0x42, 0x35, 0x34, 0x34, 0x32, - 0x12, 0x11, 0x10, 0x00, 0x10, 0x10, 0x10, 0xa8, 0xfd, 0xcd, 0xbc, 0xbb, 0xbb, 0xab, 0x99, 0x41, - 0x44, 0x53, 0x33, 0x43, 0x22, 0x01, 0x01, 0x01, 0x08, 0x01, 0x11, 0x11, 0xe9, 0xde, 0xbc, 0xcb, - 0xba, 0xab, 0x9a, 0x10, 0x43, 0x35, 0x35, 0x33, 0x33, 0x21, 0x11, 0x00, 0x00, 0x08, 0x18, 0x22, - 0xc0, 0xef, 0xcc, 0xbb, 0xcb, 0xba, 0x9a, 0x09, 0x31, 0x44, 0x44, 0x33, 0x24, 0x21, 0x11, 0x01, - 0x80, 0x88, 0x18, 0x22, 0x02, 0xed, 0xbd, 0xbd, 0xcb, 0xbb, 0xba, 0x89, 0x10, 0x43, 0x45, 0x33, - 0x24, 0x22, 0x11, 0x11, 0x00, 0x88, 0x08, 0x53, 0x12, 0xc9, 0xdd, 0xdb, 0xcb, 0xbb, 0xbb, 0x9a, - 0x88, 0x22, 0x55, 0x43, 0x32, 0x32, 0x22, 0x12, 0x02, 0x80, 0x20, 0x63, 0x32, 0x90, 0xdc, 0xcc, - 0xcc, 0xbb, 0xbc, 0xaa, 0x99, 0x18, 0x43, 0x35, 0x24, 0x33, 0x22, 0x32, 0x11, 0x80, 0x10, 0x44, - 0x33, 0x01, 0xea, 0xdb, 0xcc, 0xbc, 0xbb, 0xbb, 0xab, 0x0a, 0x41, 0x44, 0x34, 0x33, 0x33, 0x24, - 0x12, 0x00, 0x00, 0x42, 0x34, 0x12, 0xa9, 0xcd, 0xcd, 0xcb, 0xac, 0xab, 0xab, 0x8a, 0x20, 0x53, - 0x34, 0x43, 0x32, 0x33, 0x22, 0x80, 0x08, 0x42, 0x44, 0x12, 0x81, 0xca, 0xcd, 0xbd, 0xcb, 0xbb, - 0xbb, 0xab, 0x08, 0x52, 0x53, 0x32, 0x24, 0x33, 0x23, 0x01, 0x80, 0x31, 0x44, 0x33, 0x11, 0xb8, - 0xce, 0xbd, 0xcc, 0xbb, 0xac, 0xab, 0x89, 0x20, 0x34, 0x34, 0x43, 0x34, 0x32, 0x01, 0x00, 0x21, - 0x34, 0x34, 0x23, 0x81, 0xeb, 0xcc, 0xcc, 0xbb, 0xbc, 0xbb, 0x9a, 0x18, 0x43, 0x43, 0x43, 0x34, - 0x23, 0x12, 0x00, 0x30, 0x43, 0x43, 0x33, 0x12, 0xb9, 0xce, 0xbd, 0xcc, 0xcb, 0xbb, 0x9b, 0x89, - 0x21, 0x42, 0x43, 0x44, 0x23, 0x02, 0x01, 0x11, 0x42, 0x43, 0x33, 0x13, 0x90, 0xfb, 0xbc, 0xcc, - 0xbc, 0xcb, 0xab, 0x89, 0x18, 0x21, 0x43, 0x44, 0x33, 0x13, 0x11, 0x11, 0x32, 0x44, 0x34, 0x32, - 0x01, 0xb9, 0xce, 0xdb, 0xcc, 0xbb, 0xbb, 0xab, 0x88, 0x10, 0x42, 0x35, 0x25, 0x22, 0x11, 0x11, - 0x32, 0x53, 0x43, 0x33, 0x22, 0x98, 0xcc, 0xcc, 0xcc, 0xcb, 0xbb, 0xaa, 0x99, 0x88, 0x21, 0x44, - 0x34, 0x32, 0x22, 0x21, 0x32, 0x44, 0x53, 0x33, 0x22, 0x91, 0xc9, 0xcc, 0xdc, 0xcb, 0xac, 0xaa, - 0x99, 0x89, 0x18, 0x42, 0x53, 0x32, 0x22, 0x22, 0x32, 0x53, 0x34, 0x34, 0x32, 0x11, 0x98, 0xcb, - 0xdd, 0xcc, 0xbb, 0xac, 0xa9, 0xa9, 0x08, 0x31, 0x34, 0x34, 0x33, 0x33, 0x33, 0x44, 0x53, 0x33, - 0x33, 0x22, 0x80, 0xca, 0xcd, 0xcd, 0xcb, 0xab, 0xab, 0xaa, 0x89, 0x20, 0x34, 0x25, 0x33, 0x23, - 0x43, 0x33, 0x44, 0x34, 0x32, 0x12, 0x01, 0x99, 0xfb, 0xcc, 0xbc, 0xac, 0xab, 0xab, 0x9a, 0x00, - 0x42, 0x43, 0x33, 0x24, 0x33, 0x43, 0x53, 0x33, 0x34, 0x13, 0x02, 0x80, 0xca, 0xce, 0xcc, 0xbb, - 0xbb, 0xbb, 0xab, 0x89, 0x31, 0x44, 0x43, 0x23, 0x33, 0x33, 0x45, 0x33, 0x35, 0x22, 0x12, 0x12, - 0xb8, 0xed, 0xdb, 0xbb, 0xbc, 0xbb, 0xba, 0x99, 0x10, 0x32, 0x35, 0x43, 0x32, 0x24, 0x43, 0x34, - 0x24, 0x23, 0x23, 0x22, 0x91, 0xfb, 0xcc, 0xcb, 0xcb, 0xbb, 0xab, 0xaa, 0x88, 0x21, 0x43, 0x43, - 0x33, 0x34, 0x34, 0x44, 0x43, 0x32, 0x22, 0x13, 0x82, 0xc9, 0xcd, 0xcc, 0xbb, 0xbc, 0xbb, 0xab, - 0x8a, 0x00, 0x42, 0x33, 0x35, 0x32, 0x34, 0x44, 0x24, 0x23, 0x32, 0x23, 0x02, 0xb8, 0xdd, 0xcc, - 0xcb, 0xbb, 0xbc, 0xaa, 0x8a, 0x08, 0x21, 0x43, 0x24, 0x33, 0x43, 0x44, 0x43, 0x32, 0x32, 0x23, - 0x13, 0x90, 0xdc, 0xcc, 0xdb, 0xbb, 0xbc, 0xba, 0x9a, 0x88, 0x10, 0x33, 0x35, 0x32, 0x43, 0x34, - 0x35, 0x32, 0x33, 0x34, 0x23, 0x81, 0xc9, 0xdc, 0xdb, 0xcb, 0xcb, 0xba, 0xaa, 0x8a, 0x08, 0x31, - 0x34, 0x32, 0x53, 0x53, 0x33, 0x34, 0x33, 0x34, 0x33, 0x02, 0x99, 0xcc, 0xcd, 0xcb, 0xcb, 0xbb, - 0xbb, 0xaa, 0x89, 0x21, 0x43, 0x32, 0x34, 0x35, 0x34, 0x34, 0x33, 0x34, 0x24, 0x12, 0x80, 0xc9, - 0xeb, 0xcb, 0xbc, 0xbb, 0xac, 0xab, 0x8a, 0x18, 0x22, 0x33, 0x44, 0x53, 0x43, 0x33, 0x34, 0x43, - 0x23, 0x13, 0x01, 0xa8, 0xbd, 0xcd, 0xbc, 0xbc, 0xba, 0xac, 0x99, 0x08, 0x11, 0x32, 0x33, 0x45, - 0x34, 0x33, 0x43, 0x34, 0x33, 0x33, 0x02, 0xa0, 0xdb, 0xcd, 0xdb, 0xbb, 0xbc, 0xbb, 0xaa, 0x89, - 0x11, 0x22, 0x43, 0x44, 0x43, 0x33, 0x34, 0x34, 0x33, 0x24, 0x12, 0x00, 0xa9, 0xdc, 0xcc, 0xcb, - 0xbb, 0xbc, 0xbb, 0x99, 0x08, 0x11, 0x22, 0x54, 0x43, 0x33, 0x34, 0x34, 0x34, 0x23, 0x23, 0x11, - 0x98, 0xeb, 0xcc, 0xcb, 0xcb, 0xac, 0xab, 0x9b, 0x89, 0x00, 0x20, 0x43, 0x34, 0x34, 0x34, 0x34, - 0x34, 0x43, 0x22, 0x21, 0x80, 0xb9, 0xdc, 0xbc, 0xbc, 0xbd, 0xbb, 0xba, 0x99, 0x88, 0x18, 0x33, - 0x45, 0x43, 0x43, 0x43, 0x43, 0x32, 0x23, 0x22, 0x02, 0xa9, 0xdc, 0xdb, 0xcb, 0xbc, 0xac, 0xab, - 0x9a, 0x89, 0x08, 0x21, 0x43, 0x34, 0x34, 0x44, 0x43, 0x33, 0x32, 0x33, 0x12, 0x90, 0xcb, 0xcd, - 0xdb, 0xdb, 0xbb, 0xbb, 0xab, 0x9a, 0x89, 0x20, 0x42, 0x44, 0x43, 0x53, 0x33, 0x34, 0x32, 0x33, - 0x13, 0x81, 0xc9, 0xdb, 0xdb, 0xcc, 0xcb, 0xab, 0xab, 0xaa, 0x89, 0x08, 0x22, 0x34, 0x44, 0x34, - 0x34, 0x34, 0x42, 0x22, 0x22, 0x02, 0xa8, 0xb9, 0xdc, 0xcc, 0xbc, 0xbb, 0xac, 0xab, 0xa9, 0x88, - 0x10, 0x32, 0x44, 0x44, 0x24, 0x24, 0x24, 0x32, 0x32, 0x11, 0x80, 0x98, 0xdb, 0xcc, 0xcc, 0xbb, - 0xac, 0xab, 0xaa, 0x8a, 0x08, 0x21, 0x53, 0x44, 0x43, 0x34, 0x33, 0x34, 0x33, 0x12, 0x01, 0x90, - 0xca, 0xdc, 0xdb, 0xac, 0xbb, 0xcb, 0xaa, 0x99, 0x89, 0x00, 0x32, 0x45, 0x53, 0x43, 0x33, 0x34, - 0x33, 0x13, 0x12, 0x80, 0xa9, 0xdc, 0xcc, 0xbc, 0xcb, 0xba, 0xbb, 0x9b, 0x9a, 0x08, 0x21, 0x44, - 0x35, 0x25, 0x24, 0x24, 0x33, 0x22, 0x12, 0x10, 0x98, 0xca, 0xcd, 0xcb, 0xbc, 0xcb, 0xab, 0xaa, - 0xaa, 0x98, 0x10, 0x42, 0x54, 0x33, 0x44, 0x43, 0x33, 0x32, 0x12, 0x02, 0x00, 0xb9, 0xce, 0xcb, - 0xbc, 0xad, 0xab, 0xab, 0xaa, 0x99, 0x09, 0x31, 0x54, 0x43, 0x34, 0x44, 0x23, 0x33, 0x12, 0x12, - 0x01, 0xa8, 0xeb, 0xdb, 0xdb, 0xbb, 0xbc, 0xbb, 0xaa, 0x9b, 0x8a, 0x28, 0x53, 0x34, 0x45, 0x33, - 0x35, 0x32, 0x23, 0x12, 0x02, 0x90, 0xba, 0xdd, 0xdb, 0xbb, 0xeb, 0xab, 0xaa, 0xaa, 0x99, 0x08, - 0x31, 0x44, 0x34, 0x35, 0x44, 0x32, 0x22, 0x22, 0x11, 0x81, 0xa9, 0xdb, 0xcc, 0xbc, 0xcc, 0xaa, - 0xab, 0xba, 0x9a, 0x89, 0x21, 0x43, 0x35, 0x35, 0x35, 0x33, 0x33, 0x33, 0x22, 0x11, 0x98, 0xbc, - 0xbe, 0xbd, 0xad, 0xbb, 0xbb, 0xac, 0xaa, 0x89, 0x18, 0x33, 0x35, 0x45, 0x34, 0x24, 0x23, 0x23, - 0x23, 0x11, 0x91, 0xb9, 0xdc, 0xcc, 0xdb, 0xba, 0xbb, 0xcb, 0xaa, 0x9a, 0x08, 0x11, 0x43, 0x45, - 0x34, 0x34, 0x33, 0x33, 0x33, 0x23, 0x00, 0x98, 0xdb, 0xdd, 0xcb, 0xbb, 0xbc, 0xbb, 0xbb, 0xab, - 0x89, 0x10, 0x42, 0x45, 0x44, 0x43, 0x33, 0x33, 0x33, 0x23, 0x11, 0x80, 0xba, 0xcf, 0xbc, 0xbc, - 0xcb, 0xab, 0xac, 0xaa, 0x99, 0x08, 0x20, 0x53, 0x35, 0x44, 0x33, 0x33, 0x24, 0x23, 0x11, 0x01, - 0x98, 0xcc, 0xcc, 0xcb, 0xcb, 0xbb, 0xcb, 0xaa, 0x9a, 0x89, 0x18, 0x43, 0x45, 0x53, 0x33, 0x43, - 0x33, 0x32, 0x22, 0x11, 0x80, 0xda, 0xcc, 0xdb, 0xbb, 0xdb, 0xba, 0xab, 0xaa, 0x99, 0x88, 0x22, - 0x46, 0x53, 0x33, 0x34, 0x24, 0x23, 0x22, 0x21, 0x81, 0xb8, 0xdc, 0xbc, 0xbc, 0xbc, 0xbc, 0xaa, - 0xab, 0x99, 0x89, 0x28, 0x54, 0x34, 0x34, 0x44, 0x32, 0x32, 0x22, 0x22, 0x01, 0x98, 0xcc, 0xcc, - 0xcb, 0xdb, 0xba, 0xab, 0xab, 0xaa, 0x9a, 0x08, 0x53, 0x44, 0x34, 0x34, 0x43, 0x32, 0x23, 0x32, - 0x12, 0x91, 0xcb, 0xbd, 0xbd, 0xcc, 0xbb, 0xcb, 0xaa, 0x9a, 0xaa, 0x88, 0x32, 0x54, 0x53, 0x43, - 0x43, 0x32, 0x32, 0x32, 0x22, 0x82, 0xb9, 0xeb, 0xcc, 0xcb, 0xbc, 0xbb, 0xab, 0xbb, 0xbb, 0x99, - 0x11, 0x44, 0x35, 0x35, 0x34, 0x43, 0x32, 0x32, 0x33, 0x12, 0x88, 0xda, 0xdb, 0xcc, 0xcb, 0xbb, - 0xba, 0xcb, 0xaa, 0x9a, 0x08, 0x31, 0x35, 0x36, 0x53, 0x23, 0x33, 0x34, 0x32, 0x12, 0x81, 0xa9, - 0xcc, 0xcc, 0xcc, 0xab, 0xbb, 0xcb, 0xaa, 0xaa, 0x89, 0x11, 0x53, 0x44, 0x53, 0x33, 0x42, 0x23, - 0x24, 0x12, 0x01, 0x98, 0xba, 0xcd, 0xbd, 0xcb, 0xab, 0xac, 0xba, 0xaa, 0x99, 0x00, 0x41, 0x63, - 0x34, 0x33, 0x34, 0x24, 0x43, 0x22, 0x01, 0x80, 0xa8, 0xeb, 0xbc, 0xbc, 0xbc, 0xba, 0xcb, 0xaa, - 0x9a, 0x88, 0x21, 0x44, 0x35, 0x34, 0x33, 0x25, 0x33, 0x33, 0x22, 0x01, 0x98, 0xeb, 0xcc, 0xcb, - 0xbb, 0xbc, 0xbb, 0xbb, 0xab, 0x99, 0x18, 0x63, 0x44, 0x43, 0x33, 0x34, 0x34, 0x33, 0x13, 0x12, - 0x81, 0xca, 0xdc, 0xdb, 0xbb, 0xcb, 0xbb, 0xac, 0x9a, 0xa9, 0x08, 0x32, 0x45, 0x34, 0x43, 0x43, - 0x33, 0x24, 0x22, 0x12, 0x81, 0xb8, 0xcc, 0xbd, 0xbc, 0xcb, 0xcb, 0xaa, 0xab, 0xaa, 0x89, 0x20, - 0x44, 0x34, 0x34, 0x34, 0x44, 0x32, 0x22, 0x22, 0x02, 0x90, 0xcb, 0xcd, 0xcb, 0xbb, 0xad, 0xab, - 0xaa, 0xab, 0x99, 0x10, 0x44, 0x34, 0x53, 0x33, 0x35, 0x33, 0x33, 0x33, 0x22, 0x81, 0xda, 0xcc, - 0xdb, 0xbb, 0xbc, 0xbb, 0xcb, 0xaa, 0xaa, 0x08, 0x32, 0x45, 0x33, 0x45, 0x33, 0x34, 0x33, 0x33, - 0x23, 0x01, 0xb8, 0xcd, 0xbc, 0xbd, 0xbc, 0xbb, 0xbb, 0xac, 0xaa, 0x0a, 0x21, 0x34, 0x44, 0x34, - 0x34, 0x34, 0x33, 0x24, 0x22, 0x12, 0x98, 0xca, 0xcc, 0xcc, 0xbb, 0xcb, 0xab, 0xcb, 0xaa, 0x9a, - 0x00, 0x22, 0x44, 0x53, 0x43, 0x24, 0x24, 0x22, 0x23, 0x22, 0x00, 0xa9, 0xcc, 0xcc, 0xcb, 0xac, - 0xbb, 0xbb, 0xcb, 0x9a, 0x08, 0x20, 0x53, 0x43, 0x44, 0x33, 0x34, 0x43, 0x23, 0x23, 0x11, 0x90, - 0xda, 0xdb, 0xdb, 0xbb, 0xbb, 0xbc, 0xac, 0x9b, 0x89, 0x18, 0x32, 0x44, 0x34, 0x35, 0x43, 0x33, - 0x24, 0x23, 0x12, 0x81, 0xb9, 0xdc, 0xbc, 0xbc, 0xac, 0xcb, 0xab, 0xab, 0x9a, 0x18, 0x11, 0x43, - 0x45, 0x43, 0x33, 0x35, 0x32, 0x24, 0x22, 0x01, 0x88, 0xcb, 0xbd, 0xbc, 0xbc, 0xbc, 0xbb, 0xcb, - 0x9a, 0x88, 0x08, 0x31, 0x44, 0x34, 0x35, 0x33, 0x25, 0x33, 0x23, 0x22, 0x00, 0xba, 0xce, 0xbb, - 0xbd, 0xcb, 0xbb, 0xac, 0x9b, 0x99, 0x09, 0x20, 0x53, 0x34, 0x35, 0x43, 0x43, 0x43, 0x22, 0x22, - 0x11, 0xa8, 0xcb, 0xcc, 0xcb, 0xac, 0xac, 0xbb, 0xaa, 0xaa, 0x89, 0x10, 0x32, 0x46, 0x43, 0x43, - 0x43, 0x33, 0x24, 0x23, 0x13, 0x80, 0xba, 0xbd, 0xbd, 0xbc, 0xcc, 0xba, 0xba, 0xaa, 0x99, 0x88, - 0x21, 0x35, 0x35, 0x34, 0x34, 0x24, 0x24, 0x23, 0x23, 0x00, 0xa8, 0xdb, 0xbc, 0xcc, 0xcb, 0xbb, - 0xbb, 0xbb, 0xaa, 0x89, 0x20, 0x63, 0x34, 0x34, 0x35, 0x33, 0x34, 0x24, 0x23, 0x11, 0x98, 0xba, - 0xbd, 0xcd, 0xcb, 0xbb, 0xcb, 0xaa, 0xaa, 0x99, 0x18, 0x32, 0x44, 0x44, 0x33, 0x34, 0x34, 0x43, - 0x23, 0x13, 0x00, 0xa9, 0xbc, 0xcd, 0xbc, 0xbc, 0xbb, 0xbb, 0xbb, 0xab, 0x08, 0x21, 0x44, 0x35, - 0x25, 0x24, 0x43, 0x42, 0x22, 0x22, 0x01, 0x88, 0xba, 0xcd, 0xdb, 0xbb, 0xad, 0xba, 0xab, 0xaa, - 0x99, 0x00, 0x42, 0x34, 0x35, 0x34, 0x53, 0x42, 0x32, 0x23, 0x11, 0x80, 0xa9, 0xcc, 0xcc, 0xac, - 0xac, 0xab, 0xbb, 0xaa, 0x9a, 0x88, 0x31, 0x54, 0x43, 0x43, 0x43, 0x43, 0x24, 0x22, 0x22, 0x10, - 0xa8, 0xba, 0xdd, 0xcb, 0xac, 0xbb, 0xac, 0xab, 0x9a, 0x89, 0x10, 0x42, 0x44, 0x43, 0x33, 0x44, - 0x24, 0x23, 0x23, 0x02, 0x80, 0xa9, 0xcd, 0xbc, 0xbc, 0xbc, 0xbb, 0xac, 0xaa, 0x99, 0x08, 0x32, - 0x44, 0x34, 0x43, 0x34, 0x34, 0x43, 0x22, 0x12, 0x01, 0x98, 0xdb, 0xbc, 0xbd, 0xdb, 0xba, 0xbb, - 0xbb, 0xaa, 0x99, 0x21, 0x35, 0x34, 0x44, 0x43, 0x43, 0x24, 0x23, 0x22, 0x11, 0x90, 0xba, 0xcd, - 0xbc, 0xbc, 0xbc, 0xbb, 0xbb, 0xbb, 0x9a, 0x10, 0x43, 0x34, 0x35, 0x44, 0x33, 0x35, 0x33, 0x32, - 0x23, 0x81, 0xa8, 0xcc, 0xcc, 0xbc, 0xbc, 0xcb, 0xba, 0xba, 0x9a, 0x08, 0x21, 0x34, 0x35, 0x34, - 0x35, 0x43, 0x33, 0x33, 0x33, 0x11, 0x98, 0xdb, 0xcc, 0xbc, 0xbc, 0xbc, 0xba, 0xbb, 0xbb, 0x88, - 0x20, 0x43, 0x44, 0x43, 0x44, 0x33, 0x34, 0x33, 0x33, 0x12, 0x81, 0xaa, 0xcd, 0xcc, 0xcb, 0xbb, - 0xbc, 0xbb, 0xbb, 0x99, 0x08, 0x22, 0x34, 0x45, 0x53, 0x33, 0x34, 0x43, 0x23, 0x22, 0x11, 0x98, - 0xc9, 0xcc, 0xbc, 0xbc, 0xbc, 0xcb, 0xab, 0xaa, 0x88, 0x00, 0x22, 0x44, 0x34, 0x35, 0x43, 0x34, - 0x23, 0x33, 0x21, 0x00, 0xa9, 0xdc, 0xbc, 0xdb, 0xbb, 0xbc, 0xac, 0xaa, 0x8a, 0x88, 0x11, 0x42, - 0x44, 0x43, 0x43, 0x43, 0x33, 0x24, 0x21, 0x01, 0x80, 0xca, 0xbc, 0xcc, 0xcb, 0xcb, 0xbb, 0xac, - 0x99, 0x89, 0x00, 0x22, 0x44, 0x53, 0x33, 0x35, 0x33, 0x24, 0x22, 0x12, 0x00, 0xaa, 0xbd, 0xbd, - 0xdb, 0xcb, 0xcb, 0xaa, 0xaa, 0x99, 0x09, 0x20, 0x53, 0x43, 0x34, 0x44, 0x33, 0x43, 0x22, 0x22, - 0x01, 0xa8, 0xca, 0xcc, 0xdb, 0xcb, 0xcb, 0xba, 0xba, 0x9a, 0x99, 0x10, 0x32, 0x35, 0x35, 0x35, - 0x34, 0x43, 0x22, 0x23, 0x11, 0x80, 0xb9, 0xbd, 0xcc, 0xdb, 0xcb, 0xbb, 0xba, 0xab, 0x8a, 0x09, - 0x21, 0x44, 0x53, 0x34, 0x34, 0x34, 0x32, 0x33, 0x23, 0x01, 0xa9, 0xcb, 0xcc, 0xdc, 0xbb, 0xbc, - 0xbb, 0xac, 0xa9, 0x89, 0x10, 0x31, 0x63, 0x44, 0x33, 0x44, 0x32, 0x33, 0x22, 0x12, 0x88, 0xaa, - 0xdb, 0xcd, 0xcb, 0xbc, 0xbb, 0xbb, 0xbb, 0xaa, 0x08, 0x21, 0x44, 0x45, 0x43, 0x43, 0x43, 0x32, - 0x23, 0x12, 0x00, 0x88, 0xcb, 0xcc, 0xcc, 0xcb, 0xca, 0xaa, 0xab, 0x99, 0x89, 0x08, 0x32, 0x45, - 0x44, 0x33, 0x34, 0x34, 0x32, 0x22, 0x01, 0x80, 0xaa, 0xdc, 0xdb, 0xbc, 0xbb, 0xbc, 0xbb, 0xaa, - 0x9a, 0x09, 0x21, 0x45, 0x34, 0x35, 0x43, 0x24, 0x33, 0x22, 0x11, 0x01, 0xa8, 0xca, 0xcd, 0xdb, - 0xca, 0xab, 0xbb, 0xab, 0xaa, 0x89, 0x00, 0x53, 0x44, 0x34, 0x53, 0x33, 0x24, 0x32, 0x21, 0x01, - 0x80, 0xba, 0xcd, 0xbc, 0xcc, 0xcb, 0xba, 0xba, 0xaa, 0x99, 0x08, 0x31, 0x54, 0x34, 0x53, 0x34, - 0x33, 0x23, 0x23, 0x21, 0x00, 0xb8, 0xcc, 0xbd, 0xcc, 0xbc, 0xbb, 0xbb, 0xab, 0xba, 0x99, 0x11, - 0x44, 0x44, 0x53, 0x43, 0x33, 0x24, 0x22, 0x12, 0x02, 0x88, 0xba, 0xcd, 0xcc, 0xbb, 0xdb, 0x6c, - 0x02, 0x00, 0x00, 0x7d, 0x0b, 0x02, 0x01, 0x00, 0xd0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, - 0xf8, 0x71, 0xff, 0x4f, 0x31, 0x17, 0xb3, 0x7a, 0x06, 0xa9, 0x08, 0xcb, 0x09, 0x14, 0x32, 0xfa, - 0x1a, 0xb0, 0x2a, 0x04, 0xb0, 0xbf, 0x08, 0x08, 0x00, 0x08, 0x00, 0x10, 0x89, 0x52, 0x05, 0x49, - 0x36, 0x13, 0xb9, 0x9a, 0x29, 0x13, 0x17, 0xac, 0x31, 0xc1, 0x2a, 0xa4, 0xbd, 0xae, 0x78, 0x91, - 0x9b, 0x10, 0xa1, 0x21, 0x03, 0x19, 0x82, 0x10, 0x73, 0x83, 0x8b, 0xa8, 0x3a, 0x25, 0x00, 0x98, - 0x99, 0x89, 0xcb, 0x80, 0xff, 0x39, 0x14, 0xea, 0xab, 0x18, 0x42, 0xa2, 0x8f, 0x11, 0x9a, 0x00, - 0x88, 0x30, 0x02, 0xab, 0x31, 0x83, 0x72, 0xa7, 0x8c, 0x80, 0x28, 0x13, 0xcb, 0x39, 0x84, 0x8a, - 0x33, 0xa8, 0xba, 0x88, 0x8a, 0x47, 0x82, 0xbc, 0x31, 0xb0, 0x0a, 0x52, 0x12, 0x99, 0x21, 0x52, - 0x03, 0xed, 0x29, 0x83, 0x0b, 0x25, 0x99, 0x21, 0xa2, 0xdb, 0x0e, 0x35, 0x11, 0x8a, 0xb0, 0x0c, - 0x41, 0xb8, 0x0b, 0x33, 0xfb, 0x8c, 0x11, 0x99, 0x99, 0x10, 0x31, 0x91, 0x89, 0x58, 0x15, 0xa8, - 0x0a, 0x26, 0x80, 0xa8, 0xed, 0xcb, 0x39, 0x33, 0x92, 0xac, 0xca, 0x9b, 0x18, 0x22, 0x04, 0xad, - 0x19, 0xa1, 0x8b, 0x22, 0x42, 0x47, 0xb9, 0x39, 0x25, 0x81, 0xb9, 0x58, 0x02, 0x91, 0x8d, 0x42, - 0xc1, 0x0a, 0x30, 0x04, 0xaf, 0x41, 0x03, 0xdb, 0x18, 0x20, 0x03, 0x88, 0xb8, 0x29, 0x46, 0x08, - 0x14, 0xa9, 0x18, 0x00, 0xa9, 0xfb, 0x9a, 0x71, 0xa2, 0xbb, 0x19, 0xb8, 0x8b, 0x21, 0x20, 0x06, - 0xbc, 0x0a, 0x88, 0x52, 0x90, 0x90, 0x0c, 0x43, 0x26, 0xb8, 0x8a, 0x91, 0x10, 0x9a, 0x03, 0x9d, - 0x91, 0xba, 0xff, 0x19, 0x90, 0x08, 0xaa, 0xcb, 0x2a, 0x24, 0x00, 0x98, 0x20, 0x44, 0xa8, 0x78, - 0x04, 0x8a, 0x33, 0x33, 0x67, 0xa8, 0x09, 0x80, 0x80, 0x90, 0xac, 0xb9, 0x9a, 0x29, 0x25, 0x25, - 0xe8, 0x8a, 0x01, 0x30, 0x43, 0x02, 0x9b, 0x23, 0x58, 0x85, 0xbb, 0x2a, 0x25, 0x42, 0x90, 0x9a, - 0xac, 0x42, 0x02, 0x28, 0xf8, 0x0d, 0x08, 0xdb, 0x00, 0x1a, 0x23, 0xb8, 0x9c, 0x98, 0xaf, 0x01, - 0x10, 0xb1, 0x9c, 0x18, 0x23, 0xeb, 0x0a, 0x08, 0x24, 0x11, 0x31, 0xa1, 0x99, 0x58, 0x57, 0xb8, - 0x28, 0xb8, 0x19, 0x33, 0x31, 0x83, 0xed, 0x9c, 0x34, 0xeb, 0x1a, 0x32, 0x91, 0x0a, 0x82, 0x0b, - 0x01, 0x64, 0x01, 0x20, 0x33, 0x11, 0xb8, 0x11, 0xfa, 0x2d, 0x27, 0xb8, 0x99, 0x89, 0x98, 0x0b, - 0x04, 0xbd, 0x43, 0xa0, 0xad, 0x02, 0x2b, 0x37, 0xb9, 0x09, 0x99, 0x22, 0x52, 0x12, 0x11, 0xfb, - 0x58, 0x02, 0xb9, 0xba, 0x9d, 0x11, 0x32, 0xd8, 0xbc, 0x9a, 0x31, 0x24, 0x93, 0xad, 0xaa, 0x41, - 0x83, 0xbd, 0x41, 0xb0, 0x3a, 0x16, 0x11, 0xa8, 0x89, 0x31, 0x05, 0xbc, 0x8a, 0x31, 0xc0, 0x8a, - 0x09, 0x36, 0x82, 0x8a, 0xbc, 0x24, 0x90, 0x3a, 0x07, 0xb9, 0x0d, 0x04, 0x8a, 0x18, 0x54, 0x14, - 0xca, 0x18, 0x11, 0x01, 0xdb, 0x61, 0x11, 0xea, 0x18, 0x00, 0x92, 0x18, 0x88, 0x9a, 0xb9, 0x0d, - 0xb8, 0x08, 0x8b, 0xa1, 0x40, 0x40, 0x02, 0x08, 0xe8, 0x71, 0x96, 0x18, 0x90, 0x00, 0x88, 0x00, - 0xcb, 0xb9, 0x72, 0x86, 0xaa, 0x89, 0x21, 0xb1, 0x9e, 0x80, 0x42, 0xc8, 0x29, 0x82, 0xca, 0x18, - 0xa1, 0x48, 0xc1, 0xab, 0x8d, 0x13, 0x42, 0xb0, 0x19, 0x8a, 0x73, 0x84, 0x8b, 0x82, 0x38, 0x55, - 0x82, 0xaa, 0x21, 0xad, 0x41, 0xa4, 0x0d, 0xa0, 0x0b, 0x40, 0x13, 0x89, 0x90, 0x99, 0x19, 0x93, - 0x8d, 0x53, 0xc3, 0x2b, 0x37, 0x90, 0x20, 0x88, 0x13, 0xfd, 0x39, 0x14, 0x00, 0x89, 0x90, 0xbc, - 0xa9, 0xae, 0x98, 0x48, 0x82, 0xa9, 0x00, 0xea, 0x09, 0xbc, 0x53, 0xa9, 0x89, 0x02, 0x19, 0x17, - 0x98, 0x11, 0x34, 0x33, 0xc0, 0x0d, 0x02, 0xbd, 0x18, 0x80, 0x20, 0x22, 0x0d, 0x87, 0x8b, 0x02, - 0x42, 0xa8, 0xa9, 0x0b, 0x00, 0x51, 0x91, 0x31, 0xeb, 0xb9, 0x60, 0x02, 0xd0, 0x9d, 0x08, 0x31, - 0x14, 0xa8, 0x8c, 0x03, 0x08, 0x16, 0x89, 0x01, 0xc0, 0x78, 0x03, 0xb9, 0x2a, 0xea, 0x10, 0x88, - 0x80, 0x01, 0xb0, 0x4c, 0x84, 0xa1, 0x0e, 0x80, 0x22, 0x11, 0xfa, 0x1b, 0x02, 0x80, 0x09, 0xd1, - 0x2a, 0x02, 0x90, 0x0d, 0x93, 0x8d, 0x13, 0xc8, 0xac, 0x10, 0x15, 0x38, 0x15, 0x00, 0xfb, 0x19, - 0x98, 0x23, 0xb9, 0x19, 0xf8, 0x2a, 0x83, 0x0a, 0xec, 0x49, 0x93, 0x9d, 0x52, 0x13, 0x08, 0xd9, - 0x29, 0x80, 0x32, 0x02, 0xca, 0xc9, 0x9c, 0x42, 0x93, 0x8a, 0x12, 0xda, 0x39, 0x17, 0x9a, 0xa1, - 0x10, 0x2b, 0x17, 0x89, 0x20, 0xc0, 0x28, 0x90, 0x88, 0xb0, 0x9f, 0x32, 0x26, 0xc9, 0x00, 0x0a, - 0xb9, 0x41, 0x89, 0xa1, 0x3a, 0xdb, 0x12, 0x0b, 0x23, 0xdf, 0x33, 0x89, 0x11, 0xd9, 0x49, 0xc1, - 0x29, 0xa3, 0x8a, 0x10, 0x34, 0x82, 0xd8, 0x2a, 0xba, 0xc2, 0xac, 0x19, 0xf8, 0x1c, 0x13, 0xcb, - 0x39, 0xb2, 0x3a, 0x05, 0x9c, 0x02, 0x52, 0x00, 0x81, 0x21, 0x88, 0x74, 0x87, 0x89, 0x91, 0x28, - 0xa1, 0x19, 0xb2, 0xaf, 0xaa, 0x32, 0x90, 0x8a, 0x45, 0x12, 0x98, 0x9a, 0x30, 0x47, 0xb8, 0x91, - 0xae, 0x29, 0x14, 0x80, 0x28, 0xe8, 0x49, 0x34, 0xb0, 0xbd, 0x88, 0x8a, 0x51, 0x83, 0xaa, 0x08, - 0x90, 0xe1, 0x0e, 0x83, 0xab, 0x10, 0x21, 0x83, 0xcd, 0x19, 0x11, 0x50, 0x06, 0x08, 0x90, 0x19, - 0xc0, 0x18, 0x9c, 0x13, 0xaa, 0x39, 0x83, 0x89, 0x34, 0xca, 0xca, 0x0a, 0x67, 0x91, 0x09, 0xca, - 0xab, 0x42, 0x21, 0x15, 0xfa, 0x19, 0x90, 0x22, 0x12, 0x88, 0x82, 0xbc, 0x58, 0x14, 0x20, 0x82, - 0xab, 0x12, 0xa9, 0xe9, 0x68, 0xd1, 0x9a, 0x90, 0xab, 0x11, 0x04, 0x8c, 0x91, 0x38, 0x91, 0x62, - 0xb8, 0x1a, 0x23, 0x54, 0x91, 0xbd, 0x08, 0x1a, 0x05, 0x58, 0xd8, 0x18, 0x20, 0x91, 0xbf, 0x20, - 0x88, 0x88, 0x9a, 0x08, 0x52, 0x91, 0xac, 0x18, 0x24, 0x30, 0xa1, 0x24, 0xae, 0x14, 0x88, 0x20, - 0x02, 0x43, 0xc8, 0x2b, 0x35, 0xa8, 0xad, 0x08, 0xe1, 0x0c, 0xb0, 0x20, 0x19, 0xa8, 0x57, 0x00, - 0x09, 0xc1, 0x9d, 0x09, 0x20, 0x85, 0x8b, 0x10, 0x83, 0x1b, 0x24, 0x32, 0xa8, 0xa8, 0x0b, 0xc8, - 0x75, 0xa3, 0x0b, 0xf8, 0x39, 0xa1, 0x98, 0x0a, 0xfa, 0x51, 0xa1, 0x29, 0x02, 0xab, 0x20, 0x90, - 0x29, 0xe9, 0x51, 0x32, 0xa0, 0x80, 0x18, 0xb9, 0x48, 0x53, 0x94, 0x9a, 0xde, 0x89, 0x21, 0x99, - 0xf0, 0x3a, 0x82, 0x02, 0x0b, 0xb0, 0xad, 0x99, 0x62, 0x90, 0x43, 0xca, 0x18, 0x20, 0x82, 0x88, - 0x53, 0x91, 0x39, 0x77, 0x81, 0xaa, 0x29, 0xc2, 0x8a, 0x80, 0xa9, 0x8b, 0x83, 0x09, 0x64, 0xb1, - 0xaa, 0x41, 0xa1, 0x88, 0x1b, 0xa5, 0x38, 0x38, 0x77, 0x90, 0x9a, 0x11, 0x89, 0x12, 0x98, 0x54, - 0xd1, 0x8b, 0xb2, 0x2b, 0xf9, 0x09, 0x8a, 0x22, 0x88, 0xdb, 0x50, 0xb0, 0x8a, 0x52, 0x83, 0x32, - 0xfa, 0xa9, 0x8e, 0x23, 0x88, 0x20, 0x25, 0x08, 0xa3, 0x0c, 0x01, 0x10, 0x21, 0xb0, 0x0d, 0x04, - 0xb9, 0xbb, 0x2a, 0xf8, 0x3b, 0xda, 0x49, 0x13, 0x99, 0x18, 0x11, 0x8b, 0xd3, 0x8e, 0x63, 0x02, - 0x11, 0xec, 0x18, 0x01, 0x98, 0x99, 0x11, 0x18, 0x02, 0xaa, 0x46, 0x0a, 0x17, 0x99, 0xab, 0x91, - 0x2b, 0x27, 0x01, 0x19, 0xe8, 0x9a, 0x01, 0x18, 0xa8, 0x2a, 0x13, 0x22, 0xff, 0x89, 0x23, 0x98, - 0xa9, 0x89, 0x52, 0xc8, 0x89, 0x9c, 0x13, 0x12, 0x3a, 0x27, 0x30, 0x91, 0x89, 0x42, 0x11, 0x2a, - 0x97, 0xbe, 0x99, 0x20, 0x18, 0xa2, 0x81, 0xcf, 0x0a, 0xa0, 0x20, 0x62, 0x13, 0xdb, 0x30, 0x20, - 0x82, 0x80, 0x11, 0xbd, 0x43, 0x53, 0x82, 0xad, 0x33, 0xa9, 0x09, 0x81, 0x91, 0xcd, 0x9d, 0xc9, - 0x29, 0x32, 0x84, 0xa8, 0xdc, 0x9b, 0x33, 0x98, 0x20, 0x0a, 0x94, 0x7a, 0xb3, 0x60, 0xd0, 0x29, - 0x12, 0x02, 0x32, 0xcd, 0x21, 0x99, 0xa8, 0x2b, 0x94, 0x8a, 0x44, 0x01, 0xf9, 0x9d, 0x08, 0x02, - 0x28, 0xa1, 0x19, 0x10, 0x02, 0x3a, 0x67, 0xa9, 0x09, 0xa9, 0x34, 0x89, 0x32, 0xd9, 0x8b, 0x20, - 0x85, 0x09, 0x82, 0x22, 0xdd, 0x11, 0xda, 0x8c, 0x82, 0x9c, 0xa0, 0x0b, 0x22, 0xa0, 0x63, 0x19, - 0x37, 0x19, 0x82, 0xac, 0x40, 0x14, 0x42, 0xb0, 0x0a, 0x1a, 0x35, 0x90, 0xba, 0x19, 0xf8, 0x8c, - 0x88, 0xa8, 0xbc, 0x9a, 0x20, 0x32, 0x90, 0x32, 0x98, 0x0a, 0x44, 0x57, 0xd9, 0x29, 0x24, 0x90, - 0x8a, 0x20, 0x14, 0x88, 0x9b, 0x28, 0xa6, 0xaf, 0x88, 0x00, 0x01, 0xdb, 0x28, 0x80, 0x13, 0x89, - 0xa0, 0x9b, 0x23, 0x72, 0xa0, 0xfa, 0x39, 0xa8, 0x74, 0x22, 0x90, 0x09, 0x90, 0x63, 0xb8, 0x9a, - 0x49, 0x03, 0xa0, 0xab, 0x9b, 0xb1, 0x9e, 0x82, 0x9f, 0x00, 0xa9, 0x19, 0xa0, 0x1a, 0x37, 0xca, - 0x58, 0x82, 0x4a, 0x16, 0x20, 0x81, 0xb9, 0x2a, 0x24, 0xc1, 0x8c, 0x89, 0xb0, 0x5b, 0x81, 0x90, - 0xcb, 0x8b, 0x00, 0xd1, 0x1b, 0x34, 0xf9, 0x09, 0x90, 0x89, 0x11, 0xda, 0x3a, 0x13, 0x76, 0x23, - 0xc9, 0x0b, 0x22, 0x18, 0x90, 0xa8, 0x9e, 0x00, 0x80, 0x64, 0x91, 0x2b, 0xf9, 0x09, 0x10, 0x11, - 0x12, 0xaa, 0x88, 0x8a, 0xad, 0x33, 0x82, 0x2d, 0x47, 0x08, 0x91, 0xba, 0x38, 0x82, 0x0a, 0xd8, - 0x8b, 0x70, 0xb3, 0x9c, 0x9a, 0x01, 0x29, 0x17, 0xa9, 0x99, 0xca, 0x48, 0x82, 0xae, 0x88, 0x41, - 0x24, 0x80, 0xb8, 0x0a, 0x00, 0x88, 0x73, 0x03, 0xaa, 0x41, 0x98, 0x08, 0x17, 0x88, 0xeb, 0x08, - 0x02, 0xba, 0x89, 0x12, 0x1e, 0x27, 0x9a, 0xbb, 0x18, 0x22, 0x02, 0x28, 0xf0, 0x3a, 0x22, 0x26, - 0xba, 0x09, 0x90, 0x22, 0xcb, 0x33, 0xce, 0x38, 0x04, 0xbe, 0x00, 0x22, 0xb9, 0x30, 0xc2, 0x8c, - 0x90, 0x58, 0xc1, 0x51, 0x12, 0x81, 0x89, 0x98, 0x09, 0x24, 0x80, 0x08, 0x01, 0xdc, 0x99, 0x1c, - 0x24, 0xa0, 0x8f, 0xb8, 0x42, 0xc8, 0x38, 0xa3, 0x2c, 0x85, 0x9a, 0x09, 0xc8, 0x9a, 0x8b, 0x85, - 0x9d, 0x12, 0x0a, 0x82, 0xd9, 0xad, 0x88, 0x72, 0x82, 0x8c, 0x33, 0x21, 0x24, 0x32, 0xd1, 0x4b, - 0xa4, 0x39, 0x01, 0x01, 0xbb, 0x30, 0x03, 0x88, 0xc0, 0xff, 0x99, 0x80, 0x21, 0x13, 0xee, 0x99, - 0x18, 0x12, 0x01, 0x81, 0xad, 0x48, 0x24, 0x00, 0x98, 0xc9, 0x19, 0x13, 0x00, 0x25, 0x98, 0xbf, - 0x42, 0x80, 0x99, 0x9c, 0xb8, 0x8b, 0x91, 0x53, 0x08, 0xe2, 0x3b, 0xb1, 0x28, 0x12, 0xca, 0x72, - 0x07, 0x18, 0xa8, 0x20, 0x99, 0x80, 0x80, 0xc9, 0x29, 0x17, 0x99, 0x89, 0x53, 0xc0, 0xab, 0x28, - 0x06, 0xa9, 0x09, 0x00, 0x81, 0xcd, 0xa9, 0x10, 0x82, 0x90, 0x28, 0xf9, 0x29, 0x73, 0x04, 0xaa, - 0x31, 0x32, 0x03, 0x81, 0xaf, 0x10, 0x90, 0x73, 0xb0, 0x10, 0x21, 0xc9, 0x08, 0xcc, 0x98, 0xda, - 0x8a, 0x88, 0x40, 0x84, 0xbb, 0x8a, 0x22, 0x53, 0x92, 0xbc, 0x22, 0x71, 0xa3, 0x0c, 0x10, 0xb8, - 0x61, 0x32, 0x03, 0xca, 0x0c, 0x23, 0xba, 0x28, 0xbf, 0xb0, 0x19, 0x88, 0xd0, 0x2b, 0x24, 0x9a, - 0x05, 0x1b, 0x55, 0xa1, 0x8b, 0x03, 0x88, 0x11, 0x00, 0x36, 0x92, 0x0a, 0x11, 0xa9, 0xb8, 0x4b, - 0x97, 0x9e, 0xa9, 0x9b, 0xca, 0x0c, 0x14, 0x11, 0xfa, 0x10, 0xba, 0x41, 0x14, 0x98, 0x30, 0x90, - 0x64, 0x01, 0x00, 0x08, 0x41, 0xf8, 0x19, 0xba, 0x10, 0x81, 0xca, 0x19, 0x98, 0x72, 0x22, 0x98, - 0x00, 0xac, 0x33, 0xac, 0xa8, 0x8c, 0xd8, 0x40, 0x83, 0x9c, 0xa0, 0x3a, 0x35, 0x93, 0xad, 0x98, - 0xd9, 0x0b, 0x04, 0x51, 0x32, 0xa2, 0x8a, 0x28, 0xa2, 0x29, 0x98, 0xb9, 0x2c, 0xe8, 0x11, 0x0c, - 0x67, 0x91, 0x8a, 0xa8, 0x0b, 0x00, 0x37, 0x88, 0xa9, 0x27, 0xa9, 0x88, 0x98, 0xbc, 0x19, 0x82, - 0x48, 0xc3, 0x8c, 0x81, 0x2b, 0xc3, 0x18, 0x90, 0x79, 0x95, 0x19, 0x98, 0x21, 0x89, 0x80, 0xad, - 0x45, 0xb8, 0x48, 0x05, 0xba, 0x18, 0x03, 0x8e, 0x88, 0x82, 0xcb, 0x40, 0x99, 0x14, 0x29, 0xb0, - 0x28, 0xa1, 0x0b, 0x20, 0x94, 0xaa, 0x2b, 0xc6, 0x8f, 0x91, 0x50, 0x03, 0x31, 0xc8, 0x99, 0x8b, - 0x30, 0x37, 0xf9, 0x0b, 0x80, 0x08, 0x14, 0xaa, 0xa0, 0x1c, 0xa1, 0x2b, 0x07, 0x08, 0x90, 0x10, - 0xaa, 0x18, 0xb3, 0x79, 0x77, 0x81, 0x8a, 0x10, 0x90, 0x41, 0x80, 0xc0, 0x1a, 0xb8, 0x9b, 0xc8, - 0x8d, 0x82, 0x89, 0x11, 0x98, 0xac, 0x36, 0x99, 0xb0, 0x9e, 0x99, 0x42, 0x12, 0x89, 0x10, 0x98, - 0xba, 0x70, 0x37, 0x98, 0x90, 0x08, 0x14, 0x00, 0x00, 0xa0, 0x60, 0xc8, 0x9b, 0x11, 0xcb, 0xb9, - 0x1b, 0xc1, 0x48, 0xe2, 0x8d, 0x01, 0x35, 0x11, 0xb0, 0x0d, 0x23, 0x1a, 0x05, 0x2a, 0x12, 0x34, - 0xea, 0x99, 0x9b, 0x32, 0x01, 0x18, 0xa2, 0x19, 0xff, 0x9b, 0x28, 0x80, 0x90, 0x29, 0x12, 0xf9, - 0x0e, 0x12, 0xa9, 0x20, 0x91, 0x51, 0xc0, 0x08, 0x41, 0x03, 0x63, 0x22, 0x81, 0x8c, 0x43, 0xb9, - 0x18, 0xbd, 0x08, 0x9a, 0xa1, 0xdc, 0x0b, 0xc0, 0xaa, 0xab, 0xc8, 0x4a, 0x04, 0x18, 0x01, 0xb9, - 0x68, 0x37, 0x12, 0x88, 0xa9, 0x59, 0x05, 0x9a, 0x11, 0x33, 0x99, 0x11, 0xeb, 0xaa, 0x8d, 0x44, - 0xa8, 0xaa, 0x18, 0xa8, 0x19, 0x23, 0xce, 0xa9, 0x0c, 0x15, 0x28, 0x24, 0x08, 0x82, 0x8d, 0x12, - 0x08, 0x45, 0xb0, 0x8c, 0x33, 0xc1, 0x1a, 0xc9, 0xb9, 0x9e, 0x08, 0x41, 0xb1, 0x8b, 0x23, 0x23, - 0xd8, 0x89, 0xbe, 0x61, 0x01, 0x99, 0x28, 0x93, 0xaa, 0xa9, 0x3b, 0x57, 0x8a, 0x13, 0x09, 0x04, - 0x9a, 0x18, 0x75, 0x92, 0xbd, 0x08, 0x80, 0x21, 0x01, 0x88, 0xa0, 0x72, 0x01, 0xe9, 0x8a, 0x01, - 0xaa, 0xa8, 0xac, 0x28, 0x27, 0x89, 0x01, 0xca, 0x8b, 0x44, 0x21, 0x04, 0x99, 0x9a, 0x62, 0xa1, - 0x9b, 0x81, 0x8a, 0xb9, 0x73, 0x94, 0xba, 0xac, 0x09, 0x91, 0x31, 0x57, 0x83, 0x89, 0xfb, 0x1a, - 0x33, 0x98, 0x01, 0xa9, 0x72, 0xb2, 0x39, 0xb1, 0xbd, 0x28, 0x84, 0x31, 0x13, 0xfa, 0x09, 0x80, - 0x9b, 0xa9, 0x81, 0x2c, 0x84, 0xbb, 0x40, 0x93, 0x0c, 0x93, 0x39, 0x47, 0x01, 0x99, 0x91, 0x0d, - 0x12, 0x81, 0x0a, 0xb1, 0x41, 0xee, 0xab, 0x30, 0x14, 0xa0, 0xcb, 0x09, 0xa0, 0x8b, 0x0c, 0x07, - 0x40, 0x81, 0x98, 0x89, 0x60, 0x84, 0x29, 0x15, 0x08, 0x92, 0x8d, 0xb0, 0x19, 0xd9, 0xaa, 0x3a, - 0x05, 0x40, 0x81, 0x21, 0xbd, 0xcb, 0x41, 0x34, 0x90, 0x10, 0x89, 0x9b, 0x27, 0x89, 0xb9, 0x1a, - 0x15, 0xae, 0x80, 0x99, 0x08, 0x82, 0xbd, 0x10, 0x72, 0x85, 0x18, 0x88, 0x12, 0x08, 0x02, 0xaa, - 0x89, 0xfa, 0x99, 0x3b, 0xa5, 0xae, 0x98, 0x39, 0x07, 0x9a, 0x09, 0xb0, 0x1b, 0x54, 0x14, 0x9a, - 0xaa, 0x88, 0x39, 0x16, 0x81, 0x38, 0x02, 0x20, 0x24, 0xb9, 0x10, 0x29, 0x87, 0x0b, 0xc9, 0xa8, - 0xaf, 0x9a, 0x10, 0xb8, 0xab, 0xbd, 0x35, 0xbb, 0x61, 0x25, 0x99, 0xa8, 0x00, 0x09, 0x33, 0x04, - 0x99, 0x42, 0x15, 0x99, 0x11, 0xca, 0x51, 0xe8, 0x8c, 0x11, 0x00, 0x80, 0x09, 0x80, 0x21, 0xa0, - 0xae, 0xa8, 0x50, 0x23, 0x02, 0xfa, 0x8b, 0x42, 0xd0, 0x28, 0x00, 0x20, 0x37, 0x08, 0x81, 0x89, - 0xfb, 0x29, 0x91, 0x91, 0xcf, 0x19, 0x92, 0x9a, 0x08, 0x80, 0x88, 0x46, 0x90, 0xb9, 0x19, 0x90, - 0x60, 0x13, 0x88, 0x31, 0xca, 0x12, 0x30, 0xb8, 0x52, 0x74, 0x02, 0xb9, 0xbf, 0x20, 0x22, 0xa8, - 0xe8, 0x1c, 0x03, 0x9a, 0x08, 0x89, 0x73, 0x03, 0xa8, 0xcc, 0x18, 0x02, 0x11, 0x89, 0x93, 0x1c, - 0x46, 0xa1, 0x09, 0x89, 0x43, 0x02, 0xbb, 0xd9, 0x9f, 0x82, 0xa9, 0x9b, 0x18, 0x12, 0x98, 0x4a, - 0x17, 0x8a, 0x21, 0x27, 0x99, 0x88, 0x30, 0xe2, 0x39, 0x81, 0x08, 0xa9, 0x9c, 0xb9, 0x63, 0xc8, - 0xba, 0x9a, 0x18, 0xf2, 0x1d, 0x03, 0x00, 0x89, 0x11, 0x10, 0x33, 0x45, 0x91, 0x9e, 0x31, 0x23, - 0x00, 0x08, 0x81, 0xda, 0x5a, 0x04, 0x80, 0x38, 0xdb, 0x43, 0x99, 0xb9, 0xbf, 0x99, 0xaa, 0xa9, - 0x30, 0x00, 0x80, 0x47, 0xa8, 0xb0, 0x0f, 0x34, 0x89, 0x15, 0x20, 0xa0, 0x8a, 0x09, 0x23, 0x28, - 0x85, 0xab, 0xac, 0x91, 0x7a, 0x83, 0x9a, 0xda, 0x8c, 0x81, 0x88, 0x1b, 0xd1, 0x9c, 0x19, 0x46, - 0xa8, 0x9b, 0x31, 0x11, 0x22, 0x14, 0xcb, 0x60, 0x13, 0x12, 0x00, 0xd8, 0x1b, 0x95, 0x3c, 0xe2, - 0x8b, 0x23, 0x80, 0xc9, 0x0a, 0xc8, 0x8a, 0x35, 0x91, 0x9a, 0x00, 0xcd, 0x11, 0x9b, 0x13, 0x08, - 0x61, 0xa3, 0x9c, 0x08, 0x47, 0x81, 0xc0, 0x1a, 0x31, 0x16, 0x00, 0xaa, 0x09, 0x45, 0xa0, 0x8a, - 0xca, 0xac, 0x30, 0x01, 0x32, 0xd0, 0x0b, 0xc1, 0x09, 0x89, 0x18, 0x17, 0x8b, 0xa2, 0xaf, 0x32, - 0x81, 0xbc, 0x30, 0xa1, 0x28, 0x44, 0x99, 0x20, 0x65, 0x14, 0xa9, 0xb9, 0x9f, 0x02, 0x08, 0xb8, - 0x8e, 0x82, 0x19, 0x22, 0xb8, 0xbb, 0x50, 0x47, 0x91, 0x99, 0x80, 0x21, 0x90, 0x09, 0x26, 0xb9, - 0x29, 0x23, 0xea, 0xac, 0x10, 0xa9, 0x32, 0x93, 0x80, 0x20, 0xfa, 0x9c, 0xb9, 0x20, 0x11, 0x61, - 0x05, 0x58, 0x92, 0xae, 0x08, 0xa0, 0x39, 0x15, 0x9a, 0xa0, 0x28, 0x81, 0x64, 0x80, 0xdb, 0x0a, - 0x12, 0x22, 0x33, 0xf9, 0x8c, 0x98, 0x28, 0x02, 0xab, 0xa9, 0x0b, 0x90, 0x73, 0x07, 0x98, 0x29, - 0x92, 0x30, 0xa0, 0xa8, 0x70, 0xc2, 0xaa, 0x50, 0x82, 0xb9, 0x19, 0x93, 0x9c, 0x02, 0xbe, 0x98, - 0x60, 0x98, 0x25, 0x9a, 0xa9, 0x28, 0x75, 0x13, 0x98, 0x09, 0xb8, 0xac, 0x20, 0x12, 0xfb, 0x89, - 0x00, 0xb8, 0x1c, 0x16, 0x09, 0x22, 0x08, 0xb2, 0x0d, 0x25, 0x9a, 0x12, 0xab, 0xac, 0x81, 0x4a, - 0x94, 0x9c, 0xcb, 0x30, 0x33, 0x92, 0xbe, 0x40, 0x33, 0x82, 0x92, 0xbf, 0x41, 0x92, 0xca, 0x0b, - 0x81, 0x20, 0xc0, 0xfc, 0x29, 0x15, 0x88, 0x80, 0x10, 0xeb, 0x11, 0x0a, 0x24, 0xa0, 0xbb, 0x89, - 0x65, 0x02, 0x89, 0x18, 0x02, 0x61, 0x80, 0x01, 0xbe, 0x18, 0x43, 0x81, 0x00, 0xcc, 0xb9, 0x8a, - 0x89, 0x81, 0xaa, 0x52, 0x51, 0xe0, 0x89, 0x09, 0x82, 0x9c, 0x33, 0x41, 0x02, 0xb8, 0x1e, 0x03, - 0x73, 0x10, 0x92, 0xcb, 0x9a, 0x99, 0x82, 0x9d, 0x82, 0x18, 0xa3, 0xff, 0x28, 0xb0, 0x38, 0x91, - 0x99, 0x62, 0x01, 0xb0, 0x28, 0x01, 0x19, 0x47, 0x99, 0x32, 0xdb, 0x20, 0x81, 0xb8, 0x49, 0xd8, - 0x29, 0xc0, 0x10, 0x88, 0x22, 0xec, 0x88, 0x38, 0x34, 0xa2, 0x1a, 0x05, 0xab, 0x60, 0xa3, 0x9b, - 0x9a, 0x80, 0x88, 0x54, 0x01, 0xa1, 0xae, 0x21, 0x62, 0x82, 0xbb, 0x39, 0xf9, 0x89, 0x28, 0xa1, - 0xb1, 0x9f, 0x13, 0x00, 0x08, 0x32, 0xd2, 0xcc, 0x8c, 0x54, 0x02, 0x09, 0xa0, 0x0a, 0xcd, 0x28, - 0x00, 0x81, 0x51, 0xd8, 0x89, 0x19, 0x14, 0x88, 0xa9, 0xac, 0x42, 0xa0, 0x33, 0x00, 0x02, 0x72, - 0x03, 0x99, 0xaa, 0x71, 0x95, 0x8a, 0xfb, 0xab, 0x21, 0x21, 0x91, 0x51, 0x90, 0x31, 0x35, 0xda, - 0x00, 0x09, 0x80, 0x82, 0x8a, 0x1a, 0xa5, 0x7a, 0xd0, 0x09, 0x18, 0xa2, 0x39, 0xf9, 0x0b, 0x41, - 0x93, 0x28, 0xd9, 0x9b, 0x42, 0x00, 0x12, 0xb9, 0x71, 0xa2, 0x01, 0x19, 0x88, 0x13, 0xbb, 0xef, - 0xaa, 0x19, 0x01, 0x02, 0xb8, 0xbc, 0xbb, 0x73, 0x22, 0xe8, 0x0c, 0x21, 0x35, 0x12, 0x80, 0x98, - 0x80, 0x8d, 0x04, 0x09, 0x08, 0x8a, 0x92, 0x3a, 0xfd, 0xa9, 0x28, 0x33, 0x82, 0xad, 0x32, 0xdb, - 0x20, 0x81, 0x0a, 0x67, 0xa0, 0x09, 0x42, 0x02, 0x99, 0xba, 0x0a, 0x91, 0xcd, 0x51, 0xc8, 0x19, - 0xa0, 0xdb, 0x18, 0x00, 0x08, 0x08, 0x92, 0xac, 0x41, 0x14, 0x0a, 0x56, 0x13, 0xa9, 0x10, 0x98, - 0xba, 0x40, 0x13, 0x45, 0xb8, 0x9a, 0x8a, 0xcc, 0x62, 0xb8, 0x9b, 0xa8, 0xbb, 0x62, 0xb1, 0x0c, - 0x20, 0x24, 0x33, 0xba, 0x26, 0xb9, 0x71, 0xa0, 0x8c, 0x32, 0x02, 0x00, 0xa9, 0x9c, 0x09, 0x44, - 0x12, 0xa8, 0xcb, 0x9a, 0x8a, 0xf9, 0x2d, 0xa1, 0x19, 0x9a, 0x53, 0xb0, 0x0e, 0x42, 0x83, 0x8a, - 0x33, 0xb1, 0x8b, 0xb1, 0x9d, 0x76, 0x90, 0x99, 0x0a, 0xb9, 0x63, 0x21, 0x01, 0xa2, 0xac, 0x9b, - 0x91, 0xbc, 0x38, 0x07, 0xdb, 0x8b, 0x12, 0xcc, 0x41, 0x00, 0x00, 0x01, 0x91, 0x60, 0x01, 0xa1, - 0xaf, 0x21, 0x81, 0x21, 0x35, 0x81, 0x10, 0x00, 0xe9, 0x0b, 0x89, 0x01, 0x09, 0x98, 0xff, 0x0a, - 0x90, 0x10, 0xb9, 0x68, 0x25, 0xa8, 0x88, 0x99, 0x32, 0x32, 0x11, 0x00, 0x02, 0x11, 0x5a, 0x86, - 0x3b, 0xb0, 0xe9, 0x3b, 0x92, 0x2a, 0xc1, 0xbf, 0xbb, 0x2a, 0xc2, 0x9e, 0xc9, 0x9b, 0x42, 0x43, - 0xa0, 0x01, 0x40, 0x24, 0x23, 0x91, 0x9c, 0x64, 0x92, 0x1a, 0x81, 0x91, 0x9e, 0x99, 0x09, 0x53, - 0xc0, 0x9a, 0x08, 0xe8, 0x9d, 0x00, 0x42, 0xb0, 0xbb, 0x28, 0x13, 0x43, 0x90, 0x68, 0x14, 0x11, - 0x01, 0x01, 0xe9, 0x3a, 0x34, 0x92, 0xa9, 0xcd, 0x28, 0x32, 0x92, 0xaa, 0xee, 0x8a, 0x21, 0x11, - 0xb9, 0x99, 0x9a, 0x11, 0xa2, 0x79, 0x91, 0xfa, 0x8d, 0x22, 0x44, 0x82, 0x09, 0x41, 0xa9, 0x01, - 0xac, 0xa1, 0x0b, 0xa1, 0xa9, 0xca, 0x1f, 0x14, 0x31, 0xc8, 0xba, 0x10, 0x01, 0xc8, 0x89, 0xba, - 0x49, 0xa3, 0x9f, 0x43, 0x11, 0x33, 0x98, 0xd9, 0x08, 0x39, 0x47, 0x80, 0x31, 0xb3, 0x9f, 0x81, - 0xcb, 0x29, 0x13, 0x35, 0xd9, 0x08, 0x80, 0xa9, 0x99, 0xbd, 0x10, 0x10, 0x82, 0x6a, 0xc3, 0x49, - 0x00, 0x26, 0xa9, 0x99, 0x28, 0x37, 0x02, 0x82, 0xcc, 0x8a, 0x01, 0x00, 0x90, 0xaa, 0xab, 0x01, - 0x0c, 0x95, 0xdf, 0x09, 0x00, 0x00, 0xea, 0x28, 0x20, 0x33, 0x03, 0x0b, 0x15, 0x18, 0x23, 0x32, - 0x82, 0xdf, 0x08, 0x28, 0xc0, 0x0b, 0xc9, 0x10, 0xdb, 0xbb, 0x29, 0x14, 0x00, 0x33, 0xa8, 0x3a, - 0x47, 0x23, 0xa9, 0x18, 0x21, 0xf9, 0xac, 0x31, 0x02, 0x20, 0xd1, 0x8b, 0xa2, 0x6b, 0x24, 0x14, - 0xba, 0xaa, 0x8c, 0x13, 0x19, 0x05, 0xfa, 0x39, 0x15, 0xc9, 0x9a, 0x43, 0x01, 0xa0, 0xae, 0x28, - 0x14, 0x09, 0x88, 0x99, 0x82, 0x78, 0x91, 0xba, 0xaf, 0x11, 0x20, 0x02, 0xa1, 0x9c, 0xba, 0x62, - 0x21, 0xa1, 0x1a, 0x12, 0xb9, 0x71, 0x84, 0xdd, 0x28, 0xa1, 0x8a, 0x10, 0x80, 0x36, 0x80, 0xa8, - 0x88, 0x49, 0xa4, 0xcd, 0x29, 0x34, 0x32, 0xb8, 0xdc, 0x8c, 0x21, 0x42, 0xa8, 0x09, 0x98, 0x11, - 0xa0, 0x72, 0x03, 0xfa, 0x0c, 0x21, 0xa8, 0x89, 0xcb, 0x31, 0x80, 0x80, 0x18, 0x08, 0x25, 0xa9, - 0x80, 0x8d, 0x17, 0x53, 0x02, 0x00, 0x32, 0xb8, 0xcc, 0x89, 0xea, 0x8a, 0x32, 0x14, 0xfb, 0x8d, - 0x00, 0x08, 0x21, 0x23, 0x99, 0x01, 0x08, 0x17, 0x00, 0xc9, 0x09, 0x2a, 0x84, 0x61, 0x13, 0xc9, - 0x0a, 0xa8, 0x08, 0xeb, 0x08, 0x12, 0xcd, 0x0a, 0x11, 0x89, 0xc0, 0x9f, 0x12, 0x32, 0x80, 0x20, - 0x12, 0x1a, 0x84, 0x19, 0x15, 0x11, 0x90, 0xbe, 0x02, 0x9e, 0x01, 0xb9, 0x48, 0x90, 0x84, 0x4a, - 0xc2, 0x9d, 0x9a, 0x12, 0x10, 0x03, 0x80, 0x4c, 0x27, 0x8c, 0x11, 0xa0, 0x2b, 0x12, 0x00, 0x11, - 0xa9, 0xee, 0x0a, 0x80, 0x22, 0x20, 0x12, 0x23, 0xa0, 0xcf, 0x71, 0x13, 0x83, 0xae, 0x20, 0x00, - 0xd9, 0x0b, 0x92, 0x8a, 0x22, 0x02, 0xb8, 0x6a, 0x92, 0xba, 0x0c, 0x88, 0x27, 0x08, 0xb9, 0x81, - 0x8a, 0x54, 0xf8, 0x19, 0x88, 0x88, 0x61, 0x83, 0x9b, 0xb8, 0x58, 0xb2, 0x9e, 0x01, 0x89, 0xc0, - 0x1c, 0x22, 0x81, 0x08, 0x8b, 0xa1, 0x70, 0x25, 0xb1, 0x9d, 0x10, 0x05, 0x9a, 0x34, 0x91, 0x09, - 0x93, 0x8c, 0x81, 0xa9, 0x73, 0x00, 0xf0, 0x9b, 0x31, 0xa3, 0x89, 0xdb, 0x65, 0x01, 0x89, 0x88, - 0xba, 0x29, 0x24, 0xc8, 0x9a, 0x18, 0xa1, 0x1b, 0x36, 0xa2, 0x8e, 0x90, 0x38, 0x93, 0xac, 0x08, - 0x88, 0x00, 0x30, 0x10, 0x16, 0xc9, 0x0e, 0x25, 0x22, 0xa9, 0xb8, 0x89, 0x48, 0x35, 0x80, 0xbd, - 0x28, 0xea, 0x99, 0xbb, 0x54, 0xa8, 0xbb, 0x8a, 0x20, 0x81, 0x31, 0x33, 0x16, 0x1a, 0x26, 0x13, - 0x09, 0xb1, 0x39, 0x02, 0x08, 0x43, 0x34, 0xc9, 0xf0, 0xaf, 0xa9, 0x10, 0x73, 0xa1, 0x99, 0xa8, - 0x31, 0xca, 0x41, 0x12, 0xa8, 0x51, 0x91, 0x02, 0xae, 0x89, 0x34, 0x20, 0x84, 0x98, 0x32, 0xe0, - 0x8b, 0x09, 0x53, 0x82, 0x0a, 0xfa, 0xaa, 0xba, 0x19, 0xb8, 0x19, 0x31, 0x54, 0x93, 0x70, 0xc2, - 0x0a, 0x91, 0xbb, 0x52, 0x21, 0x43, 0x02, 0x20, 0xfb, 0xae, 0x89, 0x01, 0x98, 0x91, 0x4a, 0x84, - 0x09, 0xba, 0x08, 0xba, 0x74, 0xa8, 0x20, 0x43, 0x01, 0x8a, 0xc1, 0xae, 0x21, 0x82, 0xcc, 0x30, - 0x53, 0x14, 0x00, 0xaa, 0x08, 0x10, 0x21, 0xb3, 0xcf, 0x20, 0x81, 0x18, 0xda, 0xbb, 0x31, 0x08, - 0x15, 0xa8, 0xae, 0x91, 0x0b, 0x55, 0x82, 0x80, 0x08, 0x42, 0x03, 0x1a, 0x37, 0xe9, 0x0a, 0xb0, - 0x39, 0x04, 0x18, 0xa1, 0xbd, 0x0b, 0x80, 0x32, 0xfc, 0x8c, 0x99, 0x32, 0xa8, 0x09, 0x02, 0xbb, - 0x19, 0x03, 0x10, 0x73, 0x16, 0x28, 0x01, 0x04, 0x20, 0x40, 0x17, 0x90, 0xb9, 0x29, 0x82, 0x35, - 0xc9, 0xcd, 0xaa, 0x9a, 0xb8, 0x10, 0xaa, 0x08, 0x82, 0x62, 0x82, 0x8b, 0x77, 0x05, 0x89, 0x90, - 0x09, 0x11, 0x30, 0x92, 0x9a, 0x89, 0x83, 0x52, 0xde, 0x28, 0xa9, 0x0a, 0x11, 0x23, 0xc9, 0xbe, - 0x3a, 0x27, 0x99, 0x89, 0x20, 0x33, 0xf9, 0x0a, 0x90, 0x08, 0x55, 0x83, 0xba, 0x8b, 0x02, 0x08, - 0xb8, 0x32, 0x33, 0xfc, 0x41, 0x90, 0xa9, 0xaa, 0x09, 0x02, 0xc1, 0xcf, 0x40, 0x91, 0x0b, 0x83, - 0x0a, 0x34, 0x98, 0xb8, 0x9d, 0x41, 0x33, 0xb5, 0x9f, 0x23, 0xc0, 0x19, 0x01, 0x20, 0xc0, 0x8a, - 0x23, 0x09, 0x14, 0xea, 0x38, 0xa1, 0x48, 0x81, 0x99, 0xa9, 0x1d, 0x05, 0xaa, 0x60, 0x33, 0x17, - 0xaa, 0x80, 0x89, 0x90, 0x0d, 0x92, 0x1c, 0x12, 0x80, 0x28, 0xea, 0x18, 0x92, 0xbd, 0x42, 0x34, - 0xed, 0x09, 0x18, 0x23, 0xd9, 0x19, 0x90, 0x98, 0x88, 0x30, 0x82, 0xa0, 0x9c, 0x75, 0x91, 0x21, - 0x00, 0x01, 0x00, 0xb9, 0xb9, 0xbf, 0x12, 0x9b, 0xcb, 0x08, 0x35, 0xfa, 0x28, 0xb8, 0x0c, 0x17, - 0xaa, 0x32, 0x92, 0x0b, 0x01, 0x41, 0x04, 0xbc, 0x30, 0x12, 0x12, 0xac, 0xbc, 0x41, 0x04, 0x1a, - 0xb1, 0x2a, 0xea, 0x30, 0x90, 0x42, 0xaa, 0x16, 0xcf, 0x10, 0x80, 0x31, 0x04, 0x88, 0xdc, 0x28, - 0x03, 0x31, 0xb0, 0x9c, 0x31, 0x83, 0x2c, 0x95, 0xae, 0x30, 0xa8, 0x48, 0xb0, 0x9b, 0xac, 0x31, - 0x32, 0x92, 0xde, 0x0b, 0x82, 0x8a, 0x81, 0xd8, 0x48, 0xa8, 0x28, 0x16, 0x1a, 0x16, 0x88, 0x11, - 0x88, 0xb9, 0x1b, 0x65, 0x94, 0x0b, 0x81, 0x9c, 0x91, 0x0d, 0xb8, 0x89, 0x00, 0x33, 0xbc, 0x42, - 0x90, 0x71, 0x16, 0xb8, 0x29, 0xb8, 0x3a, 0x27, 0xa0, 0x99, 0x31, 0x91, 0xd9, 0x89, 0xba, 0x40, - 0x24, 0x62, 0x83, 0xda, 0x0a, 0xa8, 0x40, 0xa0, 0x08, 0xc9, 0x39, 0x53, 0xa2, 0x8c, 0xba, 0x52, - 0x91, 0x08, 0xc9, 0x0a, 0xe9, 0x30, 0x81, 0x22, 0x42, 0x88, 0xd2, 0x8e, 0x12, 0x31, 0x00, 0x80, - 0x99, 0xab, 0xdf, 0xa9, 0x1a, 0x98, 0x58, 0xb2, 0x1a, 0x38, 0x07, 0xad, 0x28, 0x11, 0x22, 0x43, - 0xe0, 0x9c, 0x18, 0x83, 0x0d, 0x16, 0x08, 0x01, 0x20, 0x03, 0xa8, 0xbe, 0xcb, 0x30, 0x13, 0x32, - 0xf9, 0x1b, 0x91, 0x1b, 0x12, 0xb1, 0x8e, 0x54, 0x01, 0xba, 0x09, 0x32, 0x22, 0xa8, 0x30, 0xe8, - 0x29, 0xa3, 0xaf, 0x08, 0x62, 0xa0, 0x30, 0xb8, 0x0b, 0x11, 0xd8, 0xad, 0xba, 0xaa, 0x19, 0x55, - 0x22, 0xc0, 0x8b, 0x40, 0x84, 0x48, 0x01, 0x00, 0x22, 0x49, 0xa5, 0x9e, 0xa9, 0xaa, 0x51, 0x05, - 0x20, 0x91, 0xdd, 0x09, 0x00, 0xa8, 0x09, 0x10, 0xd0, 0x9d, 0x32, 0x34, 0x22, 0xd9, 0x08, 0x99, - 0x10, 0x21, 0x92, 0x8c, 0xb8, 0x50, 0x02, 0x10, 0x05, 0xce, 0x29, 0x03, 0x92, 0xbe, 0x38, 0x00, - 0x20, 0x33, 0x9a, 0xfc, 0x3a, 0x14, 0x88, 0x19, 0x12, 0x21, 0x64, 0xa1, 0x29, 0xfb, 0x8b, 0x80, - 0x41, 0x01, 0x18, 0x02, 0x30, 0xb1, 0x2a, 0xa7, 0xbf, 0x90, 0x10, 0xea, 0x09, 0xa9, 0x38, 0x84, - 0xbc, 0x0b, 0x34, 0x02, 0x98, 0x42, 0x90, 0xbe, 0x42, 0x12, 0x18, 0x22, 0x47, 0x81, 0xa9, 0x21, - 0x11, 0xd8, 0x0a, 0x98, 0xef, 0x19, 0x80, 0x80, 0x9a, 0x80, 0x08, 0xa0, 0x9a, 0x49, 0x37, 0x91, - 0x29, 0x93, 0x9d, 0x42, 0x53, 0xa1, 0x19, 0x91, 0x01, 0xaf, 0x08, 0x18, 0x03, 0x39, 0x07, 0x9b, - 0xa9, 0x0b, 0x12, 0xfa, 0x4b, 0x83, 0x31, 0x82, 0xaf, 0x09, 0x61, 0x03, 0x18, 0xb0, 0x8c, 0x08, - 0x12, 0x91, 0x4a, 0xb2, 0x40, 0x00, 0x55, 0xe2, 0x8c, 0x81, 0xb9, 0x9f, 0x89, 0x30, 0x04, 0x90, - 0x18, 0x91, 0xab, 0x10, 0x08, 0xe0, 0x1a, 0x43, 0x03, 0xa9, 0x19, 0x34, 0xb2, 0xcf, 0x08, 0x00, - 0xb0, 0xac, 0x62, 0x92, 0x0c, 0x12, 0x80, 0x31, 0xb8, 0x50, 0x43, 0xb0, 0x78, 0x83, 0x11, 0xda, - 0x08, 0x8a, 0x13, 0x70, 0x85, 0xcb, 0x08, 0x01, 0x18, 0x12, 0x20, 0x22, 0xfe, 0x9a, 0x19, 0x01, - 0x10, 0x23, 0x41, 0xe8, 0xbb, 0x10, 0x88, 0x10, 0x41, 0x16, 0x08, 0x81, 0xce, 0x9a, 0x00, 0x23, - 0xc8, 0x0a, 0x43, 0x80, 0x22, 0x98, 0xdc, 0x8b, 0x10, 0x33, 0xf8, 0x9b, 0x01, 0x3b, 0x84, 0xed, - 0x19, 0x18, 0x33, 0x53, 0xb9, 0x88, 0x58, 0x92, 0x9b, 0x80, 0x8a, 0x03, 0xcd, 0x48, 0x02, 0x10, - 0xa3, 0x6b, 0x11, 0x87, 0x9b, 0x00, 0x88, 0xba, 0x73, 0x12, 0x08, 0x02, 0x10, 0xea, 0xac, 0x42, - 0x24, 0x12, 0x11, 0xba, 0x28, 0xca, 0x52, 0xea, 0xbb, 0x09, 0x8a, 0x81, 0x10, 0x01, 0xbc, 0xbc, - 0x12, 0x72, 0xe2, 0x0a, 0x31, 0x91, 0x1a, 0xb3, 0x4b, 0x82, 0xb9, 0x78, 0x34, 0xe8, 0x8b, 0x10, - 0x21, 0xb1, 0x9d, 0x41, 0x80, 0x92, 0xaf, 0x18, 0x98, 0x89, 0x10, 0x0a, 0xe0, 0x58, 0x33, 0xa8, - 0x88, 0x1a, 0x53, 0x14, 0x89, 0x99, 0xb1, 0xcf, 0x20, 0x53, 0x03, 0x21, 0xd8, 0x9c, 0x20, 0x02, - 0x11, 0xfc, 0x0b, 0x99, 0x11, 0x18, 0x90, 0x62, 0x21, 0xa0, 0x9a, 0x59, 0x37, 0x10, 0xa0, 0x1a, - 0xc8, 0x20, 0x21, 0x13, 0x28, 0xf3, 0x8f, 0x98, 0xa9, 0x39, 0x84, 0x98, 0x28, 0xa8, 0xcb, 0x0d, - 0x44, 0x82, 0xba, 0xba, 0x99, 0x28, 0xc1, 0x0c, 0x81, 0x03, 0x8d, 0x81, 0xa1, 0xbf, 0x10, 0x40, - 0x37, 0xa8, 0x8b, 0x22, 0x93, 0xbd, 0xac, 0x11, 0x10, 0x35, 0x11, 0x88, 0x88, 0xc9, 0x19, 0x34, - 0xe9, 0x38, 0x21, 0x06, 0x9a, 0x10, 0x81, 0x8c, 0x44, 0x90, 0x2a, 0x47, 0x81, 0x19, 0x11, 0xc8, - 0x4a, 0xc8, 0xb9, 0x8d, 0x12, 0x31, 0xc8, 0xba, 0x4b, 0x16, 0x01, 0xba, 0x9a, 0x32, 0xa0, 0x41, - 0x91, 0x82, 0xaf, 0x82, 0xaa, 0x8b, 0x80, 0x42, 0x90, 0x72, 0xf8, 0x8f, 0x01, 0x88, 0x88, 0x21, - 0x82, 0xca, 0x9b, 0x31, 0x13, 0x80, 0xb8, 0xbe, 0x01, 0x09, 0xf9, 0x2b, 0x25, 0x22, 0x81, 0x33, - 0xa9, 0xdc, 0x4a, 0x06, 0x90, 0xa8, 0xac, 0x51, 0x03, 0x10, 0x10, 0x81, 0x88, 0x33, 0x50, 0x85, - 0xab, 0xb9, 0x89, 0x73, 0x17, 0x98, 0x99, 0x28, 0xb0, 0x3a, 0x03, 0xdd, 0x89, 0x29, 0xd2, 0x9f, - 0x08, 0x28, 0x12, 0x88, 0x09, 0x90, 0x68, 0xb0, 0x89, 0x1a, 0x18, 0xf3, 0x3b, 0x81, 0x31, 0x16, - 0x0b, 0x94, 0x9c, 0x11, 0x80, 0x99, 0xba, 0xaf, 0x18, 0x03, 0x8c, 0xf9, 0x39, 0x91, 0xab, 0x34, - 0x41, 0x81, 0x48, 0x27, 0xa8, 0x00, 0x01, 0x38, 0x95, 0x1a, 0xa2, 0xaa, 0x9b, 0x52, 0xf8, 0x8e, - 0x12, 0xa1, 0xad, 0x08, 0x23, 0x98, 0x31, 0x80, 0x18, 0xb0, 0x0d, 0x02, 0x03, 0x79, 0x47, 0xb9, - 0x19, 0x83, 0x88, 0x00, 0x51, 0xc2, 0x8c, 0x88, 0x52, 0xc1, 0xad, 0x20, 0xa9, 0x1c, 0x43, 0x83, - 0xbd, 0x19, 0x03, 0x99, 0xa8, 0x1a, 0x34, 0xc2, 0x2b, 0xc9, 0x39, 0x35, 0x12, 0x12, 0xca, 0x08, - 0xbe, 0x98, 0x49, 0x82, 0x70, 0x35, 0xb8, 0xac, 0xba, 0x8a, 0x22, 0xb8, 0x3b, 0x82, 0x73, 0x05, - 0x00, 0xac, 0x41, 0x23, 0xb8, 0x31, 0x99, 0x34, 0xc2, 0xae, 0x89, 0xa0, 0x2b, 0x11, 0x12, 0x94, - 0x1a, 0x44, 0x81, 0x23, 0xcc, 0xac, 0x98, 0xbc, 0x32, 0x90, 0x9f, 0x81, 0xba, 0x63, 0x32, 0x22, - 0x37, 0xa9, 0x28, 0x02, 0xfa, 0x0a, 0x43, 0x01, 0xf9, 0x9b, 0x11, 0x88, 0x31, 0x33, 0xba, 0xfa, - 0xac, 0x09, 0xb1, 0x38, 0x15, 0xa8, 0x30, 0xc0, 0x28, 0xce, 0x41, 0x12, 0xa1, 0xeb, 0x2a, 0x14, - 0x00, 0x19, 0x14, 0xeb, 0x28, 0x13, 0x99, 0x30, 0xd9, 0x39, 0x24, 0xb9, 0xcd, 0x99, 0x20, 0x24, - 0xd8, 0x0a, 0x35, 0x12, 0x08, 0xd0, 0x0b, 0x90, 0xb9, 0x9b, 0x19, 0x27, 0x61, 0x92, 0x09, 0x9a, - 0x01, 0x30, 0x44, 0x22, 0xdb, 0xba, 0x18, 0xe9, 0x9a, 0xbd, 0x51, 0x02, 0x30, 0x92, 0x0a, 0x53, - 0xd9, 0xdb, 0x39, 0x91, 0x28, 0x03, 0x0b, 0xd2, 0x9e, 0x90, 0x00, 0x62, 0x02, 0x18, 0x81, 0x89, - 0x63, 0xb8, 0x8c, 0xaa, 0x11, 0x31, 0x14, 0xb0, 0x0a, 0x92, 0xdf, 0x09, 0xb8, 0x8b, 0x54, 0xa0, - 0x9a, 0xbb, 0x33, 0x20, 0x67, 0x81, 0x8a, 0x20, 0x90, 0x30, 0x11, 0xd0, 0x5a, 0x14, 0x88, 0x0a, - 0x43, 0xe9, 0x18, 0xca, 0x8a, 0x80, 0x20, 0x10, 0xc2, 0x8d, 0xb9, 0x10, 0x32, 0xf8, 0x5b, 0x14, - 0x10, 0x21, 0x91, 0x48, 0x83, 0x8b, 0xa0, 0x30, 0x08, 0xfa, 0x8f, 0x08, 0x81, 0xda, 0x9d, 0x10, - 0x11, 0xa8, 0x18, 0xba, 0x00, 0x63, 0x80, 0x13, 0x09, 0x99, 0x55, 0xd9, 0x31, 0x21, 0x03, 0x58, - 0x92, 0x19, 0xc8, 0xaf, 0xa9, 0x0b, 0x91, 0x0a, 0x81, 0x98, 0x3a, 0x37, 0x8a, 0x83, 0xf9, 0x2d, - 0x17, 0x98, 0x80, 0x9a, 0x30, 0x14, 0x91, 0xfb, 0x8a, 0x12, 0x18, 0x82, 0x73, 0x01, 0x18, 0x91, - 0xac, 0x28, 0xa1, 0x8b, 0x34, 0x05, 0xad, 0x31, 0x98, 0xa9, 0x9d, 0x29, 0xa3, 0x40, 0xf9, 0x9b, - 0x20, 0x14, 0x98, 0xbb, 0x60, 0x83, 0x18, 0xa9, 0x42, 0x34, 0x00, 0xd8, 0xac, 0x09, 0xa8, 0x70, - 0x14, 0xcc, 0x88, 0x98, 0x10, 0x81, 0x9b, 0xb9, 0xda, 0xaa, 0x9e, 0x62, 0x02, 0x32, 0x90, 0x01, - 0x89, 0xbc, 0x55, 0x31, 0x24, 0x02, 0xdb, 0x09, 0x88, 0x88, 0xcb, 0x99, 0x30, 0x90, 0x18, 0xbc, - 0x92, 0x74, 0xc3, 0x9a, 0x40, 0xa2, 0x21, 0xab, 0x35, 0x32, 0xf9, 0x0b, 0xda, 0x38, 0x13, 0x18, - 0x01, 0xb9, 0x0c, 0x27, 0xd8, 0xab, 0x51, 0x01, 0x00, 0x11, 0xba, 0x00, 0x99, 0x21, 0xb8, 0x6a, - 0x84, 0x1a, 0x32, 0xd0, 0xeb, 0x8d, 0x81, 0x8a, 0x91, 0x9a, 0x89, 0x41, 0x84, 0xad, 0x42, 0x84, - 0xbd, 0x20, 0xa8, 0x98, 0x20, 0x63, 0x83, 0x9c, 0x45, 0x81, 0xba, 0x9a, 0x01, 0x39, 0x15, 0xa0, - 0x88, 0x19, 0x26, 0xc8, 0x1b, 0x06, 0x0b, 0x33, 0x04, 0xca, 0x28, 0x98, 0x90, 0x99, 0x78, 0x16, - 0xba, 0x89, 0x00, 0x08, 0xc2, 0x9e, 0x00, 0x20, 0x01, 0x42, 0xb8, 0x0c, 0x84, 0x19, 0x08, 0xd8, - 0x40, 0xf0, 0x8c, 0x43, 0x90, 0x10, 0x23, 0xa9, 0x88, 0x0b, 0xb0, 0xcc, 0x18, 0xda, 0x12, 0x39, - 0xc3, 0xbe, 0x9b, 0x98, 0xbd, 0x0a, 0x43, 0xa8, 0x10, 0x21, 0x73, 0x57, 0x82, 0xaa, 0x10, 0x02, - 0x09, 0x81, 0x12, 0xcd, 0x20, 0x08, 0x90, 0xc9, 0x9c, 0xda, 0x1a, 0x34, 0xd9, 0x9c, 0x81, 0x52, - 0x00, 0x91, 0x18, 0xcb, 0x73, 0x02, 0x08, 0x32, 0x14, 0x18, 0x82, 0xab, 0x00, 0x42, 0xe8, 0x39, - 0x93, 0xbe, 0x30, 0x28, 0xd3, 0x9f, 0x89, 0x88, 0x98, 0xcc, 0xab, 0x51, 0x82, 0x98, 0x0a, 0x11, - 0x00, 0x88, 0x40, 0x06, 0xbc, 0x40, 0x03, 0xa8, 0x09, 0x31, 0x57, 0x82, 0x98, 0xba, 0x20, 0xa1, - 0x88, 0xeb, 0xaa, 0x19, 0x01, 0xa8, 0xbe, 0xbd, 0x39, 0x47, 0x23, 0x10, 0xfa, 0x8b, 0x01, 0x11, - 0x33, 0x83, 0xba, 0x1b, 0x44, 0x34, 0x90, 0xcb, 0x63, 0x00, 0x90, 0x9d, 0xaa, 0x20, 0x01, 0x00, - 0x99, 0xcf, 0x88, 0x89, 0x08, 0xb9, 0xbc, 0x71, 0x13, 0x80, 0x31, 0x33, 0xa1, 0x18, 0x24, 0x09, - 0x57, 0xa8, 0x88, 0xcb, 0x89, 0xb9, 0x88, 0xad, 0x19, 0x36, 0xc9, 0x9a, 0xbc, 0xbb, 0x50, 0x13, - 0x98, 0x32, 0xc9, 0x2a, 0x16, 0xaa, 0x30, 0x54, 0x25, 0xa0, 0xac, 0x20, 0x99, 0x01, 0x8b, 0x15, - 0x8d, 0x22, 0xa8, 0x1a, 0x47, 0xa0, 0x1a, 0xa1, 0x41, 0xc9, 0x00, 0xaa, 0x32, 0x80, 0x80, 0xbb, - 0x80, 0x9e, 0x35, 0x47, 0xd9, 0x99, 0x10, 0x88, 0x42, 0x82, 0x00, 0x98, 0xc8, 0x1b, 0xb1, 0x74, - 0x92, 0xcb, 0x9a, 0x89, 0x08, 0x82, 0x8d, 0x42, 0xb0, 0x0a, 0x23, 0x10, 0x50, 0x37, 0x80, 0x9a, - 0x91, 0x0d, 0xa1, 0x9c, 0x89, 0x80, 0x51, 0xea, 0x8a, 0x08, 0x72, 0x23, 0x00, 0xcc, 0xa9, 0x18, - 0xca, 0x18, 0x00, 0x31, 0x12, 0xe0, 0x3a, 0x93, 0x81, 0x98, 0x0b, 0x67, 0x10, 0x03, 0x9a, 0xbc, - 0x80, 0x72, 0x90, 0x12, 0xdb, 0x20, 0x32, 0xb2, 0xbe, 0x9a, 0x28, 0x45, 0xa1, 0x18, 0xda, 0x20, - 0x73, 0x12, 0x90, 0xab, 0x10, 0x42, 0x83, 0xcb, 0xaa, 0xaa, 0xad, 0x98, 0x51, 0xd9, 0x8a, 0xca, - 0x29, 0x04, 0x80, 0x18, 0xe2, 0x9e, 0x31, 0x25, 0x90, 0x9a, 0x00, 0x12, 0x40, 0x15, 0x11, 0xab, - 0x89, 0x74, 0xb0, 0xab, 0xab, 0x81, 0xae, 0x20, 0x12, 0x99, 0xea, 0x0a, 0x81, 0x88, 0x12, 0x58, - 0x16, 0x22, 0x98, 0x00, 0x01, 0x73, 0x07, 0x9a, 0x01, 0x11, 0xba, 0x9a, 0xdb, 0x0b, 0x92, 0x8c, - 0x28, 0xc3, 0x8f, 0x32, 0xa9, 0x23, 0x9d, 0x13, 0x22, 0xb9, 0x42, 0x08, 0x57, 0x01, 0xb9, 0x8a, - 0x01, 0xdb, 0x10, 0x99, 0x90, 0x10, 0xa0, 0x8a, 0x19, 0xa3, 0xbc, 0x0d, 0x27, 0xb8, 0x19, 0x81, - 0x88, 0x09, 0xf0, 0x0e, 0x12, 0x22, 0x13, 0xfc, 0x09, 0x44, 0xa1, 0x18, 0x91, 0x09, 0x01, 0x9b, - 0x67, 0x88, 0xc0, 0x8b, 0x00, 0x82, 0x21, 0x00, 0xd9, 0x9b, 0x89, 0xc8, 0x9e, 0x42, 0x81, 0x20, - 0x91, 0x49, 0xf2, 0x1a, 0x23, 0x91, 0x89, 0x41, 0x03, 0x32, 0xb0, 0x39, 0x07, 0xcd, 0x9a, 0x80, - 0x9a, 0x22, 0x8a, 0xd0, 0xec, 0x9c, 0x00, 0x81, 0x08, 0x32, 0x11, 0x90, 0x52, 0x88, 0x21, 0x50, - 0x57, 0x11, 0xb9, 0x19, 0x01, 0x73, 0x92, 0xa9, 0xaa, 0x88, 0x99, 0x00, 0xea, 0xbb, 0xbd, 0xaa, - 0x60, 0x14, 0xa9, 0x9a, 0x00, 0xb0, 0x8b, 0x56, 0x02, 0x21, 0x32, 0x83, 0x11, 0x30, 0x27, 0x80, - 0xa8, 0xcb, 0xdf, 0x19, 0x32, 0x80, 0xc9, 0x8c, 0x82, 0x19, 0x83, 0x18, 0x20, 0xb9, 0xd0, 0x9f, - 0x81, 0x60, 0x02, 0x28, 0xa1, 0xdb, 0x0b, 0x42, 0x82, 0x99, 0x80, 0xab, 0x15, 0xae, 0x63, 0x03, - 0xbc, 0xa8, 0x0a, 0x22, 0x21, 0x27, 0xb8, 0xdc, 0x1a, 0x01, 0x80, 0x89, 0x83, 0x8d, 0x91, 0x30, - 0xc0, 0x60, 0x22, 0x03, 0x10, 0xd9, 0x0a, 0x63, 0x03, 0xac, 0x20, 0x24, 0xa9, 0xab, 0xd8, 0x2a, - 0x02, 0xa8, 0xbb, 0xaf, 0x63, 0x81, 0x28, 0xe8, 0x09, 0x11, 0x10, 0x34, 0x91, 0xdc, 0x30, 0x10, - 0x43, 0xb0, 0xae, 0x18, 0x21, 0x8a, 0x64, 0x81, 0xcb, 0x9b, 0x88, 0x18, 0xf9, 0x8b, 0x22, 0xa1, - 0x8d, 0xa8, 0x52, 0x32, 0xb0, 0x8a, 0x43, 0x90, 0x32, 0x26, 0xaa, 0xdb, 0x38, 0x83, 0x42, 0x22, - 0xf0, 0x9d, 0x00, 0x99, 0x98, 0x8c, 0x42, 0x24, 0x01, 0x98, 0x8b, 0xc8, 0x51, 0xc9, 0x59, 0x14, - 0x11, 0xa8, 0xaa, 0x39, 0x26, 0x12, 0x9a, 0x9a, 0xc0, 0x9b, 0xaa, 0xd8, 0x8b, 0x80, 0xde, 0x28, - 0x43, 0x20, 0x94, 0x1b, 0x14, 0x08, 0xc8, 0x29, 0x82, 0xba, 0x4a, 0x37, 0x90, 0xb9, 0x9e, 0x99, - 0x20, 0x13, 0xe9, 0x09, 0xbc, 0xa9, 0x49, 0xa1, 0x20, 0xba, 0x08, 0x55, 0x33, 0xb1, 0x0b, 0x09, - 0x41, 0x06, 0x09, 0x25, 0x00, 0x99, 0xcb, 0x40, 0x81, 0x08, 0x56, 0x90, 0xaa, 0xbb, 0xcc, 0x0a, - 0x42, 0x34, 0x92, 0x8b, 0x01, 0x2a, 0x27, 0xba, 0x99, 0xc0, 0x1a, 0x12, 0x15, 0xbd, 0x30, 0x24, - 0x20, 0xa8, 0xa0, 0xbc, 0x1a, 0x37, 0x12, 0x10, 0xd1, 0xae, 0x99, 0x01, 0xab, 0xa9, 0x08, 0x70, - 0xd1, 0x0a, 0xa1, 0x28, 0x02, 0x28, 0x77, 0x84, 0x90, 0x9b, 0x98, 0x31, 0x22, 0x90, 0xaa, 0x55, - 0x81, 0xdd, 0x09, 0x10, 0x10, 0x90, 0xda, 0x8d, 0x11, 0x80, 0x0b, 0xa0, 0x2b, 0x27, 0x23, 0x90, - 0xbb, 0x01, 0x10, 0x30, 0x24, 0x13, 0x70, 0x04, 0x88, 0xbb, 0x18, 0x3a, 0xd3, 0x8c, 0xec, 0x09, - 0x21, 0xa0, 0xcc, 0x09, 0xb8, 0x18, 0x34, 0xfb, 0x0a, 0x40, 0x82, 0x20, 0x51, 0x27, 0x82, 0xb9, - 0x18, 0x43, 0x90, 0x0a, 0xd0, 0x8c, 0x20, 0xb0, 0x28, 0xb8, 0xac, 0xb9, 0x8d, 0x00, 0xc9, 0x9a, - 0x8a, 0x90, 0x41, 0x21, 0x34, 0x77, 0x98, 0x98, 0x29, 0x24, 0x23, 0x34, 0x90, 0xab, 0x90, 0x1b, - 0xf0, 0xaf, 0x00, 0x01, 0x31, 0x94, 0xbc, 0xac, 0x18, 0x23, 0x98, 0xca, 0x8a, 0x0a, 0x37, 0xc9, - 0x2a, 0x26, 0x02, 0x00, 0xba, 0x10, 0xb9, 0xa9, 0xd8, 0x8c, 0x21, 0x81, 0x2b, 0x67, 0x81, 0x18, - 0x98, 0x21, 0x00, 0xa9, 0xec, 0x29, 0xb2, 0xbf, 0x08, 0x42, 0x12, 0x90, 0x89, 0x63, 0x02, 0x43, - 0x80, 0xcb, 0x09, 0xc0, 0x1b, 0x91, 0x89, 0xbd, 0x28, 0x74, 0xa2, 0x9a, 0x9a, 0x34, 0x21, 0xb9, - 0x19, 0xcc, 0x63, 0xb0, 0x9f, 0x10, 0x80, 0x09, 0x11, 0x00, 0xba, 0x72, 0xa1, 0x18, 0x42, 0x91, - 0xb9, 0x9e, 0x13, 0x89, 0xa8, 0x58, 0x14, 0x90, 0xdf, 0x01, 0x00, 0x00, 0x91, 0xae, 0x08, 0x20, - 0x12, 0x00, 0x51, 0x14, 0xc8, 0x39, 0x24, 0xc9, 0xae, 0x99, 0x19, 0x11, 0x31, 0x02, 0x98, 0x79, - 0xa2, 0x09, 0xa9, 0x99, 0x08, 0x53, 0x73, 0x04, 0x98, 0xae, 0x31, 0x01, 0xc9, 0x40, 0x92, 0xa8, - 0x19, 0x90, 0x20, 0x22, 0x26, 0x88, 0xba, 0x8c, 0xe1, 0x0b, 0x54, 0xa2, 0x8d, 0x08, 0x81, 0x29, - 0x08, 0xf9, 0xbc, 0x18, 0x98, 0x73, 0x02, 0xba, 0xba, 0x20, 0x90, 0xba, 0x10, 0x41, 0x05, 0x63, - 0x91, 0x29, 0x24, 0x90, 0x8a, 0x34, 0xf8, 0x0b, 0x92, 0xba, 0x1a, 0x91, 0x12, 0x5b, 0xb4, 0x9d, - 0x8b, 0x13, 0x29, 0x16, 0x88, 0xeb, 0x29, 0x64, 0x02, 0x80, 0xaa, 0x98, 0x11, 0x72, 0x04, 0x99, - 0x08, 0x09, 0x01, 0xeb, 0x88, 0x0a, 0x04, 0xab, 0x89, 0xb8, 0x38, 0x03, 0xf9, 0x1c, 0x82, 0x73, - 0x12, 0xcb, 0xaa, 0x88, 0x51, 0xc1, 0x0a, 0x32, 0xb8, 0xa9, 0x0e, 0x36, 0x03, 0x10, 0x91, 0xa9, - 0x09, 0xfb, 0xcb, 0xab, 0x18, 0x88, 0x31, 0x22, 0x53, 0xfa, 0x9f, 0x10, 0x12, 0x81, 0x00, 0x20, - 0x35, 0x12, 0x80, 0xbb, 0x58, 0x83, 0x89, 0xad, 0x08, 0x91, 0xbf, 0x11, 0x11, 0xb8, 0xaa, 0x52, - 0x02, 0xd9, 0x9b, 0x53, 0xd8, 0x58, 0x15, 0x98, 0x89, 0x98, 0x29, 0x93, 0x0a, 0x32, 0xf9, 0x3b, - 0x17, 0xa1, 0x89, 0x11, 0xa0, 0xcf, 0x20, 0x43, 0x91, 0xea, 0x9b, 0x01, 0x11, 0x82, 0xb9, 0x9c, - 0x88, 0x41, 0xc0, 0x49, 0x02, 0x13, 0x73, 0x02, 0x00, 0xa8, 0x29, 0xfa, 0x0c, 0x30, 0x81, 0x90, - 0xce, 0x19, 0x01, 0x18, 0x98, 0xa8, 0xae, 0x09, 0x98, 0x30, 0x40, 0x15, 0x18, 0xa1, 0x50, 0x25, - 0x80, 0xa8, 0x72, 0xb0, 0xcb, 0x1a, 0x35, 0xa0, 0x42, 0xc9, 0x8a, 0x89, 0x51, 0x14, 0x80, 0xcc, - 0x88, 0x21, 0x00, 0xca, 0x28, 0x12, 0x23, 0x30, 0x37, 0xca, 0x9a, 0x20, 0xb0, 0x30, 0x90, 0xba, - 0xaa, 0xcf, 0xad, 0x80, 0x2b, 0x05, 0xca, 0x29, 0xd0, 0xab, 0x0a, 0x01, 0x19, 0x92, 0x73, 0x17, - 0x00, 0xab, 0x31, 0x42, 0x26, 0x90, 0x89, 0x00, 0x32, 0x00, 0xc8, 0xbb, 0x0a, 0x98, 0xf9, 0x8e, - 0x11, 0xa9, 0x89, 0x91, 0x09, 0xb8, 0xfb, 0x1b, 0x37, 0x23, 0xc8, 0x09, 0x41, 0x82, 0x80, 0x22, - 0x31, 0x15, 0x21, 0xd0, 0x9e, 0x01, 0xcb, 0x89, 0xaa, 0x52, 0x16, 0xc9, 0x9a, 0xcb, 0x19, 0x02, - 0x11, 0x24, 0x90, 0x29, 0xb0, 0x89, 0x72, 0x84, 0x22, 0x72, 0x82, 0xa9, 0xab, 0x9b, 0x01, 0xdb, - 0x08, 0x00, 0x24, 0xca, 0xad, 0xba, 0x51, 0xdb, 0x20, 0x11, 0x44, 0xc0, 0x19, 0x02, 0x31, 0x23, - 0xd0, 0x9d, 0x50, 0x13, 0xca, 0x18, 0xa8, 0x29, 0xa3, 0xad, 0x9a, 0x10, 0x20, 0x02, 0x37, 0xbb, - 0x22, 0xa8, 0x90, 0x9f, 0x00, 0x38, 0x77, 0x82, 0x9a, 0xa9, 0x30, 0x92, 0x9b, 0x13, 0xeb, 0xac, - 0x9a, 0x53, 0x80, 0x20, 0xc9, 0x8a, 0x31, 0x24, 0x42, 0x02, 0xb9, 0xaf, 0x80, 0x39, 0x13, 0xd9, - 0xbd, 0xbb, 0x99, 0x73, 0x15, 0x08, 0x00, 0x02, 0x98, 0x88, 0x0a, 0x27, 0xb8, 0x6a, 0x04, 0x09, - 0xa1, 0x0a, 0x33, 0xb1, 0xaf, 0xaa, 0xcb, 0x28, 0x03, 0xfa, 0xaa, 0xbb, 0x31, 0x32, 0x27, 0x00, - 0xa0, 0x9b, 0x70, 0x24, 0x02, 0x90, 0xbb, 0x11, 0x48, 0x83, 0x9a, 0x62, 0xd8, 0xbd, 0x8a, 0x14, - 0xb0, 0x9b, 0x22, 0x81, 0xb0, 0x20, 0xbd, 0x54, 0x10, 0x23, 0x32, 0x81, 0x53, 0x21, 0xda, 0x48, - 0x27, 0xa8, 0x89, 0xa8, 0xbe, 0x89, 0x18, 0xa1, 0xad, 0x42, 0x02, 0xa9, 0xb9, 0xac, 0xb8, 0x79, - 0x92, 0xb9, 0x48, 0x25, 0x20, 0xc0, 0x0b, 0x61, 0x15, 0x81, 0x08, 0x80, 0xaa, 0x8b, 0x11, 0x03, - 0xcf, 0x08, 0x81, 0xa8, 0xbc, 0x8a, 0xd8, 0x8a, 0xaa, 0x29, 0x47, 0x12, 0xb0, 0xac, 0x0b, 0x46, - 0x81, 0x18, 0x12, 0x31, 0xa0, 0x1a, 0x17, 0xca, 0x18, 0x41, 0x14, 0xbb, 0xac, 0x98, 0xaf, 0x12, - 0xba, 0x08, 0x42, 0x02, 0x00, 0xec, 0x29, 0x02, 0x08, 0x21, 0x33, 0x52, 0x13, 0x24, 0xcc, 0x89, - 0x51, 0x33, 0x91, 0x0b, 0x26, 0x90, 0xba, 0xbf, 0x00, 0x88, 0x89, 0x88, 0xbd, 0xac, 0xb9, 0x8c, - 0x93, 0x8c, 0x82, 0xbb, 0x61, 0x82, 0xbc, 0x1a, 0x66, 0x24, 0x00, 0x01, 0x99, 0x31, 0xa2, 0x0b, - 0x12, 0xb9, 0x88, 0xbd, 0x08, 0xb1, 0x0b, 0x81, 0xff, 0xaa, 0x99, 0x9b, 0xa8, 0xbc, 0x0b, 0x45, - 0x45, 0x12, 0x11, 0x10, 0x12, 0x12, 0x79, 0x34, 0x82, 0x8a, 0xea, 0xac, 0x08, 0x9a, 0x30, 0x82, - 0xa9, 0xab, 0xb8, 0xbf, 0x11, 0xe9, 0x89, 0x9a, 0x31, 0x36, 0x33, 0x32, 0x02, 0x80, 0x2a, 0x04, - 0x19, 0x23, 0xef, 0x89, 0x38, 0x23, 0x31, 0xfc, 0x1e, 0x12, 0x80, 0xa9, 0xca, 0x9b, 0x21, 0xb1, - 0x9e, 0x98, 0x41, 0x14, 0x99, 0xa9, 0x9b, 0x71, 0x17, 0xa8, 0x99, 0x90, 0x30, 0x04, 0x00, 0x19, - 0x04, 0x08, 0xa8, 0x88, 0x80, 0x51, 0xc8, 0x89, 0xdb, 0x2a, 0x17, 0xd9, 0x8b, 0x81, 0x18, 0x21, - 0x02, 0xa0, 0x8c, 0x03, 0x2a, 0x37, 0x00, 0x55, 0x33, 0x01, 0xca, 0x8a, 0x00, 0x12, 0xae, 0x88, - 0x19, 0x81, 0xf8, 0x0d, 0xa9, 0xba, 0x40, 0x02, 0xb8, 0x8d, 0x80, 0xa9, 0x28, 0x12, 0x45, 0x02, - 0xa9, 0x81, 0x1e, 0x47, 0x13, 0x18, 0x91, 0xba, 0xae, 0x8a, 0x21, 0xa8, 0xbe, 0xb9, 0x28, 0x04, - 0x99, 0x31, 0xb8, 0x0c, 0x35, 0x21, 0x14, 0x90, 0xac, 0x91, 0x0c, 0x61, 0x04, 0x8a, 0x12, 0xbc, - 0x20, 0x63, 0x13, 0xba, 0xab, 0x2b, 0x27, 0xab, 0x99, 0xc9, 0x20, 0x1a, 0x47, 0x42, 0xa0, 0x99, - 0x8a, 0x21, 0xa1, 0x1b, 0x04, 0x89, 0x35, 0xda, 0x09, 0x13, 0x0b, 0xf9, 0x2c, 0x13, 0x29, 0x02, - 0x00, 0x9b, 0xc8, 0x4b, 0xc2, 0x9b, 0x60, 0x93, 0xfa, 0x9f, 0x00, 0x31, 0x02, 0xbb, 0xcb, 0x9b, - 0x18, 0x33, 0xca, 0x00, 0x29, 0xf1, 0x3a, 0x15, 0xca, 0x0a, 0x80, 0x73, 0x85, 0x18, 0x22, 0x90, - 0x00, 0x10, 0x23, 0xcd, 0xa9, 0x9d, 0x41, 0x02, 0xe9, 0x8b, 0x11, 0x99, 0x80, 0x9a, 0x08, 0x64, - 0x23, 0xc9, 0x48, 0x33, 0x02, 0x32, 0x14, 0xab, 0x18, 0x27, 0xda, 0xac, 0xb0, 0x2a, 0x93, 0x28, - 0x14, 0x10, 0xb0, 0xcd, 0x99, 0xbb, 0x40, 0x13, 0x08, 0x01, 0x80, 0x30, 0xfb, 0xff, 0x09, 0x88, - 0x21, 0x43, 0x90, 0x20, 0x13, 0xd8, 0x2b, 0x83, 0xdc, 0x29, 0x12, 0x32, 0xa1, 0x8e, 0x90, 0x9b, - 0x01, 0xec, 0xbc, 0x89, 0x00, 0x21, 0xb9, 0x70, 0x25, 0x01, 0x80, 0x18, 0x43, 0x08, 0x82, 0x39, - 0x33, 0x25, 0x08, 0x00, 0xa8, 0xbb, 0x39, 0xa3, 0x9f, 0x93, 0xcf, 0xbb, 0x08, 0xbb, 0xa0, 0x3a, - 0xf2, 0x9a, 0x1a, 0x83, 0x70, 0x36, 0x10, 0x90, 0x89, 0x73, 0x12, 0xb1, 0x8b, 0xea, 0x08, 0x98, - 0x29, 0xb2, 0xed, 0x2a, 0x02, 0x41, 0x02, 0xa9, 0x99, 0xcf, 0x8a, 0x91, 0x20, 0x00, 0xc9, 0x38, - 0x32, 0x37, 0xa0, 0x59, 0x24, 0x91, 0x9a, 0x99, 0xbb, 0xac, 0xbd, 0x98, 0x98, 0x8b, 0x24, 0x15, - 0xbb, 0x11, 0x61, 0x23, 0x11, 0x10, 0x92, 0x4a, 0x22, 0x47, 0x18, 0x99, 0x45, 0x91, 0x40, 0x13, - 0xdb, 0xad, 0x9a, 0x40, 0x80, 0x88, 0x48, 0x02, 0x88, 0xc9, 0xac, 0x10, 0x98, 0x33, 0x74, 0x82, - 0xb9, 0x5a, 0x83, 0xb9, 0xad, 0xcc, 0x18, 0x12, 0x80, 0xcf, 0x89, 0x08, 0x11, 0x82, 0x0b, 0x34, - 0x91, 0xca, 0x9b, 0x35, 0x33, 0x81, 0x90, 0xbd, 0x19, 0x25, 0xa2, 0x0d, 0x24, 0x28, 0x93, 0xcd, - 0x1a, 0x10, 0x20, 0x46, 0x01, 0x32, 0x05, 0xbc, 0x99, 0x33, 0x11, 0xd0, 0xac, 0x8c, 0x24, 0xa0, - 0xbc, 0x19, 0xa0, 0x8c, 0x23, 0xa8, 0x1a, 0x47, 0x00, 0x42, 0xd0, 0x8b, 0x53, 0x10, 0x02, 0xb0, - 0x9d, 0x90, 0x18, 0x01, 0xea, 0xaa, 0x88, 0xc9, 0x8c, 0x43, 0xd8, 0x9a, 0x22, 0x81, 0x19, 0x36, - 0x00, 0x12, 0x82, 0x1a, 0xa1, 0x32, 0xfc, 0x8f, 0x01, 0x00, 0x08, 0x88, 0x82, 0x8b, 0x9a, 0x91, - 0xff, 0x1a, 0x83, 0x89, 0x30, 0x82, 0x61, 0x34, 0xa0, 0xbc, 0x70, 0x82, 0x08, 0x02, 0x09, 0x83, - 0x9d, 0x30, 0x92, 0x3a, 0x90, 0x9a, 0x32, 0xfb, 0x5b, 0x83, 0x9b, 0x62, 0xa1, 0x1b, 0x03, 0xcf, - 0x8b, 0x31, 0x11, 0x81, 0xcc, 0x2b, 0x95, 0x9b, 0x33, 0x23, 0x83, 0xaf, 0x00, 0xcd, 0x9b, 0x30, - 0x02, 0x81, 0x19, 0x22, 0xfc, 0x3a, 0x15, 0xa1, 0xab, 0xbb, 0x18, 0x00, 0x75, 0x82, 0x31, 0xa9, - 0x28, 0x27, 0xb8, 0xab, 0x89, 0x88, 0x80, 0x22, 0x99, 0x38, 0x37, 0xc8, 0x18, 0x14, 0x08, 0xff, - 0x19, 0x32, 0x90, 0x31, 0xa1, 0x0a, 0xfa, 0x9a, 0x11, 0x30, 0x27, 0x80, 0xb8, 0xae, 0x08, 0x22, - 0x99, 0x31, 0x13, 0x50, 0x13, 0x91, 0xb9, 0x9d, 0x25, 0xb8, 0x9d, 0xba, 0x38, 0x02, 0x22, 0x45, - 0xd1, 0xae, 0x9a, 0x08, 0x00, 0x42, 0x02, 0x10, 0xa0, 0x9d, 0x91, 0x18, 0x98, 0x21, 0xf8, 0xbc, - 0x1b, 0xb9, 0x11, 0xad, 0x99, 0x63, 0x81, 0x63, 0x81, 0x19, 0x16, 0x08, 0xb8, 0x61, 0x01, 0x01, - 0x11, 0x11, 0x02, 0xfa, 0xaa, 0xbb, 0x53, 0x81, 0x9a, 0xaa, 0x89, 0x9b, 0x30, 0x16, 0x51, 0x02, - 0x52, 0x22, 0x01, 0x24, 0xbb, 0x10, 0x40, 0x13, 0x38, 0xb2, 0xff, 0x39, 0xa3, 0xac, 0xeb, 0x09, - 0x02, 0xb9, 0xab, 0xc9, 0x0b, 0x14, 0xdf, 0x09, 0x80, 0x30, 0x82, 0x10, 0xb8, 0xac, 0x72, 0x37, - 0x02, 0x99, 0x00, 0x98, 0x20, 0xa1, 0xbd, 0xbb, 0x1a, 0x23, 0x01, 0xcf, 0xb9, 0x0b, 0xeb, 0x39, - 0x26, 0xb8, 0xbb, 0x09, 0x28, 0x35, 0x51, 0x13, 0x08, 0x31, 0x81, 0x22, 0x51, 0x02, 0xb8, 0x39, - 0xda, 0xa9, 0xac, 0x74, 0x81, 0x30, 0x81, 0x19, 0xf0, 0x1a, 0x18, 0x23, 0xb8, 0xdc, 0x2a, 0x23, - 0xb2, 0x4a, 0x01, 0x67, 0x80, 0xa9, 0x9b, 0x09, 0x24, 0x08, 0x91, 0xbe, 0x0a, 0x80, 0xaa, 0xb8, - 0xcf, 0x20, 0x01, 0xd9, 0xcb, 0x1a, 0x33, 0x20, 0xa2, 0xae, 0x8a, 0x44, 0x81, 0x89, 0xd9, 0x1a, - 0x33, 0x45, 0x00, 0x18, 0xc8, 0x18, 0x01, 0x02, 0xeb, 0xab, 0x39, 0x37, 0x21, 0xa1, 0x9c, 0xab, - 0x38, 0x92, 0x78, 0xa2, 0xaa, 0x0a, 0xe0, 0x0a, 0x21, 0x22, 0x43, 0x33, 0x15, 0x60, 0x14, 0x18, - 0x22, 0x12, 0x11, 0xcb, 0xbc, 0x39, 0x92, 0xdc, 0xaa, 0x9a, 0x02, 0xdc, 0x8c, 0x41, 0x01, 0x11, - 0x81, 0xac, 0xa9, 0x70, 0x22, 0x24, 0x01, 0xfb, 0x9b, 0xa8, 0x19, 0x42, 0xc0, 0xac, 0xaa, 0xac, - 0x08, 0x34, 0xb8, 0x2a, 0x33, 0xd1, 0xae, 0x11, 0x11, 0x01, 0x00, 0xfc, 0x9c, 0x10, 0xa9, 0x9a, - 0x63, 0x14, 0x88, 0x31, 0x93, 0x0c, 0x81, 0x41, 0x11, 0x82, 0x41, 0x28, 0x95, 0xac, 0xbb, 0x72, - 0x15, 0x88, 0x08, 0x12, 0xc8, 0x89, 0x39, 0x37, 0x00, 0x80, 0x81, 0x40, 0x02, 0x93, 0xcf, 0x88, - 0x98, 0x9a, 0x9b, 0x13, 0x8a, 0xf0, 0x9c, 0x99, 0x9a, 0x09, 0x44, 0x33, 0xc0, 0xbd, 0x28, 0x43, - 0x32, 0x26, 0x80, 0xda, 0xa9, 0x09, 0x23, 0xda, 0xbb, 0xbb, 0x2a, 0x37, 0x00, 0xb9, 0x1c, 0x03, - 0xd9, 0xad, 0x00, 0x21, 0x89, 0x13, 0x48, 0x15, 0x98, 0x09, 0x36, 0xb0, 0x19, 0x43, 0x08, 0x27, - 0x98, 0xdb, 0x09, 0x18, 0x02, 0xa9, 0x99, 0x60, 0xb2, 0x8d, 0x31, 0xa1, 0x30, 0x99, 0xb9, 0x73, - 0x26, 0x01, 0x20, 0xc1, 0xad, 0x21, 0x25, 0x12, 0x21, 0xa8, 0x8a, 0x08, 0xfa, 0x9d, 0x99, 0xab, - 0x80, 0x9b, 0xa1, 0xbf, 0x9b, 0x32, 0xdb, 0x38, 0x81, 0x22, 0x38, 0xa3, 0xad, 0x49, 0x47, 0x11, - 0xba, 0x73, 0x14, 0x00, 0x88, 0xbb, 0x81, 0xbc, 0x28, 0x82, 0xb9, 0x1b, 0x96, 0x98, 0xbe, 0x91, - 0xbc, 0x00, 0x11, 0x88, 0x91, 0x2b, 0x35, 0x27, 0xa9, 0x22, 0x25, 0x01, 0x22, 0x91, 0x00, 0x1a, - 0xd3, 0x0e, 0x42, 0xa1, 0x0c, 0xb2, 0xac, 0xac, 0xa9, 0x09, 0x03, 0xdd, 0x1a, 0x63, 0x83, 0xa9, - 0x0b, 0x24, 0x24, 0x10, 0x88, 0x19, 0x14, 0x29, 0x57, 0x12, 0xdd, 0x09, 0x31, 0x12, 0x08, 0xa8, - 0x9b, 0x33, 0xfb, 0x88, 0x88, 0xcb, 0x39, 0xd1, 0xbd, 0x8d, 0x11, 0x21, 0xca, 0x8c, 0x32, 0x23, - 0x20, 0x47, 0x81, 0xaa, 0x08, 0x20, 0x83, 0x1b, 0x34, 0xe9, 0xaa, 0xdb, 0x19, 0x10, 0xa3, 0xbf, - 0x9a, 0x53, 0x23, 0xa8, 0xca, 0x0b, 0x02, 0x20, 0x10, 0x27, 0xba, 0x48, 0x24, 0x90, 0xad, 0x10, - 0x41, 0x02, 0x54, 0x12, 0xb9, 0x19, 0xa8, 0xed, 0x9b, 0x30, 0x24, 0x00, 0x99, 0xc9, 0x99, 0x88, - 0x01, 0xdb, 0x30, 0x30, 0x47, 0x81, 0x41, 0x33, 0x02, 0x00, 0x81, 0xaa, 0xef, 0x0a, 0xa0, 0x8b, - 0x08, 0xc8, 0x8c, 0x99, 0xda, 0x4b, 0x24, 0xa0, 0x89, 0x11, 0x32, 0xc1, 0x9b, 0x89, 0x61, 0xa3, - 0xaf, 0x12, 0x10, 0x23, 0x44, 0xb8, 0xbc, 0x09, 0xb9, 0x64, 0x01, 0xa9, 0x58, 0xd0, 0x9a, 0x19, - 0x02, 0x31, 0x02, 0x90, 0x1b, 0x27, 0x23, 0x99, 0xa9, 0x4b, 0x47, 0x80, 0xaa, 0x29, 0x04, 0xcd, - 0x0b, 0x22, 0x10, 0xb9, 0x3a, 0x16, 0x02, 0x31, 0xd0, 0x8b, 0xb8, 0x89, 0xfb, 0x0a, 0x83, 0x8b, - 0xf8, 0x3a, 0x83, 0x70, 0x01, 0xa0, 0xad, 0x8a, 0x12, 0x8a, 0x47, 0x82, 0x89, 0x10, 0x53, 0x82, - 0xbd, 0x8a, 0x01, 0x18, 0x21, 0x02, 0xfa, 0x8f, 0x81, 0x99, 0xa9, 0x2a, 0x14, 0x88, 0x88, 0x9a, - 0x43, 0x91, 0x59, 0x16, 0xb9, 0x19, 0x53, 0x15, 0x99, 0x91, 0xcd, 0x38, 0x01, 0xa8, 0x30, 0x25, - 0x90, 0xba, 0xbb, 0x50, 0x02, 0xdc, 0x8c, 0x10, 0x01, 0xa9, 0x21, 0x23, 0x21, 0xa8, 0x73, 0x06, - 0x09, 0x13, 0x19, 0x25, 0x36, 0x01, 0xca, 0xaa, 0x09, 0x10, 0xeb, 0x08, 0xa8, 0xce, 0x8a, 0xaa, - 0x80, 0x28, 0x80, 0xb8, 0x8d, 0x13, 0x9b, 0x47, 0xa1, 0x09, 0x84, 0x1b, 0x26, 0x90, 0x18, 0x01, - 0x33, 0x82, 0x6b, 0x07, 0x99, 0x89, 0xb9, 0x8a, 0x20, 0xa0, 0xdf, 0x9c, 0x21, 0x03, 0x0a, 0xb1, - 0x8a, 0x09, 0x53, 0x04, 0x19, 0x24, 0x23, 0xfb, 0x19, 0x81, 0xa9, 0x72, 0x15, 0x01, 0xa0, 0xaa, - 0x39, 0x27, 0x90, 0xab, 0x08, 0x00, 0xdb, 0x08, 0x12, 0xa8, 0xea, 0x0a, 0x98, 0xa8, 0xce, 0xaa, - 0x20, 0x35, 0xa2, 0x19, 0x55, 0xb0, 0x48, 0x03, 0x10, 0x91, 0x9b, 0x54, 0x21, 0x06, 0xab, 0xbb, - 0x9c, 0x01, 0xac, 0x88, 0x99, 0x19, 0xe0, 0xae, 0x8a, 0x43, 0xa1, 0x18, 0x35, 0xc8, 0x9b, 0x10, - 0x10, 0x44, 0x32, 0x92, 0x19, 0xb0, 0x1b, 0x81, 0xcc, 0x21, 0xac, 0x74, 0x13, 0x9a, 0xb9, 0x4a, - 0x26, 0xa0, 0xab, 0x1a, 0x47, 0x80, 0xa8, 0xbc, 0xab, 0x30, 0x43, 0x81, 0xfb, 0x8a, 0x21, 0x11, - 0x02, 0xba, 0x0a, 0x33, 0x77, 0x04, 0x88, 0x80, 0x99, 0x8a, 0x02, 0x61, 0x13, 0xe9, 0x8a, 0x98, - 0x80, 0xa9, 0xbb, 0xa8, 0xbd, 0x0a, 0x75, 0x83, 0x89, 0x88, 0x82, 0xbc, 0xdc, 0x39, 0x34, 0x23, - 0x08, 0xb0, 0x1c, 0xd8, 0x28, 0x12, 0x91, 0x19, 0x51, 0x15, 0xa9, 0x19, 0xf9, 0x0b, 0x12, 0x91, - 0x9e, 0x10, 0xa0, 0xbe, 0x1a, 0x01, 0x11, 0x98, 0xc8, 0x48, 0x13, 0x73, 0x81, 0xca, 0x19, 0x33, - 0x10, 0x35, 0xb9, 0x38, 0x03, 0x10, 0x37, 0x92, 0xce, 0x09, 0x12, 0x88, 0x88, 0x99, 0x0b, 0x27, - 0x99, 0xd0, 0xad, 0x09, 0xb0, 0x18, 0x83, 0xcf, 0x28, 0x32, 0x12, 0x91, 0xab, 0x29, 0x77, 0x04, - 0xa8, 0x09, 0x11, 0x32, 0xa1, 0x1b, 0xc1, 0x9a, 0x8a, 0x14, 0xde, 0x99, 0xa8, 0xa9, 0x08, 0xd9, - 0x9c, 0x21, 0x82, 0x9a, 0x65, 0x12, 0x81, 0xba, 0x08, 0x11, 0x54, 0x24, 0x81, 0x80, 0x29, 0x37, - 0x98, 0xaa, 0x0a, 0x88, 0xfa, 0x9d, 0x99, 0x9b, 0x30, 0xb1, 0xbd, 0x09, 0x30, 0x26, 0x81, 0x89, - 0x20, 0x11, 0x55, 0x13, 0x10, 0xc8, 0x72, 0x84, 0x8a, 0xb9, 0x09, 0x31, 0x27, 0xba, 0x89, 0xba, - 0x89, 0x99, 0x90, 0xb9, 0xab, 0xbc, 0x76, 0x82, 0x99, 0x00, 0x89, 0x43, 0x01, 0x9a, 0x24, 0x38, - 0x36, 0x05, 0x9a, 0x02, 0xba, 0x99, 0x58, 0x14, 0x89, 0xea, 0xac, 0x28, 0x91, 0x08, 0x91, 0xae, - 0x8a, 0xbb, 0x0a, 0x91, 0xcf, 0xbc, 0x38, 0x24, 0x11, 0x01, 0x98, 0x30, 0x25, 0x53, 0x34, 0x90, - 0x11, 0xfc, 0x18, 0xb0, 0x9d, 0x18, 0x98, 0x11, 0x9b, 0x88, 0xaa, 0xdb, 0x0b, 0x37, 0x01, 0x28, - 0x33, 0x28, 0x33, 0x64, 0x03, 0x18, 0x43, 0x35, 0x03, 0xbe, 0x28, 0x45, 0xb1, 0x8a, 0x19, 0xc8, - 0x0b, 0x82, 0x9a, 0xf9, 0x9e, 0x01, 0xa8, 0x09, 0x11, 0x04, 0x89, 0x11, 0x41, 0x82, 0x48, 0x35, - 0x83, 0xad, 0xbb, 0x31, 0x02, 0x8b, 0x27, 0x01, 0x98, 0xb9, 0xdf, 0x9a, 0xaa, 0xcb, 0xdb, 0x89, - 0x30, 0x15, 0x98, 0x88, 0xa0, 0x68, 0x25, 0x81, 0x08, 0xa9, 0x51, 0x23, 0x12, 0xaa, 0xc9, 0x9c, - 0x41, 0x25, 0xc9, 0x0a, 0x23, 0xc9, 0x9b, 0x29, 0x82, 0xaa, 0x10, 0x09, 0x64, 0x16, 0xda, 0x18, - 0x24, 0x80, 0x08, 0x10, 0x42, 0x23, 0xa9, 0x00, 0xab, 0xa0, 0xdc, 0x8e, 0x24, 0x10, 0xb2, 0xbf, - 0x1a, 0x02, 0x08, 0xb9, 0x9d, 0x01, 0xb8, 0xae, 0x72, 0xa0, 0x0a, 0x01, 0x99, 0x08, 0x21, 0x41, - 0x93, 0xd9, 0x1b, 0x47, 0xb0, 0x9c, 0x11, 0x21, 0x23, 0xda, 0x88, 0xbd, 0x48, 0x14, 0x12, 0xda, - 0x9a, 0x99, 0x28, 0xa8, 0x33, 0xc9, 0x48, 0x92, 0x2b, 0x16, 0x53, 0x82, 0xda, 0x8a, 0x31, 0xa1, - 0x49, 0x15, 0x9a, 0x10, 0x13, 0x11, 0x09, 0xd1, 0x79, 0x14, 0x11, 0xc9, 0xbb, 0x9c, 0x64, 0x92, - 0xbb, 0x18, 0x01, 0xd9, 0x8b, 0x98, 0x29, 0x37, 0x32, 0x25, 0x99, 0xbc, 0x8a, 0x20, 0x16, 0xba, - 0x9a, 0xbc, 0x0b, 0x01, 0x18, 0xf0, 0xad, 0x89, 0x10, 0x12, 0x41, 0xd1, 0x9c, 0x31, 0x45, 0x12, - 0xba, 0xb9, 0x19, 0x11, 0x12, 0x91, 0x8d, 0xc9, 0x38, 0xb0, 0xcb, 0x60, 0x84, 0x0a, 0x80, 0x30, - 0x42, 0x12, 0x33, 0x92, 0x59, 0x27, 0x20, 0x12, 0x89, 0x00, 0x11, 0xa0, 0xed, 0x0a, 0x20, 0x65, - 0x12, 0xcb, 0xbb, 0x20, 0x21, 0x03, 0xcd, 0x89, 0x89, 0x89, 0x91, 0x9c, 0xc9, 0x38, 0x05, 0x0b, - 0x16, 0x90, 0x1b, 0x47, 0x02, 0xeb, 0x99, 0x99, 0x99, 0x09, 0x42, 0xd8, 0x9b, 0x98, 0x1a, 0x23, - 0x54, 0x92, 0x30, 0x13, 0xac, 0x11, 0xdb, 0xcb, 0x19, 0xaa, 0x18, 0x33, 0xb9, 0xfb, 0x1a, 0x02, - 0xbb, 0xac, 0x73, 0x15, 0x80, 0x22, 0x00, 0x31, 0x36, 0x01, 0x62, 0x02, 0x10, 0x90, 0xad, 0x10, - 0x61, 0x26, 0x88, 0x99, 0x08, 0x80, 0xb0, 0xbb, 0xde, 0x0a, 0x43, 0x02, 0x89, 0x90, 0x09, 0x02, - 0x01, 0xea, 0x09, 0x9a, 0x34, 0xf9, 0x9d, 0x00, 0x22, 0xb9, 0x39, 0x94, 0xad, 0x20, 0x12, 0xf8, - 0x9b, 0xbc, 0x9c, 0x18, 0x10, 0x11, 0x00, 0x99, 0x43, 0x82, 0x1a, 0x77, 0x03, 0x99, 0xa9, 0x38, - 0xa4, 0x2b, 0x26, 0x98, 0xaa, 0x89, 0x31, 0x02, 0xfd, 0x8a, 0x32, 0x23, 0x00, 0xc9, 0x29, 0x35, - 0xb2, 0x30, 0x15, 0xc9, 0x9b, 0x00, 0xbb, 0x30, 0x65, 0xc1, 0x9c, 0x89, 0x30, 0x45, 0x92, 0xaa, - 0xba, 0xbb, 0x74, 0x14, 0x11, 0x99, 0x19, 0x98, 0x01, 0x99, 0xc9, 0x28, 0xa3, 0xaf, 0x80, 0x9d, - 0x01, 0x9a, 0x89, 0xa9, 0x22, 0xf9, 0x0b, 0x23, 0x00, 0x3a, 0xb5, 0x0f, 0x45, 0x92, 0x9b, 0x28, - 0x35, 0xb8, 0x19, 0x90, 0xec, 0xaa, 0xaa, 0x08, 0x10, 0x31, 0x35, 0xb8, 0x0c, 0x10, 0x92, 0x8d, - 0x22, 0x98, 0x22, 0xbc, 0xb9, 0x72, 0x23, 0x34, 0x02, 0x51, 0x92, 0x40, 0xf8, 0xcb, 0x2a, 0x35, - 0xb8, 0xac, 0x08, 0x43, 0x43, 0x11, 0x02, 0x89, 0x01, 0x0a, 0x54, 0x83, 0xcf, 0xbb, 0x09, 0x28, - 0x05, 0x89, 0x12, 0xb9, 0x2a, 0x15, 0xba, 0x89, 0xba, 0x21, 0x64, 0x11, 0x22, 0x09, 0x44, 0x33, - 0x90, 0xc8, 0x9e, 0x09, 0x12, 0x98, 0xed, 0xbc, 0xaa, 0x9a, 0x10, 0x32, 0x80, 0x53, 0x12, 0x92, - 0x2b, 0x23, 0x77, 0xa2, 0x89, 0xaa, 0xd9, 0x38, 0xc8, 0x9a, 0x19, 0x62, 0x82, 0x89, 0xd9, 0x2a, - 0x82, 0x73, 0x82, 0xa9, 0x2b, 0x47, 0x81, 0x99, 0x09, 0xa8, 0x9b, 0x39, 0x26, 0x12, 0x90, 0xda, - 0x9a, 0x98, 0x61, 0x04, 0xa9, 0x10, 0xa8, 0x8b, 0x51, 0x35, 0x90, 0xcb, 0x30, 0x80, 0xc0, 0x0b, - 0xc9, 0x21, 0x92, 0xa9, 0x2a, 0xb5, 0xbf, 0x09, 0x98, 0x73, 0x04, 0x89, 0xa9, 0x8b, 0x90, 0x0b, - 0x65, 0x34, 0x02, 0x9a, 0x10, 0x32, 0xb8, 0xce, 0x09, 0x81, 0x11, 0xfa, 0xab, 0xbb, 0x29, 0x43, - 0xc9, 0x68, 0xa1, 0xbc, 0x1a, 0x53, 0x14, 0xca, 0x9a, 0x89, 0x20, 0x21, 0x36, 0x81, 0xb0, 0x9d, - 0x99, 0x88, 0x12, 0x54, 0x82, 0x9a, 0x99, 0x98, 0x9a, 0x66, 0x03, 0xca, 0x9b, 0x20, 0x12, 0x73, - 0x04, 0x10, 0x92, 0x8c, 0x53, 0x81, 0x89, 0xb0, 0x2a, 0x82, 0x98, 0x1a, 0x12, 0x94, 0xef, 0xab, - 0x99, 0x99, 0x00, 0x99, 0x51, 0xb0, 0x50, 0x13, 0x33, 0x81, 0x9a, 0xfb, 0x5a, 0x81, 0x00, 0x9a, - 0xfb, 0x8c, 0x10, 0x01, 0x19, 0x15, 0xab, 0x08, 0xca, 0x8b, 0x12, 0xcb, 0xbc, 0x29, 0x25, 0xbd, - 0x11, 0x89, 0x30, 0x04, 0x73, 0xa3, 0x9d, 0x52, 0x33, 0x03, 0x89, 0x21, 0xd8, 0x9b, 0x0a, 0x32, - 0x21, 0xa0, 0xfd, 0x9b, 0xa8, 0xbc, 0x40, 0x81, 0x10, 0x18, 0x44, 0x11, 0x21, 0xda, 0x8b, 0x72, - 0x24, 0x21, 0x01, 0x53, 0x02, 0x10, 0xa8, 0xbb, 0xcd, 0x28, 0x35, 0x81, 0xba, 0xbf, 0x89, 0xb9, - 0xab, 0x88, 0x10, 0xc9, 0x99, 0xbb, 0xcf, 0x0a, 0x19, 0x11, 0x32, 0x55, 0x12, 0xfb, 0x8b, 0x21, - 0x22, 0x14, 0x81, 0xc9, 0x28, 0x63, 0x82, 0x08, 0xba, 0xad, 0x88, 0x9a, 0x31, 0xc2, 0xbd, 0x8a, - 0x41, 0x33, 0x82, 0x0b, 0x44, 0x02, 0x53, 0x92, 0x0c, 0xa1, 0x8c, 0x21, 0x55, 0x23, 0x08, 0x81, - 0x9a, 0xc9, 0xbb, 0x20, 0xee, 0xaa, 0xba, 0xac, 0x80, 0x09, 0x34, 0x08, 0x01, 0x39, 0x57, 0x11, - 0x80, 0x18, 0x22, 0x22, 0x01, 0xbe, 0x51, 0x34, 0x12, 0xd8, 0x9c, 0x08, 0x12, 0x32, 0xc0, 0xcf, - 0x8a, 0x22, 0x90, 0x20, 0x10, 0x91, 0xab, 0xdb, 0x0b, 0xa1, 0x28, 0x40, 0x37, 0x11, 0xa9, 0x82, - 0xaf, 0x21, 0x32, 0x34, 0x91, 0xef, 0x89, 0x81, 0x88, 0x99, 0x89, 0x21, 0x92, 0xbb, 0xae, 0x09, - 0x31, 0xa8, 0x52, 0x32, 0x12, 0xd9, 0xbe, 0x31, 0xb1, 0x0b, 0x37, 0x32, 0x13, 0x33, 0x45, 0x14, - 0x01, 0xea, 0x9a, 0xab, 0x19, 0x21, 0x32, 0xf8, 0xac, 0x89, 0x10, 0x13, 0xcb, 0x28, 0x13, 0x31, - 0x02, 0x40, 0x14, 0x88, 0x35, 0xc9, 0x1a, 0xf8, 0x8a, 0x21, 0x99, 0x73, 0x03, 0xd9, 0x9a, 0x80, - 0x10, 0x32, 0x13, 0xed, 0xbb, 0x08, 0x11, 0xea, 0x19, 0x90, 0x89, 0xa0, 0xae, 0x31, 0x81, 0xaa, - 0x72, 0x05, 0x08, 0x81, 0x89, 0x10, 0x32, 0xb4, 0xbf, 0x09, 0x42, 0x83, 0xab, 0x88, 0xa9, 0x0b, - 0x73, 0x34, 0x93, 0x0a, 0x73, 0x12, 0x21, 0xc8, 0xcd, 0x08, 0x98, 0x09, 0x32, 0x90, 0xcc, 0x70, - 0x13, 0x80, 0x8a, 0x18, 0x14, 0x98, 0x81, 0xc9, 0x9c, 0x81, 0xb9, 0xbd, 0x72, 0x92, 0xab, 0xb9, - 0x09, 0x24, 0xaa, 0x11, 0xca, 0x1b, 0x36, 0xa9, 0x41, 0xc9, 0x50, 0x12, 0x01, 0xaa, 0xca, 0x0a, - 0x31, 0x02, 0xb9, 0x2d, 0x77, 0x01, 0x81, 0x0a, 0x22, 0x89, 0xab, 0xda, 0xbe, 0x0a, 0x14, 0x00, - 0xd8, 0xbd, 0x28, 0x33, 0xb1, 0x8b, 0x88, 0x02, 0x98, 0xcb, 0x40, 0x37, 0x00, 0x33, 0x04, 0xcb, - 0x19, 0x73, 0x23, 0xa8, 0xbb, 0x19, 0x90, 0xaa, 0x00, 0x41, 0xc9, 0x21, 0xdf, 0x29, 0x36, 0x02, - 0xba, 0x99, 0x00, 0x30, 0x03, 0x0b, 0x36, 0xa1, 0x9c, 0x01, 0xaa, 0xbd, 0x8b, 0x99, 0xb9, 0xbf, - 0x89, 0x22, 0xfb, 0x08, 0x18, 0x26, 0x91, 0xab, 0xf9, 0x8b, 0x38, 0x26, 0x11, 0x00, 0x10, 0xa9, - 0xbb, 0xab, 0x22, 0xcb, 0x75, 0x13, 0x89, 0x89, 0x08, 0xa9, 0xb0, 0xae, 0x11, 0x51, 0x27, 0x01, - 0xcb, 0xaa, 0x38, 0x33, 0xb0, 0x0b, 0x43, 0x12, 0x52, 0xa2, 0xcb, 0x08, 0x22, 0x37, 0x92, 0x98, - 0x81, 0xac, 0xb8, 0xad, 0xbb, 0xb9, 0x91, 0xcd, 0xbc, 0x18, 0x01, 0x8a, 0x99, 0x9b, 0x73, 0xa1, - 0x40, 0x25, 0xa8, 0x00, 0x21, 0x11, 0x55, 0x82, 0x99, 0x19, 0xa8, 0x19, 0xcc, 0xbb, 0x01, 0x0b, - 0x04, 0x9d, 0x90, 0xda, 0x9a, 0xa9, 0x00, 0x32, 0x1a, 0x24, 0x31, 0xba, 0x19, 0x45, 0x01, 0x99, - 0x2a, 0x17, 0x19, 0x11, 0x21, 0x34, 0xb8, 0x9b, 0xdb, 0x09, 0x11, 0x33, 0x13, 0xa9, 0xcb, 0xcc, - 0x0b, 0x14, 0x18, 0xc8, 0x0a, 0x00, 0xda, 0xad, 0x89, 0x31, 0x22, 0x53, 0x33, 0x23, 0x52, 0x13, - 0xa9, 0x09, 0xac, 0x20, 0xa1, 0xbb, 0xb1, 0xcb, 0xbc, 0x8a, 0xba, 0x0a, 0x01, 0x51, 0x02, 0x89, - 0x10, 0x99, 0xbb, 0x29, 0x24, 0x32, 0x03, 0x09, 0x11, 0x31, 0x33, 0x01, 0x99, 0xa9, 0x19, 0x90, - 0x9a, 0x00, 0xbb, 0x3a, 0x33, 0x11, 0xba, 0x9a, 0x19, 0x99, 0x20, 0x01, 0x99, 0xab, 0x99, 0x31, - 0x12, 0x31, 0x13, 0x90, 0xa9, 0x19, 0x21, 0x90, 0x00, 0x01, 0x90, 0xa0, 0x99, 0x00, 0x00, 0x19, - 0x90, 0x99, 0x00, 0x09, 0x10, 0x11, 0x11, 0x90, 0x09, 0x10, 0x00, 0x09, 0x90, 0x00, 0x00, 0x70, - 0x02, 0x01, 0x0b, 0x7d, 0x0b, 0x02, 0x88, 0x05, 0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, - 0x77, 0xf8, 0x95, 0x2d, 0x80, 0xe4, 0x49, 0x48, 0xf2, 0x3b, 0x91, 0x43, 0xad, 0x91, 0x38, 0xb1, - 0x10, 0x93, 0x1e, 0x99, 0x87, 0x29, 0x9c, 0x04, 0x30, 0x9d, 0xb2, 0x29, 0x11, 0xc1, 0x5a, 0xa0, - 0x91, 0x3d, 0xa4, 0x11, 0x2b, 0xe8, 0x02, 0x0a, 0x0a, 0xa3, 0x33, 0x8f, 0xc3, 0x22, 0x2c, 0xb3, - 0x5a, 0x99, 0xc1, 0x5a, 0xc0, 0x11, 0x49, 0xbb, 0x86, 0x18, 0x8a, 0x97, 0x18, 0x89, 0xa9, 0x04, - 0x0a, 0xa8, 0x14, 0x0a, 0xb1, 0x59, 0x80, 0x93, 0x7a, 0x9a, 0xd3, 0x29, 0x1a, 0xb5, 0x39, 0x0a, - 0xb2, 0x21, 0x09, 0x68, 0xa2, 0x0a, 0x8a, 0x88, 0x8b, 0xe5, 0x68, 0x89, 0xc1, 0x51, 0x09, 0xb8, - 0x15, 0x5a, 0xd9, 0x00, 0x1a, 0x00, 0x00, 0x90, 0x2a, 0xa0, 0x52, 0x80, 0x80, 0x7a, 0xc1, 0x98, - 0x3a, 0xcc, 0x05, 0x39, 0x9b, 0x94, 0x10, 0x2b, 0x86, 0x19, 0x80, 0xc8, 0x1b, 0xb1, 0x18, 0x58, - 0xb9, 0x96, 0x58, 0x8b, 0x97, 0x20, 0x8a, 0xc2, 0x19, 0x8a, 0x90, 0x10, 0x11, 0xd8, 0x61, 0x99, - 0x04, 0x48, 0xba, 0xa6, 0x8a, 0x29, 0xe2, 0x20, 0x2b, 0xe2, 0x22, 0x8a, 0x11, 0x21, 0xa9, 0x81, - 0x9b, 0x8f, 0xc3, 0x48, 0x0b, 0xb6, 0x49, 0x19, 0xb2, 0x32, 0x3b, 0xd9, 0x93, 0x0f, 0x90, 0x11, - 0x8b, 0x94, 0x29, 0x19, 0xa6, 0x50, 0x19, 0xe0, 0x82, 0x1c, 0xb1, 0x81, 0x3b, 0xa2, 0xa0, 0x60, - 0x90, 0x14, 0x1a, 0xe3, 0x20, 0x9d, 0xb1, 0x22, 0x1d, 0xb0, 0x04, 0x5b, 0x98, 0x81, 0x51, 0x89, - 0x93, 0x2a, 0xfb, 0x8b, 0xa1, 0x70, 0x02, 0x2a, 0xc0, 0x89, 0x22, 0x3a, 0x87, 0x29, 0xdb, 0xaa, - 0x83, 0x7c, 0x91, 0x10, 0x09, 0xc9, 0x22, 0x3a, 0x85, 0x29, 0xb1, 0xcf, 0x91, 0x2d, 0x85, 0x11, - 0x11, 0xec, 0x82, 0x1c, 0x03, 0x10, 0x20, 0xdd, 0x01, 0x0c, 0x03, 0x20, 0x10, 0xf9, 0x10, 0x8c, - 0x13, 0x10, 0x10, 0xf9, 0x18, 0x8c, 0x12, 0x01, 0x30, 0xf8, 0x28, 0xab, 0x04, 0x11, 0x10, 0xf0, - 0x29, 0xbb, 0x14, 0x10, 0x20, 0xe1, 0x2a, 0xc9, 0x32, 0x00, 0x11, 0xe1, 0x1b, 0xe8, 0x30, 0x01, - 0x20, 0xb1, 0x1e, 0xc0, 0x20, 0x11, 0x20, 0xb2, 0x8f, 0xc0, 0x29, 0x03, 0x30, 0x83, 0x9f, 0xb1, - 0x4b, 0x83, 0x21, 0x82, 0xaf, 0xa1, 0x1c, 0x13, 0x30, 0x83, 0xbd, 0xa2, 0x0d, 0x05, 0x10, 0x02, - 0xcc, 0x81, 0x8d, 0x03, 0x28, 0x23, 0xea, 0x11, 0xad, 0x23, 0x1a, 0x14, 0xc9, 0x28, 0xbd, 0x32, - 0x1a, 0x24, 0xc0, 0x28, 0xfa, 0x30, 0x89, 0x23, 0xb8, 0x19, 0xfa, 0x59, 0x98, 0x22, 0xa1, 0x2a, - 0xf8, 0x49, 0x90, 0x21, 0xa0, 0x1a, 0xf1, 0x3b, 0xb2, 0x43, 0x80, 0x9b, 0xa4, 0x2f, 0xb2, 0x31, - 0x91, 0xaa, 0x91, 0x8f, 0x95, 0x28, 0x01, 0x99, 0x01, 0x8f, 0x83, 0x39, 0x82, 0xca, 0x21, 0xaf, - 0x84, 0x18, 0x02, 0xb8, 0x30, 0xbe, 0x05, 0x19, 0x01, 0xb0, 0x39, 0xfc, 0x12, 0x19, 0x02, 0xa0, - 0x49, 0xea, 0x21, 0x88, 0x21, 0xb0, 0x3c, 0xf8, 0x10, 0x08, 0x21, 0xa2, 0x3d, 0xf0, 0x10, 0x80, - 0x01, 0x81, 0x1d, 0xd1, 0x39, 0x90, 0x11, 0x12, 0x0e, 0xb2, 0x2b, 0x83, 0x28, 0x03, 0x9f, 0xc3, - 0x1c, 0x02, 0x18, 0x24, 0xad, 0x94, 0x1b, 0x01, 0x08, 0x43, 0xad, 0x93, 0x0f, 0x11, 0x88, 0x31, - 0xe8, 0x12, 0x9c, 0x02, 0x80, 0x32, 0xfa, 0x11, 0x9c, 0x11, 0x90, 0x61, 0xc0, 0x20, 0x9b, 0x11, - 0x90, 0x50, 0xf1, 0x20, 0xba, 0x20, 0x81, 0x59, 0xd2, 0x38, 0xb9, 0x28, 0x91, 0x69, 0xc2, 0x2a, - 0xb8, 0x29, 0x93, 0x5a, 0xa5, 0x3a, 0xd8, 0x08, 0x83, 0x2a, 0x96, 0x1c, 0xb1, 0x0a, 0x22, 0x2b, - 0x07, 0x1c, 0xb2, 0x0b, 0x13, 0x0b, 0x07, 0x0c, 0xa1, 0x8a, 0x22, 0x9a, 0x37, 0x8c, 0x92, 0x8b, - 0x31, 0xb9, 0x36, 0x9d, 0x93, 0x8c, 0x30, 0xc0, 0x53, 0xaa, 0x03, 0x8c, 0x39, 0xc1, 0x62, 0xaa, - 0x82, 0x8b, 0x39, 0xe3, 0x60, 0xa8, 0x01, 0x8a, 0x29, 0xc4, 0x68, 0xa8, 0x10, 0x8a, 0x0b, 0x96, - 0x49, 0xb1, 0x10, 0x0a, 0x89, 0xa4, 0x7b, 0xb2, 0x08, 0x89, 0x8b, 0x87, 0x2a, 0x92, 0x10, 0xa9, - 0xba, 0x17, 0x2b, 0x93, 0x0c, 0x91, 0xca, 0x23, 0x3b, 0x87, 0x09, 0xa0, 0xaa, 0x34, 0x8c, 0x15, - 0xaa, 0x91, 0xab, 0x51, 0x09, 0x15, 0x8a, 0x92, 0xac, 0x40, 0xb0, 0x44, 0xc9, 0x81, 0xab, 0x30, - 0x90, 0x74, 0xa8, 0x10, 0x9b, 0x29, 0xb3, 0x70, 0xb1, 0x08, 0x9d, 0x18, 0x93, 0x78, 0xb2, 0x28, - 0xba, 0x1a, 0x04, 0x49, 0xc3, 0x3b, 0xda, 0x09, 0x12, 0x48, 0x86, 0x0b, 0xb0, 0x09, 0x21, 0x09, - 0x27, 0x8d, 0xb0, 0x0b, 0x42, 0x91, 0x34, 0x8d, 0xb2, 0x0b, 0x10, 0x83, 0x55, 0xad, 0x92, 0x8a, - 0x18, 0x94, 0x71, 0xa9, 0xa2, 0x1b, 0x01, 0xa3, 0x79, 0xd0, 0x01, 0x0c, 0x88, 0x85, 0x38, 0xd0, - 0x01, 0x0b, 0x80, 0x03, 0x6c, 0xc1, 0x08, 0x0a, 0xa0, 0x14, 0x4a, 0xe3, 0x10, 0xaa, 0x81, 0x23, - 0x2d, 0xc4, 0x19, 0xa9, 0x91, 0x51, 0x1a, 0xa6, 0x2a, 0xb8, 0x81, 0x50, 0x8a, 0x96, 0x0a, 0xa8, - 0x00, 0x59, 0x98, 0x06, 0x8b, 0xa1, 0x08, 0x58, 0xa8, 0x14, 0x0d, 0xa0, 0x19, 0x49, 0xa1, 0x43, - 0x9d, 0xa3, 0x2a, 0x2a, 0xb4, 0x62, 0xcb, 0x82, 0x2c, 0x08, 0xa3, 0x70, 0xa9, 0x01, 0x1d, 0x80, - 0x94, 0x38, 0xd9, 0x11, 0x0d, 0x90, 0x04, 0x49, 0xc8, 0x20, 0x0c, 0x91, 0x02, 0x5a, 0xd1, 0x28, - 0x9b, 0x82, 0x21, 0x3a, 0xf3, 0x38, 0xbb, 0x83, 0x31, 0x2a, 0xd5, 0x3a, 0xca, 0x82, 0x20, 0x20, - 0xb5, 0x3d, 0xd8, 0x01, 0x20, 0x88, 0x94, 0x1d, 0xd0, 0x20, 0x08, 0x01, 0x93, 0x1e, 0xc1, 0x39, - 0x18, 0x01, 0x11, 0x8f, 0xb1, 0x3a, 0x81, 0x22, 0x13, 0xbf, 0xa4, 0x3b, 0x92, 0x21, 0x31, 0xbf, - 0xb3, 0x2e, 0x82, 0x20, 0x20, 0xeb, 0x83, 0x0e, 0x82, 0x30, 0x18, 0xea, 0x11, 0x0d, 0x82, 0x28, - 0x11, 0xe8, 0x10, 0x8c, 0x04, 0x19, 0x01, 0xd0, 0x28, 0x9d, 0x22, 0x29, 0x82, 0xd0, 0x38, 0xeb, - 0x22, 0x2a, 0x03, 0xd0, 0x3b, 0xea, 0x32, 0x0a, 0x13, 0xa0, 0x2d, 0xf8, 0x40, 0x98, 0x02, 0x88, - 0x1b, 0xf0, 0x48, 0x98, 0x13, 0x98, 0x1b, 0xe2, 0x49, 0xa0, 0x13, 0x88, 0x8c, 0xd2, 0x5a, 0xa1, - 0x21, 0x08, 0x9b, 0xb3, 0x3f, 0xa2, 0x50, 0x88, 0xaa, 0xb3, 0x2e, 0xa3, 0x40, 0x80, 0xb9, 0x82, - 0x0f, 0x94, 0x38, 0x91, 0xaa, 0x81, 0x0f, 0x84, 0x3a, 0x82, 0xb9, 0x10, 0x8f, 0x04, 0x3a, 0x91, - 0xa8, 0x18, 0xae, 0x33, 0x3b, 0x85, 0xa9, 0x29, 0xbc, 0x34, 0x1b, 0x07, 0xa9, 0x19, 0xcb, 0x52, - 0x98, 0x13, 0x99, 0x2a, 0xfb, 0x40, 0x80, 0x13, 0xba, 0x09, 0xf8, 0x48, 0x90, 0x32, 0xa8, 0x8b, - 0xc8, 0x69, 0x91, 0x41, 0xb0, 0x89, 0xca, 0x39, 0x04, 0x40, 0xb1, 0x9a, 0xc8, 0x3b, 0x15, 0x50, - 0xb2, 0xab, 0xa9, 0x1d, 0x14, 0x30, 0x94, 0xbb, 0x8a, 0x8c, 0x35, 0x20, 0x95, 0xab, 0x9b, 0xab, - 0x65, 0x80, 0x03, 0xaa, 0x8c, 0xa9, 0x72, 0x01, 0x02, 0xba, 0x8c, 0xb9, 0x60, 0x83, 0x23, 0xca, - 0x9c, 0x90, 0x69, 0x83, 0x21, 0xb8, 0xae, 0xa0, 0x59, 0x84, 0x20, 0x98, 0xac, 0x80, 0x2c, 0x07, - 0x10, 0x98, 0xbb, 0x81, 0x0b, 0x27, 0x29, 0x92, 0xbd, 0x00, 0x0a, 0x27, 0x09, 0x01, 0xdb, 0x18, - 0xab, 0x27, 0x88, 0x01, 0xca, 0x29, 0xb9, 0x45, 0x08, 0x01, 0xda, 0x2a, 0xc8, 0x53, 0x88, 0x11, - 0xc9, 0x2b, 0xc0, 0x71, 0x80, 0x00, 0xb8, 0x1b, 0xd1, 0x50, 0x81, 0x18, 0xb0, 0x0e, 0xb2, 0x68, - 0x81, 0x18, 0xa0, 0x8d, 0xb3, 0x5a, 0x82, 0x18, 0xa1, 0x9e, 0x93, 0x4a, 0x03, 0x09, 0x92, 0xaf, - 0x93, 0x3c, 0x13, 0x89, 0x02, 0xbf, 0x03, 0x1c, 0x14, 0x88, 0x11, 0xbe, 0x12, 0x0c, 0x23, 0x98, - 0x22, 0xdd, 0x11, 0x0b, 0x24, 0xa0, 0x21, 0xfb, 0x38, 0x8c, 0x32, 0x90, 0x30, 0xfb, 0x39, 0xa9, - 0x43, 0x91, 0x38, 0xf8, 0x2a, 0xa9, 0x42, 0x91, 0x28, 0xf1, 0x3b, 0xb0, 0x41, 0x82, 0x19, 0xf3, - 0x2c, 0xa0, 0x20, 0x83, 0x1a, 0xc4, 0x1d, 0xa1, 0x20, 0x13, 0x8a, 0xa5, 0x0f, 0xa1, 0x28, 0x12, - 0x99, 0x95, 0x0e, 0x91, 0x29, 0x22, 0xa8, 0x04, 0x9f, 0x92, 0x19, 0x22, 0xa8, 0x22, 0xaf, 0x82, - 0x1a, 0x33, 0xa0, 0x51, 0xbe, 0x82, 0x89, 0x42, 0x90, 0x40, 0xcc, 0x01, 0x89, 0x42, 0x91, 0x48, - 0xfa, 0x00, 0x89, 0x21, 0x82, 0x39, 0xf9, 0x19, 0x98, 0x41, 0x02, 0x2a, 0xf1, 0x1a, 0x98, 0x30, - 0x12, 0x1a, 0xf3, 0x1c, 0x90, 0x38, 0x14, 0x89, 0xc3, 0x0e, 0x90, 0x28, 0x23, 0x99, 0xa4, 0x8f, - 0x81, 0x19, 0x43, 0x98, 0x01, 0xaf, 0x81, 0x19, 0x33, 0xb0, 0x22, 0xcf, 0x11, 0x0a, 0x43, 0xa1, - 0x20, 0xcd, 0x18, 0x89, 0x43, 0x91, 0x39, 0xfb, 0x29, 0x98, 0x52, 0x92, 0x29, 0xf9, 0x19, 0x98, - 0x31, 0x83, 0x1a, 0xf2, 0x1c, 0x91, 0x30, 0x04, 0x0a, 0xd2, 0x1d, 0x90, 0x38, 0x13, 0x9a, 0xb3, - 0x9f, 0xa3, 0x48, 0x23, 0x9a, 0xa3, 0xbf, 0x93, 0x29, 0x24, 0xb8, 0x03, 0xcf, 0x83, 0x29, 0x32, - 0xc0, 0x21, 0xbf, 0x83, 0x1a, 0x23, 0xb1, 0x48, 0xdd, 0x12, 0x0a, 0x32, 0xa2, 0x4a, 0xfa, 0x28, - 0x8a, 0x32, 0xa1, 0x49, 0xf8, 0x39, 0x8a, 0x32, 0x93, 0x2c, 0xf2, 0x2a, 0x99, 0x22, 0x82, 0x2b, - 0xf4, 0x3a, 0xa8, 0x31, 0x12, 0x8b, 0xc5, 0x2d, 0xa8, 0x21, 0x02, 0x8a, 0xa5, 0x1f, 0xa1, 0x20, - 0x11, 0xa8, 0x83, 0x8f, 0xa1, 0x28, 0x12, 0xa8, 0x14, 0x9f, 0x92, 0x29, 0x22, 0xa0, 0x31, 0xcf, - 0x92, 0x2a, 0x13, 0xa0, 0x51, 0xbd, 0x02, 0x1a, 0x23, 0xa2, 0x58, 0xdc, 0x01, 0x0b, 0x13, 0x92, - 0x69, 0xe9, 0x10, 0x89, 0x12, 0x01, 0x39, 0xf8, 0x19, 0xaa, 0x33, 0x00, 0x39, 0xf4, 0x2a, 0xb8, - 0x32, 0x12, 0x19, 0xf2, 0x1b, 0xd8, 0x21, 0x11, 0x00, 0xb3, 0x8f, 0xa1, 0x48, 0x11, 0x80, 0x82, - 0x9f, 0xb0, 0x49, 0x11, 0x81, 0x21, 0xae, 0xa2, 0x3b, 0x23, 0x04, 0x39, 0xce, 0xa1, 0x2b, 0x02, - 0x33, 0x58, 0xf9, 0x08, 0x0a, 0x02, 0x33, 0x3a, 0xf1, 0x0b, 0x8d, 0x02, 0x32, 0x28, 0xf4, 0x09, - 0x99, 0x02, 0x42, 0x88, 0xd3, 0x0b, 0xbb, 0x13, 0x71, 0x80, 0xa4, 0x0c, 0xa8, 0x01, 0x70, 0x90, - 0x83, 0x8e, 0xa8, 0x10, 0x30, 0x91, 0x15, 0x9d, 0xa0, 0x18, 0x68, 0xa2, 0x21, 0xad, 0xb1, 0x09, - 0x40, 0x94, 0x42, 0xbc, 0x90, 0x08, 0x38, 0x96, 0x41, 0xda, 0x88, 0x0a, 0x38, 0x85, 0x48, 0xc8, - 0x88, 0x8a, 0x28, 0x07, 0x28, 0xc8, 0x89, 0x8a, 0x18, 0x06, 0x30, 0xd1, 0x0a, 0x9a, 0x28, 0x16, - 0x29, 0xb2, 0x8d, 0xaa, 0x18, 0x16, 0x20, 0xa2, 0x8e, 0x98, 0x09, 0x24, 0x20, 0xa3, 0x9f, 0xa8, - 0x09, 0x24, 0x30, 0x84, 0x9e, 0xa0, 0x0a, 0x43, 0x20, 0x02, 0xae, 0xb8, 0x8a, 0x44, 0x20, 0x13, - 0xcc, 0x98, 0x9b, 0x63, 0x20, 0x12, 0xbc, 0xa9, 0xac, 0x53, 0x21, 0x33, 0xfb, 0x89, 0x9a, 0x41, - 0x11, 0x33, 0xea, 0xa9, 0xbb, 0x62, 0x11, 0x23, 0xd8, 0x99, 0xca, 0x48, 0x12, 0x24, 0xc9, 0x9a, - 0xca, 0x30, 0x13, 0x35, 0xb0, 0x9c, 0xdb, 0x38, 0x04, 0x42, 0xb0, 0x9b, 0xeb, 0x29, 0x14, 0x42, - 0x90, 0x9c, 0xb9, 0x2a, 0x05, 0x52, 0x91, 0xbb, 0xd9, 0x2a, 0x04, 0x42, 0x92, 0xab, 0xd9, 0x0b, - 0x24, 0x51, 0x81, 0xab, 0xba, 0x0e, 0x23, 0x51, 0x02, 0xbb, 0xb9, 0x8e, 0x23, 0x50, 0x02, 0xba, - 0xba, 0x9e, 0x33, 0x50, 0x13, 0xca, 0xa9, 0xac, 0x33, 0x40, 0x05, 0xa9, 0xaa, 0xad, 0x32, 0x31, - 0x16, 0xb8, 0x9a, 0xcc, 0x31, 0x30, 0x25, 0xc8, 0xa9, 0xcb, 0x40, 0x11, 0x34, 0xa8, 0xba, 0xdc, - 0x38, 0x21, 0x25, 0xb0, 0xaa, 0xeb, 0x39, 0x21, 0x35, 0xb1, 0xab, 0xea, 0x29, 0x02, 0x44, 0x91, - 0x9b, 0xeb, 0x2a, 0x03, 0x34, 0x92, 0x9c, 0xd9, 0x1b, 0x12, 0x44, 0x92, 0xab, 0xd9, 0x0b, 0x13, - 0x44, 0x03, 0xbb, 0xda, 0x8c, 0x13, 0x43, 0x12, 0xbb, 0xca, 0x8f, 0x02, 0x33, 0x22, 0xca, 0xaa, - 0x9e, 0x02, 0x42, 0x23, 0xc9, 0xaa, 0xad, 0x22, 0x42, 0x32, 0xd0, 0x9a, 0xbc, 0x11, 0x43, 0x33, - 0xc0, 0xab, 0xcd, 0x11, 0x42, 0x22, 0xb2, 0xac, 0xeb, 0x18, 0x32, 0x33, 0xa2, 0x9e, 0xda, 0x08, - 0x32, 0x24, 0x82, 0xad, 0xba, 0x1a, 0x52, 0x32, 0x03, 0xbd, 0xd9, 0x0a, 0x42, 0x23, 0x02, 0xdb, - 0xb9, 0x8c, 0x31, 0x25, 0x22, 0xdb, 0xaa, 0x8b, 0x42, 0x33, 0x24, 0xd9, 0xab, 0x9d, 0x31, 0x24, - 0x21, 0xc8, 0xab, 0xac, 0x30, 0x26, 0x22, 0xb8, 0x9e, 0x9a, 0x28, 0x24, 0x32, 0xc2, 0x9d, 0xba, - 0x38, 0x25, 0x12, 0x92, 0xae, 0xaa, 0x1a, 0x35, 0x22, 0x92, 0xae, 0xa9, 0x0a, 0x35, 0x12, 0x03, - 0xbe, 0xa9, 0x0b, 0x44, 0x12, 0x12, 0xdc, 0x99, 0x8a, 0x53, 0x12, 0x11, 0xfa, 0x89, 0x9a, 0x42, - 0x12, 0x21, 0xe9, 0x8a, 0xaa, 0x61, 0x12, 0x20, 0xd8, 0x8b, 0xb9, 0x50, 0x22, 0x22, 0xe0, 0x8b, - 0xb9, 0x40, 0x14, 0x11, 0xb1, 0x9f, 0xa8, 0x49, 0x13, 0x11, 0xa2, 0x9f, 0xa0, 0x2a, 0x24, 0x21, - 0x91, 0xaf, 0xa0, 0x2a, 0x24, 0x11, 0x12, 0xaf, 0x98, 0x1b, 0x25, 0x01, 0x01, 0xcc, 0x88, 0x8c, - 0x24, 0x11, 0x21, 0xfb, 0x88, 0x8a, 0x33, 0x11, 0x22, 0xfa, 0x0b, 0xab, 0x44, 0x01, 0x21, 0xe8, - 0x0a, 0xb9, 0x52, 0x11, 0x11, 0xe0, 0x0b, 0xc8, 0x31, 0x12, 0x21, 0xd2, 0x8d, 0xc0, 0x30, 0x12, - 0x01, 0xb2, 0x9f, 0xb0, 0x49, 0x13, 0x11, 0x92, 0xaf, 0x90, 0x3a, 0x14, 0x10, 0x01, 0xaf, 0xa0, - 0x2a, 0x15, 0x01, 0x01, 0xcc, 0x80, 0x0b, 0x24, 0x12, 0x01, 0xdd, 0x08, 0x0b, 0x33, 0x12, 0x32, - 0xfb, 0x0b, 0x9b, 0x35, 0x01, 0x20, 0xf9, 0x0a, 0xaa, 0x43, 0x12, 0x21, 0xf8, 0x0a, 0xb8, 0x41, - 0x11, 0x21, 0xd0, 0x8d, 0xa8, 0x50, 0x11, 0x10, 0xa1, 0x8e, 0xb0, 0x38, 0x13, 0x02, 0xa1, 0xbf, - 0xa1, 0x3a, 0x15, 0x12, 0x82, 0xaf, 0x90, 0x3b, 0x23, 0x11, 0x01, 0xde, 0x80, 0x0b, 0x15, 0x11, - 0x11, 0xeb, 0x08, 0x8b, 0x14, 0x11, 0x10, 0xf9, 0x1a, 0x9a, 0x33, 0x22, 0x12, 0xf1, 0x1c, 0xc9, - 0x22, 0x20, 0x10, 0xd1, 0x0d, 0xb0, 0x31, 0x21, 0x12, 0xb3, 0x9f, 0xd0, 0x38, 0x11, 0x00, 0x01, - 0x9f, 0xb1, 0x3a, 0x33, 0x12, 0x12, 0xcf, 0xa2, 0x1b, 0x12, 0x02, 0x42, 0xce, 0x91, 0x1a, 0x23, - 0x11, 0x41, 0xfa, 0x00, 0x9c, 0x22, 0x01, 0x38, 0xf9, 0x18, 0x9b, 0x22, 0x32, 0x40, 0xf2, 0x1a, - 0xba, 0x21, 0x02, 0x20, 0xd5, 0x2b, 0xca, 0x21, 0x23, 0x10, 0xb5, 0x1d, 0xc8, 0x29, 0x21, 0x08, - 0x85, 0x0f, 0xa0, 0x18, 0x12, 0x00, 0x05, 0x9c, 0xb1, 0x0b, 0x32, 0x80, 0x25, 0x9e, 0x91, 0x0c, - 0x22, 0x01, 0x34, 0xbc, 0x90, 0x9d, 0x22, 0x91, 0x62, 0xc9, 0x80, 0x9b, 0x32, 0x03, 0x72, 0xc8, - 0x08, 0xbb, 0x20, 0x02, 0x71, 0xc1, 0x09, 0xaa, 0x48, 0x02, 0x60, 0xa1, 0x0a, 0xea, 0x19, 0x12, - 0x48, 0xb2, 0x0b, 0xd8, 0x2a, 0x23, 0x61, 0xa3, 0xab, 0xc8, 0x0c, 0x22, 0x38, 0x86, 0x9a, 0xa9, - 0x0d, 0x33, 0x30, 0x06, 0xaa, 0xa9, 0x9e, 0x21, 0x10, 0x06, 0x99, 0x99, 0xab, 0x52, 0x10, 0x16, - 0xa8, 0x8a, 0xcc, 0x20, 0x01, 0x24, 0x98, 0x8b, 0xeb, 0x38, 0x12, 0x26, 0x88, 0xab, 0xea, 0x29, - 0x01, 0x43, 0x00, 0xbb, 0xd9, 0x2a, 0x04, 0x34, 0x01, 0xdb, 0xb9, 0x0c, 0x11, 0x63, 0x10, 0xc9, - 0x98, 0x0c, 0x12, 0x62, 0x10, 0xd0, 0x99, 0xab, 0x12, 0x52, 0x11, 0xd1, 0x89, 0xab, 0x22, 0x72, - 0x11, 0xc1, 0x8b, 0xcb, 0x11, 0x40, 0x02, 0xa4, 0x0c, 0xca, 0x20, 0x41, 0x02, 0x94, 0x8d, 0xc9, - 0x09, 0x31, 0x03, 0x05, 0x8d, 0xa8, 0x1a, 0x31, 0x05, 0x13, 0x9e, 0xb8, 0x0c, 0x21, 0x03, 0x43, - 0xac, 0xa0, 0x8c, 0x21, 0x06, 0x41, 0xbb, 0x98, 0x9d, 0x20, 0x03, 0x72, 0xb8, 0x90, 0xab, 0x21, - 0x05, 0x61, 0xb8, 0x89, 0xac, 0x18, 0x23, 0x71, 0xa0, 0x89, 0xba, 0x18, 0x15, 0x60, 0xb1, 0x99, - 0xca, 0x09, 0x33, 0x68, 0x92, 0x99, 0xca, 0x89, 0x34, 0x48, 0x95, 0x8b, 0xba, 0x8c, 0x32, 0x40, - 0x86, 0x89, 0xb9, 0x9a, 0x42, 0x20, 0x07, 0x9a, 0xb8, 0xac, 0x31, 0x21, 0x17, 0x99, 0xa8, 0xab, - 0x50, 0x01, 0x16, 0xa9, 0xb8, 0xac, 0x38, 0x02, 0x37, 0x99, 0x98, 0xac, 0x28, 0x02, 0x55, 0xa8, - 0xa8, 0xcb, 0x29, 0x02, 0x73, 0x91, 0x98, 0xbb, 0x1a, 0x04, 0x72, 0xa1, 0x88, 0xac, 0x0b, 0x03, - 0x72, 0xa3, 0x08, 0xcb, 0x8a, 0x13, 0x70, 0xa3, 0x88, 0xdb, 0x8a, 0x12, 0x60, 0x83, 0x09, 0xd9, - 0x9a, 0x21, 0x58, 0x85, 0x89, 0xb9, 0xab, 0x30, 0x58, 0x07, 0x19, 0xb8, 0x9b, 0x10, 0x10, 0x27, - 0x89, 0xc0, 0xbb, 0x10, 0x11, 0x37, 0x09, 0xb0, 0x9d, 0x19, 0x01, 0x45, 0x89, 0xa0, 0xad, 0x08, - 0x01, 0x45, 0x88, 0x91, 0x9d, 0x09, 0x00, 0x73, 0x90, 0x80, 0xac, 0x09, 0x00, 0x73, 0x91, 0x81, - 0xcb, 0x89, 0x81, 0x72, 0x91, 0x00, 0xcb, 0x89, 0x08, 0x72, 0x82, 0x18, 0xda, 0x89, 0x80, 0x51, - 0x82, 0x18, 0xea, 0x8a, 0x00, 0x50, 0x03, 0x18, 0xf8, 0x8a, 0x80, 0x30, 0x05, 0x08, 0xc8, 0x8c, - 0x80, 0x30, 0x25, 0x09, 0xc1, 0x8d, 0x08, 0x28, 0x24, 0x88, 0xb1, 0x9f, 0x08, 0x28, 0x25, 0x88, - 0x91, 0xae, 0x80, 0x18, 0x34, 0x90, 0x81, 0xaf, 0x08, 0x18, 0x53, 0x80, 0x00, 0xbd, 0x08, 0x19, - 0x63, 0x91, 0x00, 0xfb, 0x08, 0x08, 0x42, 0x81, 0x18, 0xfa, 0x09, 0x08, 0x41, 0x82, 0x08, 0xf9, - 0x09, 0x88, 0x32, 0x04, 0x19, 0xe8, 0x0b, 0x90, 0x41, 0x13, 0x09, 0xe0, 0x0c, 0x90, 0x31, 0x14, - 0x88, 0xc1, 0x8e, 0x80, 0x38, 0x33, 0x98, 0xb1, 0xbf, 0x81, 0x38, 0x25, 0x90, 0x91, 0xaf, 0x80, - 0x28, 0x43, 0x80, 0x80, 0xbf, 0x81, 0x18, 0x34, 0x91, 0x18, 0xce, 0x80, 0x18, 0x42, 0x92, 0x18, - 0xec, 0x08, 0x08, 0x42, 0x82, 0x19, 0xfa, 0x09, 0x08, 0x41, 0x02, 0x09, 0xf8, 0x0a, 0x00, 0x40, - 0x12, 0x89, 0xd8, 0x0c, 0x80, 0x40, 0x13, 0x89, 0xd1, 0x8d, 0x81, 0x20, 0x24, 0x89, 0xb0, 0x9f, - 0x00, 0x10, 0x15, 0x90, 0x90, 0x9e, 0x00, 0x18, 0x34, 0x98, 0x88, 0xbe, 0x10, 0x18, 0x25, 0x91, - 0x08, 0xbe, 0x00, 0x00, 0x34, 0xa2, 0x09, 0xfc, 0x08, 0x80, 0x43, 0x81, 0x08, 0xeb, 0x09, 0x00, - 0x42, 0x83, 0x8a, 0xea, 0x0b, 0x01, 0x62, 0x02, 0x89, 0xd8, 0x8b, 0x82, 0x51, 0x03, 0x99, 0xc9, - 0x9d, 0x01, 0x41, 0x14, 0x98, 0xb8, 0xad, 0x11, 0x38, 0x26, 0x99, 0xa9, 0xbd, 0x21, 0x20, 0x26, - 0x90, 0x89, 0xbd, 0x28, 0x10, 0x35, 0xa0, 0x9a, 0xdc, 0x29, 0x11, 0x25, 0x92, 0x9a, 0xfa, 0x19, - 0x01, 0x42, 0x81, 0x9b, 0xea, 0x1a, 0x83, 0x53, 0x02, 0x9a, 0xe8, 0x0b, 0x02, 0x41, 0x03, 0xac, - 0xc0, 0x8c, 0x03, 0x51, 0x13, 0xaa, 0xa8, 0x9f, 0x02, 0x20, 0x23, 0xca, 0xa8, 0x9f, 0x22, 0x20, - 0x43, 0xb9, 0x88, 0xbe, 0x22, 0x18, 0x43, 0xd8, 0x09, 0xdb, 0x31, 0x10, 0x53, 0xb0, 0x19, 0xfb, - 0x38, 0x88, 0x32, 0xc1, 0x1b, 0xf9, 0x28, 0x01, 0x32, 0xb3, 0x1b, 0xf8, 0x2b, 0x81, 0x40, 0xb3, - 0x8c, 0xd1, 0x3b, 0x83, 0x51, 0x84, 0x8b, 0xb0, 0x1f, 0x01, 0x19, 0x84, 0x9b, 0xa1, 0x0e, 0x13, - 0x28, 0x15, 0x9b, 0x92, 0x9f, 0x02, 0x88, 0x23, 0xcb, 0x01, 0x9e, 0x23, 0x08, 0x44, 0xb9, 0x01, - 0xbd, 0x22, 0x99, 0x52, 0xc9, 0x10, 0xcb, 0x32, 0x81, 0x72, 0xb0, 0x28, 0xea, 0x10, 0x90, 0x48, - 0xb0, 0x3a, 0xf8, 0x20, 0x81, 0x40, 0xa2, 0x2a, 0xf8, 0x29, 0x90, 0x29, 0xb3, 0x2c, 0xd1, 0x29, - 0x12, 0x48, 0x85, 0x0b, 0xe2, 0x09, 0x80, 0x19, 0x84, 0x0d, 0xb2, 0x2a, 0x13, 0x18, 0x17, 0x8b, - 0xc3, 0x0c, 0x81, 0x99, 0x33, 0x9e, 0x93, 0x1c, 0x12, 0x10, 0x44, 0xba, 0x83, 0x9f, 0x81, 0x98, - 0x41, 0xd9, 0x11, 0x8b, 0x13, 0x01, 0x73, 0xc0, 0x11, 0x9d, 0x80, 0x90, 0x38, 0xe1, 0x20, 0x9b, - 0x22, 0x11, 0x61, 0xc2, 0x39, 0xcb, 0x80, 0x98, 0x29, 0xc5, 0x4a, 0xb8, 0x21, 0x21, 0x30, 0x97, - 0x3b, 0xe8, 0x88, 0x88, 0x88, 0x94, 0x2c, 0xc1, 0x20, 0x11, 0x02, 0x07, 0x0b, 0xd1, 0x09, 0x89, - 0xa0, 0x23, 0x0f, 0xa2, 0x29, 0x21, 0x83, 0x45, 0x8c, 0xb2, 0x8c, 0x98, 0xa1, 0x50, 0xab, 0x84, - 0x2a, 0x11, 0x05, 0x61, 0xb8, 0x92, 0x8e, 0x98, 0x80, 0x39, 0xc0, 0x12, 0x0c, 0x03, 0x24, 0x58, - 0xc1, 0x10, 0xad, 0xa0, 0x28, 0x2b, 0xe3, 0x28, 0x89, 0x13, 0x71, 0x18, 0xa4, 0x2a, 0xdb, 0x90, - 0x19, 0x9a, 0xa5, 0x39, 0xa8, 0x43, 0x68, 0x81, 0x94, 0x1a, 0xe9, 0x88, 0x0a, 0xa0, 0x83, 0x1c, - 0xb2, 0x62, 0x30, 0x93, 0x05, 0x8b, 0xf8, 0x19, 0x9a, 0xa1, 0x11, 0x0d, 0x82, 0x79, 0x01, 0x83, - 0x21, 0xac, 0xa0, 0x1d, 0xb8, 0x80, 0x2a, 0xab, 0x14, 0x7a, 0x85, 0x12, 0x18, 0xb9, 0xa0, 0x8e, - 0xb2, 0x09, 0x0a, 0xd9, 0x31, 0x29, 0x37, 0x31, 0x00, 0xe8, 0x09, 0xac, 0x83, 0x0b, 0x89, 0xda, - 0x38, 0x81, 0x67, 0x00, 0x81, 0xa8, 0x0a, 0xca, 0x21, 0xaa, 0xa0, 0xd9, 0x3a, 0x84, 0x65, 0x00, - 0x01, 0xa8, 0x8b, 0xd8, 0x38, 0xc8, 0x08, 0xa9, 0x0c, 0x04, 0x72, 0x83, 0x11, 0xa9, 0x9c, 0xa0, - 0x4b, 0xb1, 0x89, 0xca, 0x9b, 0x16, 0x61, 0x04, 0x28, 0xa8, 0xbb, 0x80, 0x1d, 0xa3, 0x8b, 0xa9, - 0xac, 0x63, 0x30, 0x27, 0x18, 0x98, 0xca, 0x08, 0xaa, 0x85, 0x0b, 0xa8, 0xbb, 0x70, 0x11, 0x27, - 0x08, 0x80, 0xba, 0x0a, 0xb9, 0x24, 0x9c, 0x98, 0xcb, 0x58, 0x02, 0x37, 0x08, 0x81, 0xca, 0x0a, - 0xb8, 0x41, 0xba, 0x90, 0xcb, 0x39, 0x06, 0x64, 0x00, 0x80, 0xb8, 0x8b, 0xb0, 0x59, 0xb8, 0x98, - 0xb9, 0x2b, 0x27, 0x71, 0x82, 0x81, 0xb8, 0x9c, 0x91, 0x2a, 0xb1, 0x9a, 0xd9, 0x0b, 0x26, 0x62, - 0x03, 0x00, 0xb8, 0xad, 0x00, 0x0b, 0x93, 0xac, 0xa8, 0x9c, 0x45, 0x31, 0x16, 0x08, 0x98, 0xcb, - 0x18, 0x9b, 0x83, 0xbb, 0x99, 0xbd, 0x73, 0x22, 0x17, 0x80, 0x88, 0xca, 0x19, 0xa9, 0x12, 0xba, - 0x8a, 0xdb, 0x70, 0x03, 0x25, 0x00, 0x09, 0xda, 0x1a, 0xb8, 0x11, 0xc8, 0x8a, 0xc8, 0x79, 0x02, - 0x43, 0x02, 0x0a, 0xd9, 0x0b, 0xb1, 0x19, 0xa0, 0x8e, 0xa0, 0x4a, 0x06, 0x42, 0x02, 0x89, 0xc0, - 0x8c, 0xa1, 0x1a, 0x80, 0xad, 0x81, 0x1c, 0x17, 0x30, 0x22, 0x99, 0x90, 0x9f, 0x91, 0x8a, 0x00, - 0xbb, 0x01, 0x8c, 0x37, 0x30, 0x43, 0xa8, 0x00, 0xbe, 0x00, 0x9b, 0x10, 0xdb, 0x28, 0xc9, 0x45, - 0x10, 0x33, 0xa1, 0x29, 0xfc, 0x18, 0xaa, 0x18, 0xc0, 0x29, 0xc0, 0x61, 0x11, 0x31, 0xa3, 0x19, - 0xf0, 0x1b, 0xb9, 0x09, 0xb1, 0x2c, 0xd3, 0x68, 0x82, 0x31, 0x84, 0x09, 0xd1, 0x0c, 0xb0, 0x8a, - 0x92, 0x1c, 0xa4, 0x4b, 0x05, 0x20, 0x14, 0x8a, 0xb3, 0x9f, 0x90, 0x8b, 0x02, 0x9b, 0x05, 0x1d, - 0x14, 0x18, 0x24, 0x99, 0x02, 0xaf, 0x80, 0xab, 0x22, 0xba, 0x34, 0x9d, 0x24, 0x08, 0x44, 0x98, - 0x11, 0xcd, 0x80, 0xaa, 0x30, 0xb8, 0x61, 0xba, 0x33, 0x80, 0x74, 0x91, 0x38, 0xfb, 0x08, 0xa9, - 0x28, 0xa1, 0x58, 0xb8, 0x30, 0x91, 0x72, 0x93, 0x39, 0xf9, 0x89, 0xb8, 0x28, 0xa2, 0x49, 0xd2, - 0x28, 0x81, 0x50, 0x04, 0x3a, 0xf1, 0x8a, 0xa8, 0x09, 0x03, 0x3b, 0xb5, 0x2a, 0x82, 0x58, 0x16, - 0x1a, 0xc2, 0x8c, 0xa8, 0x8a, 0x23, 0x0b, 0x97, 0x0a, 0x02, 0x28, 0x27, 0x89, 0x93, 0x9f, 0x88, - 0x9a, 0x22, 0x99, 0x05, 0x8b, 0x03, 0x18, 0x55, 0xa0, 0x03, 0xaf, 0x90, 0x8a, 0x30, 0xb0, 0x34, - 0x9c, 0x11, 0x18, 0x64, 0x90, 0x21, 0xbd, 0x89, 0xaa, 0x48, 0xa1, 0x52, 0xba, 0x22, 0x08, 0x72, - 0xa3, 0x30, 0xfb, 0x89, 0xaa, 0x28, 0xa3, 0x68, 0xb0, 0x20, 0x08, 0x52, 0x85, 0x29, 0xe8, 0x99, - 0xa9, 0x08, 0x83, 0x59, 0xb1, 0x28, 0x80, 0x52, 0x06, 0x29, 0xd0, 0x8b, 0xba, 0x88, 0x23, 0x4a, - 0xa4, 0x2a, 0x80, 0x51, 0x35, 0x09, 0xc2, 0x9e, 0xb9, 0x88, 0x22, 0x29, 0x95, 0x1a, 0x91, 0x31, - 0x37, 0x80, 0xa2, 0xaf, 0xb9, 0x0a, 0x30, 0x00, 0x06, 0x8a, 0x92, 0x48, 0x63, 0x81, 0x81, 0xbd, - 0xd9, 0x0a, 0x10, 0x01, 0x14, 0x9a, 0x92, 0x48, 0x43, 0x04, 0x11, 0xbe, 0xca, 0x8b, 0x10, 0x12, - 0x52, 0xa9, 0x81, 0x3a, 0x35, 0x25, 0x00, 0xfb, 0xb9, 0x8c, 0x00, 0x21, 0x41, 0xa0, 0x88, 0x1a, - 0x25, 0x34, 0x11, 0xf9, 0xab, 0x9d, 0x80, 0x31, 0x31, 0xa1, 0x09, 0x8b, 0x26, 0x63, 0x01, 0xc0, - 0xac, 0xac, 0x88, 0x41, 0x11, 0x83, 0x8a, 0xaa, 0x34, 0x73, 0x83, 0xa0, 0xae, 0xcb, 0x88, 0x30, - 0x04, 0x12, 0x9a, 0xa9, 0x32, 0x74, 0x03, 0x88, 0xbd, 0xdb, 0x09, 0x28, 0x14, 0x21, 0xa9, 0xa9, - 0x31, 0x73, 0x14, 0x08, 0xcc, 0xbb, 0x8a, 0x28, 0x16, 0x11, 0x98, 0xa9, 0x38, 0x53, 0x25, 0x80, - 0xea, 0xbb, 0x8b, 0x18, 0x44, 0x11, 0x90, 0xb9, 0x39, 0x53, 0x45, 0x08, 0xd9, 0xbb, 0x8c, 0x08, - 0x53, 0x01, 0x91, 0x99, 0x1a, 0x33, 0x56, 0x80, 0xb8, 0xbd, 0x8c, 0x08, 0x41, 0x12, 0x81, 0x9a, - 0x8a, 0x24, 0x54, 0x82, 0xa8, 0xbe, 0xac, 0x80, 0x41, 0x03, 0x01, 0xa9, 0x8a, 0x42, 0x72, 0x83, - 0x98, 0xdc, 0xab, 0x09, 0x30, 0x16, 0x10, 0xa8, 0x8a, 0x21, 0x52, 0x15, 0x89, 0xdb, 0xbc, 0x88, - 0x10, 0x25, 0x10, 0x90, 0x9b, 0x21, 0x42, 0x17, 0x88, 0xd9, 0xac, 0x89, 0x18, 0x34, 0x01, 0x91, - 0xba, 0x20, 0x32, 0x57, 0x90, 0xb9, 0xcd, 0x89, 0x08, 0x43, 0x02, 0x81, 0xba, 0x18, 0x22, 0x47, - 0x91, 0xa9, 0xbe, 0x9a, 0x08, 0x52, 0x12, 0x10, 0xaa, 0x1a, 0x12, 0x46, 0x02, 0xaa, 0xce, 0x9b, - 0x08, 0x32, 0x24, 0x10, 0xc8, 0x0a, 0x12, 0x63, 0x13, 0xaa, 0xdd, 0xab, 0x09, 0x41, 0x33, 0x01, - 0xc0, 0x9a, 0x21, 0x44, 0x24, 0xa9, 0xdc, 0xac, 0x89, 0x22, 0x53, 0x81, 0x90, 0xaa, 0x20, 0x34, - 0x72, 0xa0, 0xca, 0xbc, 0x8a, 0x31, 0x62, 0x82, 0x80, 0xaa, 0x19, 0x34, 0x61, 0xa2, 0xca, 0xad, - 0xaa, 0x22, 0x60, 0x83, 0x80, 0x9a, 0x8a, 0x44, 0x30, 0x84, 0xcb, 0xbc, 0xbb, 0x31, 0x51, 0x06, - 0x88, 0x98, 0x8a, 0x51, 0x20, 0x04, 0xba, 0xcc, 0xab, 0x38, 0x31, 0x27, 0x88, 0xa8, 0xa9, 0x50, - 0x02, 0x15, 0xb9, 0xcb, 0xbc, 0x39, 0x11, 0x27, 0x80, 0x98, 0xaa, 0x48, 0x03, 0x44, 0xa9, 0xcb, - 0xbc, 0x1a, 0x03, 0x55, 0x91, 0x88, 0xaa, 0x29, 0x05, 0x52, 0xa0, 0xbb, 0xcc, 0x89, 0x03, 0x73, - 0x81, 0x88, 0xa9, 0x1a, 0x14, 0x51, 0xa2, 0xbb, 0xbd, 0x8b, 0x22, 0x72, 0x03, 0x89, 0xb9, 0x8b, - 0x25, 0x41, 0x94, 0xab, 0xcc, 0x9b, 0x22, 0x51, 0x14, 0x89, 0xb9, 0x9a, 0x43, 0x41, 0x85, 0xaa, - 0xdb, 0xab, 0x21, 0x32, 0x27, 0x89, 0xb8, 0x9a, 0x31, 0x33, 0x27, 0xbb, 0xda, 0xac, 0x20, 0x21, - 0x26, 0x98, 0xa0, 0xab, 0x31, 0x33, 0x27, 0xc9, 0xb9, 0x9e, 0x08, 0x22, 0x63, 0x98, 0x90, 0xab, - 0x20, 0x32, 0x45, 0xb8, 0xba, 0xaf, 0x08, 0x21, 0x44, 0x90, 0x88, 0xac, 0x00, 0x32, 0x44, 0xc1, - 0x9a, 0xbd, 0x88, 0x22, 0x44, 0x92, 0x89, 0xbc, 0x18, 0x32, 0x44, 0xa2, 0x9c, 0xcd, 0x09, 0x20, - 0x43, 0x94, 0x09, 0xda, 0x08, 0x21, 0x33, 0x94, 0x9c, 0xdc, 0x09, 0x10, 0x33, 0x05, 0x0a, 0xda, - 0x09, 0x11, 0x43, 0x03, 0xac, 0xfa, 0x0a, 0x00, 0x33, 0x14, 0x8a, 0xd8, 0x0b, 0x11, 0x34, 0x13, - 0xcb, 0xea, 0x8c, 0x10, 0x32, 0x24, 0x99, 0xc8, 0x8c, 0x10, 0x43, 0x23, 0xc9, 0xda, 0x9c, 0x00, - 0x42, 0x33, 0xa8, 0xb8, 0x9f, 0x10, 0x32, 0x24, 0xb8, 0xbb, 0xbf, 0x00, 0x42, 0x42, 0x90, 0x99, - 0x9e, 0x00, 0x32, 0x33, 0xc1, 0xab, 0xbf, 0x00, 0x31, 0x34, 0x91, 0x9a, 0xae, 0x18, 0x41, 0x33, - 0xa1, 0xac, 0xbe, 0x08, 0x31, 0x34, 0x93, 0x9b, 0xec, 0x08, 0x31, 0x43, 0x92, 0xbb, 0xdd, 0x09, - 0x21, 0x33, 0x04, 0xaa, 0xeb, 0x09, 0x21, 0x34, 0x03, 0xac, 0xcc, 0x0b, 0x21, 0x34, 0x23, 0xca, - 0xca, 0x0c, 0x21, 0x34, 0x13, 0xda, 0xda, 0x8b, 0x21, 0x43, 0x23, 0xb9, 0xcb, 0x9d, 0x12, 0x34, - 0x23, 0xd9, 0xca, 0x9c, 0x11, 0x42, 0x23, 0xc0, 0xaa, 0xac, 0x21, 0x63, 0x22, 0xb8, 0xac, 0xad, - 0x10, 0x42, 0x33, 0xa0, 0xac, 0xdb, 0x20, 0x42, 0x23, 0xa1, 0xae, 0xda, 0x18, 0x32, 0x33, 0x91, - 0xad, 0xca, 0x29, 0x43, 0x33, 0x92, 0xaf, 0xc9, 0x19, 0x22, 0x43, 0x82, 0xbc, 0xc9, 0x1a, 0x43, - 0x43, 0x81, 0xdb, 0xc9, 0x0a, 0x32, 0x43, 0x02, 0xdb, 0xb9, 0x1c, 0x32, 0x34, 0x03, 0xfb, 0xa9, - 0x0c, 0x21, 0x33, 0x22, 0xea, 0xaa, 0x8b, 0x33, 0x35, 0x13, 0xea, 0xaa, 0x9c, 0x22, 0x43, 0x22, - 0xd9, 0xaa, 0x9c, 0x32, 0x53, 0x12, 0xc8, 0xab, 0xad, 0x31, 0x42, 0x22, 0xc0, 0x9c, 0xbb, 0x51, - 0x32, 0x23, 0xc0, 0x9d, 0xbb, 0x30, 0x43, 0x33, 0xc1, 0xad, 0xba, 0x30, 0x34, 0x34, 0xb1, 0xae, - 0xba, 0x28, 0x24, 0x33, 0xa2, 0xaf, 0xb9, 0x39, 0x24, 0x24, 0x81, 0xad, 0xba, 0x2b, 0x24, 0x24, - 0x82, 0xbd, 0xba, 0x2a, 0x34, 0x44, 0x01, 0xac, 0xbb, 0x0b, 0x34, 0x43, 0x02, 0xeb, 0xaa, 0x0b, - 0x43, 0x53, 0x02, 0xca, 0xba, 0x9b, 0x43, 0x43, 0x03, 0xea, 0xaa, 0x8b, 0x52, 0x32, 0x14, 0xba, - 0xac, 0xab, 0x41, 0x43, 0x13, 0xca, 0xac, 0x9b, 0x50, 0x33, 0x24, 0xc8, 0xbb, 0xba, 0x30, 0x26, - 0x23, 0xb9, 0xcd, 0x9a, 0x38, 0x25, 0x33, 0xa0, 0xbd, 0xaa, 0x2a, 0x26, 0x22, 0xb0, 0xcc, 0xaa, - 0x18, 0x35, 0x43, 0x90, 0xda, 0x9a, 0x0a, 0x34, 0x32, 0xa1, 0xdc, 0x9b, 0x1a, 0x44, 0x32, 0x82, - 0xda, 0xab, 0x9a, 0x44, 0x22, 0x92, 0xea, 0xab, 0x99, 0x44, 0x32, 0x03, 0xd9, 0x9c, 0x99, 0x41, - 0x22, 0x02, 0xda, 0x9d, 0x89, 0x41, 0x23, 0x13, 0xc8, 0x9d, 0x99, 0x48, 0x22, 0x12, 0xca, 0xad, - 0x99, 0x40, 0x24, 0x22, 0xb0, 0xad, 0xa9, 0x28, 0x15, 0x22, 0xc8, 0xbc, 0xaa, 0x48, 0x25, 0x32, - 0xa1, 0xbc, 0xaa, 0x1a, 0x26, 0x21, 0xa0, 0xbe, 0x9a, 0x19, 0x36, 0x31, 0x82, 0xbc, 0xaa, 0x8a, - 0x35, 0x21, 0xa2, 0xaf, 0xaa, 0x09, 0x35, 0x32, 0x04, 0xbb, 0xab, 0xab, 0x44, 0x12, 0x84, 0xae, - 0xaa, 0x89, 0x63, 0x22, 0x23, 0xbb, 0xbb, 0xbb, 0x71, 0x11, 0x22, 0xbd, 0xba, 0xab, 0x73, 0x22, - 0x43, 0xb8, 0xb9, 0xba, 0x49, 0x12, 0x52, 0xda, 0xa9, 0xbb, 0x60, 0x13, 0x53, 0x90, 0xa9, 0xbb, - 0x19, 0x13, 0x72, 0xc8, 0xa9, 0xbb, 0x38, 0x17, 0x42, 0x92, 0x99, 0xbb, 0x8a, 0x12, 0x70, 0xb1, - 0xaa, 0xcb, 0x2a, 0x34, 0x73, 0x02, 0x98, 0xba, 0x9b, 0x00, 0x50, 0xa3, 0x9b, 0xdc, 0x8a, 0x42, - 0x62, 0x13, 0x80, 0xca, 0x9b, 0x89, 0x30, 0x05, 0x8a, 0xfa, 0x8a, 0x20, 0x52, 0x24, 0x00, 0xc8, - 0x9b, 0x9a, 0x10, 0x15, 0x89, 0xe8, 0x8b, 0x08, 0x53, 0x25, 0x01, 0xa0, 0x9d, 0xa9, 0x09, 0x33, - 0x80, 0xc0, 0x8f, 0x89, 0x31, 0x45, 0x11, 0x91, 0x9d, 0xb9, 0x89, 0x32, 0x01, 0x91, 0xbf, 0x98, - 0x38, 0x46, 0x22, 0x81, 0xac, 0xc9, 0x8b, 0x31, 0x11, 0x01, 0xcd, 0xa8, 0x19, 0x46, 0x22, 0x12, - 0xcb, 0xba, 0x9d, 0x20, 0x21, 0x11, 0xda, 0x9a, 0x8b, 0x46, 0x32, 0x14, 0xb9, 0xbb, 0xae, 0x00, - 0x22, 0x11, 0xc8, 0x8b, 0xac, 0x44, 0x53, 0x12, 0xb1, 0x9c, 0xbd, 0x00, 0x20, 0x03, 0xa1, 0x8d, - 0xcb, 0x32, 0x54, 0x23, 0x91, 0xac, 0xcc, 0x09, 0x28, 0x14, 0x80, 0x9b, 0xdb, 0x20, 0x63, 0x24, - 0x00, 0xba, 0xcc, 0x8a, 0x10, 0x14, 0x01, 0xaa, 0xdb, 0x29, 0x53, 0x25, 0x11, 0xb9, 0xcc, 0x8b, - 0x08, 0x43, 0x01, 0xa8, 0xcb, 0x0b, 0x53, 0x36, 0x02, 0xa0, 0xbd, 0x9c, 0x08, 0x32, 0x12, 0x90, - 0xbd, 0x8b, 0x32, 0x57, 0x02, 0x80, 0xbc, 0xbb, 0x09, 0x42, 0x13, 0x00, 0xcc, 0xaa, 0x30, 0x65, - 0x12, 0x00, 0xda, 0xbb, 0x89, 0x31, 0x14, 0x01, 0xd9, 0xab, 0x28, 0x54, 0x24, 0x01, 0xca, 0xbc, - 0x9a, 0x30, 0x24, 0x01, 0xd0, 0xab, 0x19, 0x53, 0x26, 0x01, 0xb8, 0xae, 0x9a, 0x10, 0x33, 0x11, - 0xc1, 0xac, 0x99, 0x43, 0x45, 0x11, 0xb0, 0xad, 0xab, 0x19, 0x43, 0x12, 0x81, 0x9f, 0x99, 0x21, - 0x44, 0x03, 0x91, 0xbd, 0xcb, 0x09, 0x32, 0x04, 0x02, 0xad, 0xa9, 0x38, 0x54, 0x23, 0x00, 0xbd, - 0xcb, 0x0a, 0x31, 0x33, 0x11, 0xfb, 0xa9, 0x18, 0x63, 0x33, 0x01, 0xeb, 0xab, 0x9b, 0x21, 0x34, - 0x21, 0xd9, 0xaa, 0x1a, 0x53, 0x35, 0x02, 0xca, 0xbc, 0x9b, 0x28, 0x53, 0x12, 0xa8, 0xac, 0x8a, - 0x43, 0x45, 0x12, 0xa9, 0xbd, 0x9c, 0x08, 0x42, 0x12, 0x90, 0xca, 0x9a, 0x32, 0x55, 0x13, 0xa8, - 0xcc, 0xbb, 0x08, 0x41, 0x33, 0x90, 0xc9, 0x9c, 0x30, 0x63, 0x24, 0xa0, 0xca, 0xad, 0x09, 0x20, - 0x24, 0x91, 0x98, 0xad, 0x20, 0x42, 0x25, 0x91, 0xba, 0xbe, 0x89, 0x18, 0x44, 0x91, 0x80, 0xac, - 0x18, 0x22, 0x46, 0x91, 0x99, 0xbd, 0x8a, 0x08, 0x53, 0x82, 0x18, 0xdb, 0x19, 0x21, 0x54, 0x82, - 0x89, 0xec, 0x89, 0x88, 0x31, 0x04, 0x09, 0xc8, 0x0a, 0x21, 0x53, 0x05, 0x8a, 0xe9, 0x9a, 0x88, - 0x21, 0x24, 0x09, 0xb0, 0x0d, 0x01, 0x42, 0x25, 0x9a, 0xd0, 0x9c, 0x98, 0x10, 0x34, 0x88, 0x91, - 0x9d, 0x11, 0x21, 0x36, 0xa8, 0xb0, 0xbf, 0x88, 0x18, 0x52, 0x80, 0x00, 0xbb, 0x21, 0x21, 0x56, - 0x90, 0x89, 0xcd, 0x88, 0x88, 0x32, 0x93, 0x20, 0xea, 0x18, 0x11, 0x63, 0x92, 0x89, 0xfb, 0x8b, - 0x90, 0x31, 0x04, 0x18, 0xc1, 0x1b, 0x02, 0x72, 0x83, 0x99, 0xf8, 0x9b, 0x90, 0x20, 0x24, 0x08, - 0xa2, 0x8d, 0x02, 0x40, 0x15, 0x99, 0xa8, 0xbf, 0x80, 0x19, 0x33, 0x01, 0x11, 0xbc, 0x12, 0x48, - 0x35, 0xb1, 0x99, 0xef, 0x88, 0x08, 0x31, 0x01, 0x30, 0xda, 0x10, 0x00, 0x34, 0x92, 0x8b, 0xfb, - 0x8e, 0x88, 0x21, 0x13, 0x18, 0xd2, 0x19, 0x00, 0x41, 0x13, 0x9c, 0xf0, 0x8c, 0x88, 0x28, 0x33, - 0x18, 0x93, 0x8d, 0x01, 0x30, 0x25, 0xb9, 0xc0, 0xbf, 0x98, 0x00, 0x63, 0x00, 0x12, 0x9c, 0x00, - 0x10, 0x52, 0xb0, 0x08, 0xcf, 0x88, 0x88, 0x41, 0x02, 0x31, 0xca, 0x00, 0x08, 0x61, 0xa2, 0x09, - 0xfc, 0x89, 0x88, 0x30, 0x04, 0x30, 0xb0, 0x0a, 0x00, 0x58, 0x85, 0x0a, 0xf8, 0x9b, 0x88, 0x28, - 0x16, 0x20, 0x91, 0x8b, 0x00, 0x29, 0x17, 0x8a, 0xc0, 0xad, 0x09, 0x19, 0x35, 0x10, 0x83, 0xab, - 0x00, 0x0a, 0x36, 0x98, 0xb0, 0xdf, 0x89, 0x88, 0x53, 0x11, 0x12, 0xaa, 0x09, 0x99, 0x73, 0x91, - 0x88, 0xec, 0x8a, 0x88, 0x41, 0x13, 0x32, 0xc8, 0x0a, 0x98, 0x50, 0x83, 0x09, 0xec, 0x9c, 0x90, - 0x48, 0x14, 0x21, 0x90, 0x9b, 0xa1, 0x49, 0x14, 0x98, 0xd9, 0xae, 0x88, 0x29, 0x35, 0x21, 0x01, - 0xcb, 0x80, 0x1b, 0x25, 0x80, 0xb9, 0xcf, 0x09, 0x09, 0x34, 0x23, 0x02, 0xe8, 0x09, 0x8a, 0x33, - 0x02, 0xaa, 0xfd, 0x0b, 0x89, 0x43, 0x24, 0x11, 0xb8, 0x0b, 0xaa, 0x61, 0x12, 0xa9, 0xfa, 0x9c, - 0x88, 0x31, 0x35, 0x02, 0xa1, 0xab, 0xb9, 0x40, 0x24, 0x98, 0xea, 0xad, 0x89, 0x20, 0x36, 0x12, - 0x81, 0xac, 0xa8, 0x18, 0x43, 0x91, 0xc9, 0xbe, 0x9a, 0x38, 0x45, 0x23, 0x00, 0xba, 0xab, 0x1a, - 0x63, 0x82, 0xa9, 0xed, 0x9a, 0x18, 0x53, 0x33, 0x01, 0xb9, 0xbb, 0x8a, 0x42, 0x15, 0x98, 0xcd, - 0xbb, 0x09, 0x63, 0x34, 0x11, 0xa8, 0xcb, 0x99, 0x21, 0x24, 0x90, 0xcc, 0xbc, 0x0a, 0x42, 0x45, - 0x02, 0x88, 0xbb, 0x9a, 0x10, 0x53, 0x81, 0xda, 0xbc, 0x8b, 0x31, 0x46, 0x13, 0x80, 0xba, 0xac, - 0x00, 0x42, 0x03, 0xbb, 0xce, 0x9b, 0x30, 0x44, 0x15, 0x80, 0xb8, 0xab, 0x08, 0x41, 0x23, 0xca, - 0xeb, 0xab, 0x28, 0x44, 0x34, 0x81, 0xa9, 0xcb, 0x1a, 0x11, 0x34, 0xc8, 0xca, 0xad, 0x19, 0x43, - 0x44, 0x01, 0x98, 0xcb, 0x0a, 0x01, 0x43, 0xb1, 0xda, 0xcb, 0x0a, 0x43, 0x44, 0x12, 0x98, 0xcb, - 0x9a, 0x20, 0x41, 0x93, 0xbc, 0xcc, 0x8b, 0x52, 0x52, 0x22, 0x98, 0xc9, 0xaa, 0x10, 0x31, 0x13, - 0xeb, 0xcb, 0xab, 0x41, 0x44, 0x33, 0x90, 0xc9, 0xbb, 0x29, 0x22, 0x33, 0xf9, 0xcb, 0xab, 0x38, - 0x36, 0x34, 0x81, 0xaa, 0xbc, 0x0a, 0x23, 0x32, 0xd1, 0xbd, 0xbb, 0x29, 0x46, 0x42, 0x01, 0xa9, - 0xba, 0x9b, 0x32, 0x32, 0xa3, 0xcf, 0xbb, 0x0a, 0x45, 0x33, 0x14, 0xa9, 0xcb, 0xaa, 0x31, 0x12, - 0x13, 0xce, 0xbb, 0x9a, 0x73, 0x23, 0x24, 0xa8, 0xba, 0xbb, 0x49, 0x13, 0x31, 0xfb, 0xac, 0x99, - 0x40, 0x25, 0x32, 0xa0, 0xba, 0xcb, 0x19, 0x14, 0x21, 0xf0, 0xba, 0x9a, 0x38, 0x37, 0x31, 0x92, - 0xab, 0xcb, 0x8a, 0x24, 0x20, 0xc2, 0xae, 0x9a, 0x19, 0x36, 0x32, 0x84, 0xab, 0xb9, 0x9c, 0x33, - 0x01, 0x93, 0xcf, 0xa9, 0x09, 0x54, 0x12, 0x13, 0xba, 0xb9, 0xac, 0x41, 0x01, 0x02, 0xdd, 0xa9, - 0x89, 0x63, 0x22, 0x33, 0xc9, 0xa9, 0xcb, 0x30, 0x02, 0x21, 0xfb, 0x9b, 0x9b, 0x62, 0x24, 0x22, - 0xc1, 0x8a, 0xcb, 0x18, 0x13, 0x20, 0xf9, 0x8b, 0xba, 0x51, 0x34, 0x31, 0xa2, 0x9c, 0xca, 0x19, - 0x12, 0x01, 0xd1, 0x8e, 0xb9, 0x30, 0x44, 0x22, 0x84, 0xab, 0xc9, 0x0a, 0x11, 0x02, 0xa2, 0xbf, - 0xb8, 0x3a, 0x45, 0x23, 0x23, 0xbc, 0xb8, 0x8d, 0x11, 0x11, 0x80, 0xce, 0x90, 0x0b, 0x25, 0x33, - 0x33, 0xd9, 0x89, 0x9d, 0x00, 0x11, 0x18, 0xfb, 0x09, 0x9b, 0x34, 0x43, 0x23, 0xc1, 0x8a, 0xcc, - 0x10, 0x28, 0x00, 0xe9, 0x0a, 0xca, 0x52, 0x32, 0x22, 0xa2, 0x0c, 0xfa, 0x18, 0x08, 0x81, 0xa8, - 0x0d, 0xc8, 0x40, 0x22, 0x14, 0x82, 0x8b, 0xe8, 0x1a, 0x88, 0x01, 0x98, 0x9e, 0xa0, 0x5a, 0x23, - 0x24, 0x12, 0xba, 0xd0, 0x8c, 0x81, 0x18, 0x08, 0xcd, 0x80, 0x1b, 0x26, 0x23, 0x23, 0xb9, 0xa9, - 0xaf, 0x81, 0x08, 0x00, 0xeb, 0x08, 0x8b, 0x45, 0x22, 0x32, 0xb1, 0x8b, 0xcd, 0x18, 0x99, 0x01, - 0xe8, 0x0a, 0xb8, 0x72, 0x13, 0x33, 0x91, 0x8b, 0xfb, 0x1a, 0x98, 0x18, 0xa0, 0x8e, 0xa0, 0x58, - 0x24, 0x32, 0x83, 0xab, 0xf8, 0x8b, 0x91, 0x19, 0x91, 0xac, 0x90, 0x4b, 0x27, 0x41, 0x12, 0xb8, - 0xa8, 0x9f, 0x80, 0x1a, 0x01, 0xba, 0x08, 0x8b, 0x47, 0x31, 0x15, 0x98, 0x99, 0xcc, 0x19, 0x8a, - 0x12, 0xb8, 0x1a, 0xca, 0x72, 0x32, 0x25, 0x91, 0x99, 0xfb, 0x0a, 0x98, 0x11, 0x80, 0x8a, 0xc8, - 0x68, 0x12, 0x35, 0x01, 0xa9, 0xe9, 0x8c, 0x98, 0x11, 0x01, 0xa8, 0xa8, 0x3c, 0x24, 0x46, 0x11, - 0x98, 0xba, 0x9f, 0x98, 0x20, 0x10, 0xa0, 0x99, 0x0c, 0x15, 0x63, 0x12, 0x91, 0xbb, 0xae, 0x99, - 0x20, 0x01, 0x93, 0x9b, 0xac, 0x14, 0x74, 0x12, 0x82, 0xba, 0xcc, 0xa9, 0x18, 0x12, 0x03, 0x9c, - 0xb9, 0x20, 0x74, 0x24, 0x12, 0xbb, 0xeb, 0xaa, 0x29, 0x02, 0x32, 0xca, 0xa8, 0x09, 0x72, 0x16, - 0x22, 0xb9, 0xca, 0xbb, 0x1a, 0x03, 0x61, 0xc0, 0x88, 0x89, 0x40, 0x26, 0x31, 0xc0, 0xaa, 0xbc, - 0x0a, 0x22, 0x48, 0xc3, 0x8a, 0xa8, 0x38, 0x57, 0x20, 0xb3, 0x9c, 0xc9, 0x8b, 0x22, 0x29, 0x85, - 0x8c, 0x90, 0x19, 0x36, 0x11, 0x85, 0xbb, 0xb9, 0x9d, 0x30, 0x88, 0x16, 0x9b, 0x91, 0x8a, 0x64, - 0x01, 0x23, 0xcb, 0xa9, 0xad, 0x28, 0x91, 0x34, 0xc9, 0x00, 0x8b, 0x73, 0x82, 0x52, 0xb9, 0x99, - 0xbc, 0x18, 0x92, 0x70, 0xb0, 0x18, 0x99, 0x50, 0x03, 0x60, 0xc1, 0x89, 0xba, 0x0a, 0x82, 0x58, - 0xb3, 0x2a, 0xc8, 0x30, 0x16, 0x48, 0xa3, 0x0d, 0xca, 0x0a, 0x10, 0x29, 0x86, 0x0a, 0xb1, 0x29, - 0x34, 0x20, 0x07, 0x8c, 0xb8, 0x8c, 0x00, 0x08, 0x15, 0x9a, 0x92, 0x1a, 0x52, 0x01, 0x25, 0xbb, - 0xb0, 0xaf, 0x18, 0x90, 0x53, 0x99, 0x82, 0x9a, 0x41, 0x03, 0x73, 0xb8, 0x98, 0xbd, 0x09, 0x91, - 0x70, 0xa1, 0x01, 0x99, 0x28, 0x14, 0x60, 0xa1, 0x89, 0xdc, 0x89, 0x00, 0x49, 0x93, 0x10, 0xb8, - 0x88, 0x44, 0x38, 0x87, 0x0a, 0xda, 0x9a, 0x29, 0x19, 0x07, 0x08, 0x90, 0x89, 0x40, 0x10, 0x06, - 0x89, 0xc9, 0xbb, 0x2a, 0x80, 0x27, 0x08, 0xa1, 0x9a, 0x38, 0x84, 0x36, 0x98, 0xc9, 0xbc, 0x0b, - 0x81, 0x54, 0x01, 0x90, 0xaa, 0x19, 0x14, 0x73, 0x91, 0xa8, 0xbd, 0x9b, 0x01, 0x62, 0x02, 0x80, - 0xaa, 0x8b, 0x24, 0x73, 0x82, 0x99, 0xdc, 0xaa, 0x01, 0x31, 0x24, 0x00, 0xca, 0x9a, 0x31, 0x63, - 0x04, 0x98, 0xfb, 0xaa, 0x18, 0x20, 0x25, 0x00, 0xb9, 0x9b, 0x28, 0x44, 0x34, 0x88, 0xdc, 0xbb, - 0x09, 0x21, 0x35, 0x02, 0xc8, 0xab, 0x19, 0x53, 0x34, 0x81, 0xea, 0xac, 0x8a, 0x21, 0x43, 0x13, - 0xb8, 0xad, 0x0a, 0x52, 0x33, 0x03, 0xe9, 0xad, 0x9a, 0x20, 0x42, 0x23, 0xa0, 0xad, 0x99, 0x31, - 0x35, 0x23, 0xb9, 0xcf, 0x9a, 0x18, 0x32, 0x24, 0x91, 0xcb, 0xaa, 0x30, 0x35, 0x34, 0xa8, 0xbe, - 0xbb, 0x19, 0x43, 0x53, 0x81, 0xca, 0xa9, 0x29, 0x34, 0x34, 0x80, 0xcd, 0xba, 0x8a, 0x42, 0x43, - 0x02, 0xca, 0xaa, 0x89, 0x44, 0x43, 0x01, 0xeb, 0xba, 0x9a, 0x41, 0x42, 0x12, 0xb9, 0xbb, 0xaa, - 0x73, 0x43, 0x11, 0xd9, 0xab, 0xbb, 0x30, 0x35, 0x23, 0xc0, 0xab, 0xbb, 0x60, 0x24, 0x13, 0xc0, - 0xbc, 0xcb, 0x28, 0x33, 0x34, 0xa1, 0xbc, 0xba, 0x49, 0x35, 0x33, 0xa0, 0xbe, 0xac, 0x1a, 0x42, - 0x33, 0x82, 0xdb, 0xba, 0x2a, 0x45, 0x23, 0x81, 0xdc, 0xba, 0x8a, 0x42, 0x43, 0x02, 0xca, 0xba, - 0x0b, 0x54, 0x23, 0x02, 0xea, 0xbb, 0x9b, 0x32, 0x26, 0x12, 0xb9, 0xac, 0x9b, 0x62, 0x33, 0x13, - 0xd9, 0xbc, 0xab, 0x30, 0x35, 0x13, 0xb0, 0xbd, 0xaa, 0x40, 0x35, 0x13, 0xb8, 0xcd, 0xab, 0x10, - 0x34, 0x14, 0x90, 0xbc, 0xaa, 0x28, 0x46, 0x12, 0x90, 0xcc, 0xba, 0x08, 0x34, 0x14, 0x81, 0xdb, - 0xaa, 0x18, 0x63, 0x23, 0x90, 0xeb, 0xaa, 0x89, 0x43, 0x33, 0x81, 0xea, 0xab, 0x19, 0x62, 0x33, - 0x81, 0xea, 0xbb, 0x89, 0x41, 0x34, 0x01, 0xd9, 0xab, 0x89, 0x52, 0x34, 0x81, 0xd8, 0xbb, 0x9a, - 0x31, 0x36, 0x01, 0xb8, 0xae, 0x89, 0x31, 0x45, 0x81, 0xa8, 0xcc, 0x99, 0x20, 0x53, 0x02, 0x98, - 0xbd, 0x89, 0x20, 0x45, 0x82, 0x90, 0xbd, 0x9a, 0x18, 0x44, 0x12, 0x90, 0xcc, 0x8a, 0x18, 0x54, - 0x02, 0x80, 0xcc, 0x9a, 0x08, 0x43, 0x04, 0x80, 0xda, 0x9a, 0x00, 0x62, 0x13, 0x88, 0xda, 0x9b, - 0x09, 0x51, 0x14, 0x80, 0xc9, 0xab, 0x08, 0x62, 0x14, 0x80, 0xc9, 0xab, 0x89, 0x41, 0x25, 0x80, - 0xc8, 0xbb, 0x08, 0x51, 0x34, 0x00, 0xc9, 0xbc, 0x88, 0x20, 0x36, 0x80, 0xa8, 0xad, 0x09, 0x20, - 0x36, 0x01, 0xa9, 0xbd, 0x89, 0x18, 0x45, 0x01, 0xa8, 0xdb, 0x89, 0x11, 0x54, 0x01, 0x98, 0xdb, - 0x8a, 0x00, 0x63, 0x01, 0x88, 0xcb, 0x8a, 0x10, 0x73, 0x02, 0x88, 0xda, 0x8b, 0x08, 0x62, 0x02, - 0x88, 0xd9, 0x9a, 0x10, 0x52, 0x13, 0x90, 0xda, 0x9c, 0x08, 0x41, 0x14, 0x88, 0xb9, 0x9d, 0x18, - 0x41, 0x15, 0x90, 0xb8, 0xad, 0x08, 0x30, 0x25, 0x80, 0xb9, 0xad, 0x19, 0x41, 0x25, 0x80, 0xb8, - 0xbd, 0x09, 0x30, 0x35, 0x81, 0xa9, 0xcd, 0x09, 0x21, 0x35, 0x82, 0xa9, 0xbd, 0x8a, 0x20, 0x45, - 0x01, 0x99, 0xcc, 0x89, 0x11, 0x54, 0x01, 0x98, 0xcb, 0x9b, 0x10, 0x44, 0x03, 0x99, 0xea, 0x9a, - 0x20, 0x63, 0x12, 0x98, 0xcb, 0x9c, 0x00, 0x52, 0x13, 0x89, 0xda, 0xab, 0x20, 0x62, 0x23, 0x98, - 0xd9, 0xbb, 0x08, 0x52, 0x24, 0x98, 0xb9, 0xad, 0x18, 0x41, 0x25, 0x80, 0xb9, 0xbd, 0x08, 0x31, - 0x35, 0x88, 0xa9, 0xae, 0x09, 0x22, 0x36, 0x80, 0xb8, 0xcc, 0x89, 0x21, 0x44, 0x80, 0x98, 0xbd, - 0x89, 0x22, 0x45, 0x01, 0x99, 0xbc, 0x8b, 0x20, 0x54, 0x82, 0x98, 0xbc, 0x9b, 0x31, 0x45, 0x03, - 0x98, 0xcc, 0x9b, 0x10, 0x63, 0x03, 0x98, 0xdb, 0x9b, 0x20, 0x63, 0x13, 0x90, 0xdb, 0xab, 0x18, - 0x52, 0x14, 0x88, 0xca, 0xbb, 0x28, 0x63, 0x14, 0x80, 0xba, 0xad, 0x19, 0x31, 0x35, 0x80, 0xda, - 0xab, 0x09, 0x43, 0x35, 0x00, 0xc9, 0xbc, 0x89, 0x32, 0x44, 0x81, 0xb9, 0xbd, 0x89, 0x42, 0x44, - 0x81, 0xb8, 0xbc, 0x9a, 0x32, 0x54, 0x01, 0xb8, 0xcc, 0x99, 0x31, 0x54, 0x01, 0xa0, 0xbc, 0xaa, - 0x30, 0x44, 0x03, 0xa8, 0xbd, 0x9b, 0x30, 0x45, 0x13, 0x98, 0xdc, 0x9a, 0x28, 0x43, 0x13, 0x98, - 0xdc, 0xaa, 0x20, 0x53, 0x23, 0x90, 0xcc, 0xab, 0x29, 0x53, 0x23, 0x80, 0xdc, 0xaa, 0x29, 0x53, - 0x33, 0x80, 0xeb, 0xab, 0x09, 0x43, 0x24, 0x81, 0xdb, 0xab, 0x1a, 0x53, 0x24, 0x01, 0xca, 0xac, - 0x0a, 0x32, 0x25, 0x82, 0xca, 0xbc, 0x89, 0x52, 0x43, 0x01, 0xb9, 0xbd, 0x8a, 0x32, 0x35, 0x01, - 0xc8, 0xad, 0x8a, 0x41, 0x43, 0x02, 0xa9, 0xbd, 0x9a, 0x31, 0x44, 0x02, 0xa8, 0xae, 0x8b, 0x21, - 0x35, 0x12, 0xa8, 0xbd, 0xab, 0x30, 0x45, 0x12, 0x99, 0xcc, 0x9b, 0x30, 0x44, 0x22, 0x98, 0xcc, - 0x9b, 0x28, 0x34, 0x14, 0x98, 0xeb, 0xaa, 0x10, 0x53, 0x23, 0x90, 0xdb, 0xbb, 0x18, 0x63, 0x23, - 0x98, 0xcb, 0xad, 0x18, 0x43, 0x24, 0x80, 0xbb, 0xbd, 0x18, 0x42, 0x33, 0x91, 0xeb, 0xcb, 0x08, - 0x33, 0x35, 0x81, 0xca, 0xbc, 0x09, 0x42, 0x24, 0x81, 0xca, 0xcb, 0x0a, 0x33, 0x45, 0x01, 0xaa, - 0xcc, 0x89, 0x22, 0x34, 0x02, 0xcb, 0xdb, 0x8a, 0x32, 0x44, 0x83, 0xa9, 0xcc, 0x9a, 0x22, 0x44, - 0x02, 0xb9, 0xcc, 0x8b, 0x31, 0x44, 0x13, 0xa9, 0xcc, 0x9b, 0x31, 0x53, 0x13, 0xb9, 0xcc, 0xab, - 0x31, 0x44, 0x14, 0xa8, 0xbb, 0xad, 0x21, 0x42, 0x14, 0xb0, 0xcb, 0xac, 0x20, 0x43, 0x15, 0x90, - 0xab, 0xad, 0x28, 0x42, 0x33, 0xa8, 0xbc, 0xbd, 0x28, 0x43, 0x34, 0x90, 0xca, 0xbc, 0x18, 0x33, - 0x35, 0x91, 0xbc, 0xad, 0x19, 0x33, 0x35, 0x81, 0xcb, 0xcb, 0x1a, 0x33, 0x35, 0x92, 0xdb, 0xcb, - 0x1a, 0x32, 0x35, 0x02, 0xca, 0xcb, 0x8a, 0x33, 0x44, 0x02, 0xcb, 0xac, 0x8b, 0x33, 0x54, 0x02, - 0xa9, 0xbc, 0x9b, 0x43, 0x43, 0x03, 0xca, 0xbc, 0xab, 0x52, 0x42, 0x13, 0xb8, 0xad, 0x9b, 0x31, - 0x34, 0x15, 0xb9, 0xbc, 0xbb, 0x51, 0x42, 0x13, 0x98, 0xcc, 0xaa, 0x30, 0x43, 0x24, 0xa9, 0xbd, - 0xaa, 0x49, 0x33, 0x25, 0x90, 0xdb, 0xaa, 0x39, 0x24, 0x24, 0xa0, 0xcc, 0xab, 0x29, 0x34, 0x34, - 0x91, 0xdb, 0xab, 0x19, 0x25, 0x33, 0xa1, 0xfb, 0xab, 0x09, 0x34, 0x43, 0x81, 0xd9, 0xab, 0x89, - 0x34, 0x43, 0x91, 0xda, 0xac, 0x89, 0x43, 0x33, 0x83, 0xc9, 0xad, 0x8a, 0x42, 0x33, 0x83, 0xcb, - 0xaf, 0x89, 0x31, 0x43, 0x03, 0xa9, 0xbd, 0x8a, 0x41, 0x43, 0x02, 0xaa, 0xbf, 0x89, 0x30, 0x34, - 0x13, 0x99, 0xcd, 0x8a, 0x20, 0x34, 0x13, 0xaa, 0xce, 0x9a, 0x20, 0x34, 0x33, 0x99, 0xfb, 0x9a, - 0x10, 0x43, 0x23, 0xa9, 0xec, 0x9a, 0x00, 0x43, 0x24, 0x98, 0xc9, 0x8c, 0x08, 0x33, 0x34, 0xa9, - 0xea, 0x9c, 0x00, 0x32, 0x34, 0x80, 0xc9, 0x9d, 0x08, 0x41, 0x23, 0xa1, 0xda, 0xad, 0x08, 0x41, - 0x33, 0x92, 0xa9, 0xaf, 0x08, 0x30, 0x34, 0x91, 0xba, 0xbf, 0x08, 0x30, 0x44, 0x82, 0x99, 0xcc, - 0x09, 0x21, 0x34, 0x81, 0xaa, 0xce, 0x09, 0x10, 0x44, 0x01, 0x98, 0xda, 0x0a, 0x10, 0x34, 0x83, - 0xaa, 0xec, 0x8a, 0x10, 0x34, 0x13, 0x98, 0xfa, 0x8a, 0x10, 0x52, 0x02, 0x99, 0xdb, 0x8c, 0x10, - 0x42, 0x23, 0x98, 0xd9, 0x8c, 0x00, 0x42, 0x13, 0xb8, 0xda, 0x9d, 0x00, 0x42, 0x23, 0x90, 0xb9, - 0x9f, 0x00, 0x31, 0x24, 0xa8, 0xba, 0xaf, 0x00, 0x30, 0x26, 0x80, 0x99, 0xbc, 0x00, 0x21, 0x26, - 0x90, 0xaa, 0xcd, 0x18, 0x20, 0x34, 0x01, 0x9a, 0xcc, 0x19, 0x20, 0x35, 0x80, 0xab, 0xec, 0x19, - 0x10, 0x53, 0x01, 0x89, 0xda, 0x09, 0x00, 0x34, 0x82, 0xaa, 0xfb, 0x0b, 0x10, 0x63, 0x02, 0x98, - 0xc8, 0x0c, 0x00, 0x42, 0x12, 0xaa, 0xea, 0x8c, 0x01, 0x51, 0x22, 0x98, 0xb9, 0x9c, 0x01, 0x51, - 0x13, 0xb8, 0xda, 0x9d, 0x00, 0x41, 0x14, 0x91, 0x99, 0x9d, 0x00, 0x30, 0x24, 0xb0, 0xba, 0xbf, - 0x00, 0x40, 0x24, 0x92, 0x98, 0xbd, 0x18, 0x38, 0x25, 0xa1, 0xaa, 0xdd, 0x08, 0x20, 0x34, 0x83, - 0x99, 0xeb, 0x09, 0x18, 0x25, 0x92, 0x9a, 0xdc, 0x0a, 0x10, 0x44, 0x12, 0x89, 0xd9, 0x0b, 0x00, - 0x43, 0x03, 0xaa, 0xfb, 0x8c, 0x10, 0x42, 0x23, 0x98, 0xc8, 0x9d, 0x81, 0x32, 0x14, 0xa9, 0xd9, - 0x9d, 0x00, 0x42, 0x33, 0x88, 0xb8, 0xaf, 0x00, 0x21, 0x24, 0xa8, 0xb9, 0xaf, 0x18, 0x30, 0x35, - 0x80, 0x98, 0xbd, 0x08, 0x11, 0x44, 0x90, 0xa9, 0xcd, 0x19, 0x20, 0x44, 0x82, 0x88, 0xcc, 0x09, - 0x10, 0x43, 0x92, 0x9a, 0xcd, 0x0a, 0x20, 0x44, 0x83, 0x80, 0xdb, 0x0b, 0x00, 0x62, 0x82, 0x8a, - 0xea, 0x8b, 0x11, 0x53, 0x13, 0x88, 0xd9, 0x9b, 0x10, 0x41, 0x04, 0x99, 0xe9, 0xab, 0x11, 0x42, - 0x25, 0x88, 0xa8, 0xad, 0x00, 0x20, 0x15, 0x98, 0xb9, 0xae, 0x28, 0x21, 0x26, 0x00, 0x98, 0xbd, - 0x18, 0x10, 0x34, 0x98, 0xa9, 0xbf, 0x29, 0x11, 0x45, 0x81, 0x88, 0xdb, 0x09, 0x00, 0x43, 0x81, - 0x9a, 0xcd, 0x0a, 0x12, 0x54, 0x82, 0x88, 0xda, 0x8a, 0x01, 0x42, 0x02, 0x9a, 0xdc, 0x0b, 0x21, - 0x62, 0x13, 0x89, 0xd9, 0x9b, 0x01, 0x42, 0x03, 0x9a, 0xeb, 0x9c, 0x21, 0x42, 0x24, 0x98, 0xc8, - 0xac, 0x01, 0x21, 0x15, 0x99, 0xc9, 0x9d, 0x10, 0x32, 0x35, 0x90, 0xa9, 0xae, 0x18, 0x20, 0x43, - 0xa8, 0xb9, 0xbe, 0x28, 0x32, 0x36, 0x91, 0xa8, 0xbd, 0x19, 0x11, 0x63, 0xa0, 0x99, 0xcc, 0x19, - 0x32, 0x63, 0x82, 0x99, 0xdb, 0x0a, 0x11, 0x52, 0xa2, 0x9a, 0xeb, 0x0a, 0x23, 0x53, 0x03, 0xa9, - 0xea, 0x8b, 0x12, 0x41, 0x84, 0xaa, 0xda, 0x8b, 0x33, 0x43, 0x15, 0x99, 0xba, 0x9d, 0x30, 0x11, - 0x06, 0x9a, 0xba, 0xac, 0x42, 0x23, 0x35, 0xa9, 0xc9, 0xac, 0x30, 0x11, 0x34, 0xc9, 0xaa, 0xad, - 0x48, 0x13, 0x44, 0xa0, 0xa9, 0xbc, 0x28, 0x12, 0x63, 0xb0, 0xaa, 0xdb, 0x29, 0x15, 0x52, 0x91, - 0x9a, 0xca, 0x1a, 0x03, 0x61, 0x91, 0x9b, 0xcb, 0x1a, 0x25, 0x42, 0x93, 0xaa, 0xdb, 0x8b, 0x14, - 0x30, 0x85, 0xab, 0xba, 0x8c, 0x34, 0x42, 0x05, 0x9a, 0xba, 0x9c, 0x31, 0x21, 0x16, 0xab, 0xc9, - 0xaa, 0x52, 0x22, 0x25, 0xaa, 0xb9, 0xad, 0x30, 0x21, 0x34, 0xca, 0xa9, 0xad, 0x40, 0x23, 0x34, - 0xb9, 0xb9, 0xbe, 0x38, 0x12, 0x44, 0xb8, 0xa9, 0xad, 0x38, 0x24, 0x53, 0xa0, 0xaa, 0xcc, 0x29, - 0x22, 0x52, 0xb1, 0xaa, 0xcc, 0x28, 0x33, 0x44, 0xa2, 0xab, 0xcc, 0x0a, 0x33, 0x42, 0x93, 0x9d, - 0xda, 0x19, 0x42, 0x32, 0x83, 0x9d, 0xda, 0x0a, 0x31, 0x23, 0x84, 0xbb, 0xeb, 0x0a, 0x43, 0x33, - 0x13, 0xad, 0xdb, 0x8a, 0x31, 0x24, 0x22, 0xcb, 0xda, 0x0b, 0x42, 0x33, 0x23, 0xeb, 0xc9, 0x8b, - 0x21, 0x25, 0x21, 0xca, 0xc9, 0x8b, 0x32, 0x26, 0x21, 0xc9, 0xba, 0x9d, 0x21, 0x24, 0x12, 0xc8, - 0xba, 0x9d, 0x22, 0x34, 0x22, 0xc8, 0xbc, 0x9c, 0x11, 0x44, 0x11, 0xb0, 0xbb, 0xad, 0x31, 0x54, - 0x11, 0xa8, 0xac, 0xcb, 0x21, 0x52, 0x12, 0xa0, 0xac, 0xbb, 0x40, 0x63, 0x02, 0x90, 0xbc, 0xcb, - 0x20, 0x52, 0x13, 0x90, 0xcb, 0xcb, 0x38, 0x43, 0x14, 0x90, 0xbc, 0xbc, 0x28, 0x43, 0x15, 0x80, - 0xca, 0xba, 0x29, 0x53, 0x14, 0x80, 0xdb, 0xba, 0x1a, 0x34, 0x34, 0x80, 0xd9, 0xba, 0x1a, 0x43, - 0x25, 0x90, 0xc9, 0xac, 0x8a, 0x24, 0x34, 0x00, 0xb9, 0xbc, 0x8b, 0x34, 0x44, 0x80, 0xb9, 0xbd, - 0x8b, 0x43, 0x53, 0x82, 0xa0, 0xad, 0x9a, 0x32, 0x34, 0x82, 0xb9, 0xaf, 0xab, 0x32, 0x44, 0x03, - 0x90, 0xbc, 0xbb, 0x50, 0x42, 0x02, 0x99, 0xbe, 0xb9, 0x40, 0x33, 0x24, 0x88, 0xdb, 0xba, 0x38, - 0x24, 0x14, 0x89, 0xcd, 0xaa, 0x38, 0x24, 0x24, 0x00, 0xda, 0xaa, 0x2a, 0x33, 0x24, 0x98, 0xfb, - 0xab, 0x09, 0x35, 0x33, 0x01, 0xd9, 0xbb, 0x8a, 0x34, 0x33, 0x91, 0xfb, 0x9d, 0x89, 0x52, 0x32, - 0x01, 0xb8, 0xad, 0x8a, 0x41, 0x22, 0x82, 0xe9, 0xac, 0x99, 0x42, 0x24, 0x03, 0xa0, 0xad, 0xaa, - 0x40, 0x22, 0x83, 0xc8, 0xae, 0x9a, 0x40, 0x34, 0x22, 0x88, 0xad, 0xab, 0x39, 0x15, 0x12, 0xa8, - 0xbe, 0xaa, 0x38, 0x27, 0x13, 0x81, 0xdb, 0x9a, 0x0a, 0x34, 0x21, 0x98, 0xcd, 0x9b, 0x29, 0x45, - 0x22, 0x82, 0xda, 0xaa, 0x8a, 0x34, 0x12, 0x80, 0xec, 0x9a, 0x09, 0x63, 0x13, 0x02, 0xc9, 0xab, - 0xaa, 0x52, 0x12, 0x01, 0xeb, 0xab, 0x99, 0x73, 0x14, 0x11, 0xb8, 0xac, 0x99, 0x30, 0x14, 0x01, - 0xda, 0xac, 0x89, 0x61, 0x23, 0x22, 0xb8, 0xbd, 0x99, 0x28, 0x25, 0x00, 0xc8, 0xad, 0x89, 0x40, - 0x35, 0x11, 0xa0, 0xbc, 0x9a, 0x19, 0x35, 0x00, 0xb0, 0xaf, 0x89, 0x28, 0x36, 0x12, 0x91, 0xdb, - 0x9a, 0x09, 0x52, 0x81, 0x90, 0xcc, 0x8a, 0x10, 0x74, 0x11, 0x00, 0xba, 0xab, 0x98, 0x61, 0x82, - 0x80, 0xdb, 0x8b, 0x00, 0x72, 0x14, 0x00, 0xa9, 0xac, 0x88, 0x38, 0x04, 0x80, 0xd9, 0x9c, 0x00, - 0x51, 0x15, 0x00, 0xa0, 0xbc, 0x88, 0x29, 0x15, 0x88, 0xb8, 0xbd, 0x10, 0x40, 0x27, 0x00, 0x90, - 0xbc, 0x98, 0x08, 0x24, 0x88, 0x90, 0xbe, 0x18, 0x10, 0x37, 0x01, 0x00, 0xcc, 0x89, 0x89, 0x42, - 0x80, 0x80, 0xdc, 0x09, 0x01, 0x64, 0x01, 0x00, 0xd9, 0x8a, 0x98, 0x31, 0x82, 0x19, 0xfa, 0x8a, - 0x02, 0x62, 0x13, 0x18, 0xd8, 0x9c, 0x90, 0x38, 0x83, 0x19, 0xf0, 0x8b, 0x01, 0x51, 0x15, 0x08, - 0xb1, 0x9d, 0x98, 0x18, 0x23, 0x8a, 0xc2, 0x9f, 0x01, 0x21, 0x26, 0x80, 0x80, 0xae, 0x90, 0x08, - 0x32, 0xa9, 0x82, 0xaf, 0x10, 0x11, 0x45, 0x80, 0x00, 0xcc, 0x88, 0x89, 0x32, 0xa0, 0x20, 0xce, - 0x28, 0x10, 0x73, 0x92, 0x10, 0xdb, 0x89, 0x98, 0x30, 0xb3, 0x28, 0xfa, 0x2a, 0x10, 0x73, 0x02, - 0x19, 0xe8, 0x8a, 0x98, 0x20, 0x93, 0x1a, 0xf1, 0x1a, 0x11, 0x41, 0x15, 0x09, 0xd1, 0x8b, 0xa8, - 0x18, 0x13, 0x0c, 0xb3, 0x8e, 0x12, 0x30, 0x27, 0x88, 0xa1, 0xad, 0x98, 0x89, 0x33, 0x9a, 0x83, - 0x9f, 0x21, 0x20, 0x46, 0x88, 0x81, 0xbc, 0x99, 0x9a, 0x42, 0xb8, 0x32, 0xcc, 0x21, 0x01, 0x56, - 0x91, 0x10, 0xdb, 0x89, 0xaa, 0x30, 0xb1, 0x40, 0xd0, 0x28, 0x01, 0x72, 0x83, 0x28, 0xd9, 0x9b, - 0xb9, 0x19, 0x82, 0x49, 0xb3, 0x2c, 0x84, 0x61, 0x04, 0x08, 0xb1, 0x9e, 0xb8, 0x8a, 0x02, 0x08, - 0x05, 0x8a, 0x14, 0x28, 0x26, 0x80, 0x82, 0xaf, 0xa9, 0x9b, 0x11, 0x80, 0x25, 0x99, 0x13, 0x29, - 0x46, 0x81, 0x20, 0xec, 0x99, 0xab, 0x18, 0x01, 0x62, 0xa0, 0x21, 0x08, 0x42, 0x04, 0x38, 0xf8, - 0x9b, 0xbc, 0x08, 0x01, 0x50, 0x83, 0x29, 0x91, 0x30, 0x17, 0x00, 0xc2, 0xad, 0xca, 0x8a, 0x21, - 0x20, 0x07, 0x09, 0x81, 0x00, 0x43, 0x00, 0x83, 0xcf, 0xb9, 0xaa, 0x20, 0x12, 0x27, 0x88, 0x00, - 0x89, 0x42, 0x82, 0x23, 0xce, 0xba, 0x9d, 0x18, 0x02, 0x44, 0x91, 0x00, 0x99, 0x30, 0x15, 0x40, - 0xe9, 0xaa, 0xbc, 0x19, 0x22, 0x72, 0x92, 0x18, 0xa9, 0x28, 0x14, 0x21, 0xe2, 0xac, 0xda, 0x89, - 0x21, 0x42, 0x04, 0x09, 0x98, 0x1a, 0x32, 0x42, 0xa3, 0xcf, 0xba, 0x8c, 0x30, 0x42, 0x24, 0x98, - 0xa0, 0x8b, 0x42, 0x23, 0x13, 0xcf, 0xba, 0x9d, 0x10, 0x33, 0x44, 0x90, 0x89, 0x9b, 0x21, 0x34, - 0x32, 0xfb, 0xac, 0xac, 0x18, 0x33, 0x44, 0x81, 0x89, 0xbb, 0x20, 0x53, 0x32, 0xd8, 0xad, 0xbc, - 0x19, 0x42, 0x43, 0x02, 0x99, 0xca, 0x19, 0x43, 0x32, 0xb1, 0xbf, 0xbc, 0x8a, 0x52, 0x33, 0x13, - 0xa9, 0xd9, 0x0a, 0x42, 0x23, 0x82, 0xbf, 0xcb, 0x8b, 0x31, 0x26, 0x22, 0xa0, 0xaa, 0x8c, 0x31, - 0x34, 0x02, 0xfb, 0xac, 0x9b, 0x20, 0x35, 0x33, 0xa0, 0xaa, 0xad, 0x21, 0x34, 0x22, 0xfa, 0xbb, - 0xac, 0x10, 0x44, 0x23, 0x91, 0xaa, 0xbb, 0x28, 0x36, 0x22, 0xc8, 0xbe, 0xbb, 0x29, 0x63, 0x33, - 0x82, 0xaa, 0xcb, 0x19, 0x53, 0x23, 0xa0, 0xbf, 0xcb, 0x09, 0x42, 0x34, 0x02, 0xb9, 0xba, 0x0b, - 0x53, 0x24, 0x91, 0xdc, 0xcb, 0x89, 0x31, 0x35, 0x13, 0xa9, 0xca, 0x9a, 0x32, 0x35, 0x81, 0xeb, - 0xac, 0x9b, 0x31, 0x45, 0x22, 0x98, 0xba, 0xab, 0x31, 0x35, 0x12, 0xe9, 0xad, 0x9b, 0x20, 0x63, - 0x23, 0x80, 0xba, 0xbb, 0x28, 0x54, 0x12, 0xb9, 0xbe, 0xac, 0x10, 0x53, 0x33, 0x01, 0xbb, 0xcb, - 0x19, 0x53, 0x13, 0x98, 0xce, 0xbb, 0x29, 0x52, 0x34, 0x01, 0xa9, 0xcb, 0x09, 0x32, 0x24, 0x80, - 0xdd, 0xbb, 0x1a, 0x42, 0x44, 0x12, 0xa8, 0xcb, 0x0a, 0x21, 0x34, 0x91, 0xeb, 0xbc, 0x8a, 0x32, - 0x45, 0x22, 0x98, 0xbb, 0x8c, 0x20, 0x43, 0x02, 0xda, 0xbd, 0x9b, 0x31, 0x45, 0x22, 0x91, 0xbb, - 0x9c, 0x10, 0x52, 0x12, 0xc9, 0xcc, 0x9b, 0x38, 0x63, 0x23, 0x81, 0xba, 0xcb, 0x18, 0x32, 0x25, - 0xb8, 0xbe, 0xcb, 0x18, 0x34, 0x34, 0x82, 0xb9, 0xbc, 0x09, 0x42, 0x23, 0xa1, 0xce, 0xcb, 0x19, - 0x42, 0x34, 0x02, 0xa9, 0xcb, 0x8a, 0x22, 0x24, 0x93, 0xcd, 0xac, 0x8a, 0x42, 0x34, 0x23, 0xa8, - 0xbc, 0x9b, 0x30, 0x34, 0x03, 0xdc, 0xbc, 0x9b, 0x42, 0x44, 0x13, 0x90, 0xbb, 0xac, 0x20, 0x33, - 0x33, 0xfb, 0xbc, 0xab, 0x40, 0x44, 0x32, 0x90, 0xb9, 0xad, 0x18, 0x23, 0x32, 0xd8, 0xad, 0x9c, - 0x18, 0x34, 0x34, 0x92, 0xaa, 0xbc, 0x09, 0x42, 0x22, 0xb1, 0xaf, 0xac, 0x08, 0x53, 0x33, 0x03, - 0xaa, 0xcc, 0x8a, 0x32, 0x32, 0x92, 0xbf, 0xcb, 0x89, 0x53, 0x43, 0x12, 0x99, 0xcb, 0x9a, 0x31, - 0x22, 0x03, 0xed, 0xba, 0x8a, 0x51, 0x24, 0x14, 0x98, 0xaa, 0xbb, 0x20, 0x14, 0x13, 0xfa, 0xbb, - 0xaa, 0x41, 0x35, 0x43, 0xa0, 0xaa, 0xbb, 0x29, 0x33, 0x33, 0xf9, 0xad, 0xab, 0x30, 0x45, 0x42, - 0x91, 0x9a, 0xca, 0x09, 0x22, 0x21, 0xc1, 0xbd, 0xbb, 0x28, 0x45, 0x24, 0x03, 0x9b, 0xcb, 0x8b, - 0x22, 0x22, 0xa3, 0xcf, 0xb9, 0x1a, 0x63, 0x33, 0x23, 0xba, 0xda, 0x9b, 0x20, 0x23, 0x11, 0xce, - 0xba, 0x8b, 0x44, 0x34, 0x33, 0xb8, 0xca, 0xac, 0x00, 0x22, 0x21, 0xfa, 0x9b, 0x9c, 0x22, 0x45, - 0x32, 0xa1, 0xaa, 0xbc, 0x09, 0x31, 0x12, 0xe0, 0x9c, 0xcb, 0x21, 0x54, 0x22, 0x93, 0x9a, 0xcc, - 0x09, 0x20, 0x01, 0xa1, 0xae, 0xc9, 0x28, 0x53, 0x24, 0x12, 0xaa, 0xe9, 0x0a, 0x18, 0x01, 0x01, - 0xad, 0xc9, 0x1a, 0x53, 0x24, 0x23, 0xa9, 0xd9, 0x9b, 0x08, 0x11, 0x21, 0xfb, 0xa9, 0x0c, 0x42, - 0x43, 0x33, 0xb1, 0xba, 0x9f, 0x88, 0x10, 0x20, 0xd8, 0x8a, 0x9c, 0x32, 0x44, 0x43, 0x92, 0xaa, - 0xcc, 0x88, 0x08, 0x21, 0xb1, 0x9d, 0xca, 0x30, 0x44, 0x34, 0x83, 0xaa, 0xeb, 0x8a, 0x08, 0x11, - 0x82, 0x9e, 0xc8, 0x29, 0x43, 0x34, 0x14, 0xa9, 0xd9, 0x9b, 0x88, 0x11, 0x22, 0xbc, 0xb9, 0x0c, - 0x34, 0x55, 0x23, 0xa8, 0xb9, 0xae, 0x98, 0x10, 0x22, 0xc8, 0x99, 0xbb, 0x43, 0x55, 0x33, 0x91, - 0xaa, 0xce, 0x98, 0x00, 0x12, 0xa2, 0x8b, 0xbc, 0x30, 0x64, 0x24, 0x82, 0x99, 0xdc, 0x8a, 0x08, - 0x12, 0x02, 0xab, 0xe9, 0x29, 0x51, 0x34, 0x13, 0xaa, 0xfa, 0x9b, 0x88, 0x22, 0x22, 0xaa, 0xd9, - 0x0b, 0x42, 0x36, 0x33, 0xb8, 0xda, 0x9e, 0x88, 0x11, 0x21, 0xa0, 0xa9, 0x8d, 0x11, 0x36, 0x43, - 0x90, 0xba, 0xae, 0x8a, 0x11, 0x32, 0xa2, 0xaa, 0x9e, 0x00, 0x64, 0x22, 0x93, 0xaa, 0xbe, 0xa9, - 0x20, 0x31, 0x84, 0x9a, 0xcb, 0x88, 0x64, 0x23, 0x13, 0xbb, 0xdc, 0x9b, 0x18, 0x22, 0x14, 0xaa, - 0xc9, 0x8a, 0x72, 0x33, 0x14, 0xa9, 0xdb, 0xbb, 0x19, 0x13, 0x53, 0xb8, 0xa9, 0xab, 0x71, 0x24, - 0x43, 0xb8, 0xba, 0xbd, 0x0a, 0x13, 0x52, 0xb1, 0x99, 0xbb, 0x58, 0x26, 0x41, 0xa1, 0xaa, 0xcc, - 0x8a, 0x12, 0x40, 0x93, 0x8b, 0xbb, 0x3a, 0x47, 0x41, 0x92, 0xaa, 0xeb, 0x9a, 0x11, 0x30, 0x85, - 0x8a, 0xa9, 0x0b, 0x45, 0x22, 0x05, 0xaa, 0xca, 0xac, 0x20, 0x10, 0x15, 0x99, 0xa8, 0x8c, 0x53, - 0x12, 0x25, 0xba, 0xb9, 0xae, 0x18, 0x01, 0x43, 0xa8, 0x98, 0x9c, 0x51, 0x22, 0x63, 0xb8, 0x99, - 0xbd, 0x19, 0x01, 0x61, 0x90, 0x09, 0xba, 0x40, 0x23, 0x73, 0xa1, 0x9a, 0xcc, 0x89, 0x11, 0x40, - 0xa3, 0x1a, 0xca, 0x29, 0x25, 0x51, 0x93, 0x8c, 0xda, 0x8a, 0x00, 0x30, 0x05, 0x8a, 0xb0, 0x0a, - 0x34, 0x42, 0x05, 0x9b, 0xe9, 0x9b, 0x00, 0x01, 0x25, 0x8a, 0xa1, 0x8c, 0x32, 0x14, 0x35, 0xba, - 0xd8, 0xac, 0x88, 0x01, 0x34, 0xa0, 0x91, 0x9d, 0x21, 0x24, 0x62, 0xa0, 0xa9, 0xae, 0x89, 0x01, - 0x51, 0x91, 0x00, 0xbb, 0x10, 0x34, 0x72, 0xa2, 0x99, 0xdc, 0x99, 0x10, 0x30, 0x84, 0x00, 0xba, - 0x89, 0x63, 0x31, 0x86, 0x89, 0xeb, 0x9a, 0x18, 0x10, 0x06, 0x00, 0xa9, 0x8a, 0x40, 0x22, 0x16, - 0x89, 0xda, 0xab, 0x1a, 0x01, 0x26, 0x00, 0xa8, 0x9b, 0x28, 0x15, 0x26, 0x88, 0xc9, 0xbc, 0x8a, - 0x02, 0x44, 0x01, 0xa0, 0xbb, 0x19, 0x34, 0x45, 0x81, 0xb9, 0xbf, 0x99, 0x01, 0x52, 0x02, 0x80, - 0xac, 0x89, 0x32, 0x44, 0x03, 0xa9, 0xbf, 0xab, 0x10, 0x42, 0x14, 0x00, 0xcb, 0x8a, 0x30, 0x63, - 0x23, 0xa8, 0xec, 0x9b, 0x19, 0x31, 0x34, 0x81, 0xd9, 0xaa, 0x28, 0x34, 0x25, 0x90, 0xfa, 0xaa, - 0x0a, 0x22, 0x43, 0x02, 0xc9, 0xab, 0x19, 0x63, 0x33, 0x82, 0xfb, 0xbb, 0x8a, 0x21, 0x44, 0x12, - 0xb8, 0xac, 0x0a, 0x42, 0x34, 0x13, 0xe9, 0xbc, 0x9a, 0x20, 0x43, 0x33, 0xa8, 0xbd, 0x99, 0x40, - 0x25, 0x13, 0xb8, 0xaf, 0x9b, 0x18, 0x33, 0x34, 0x91, 0xad, 0xaa, 0x20, 0x26, 0x23, 0xa0, 0xcd, - 0xab, 0x1a, 0x33, 0x35, 0x01, 0xbc, 0xaa, 0x19, 0x36, 0x33, 0x81, 0xce, 0xaa, 0x8a, 0x32, 0x34, - 0x13, 0xdb, 0xaa, 0x8a, 0x54, 0x32, 0x02, 0xeb, 0xab, 0xab, 0x41, 0x43, 0x22, 0xc9, 0xaa, 0x9b, - 0x62, 0x33, 0x13, 0xe9, 0xbb, 0xac, 0x20, 0x34, 0x23, 0xb0, 0xbc, 0xbb, 0x60, 0x24, 0x23, 0xb8, - 0xbe, 0xca, 0x18, 0x33, 0x24, 0x91, 0xbc, 0xba, 0x49, 0x44, 0x23, 0xa1, 0xad, 0xac, 0x8b, 0x73, - 0x02, 0x01, 0x07, 0x7d, 0x0b, 0x02, 0x70, 0x02, 0x42, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x7f, 0x77, 0x92, 0x98, 0xb9, 0xce, 0x19, 0x62, 0x24, 0x81, 0xea, 0xac, 0x19, 0x24, 0x12, - 0xa9, 0xb8, 0xad, 0x9c, 0x20, 0x75, 0x23, 0x81, 0xeb, 0xaa, 0x18, 0x35, 0x01, 0x88, 0xc8, 0xbb, - 0x9b, 0x10, 0x74, 0x24, 0x80, 0xcd, 0x9a, 0x21, 0x12, 0x91, 0x98, 0xda, 0xbc, 0x09, 0x32, 0x57, - 0x23, 0xa1, 0xcc, 0x99, 0x31, 0x24, 0x88, 0x90, 0xcb, 0xbc, 0x19, 0x11, 0x55, 0x22, 0xc8, 0xbd, - 0x19, 0x42, 0x01, 0x89, 0xa9, 0xcc, 0x9a, 0x08, 0x52, 0x36, 0x23, 0xb8, 0x9f, 0x19, 0x22, 0x02, - 0x90, 0x98, 0xcc, 0xaa, 0x10, 0x21, 0x44, 0x14, 0xea, 0xab, 0x28, 0x24, 0x80, 0x98, 0xaa, 0xbd, - 0x99, 0x08, 0x64, 0x34, 0x02, 0xd9, 0x9a, 0x28, 0x24, 0x11, 0x80, 0xca, 0xbc, 0x8b, 0x80, 0x31, - 0x37, 0x82, 0xdc, 0x8a, 0x21, 0x04, 0x88, 0xa8, 0xa9, 0xbd, 0x89, 0x18, 0x55, 0x34, 0x81, 0xda, - 0x8a, 0x42, 0x02, 0x02, 0x98, 0xcb, 0xbc, 0x99, 0x18, 0x21, 0x36, 0x82, 0xbe, 0x19, 0x42, 0x81, - 0x80, 0xbb, 0xcb, 0x9d, 0xa9, 0x30, 0x47, 0x13, 0x80, 0xcb, 0x09, 0x44, 0x01, 0x11, 0x99, 0xdb, - 0x9b, 0x9a, 0x08, 0x40, 0x16, 0xa8, 0xab, 0x21, 0x35, 0x90, 0xa8, 0xac, 0xca, 0xad, 0x99, 0x51, - 0x54, 0x02, 0x98, 0xba, 0x38, 0x35, 0x01, 0x81, 0x9a, 0xfa, 0x9a, 0x9a, 0x81, 0x50, 0x03, 0xa8, - 0xab, 0x43, 0x26, 0xb8, 0xcb, 0x19, 0xd8, 0xbc, 0x0a, 0x35, 0x53, 0x01, 0xa0, 0x9b, 0x40, 0x44, - 0x00, 0x88, 0x88, 0xbd, 0xcb, 0x1b, 0x02, 0x43, 0x00, 0xc1, 0x0b, 0x45, 0x82, 0xaa, 0xaa, 0x80, - 0xed, 0xbb, 0x39, 0x26, 0x23, 0x82, 0xc8, 0x0a, 0x42, 0x13, 0x10, 0x00, 0xc0, 0xbf, 0xbb, 0x18, - 0x22, 0x24, 0x10, 0xc9, 0x19, 0x36, 0xc8, 0x9a, 0x08, 0xb0, 0xcf, 0x9a, 0x41, 0x33, 0x24, 0x00, - 0xca, 0x09, 0x32, 0x12, 0x32, 0x21, 0xf8, 0xaf, 0x9b, 0x11, 0x22, 0x02, 0x81, 0xbc, 0x28, 0x16, - 0xa9, 0x89, 0x08, 0xf8, 0xbe, 0x1a, 0x53, 0x22, 0x22, 0xa0, 0x9d, 0x18, 0x21, 0x31, 0x23, 0x02, - 0xee, 0xba, 0x0b, 0x32, 0x13, 0x11, 0xd0, 0x9c, 0x31, 0x02, 0x09, 0x98, 0x81, 0xff, 0xad, 0x28, - 0x33, 0x22, 0x24, 0xb9, 0x9c, 0x20, 0x22, 0x32, 0x22, 0x91, 0xff, 0x9b, 0x18, 0x12, 0x12, 0x02, - 0xda, 0x0a, 0x31, 0x90, 0x00, 0x98, 0xe1, 0xef, 0x8a, 0x31, 0x13, 0x22, 0x13, 0xdb, 0x09, 0x20, - 0x21, 0x43, 0x12, 0xd8, 0xbf, 0x0b, 0x21, 0x22, 0x20, 0x91, 0xdc, 0x19, 0x21, 0x80, 0x09, 0x08, - 0xf9, 0xcf, 0x19, 0x32, 0x12, 0x32, 0x93, 0xad, 0x09, 0x32, 0x03, 0x21, 0x00, 0xf0, 0xcf, 0x09, - 0x22, 0x01, 0x10, 0xa1, 0xac, 0x28, 0x14, 0x88, 0xb9, 0x28, 0xfb, 0xbf, 0x38, 0x14, 0x01, 0x22, - 0xa0, 0xab, 0x38, 0x15, 0x00, 0x81, 0x68, 0xf0, 0xac, 0x18, 0x22, 0x02, 0x00, 0xb9, 0x9b, 0x72, - 0x91, 0x89, 0x99, 0x20, 0xdf, 0x9b, 0x51, 0x12, 0x00, 0x22, 0xb9, 0x89, 0x42, 0x81, 0x08, 0x18, - 0x37, 0xec, 0x9b, 0x28, 0x23, 0x00, 0x81, 0xbb, 0x1a, 0x16, 0xa9, 0x99, 0x2a, 0x96, 0xcf, 0x89, - 0x42, 0x02, 0x00, 0x03, 0x99, 0x08, 0x03, 0xaa, 0x88, 0x70, 0x07, 0xbc, 0x9b, 0x41, 0x12, 0x00, - 0x81, 0xab, 0x19, 0x92, 0xae, 0x08, 0x60, 0xd0, 0xac, 0x1a, 0x35, 0x81, 0x20, 0x81, 0x08, 0x00, - 0xa9, 0xbb, 0x38, 0x77, 0xa3, 0xbd, 0x0b, 0x33, 0x02, 0x11, 0xb1, 0x9b, 0x09, 0xc9, 0x8c, 0x10, - 0x53, 0xfc, 0xba, 0x48, 0x24, 0x80, 0x21, 0x90, 0x10, 0xa9, 0xaa, 0x0c, 0x72, 0x26, 0xb8, 0xbd, - 0x19, 0x23, 0x02, 0x20, 0xb9, 0x9b, 0x99, 0xcc, 0x38, 0x11, 0x86, 0xbe, 0xaa, 0x61, 0x22, 0x01, - 0x01, 0x80, 0x00, 0xda, 0xbb, 0x48, 0x54, 0x04, 0xda, 0xac, 0x21, 0x22, 0x82, 0x80, 0xaa, 0x99, - 0x99, 0xab, 0x34, 0x50, 0xe1, 0xbd, 0x89, 0x34, 0x22, 0x11, 0x00, 0x89, 0xa0, 0xad, 0xaa, 0x63, - 0x45, 0x82, 0xdd, 0x8a, 0x32, 0x22, 0x80, 0x99, 0xbb, 0x89, 0x99, 0x2a, 0x15, 0x31, 0xfa, 0xad, - 0x09, 0x34, 0x22, 0x01, 0x81, 0x8a, 0xb8, 0xbd, 0x0a, 0x46, 0x35, 0xb0, 0xaf, 0x1a, 0x23, 0x22, - 0x88, 0xba, 0x8d, 0x91, 0x9a, 0x21, 0x31, 0x03, 0xcf, 0xaa, 0x39, 0x25, 0x22, 0x81, 0x91, 0x1a, - 0xe8, 0xac, 0x28, 0x55, 0x23, 0xf9, 0xab, 0x20, 0x13, 0x22, 0x98, 0xcc, 0x18, 0xa8, 0x00, 0x18, - 0x22, 0x82, 0xcf, 0xa9, 0x31, 0x12, 0x25, 0x08, 0xa8, 0x10, 0xcc, 0xac, 0x40, 0x46, 0x03, 0xbd, - 0x9b, 0x31, 0x32, 0x23, 0xea, 0xaa, 0x81, 0x89, 0x81, 0x08, 0x30, 0x85, 0xbb, 0xac, 0x40, 0x31, - 0x06, 0x08, 0x90, 0x80, 0xeb, 0x9c, 0x51, 0x44, 0x92, 0xbd, 0x8a, 0x32, 0x32, 0x83, 0xcd, 0x89, - 0x80, 0x28, 0xa8, 0x8a, 0x72, 0x83, 0xab, 0xbb, 0x21, 0x71, 0x02, 0x08, 0x08, 0xa2, 0xce, 0x8b, - 0x63, 0x35, 0xb0, 0xbc, 0x0a, 0x32, 0x43, 0xb2, 0xae, 0x08, 0x80, 0x81, 0xaa, 0x19, 0x56, 0x81, - 0x9a, 0xab, 0x18, 0x52, 0x91, 0x18, 0x20, 0xb0, 0xdf, 0x09, 0x62, 0x14, 0xb8, 0xab, 0x08, 0x23, - 0x25, 0xe8, 0x8a, 0x00, 0x00, 0xa8, 0xab, 0x50, 0x26, 0xa0, 0xa9, 0xab, 0x11, 0x53, 0x88, 0x10, - 0x02, 0xfb, 0xbb, 0x28, 0x57, 0x02, 0xba, 0xaa, 0x18, 0x34, 0x03, 0xbd, 0x09, 0x00, 0x80, 0xcb, - 0x8c, 0x73, 0x14, 0xa8, 0xca, 0x89, 0x21, 0x12, 0x08, 0x22, 0xb8, 0xce, 0x9b, 0x52, 0x35, 0x81, - 0xca, 0xab, 0x30, 0x34, 0xa1, 0xac, 0x10, 0x90, 0xb9, 0xbd, 0x39, 0x57, 0x03, 0xba, 0xbc, 0x19, - 0x33, 0x12, 0x19, 0x83, 0xcd, 0xac, 0x18, 0x44, 0x32, 0x92, 0xbd, 0x9b, 0x50, 0x33, 0xa8, 0x8b, - 0x02, 0xcb, 0xbc, 0x9a, 0x72, 0x44, 0x92, 0xbc, 0xab, 0x20, 0x34, 0x01, 0x20, 0xd1, 0xbc, 0x8a, - 0x30, 0x35, 0x33, 0xc1, 0xbd, 0x9a, 0x63, 0x02, 0x99, 0x10, 0xb8, 0xac, 0x9a, 0x09, 0x65, 0x33, - 0xb8, 0xae, 0x9b, 0x41, 0x23, 0x00, 0x02, 0xfb, 0xaa, 0x18, 0x31, 0x43, 0x23, 0xd9, 0xac, 0x0b, - 0x45, 0x00, 0x88, 0x00, 0xca, 0xab, 0x98, 0x30, 0x47, 0x12, 0xd9, 0xab, 0x8b, 0x63, 0x12, 0x00, - 0x91, 0xbd, 0x8a, 0x00, 0x31, 0x34, 0x13, 0xda, 0xbc, 0x2a, 0x26, 0x00, 0x00, 0x91, 0xbd, 0x9a, - 0x89, 0x72, 0x23, 0x01, 0xcc, 0xbb, 0x0a, 0x27, 0x11, 0x10, 0xc9, 0xab, 0x08, 0x00, 0x42, 0x23, - 0x83, 0xcc, 0xad, 0x38, 0x25, 0x00, 0x00, 0xc8, 0xac, 0x89, 0x18, 0x46, 0x01, 0x90, 0xad, 0xbb, - 0x40, 0x25, 0x01, 0x90, 0xda, 0x8a, 0x08, 0x10, 0x43, 0x11, 0x91, 0xeb, 0x9c, 0x40, 0x23, 0x11, - 0x80, 0xdc, 0x9a, 0x98, 0x30, 0x27, 0x10, 0xb8, 0xbc, 0x9c, 0x61, 0x13, 0x00, 0x98, 0xad, 0x08, - 0x98, 0x10, 0x32, 0x42, 0x93, 0xdd, 0x9a, 0x51, 0x23, 0x00, 0xb8, 0xad, 0x89, 0x98, 0x61, 0x03, - 0x80, 0xc9, 0xac, 0x8a, 0x55, 0x12, 0x88, 0xc9, 0x9a, 0x81, 0x98, 0x30, 0x33, 0x34, 0xc2, 0xbe, - 0x9a, 0x54, 0x03, 0x80, 0xda, 0x99, 0x88, 0x88, 0x53, 0x02, 0x88, 0xdb, 0xab, 0x38, 0x57, 0x00, - 0x98, 0xbb, 0x08, 0x81, 0x9b, 0x31, 0x53, 0x15, 0xb9, 0xbc, 0x19, 0x47, 0x00, 0xa0, 0x9b, 0x88, - 0xa8, 0x09, 0x25, 0x02, 0xc9, 0xac, 0x89, 0x51, 0x26, 0x88, 0xa8, 0xaa, 0x10, 0xe9, 0x0a, 0x21, - 0x44, 0x03, 0xba, 0xac, 0x2a, 0x47, 0x80, 0x98, 0x89, 0x99, 0xb9, 0x29, 0x33, 0x80, 0xb8, 0x9b, - 0xa1, 0x7a, 0x37, 0x8a, 0xa0, 0x99, 0x11, 0xdd, 0xab, 0x41, 0x45, 0x01, 0xa9, 0xaa, 0x39, 0x17, - 0x00, 0xa8, 0x99, 0x08, 0xca, 0x0a, 0x80, 0x38, 0x84, 0x38, 0xa5, 0x2c, 0x94, 0x40, 0xc9, 0x09, - 0x80, 0xcf, 0x9a, 0x62, 0x33, 0x91, 0x9a, 0xca, 0x59, 0x03, 0x12, 0xa9, 0x8a, 0xa1, 0xbf, 0x89, - 0x88, 0x62, 0x82, 0x32, 0xfa, 0x1a, 0x10, 0x13, 0x9a, 0x10, 0xe8, 0xbe, 0x19, 0x53, 0x23, 0x80, - 0x81, 0xdd, 0x20, 0x01, 0x02, 0x9a, 0x11, 0xe8, 0x9c, 0x89, 0x00, 0x34, 0x32, 0x93, 0xdf, 0x08, - 0x22, 0x92, 0x09, 0x90, 0xdc, 0xac, 0x21, 0x44, 0x03, 0x10, 0xd8, 0x9d, 0x21, 0x21, 0x80, 0x08, - 0xa1, 0xdc, 0x9b, 0x88, 0x32, 0x37, 0x12, 0xe8, 0xac, 0x20, 0x32, 0x98, 0x10, 0xa8, 0xce, 0x8a, - 0x21, 0x44, 0x12, 0x82, 0xdc, 0x8a, 0x21, 0x23, 0x88, 0x10, 0xc9, 0xbd, 0x9a, 0x10, 0x54, 0x34, - 0x90, 0xdc, 0x8b, 0x41, 0x03, 0x89, 0x91, 0xda, 0xab, 0x08, 0x63, 0x32, 0x14, 0xb8, 0xbe, 0x09, - 0x43, 0x02, 0x00, 0x90, 0xeb, 0xab, 0x8a, 0x42, 0x45, 0x03, 0xba, 0xdc, 0x1a, 0x33, 0x02, 0x08, - 0xa8, 0xbd, 0x9b, 0x28, 0x44, 0x44, 0x02, 0xcb, 0xcb, 0x18, 0x24, 0x02, 0x00, 0xc8, 0xac, 0x9b, - 0x09, 0x54, 0x25, 0x90, 0xba, 0xbc, 0x49, 0x24, 0x80, 0x88, 0xba, 0xaa, 0x99, 0x31, 0x46, 0x25, - 0xa0, 0xcb, 0x9c, 0x30, 0x34, 0x01, 0xa0, 0xbc, 0xac, 0x99, 0x31, 0x47, 0x03, 0xb9, 0xdb, 0x9b, - 0x52, 0x03, 0x80, 0xa8, 0xab, 0x9a, 0x88, 0x51, 0x64, 0x13, 0xb8, 0xcc, 0x9a, 0x51, 0x22, 0x01, - 0xc9, 0xba, 0x9a, 0x88, 0x52, 0x36, 0x82, 0xcb, 0xbb, 0x1b, 0x45, 0x01, 0x98, 0xaa, 0x89, 0x98, - 0x88, 0x42, 0x47, 0x02, 0xba, 0xcc, 0x09, 0x34, 0x13, 0xa0, 0xbc, 0xab, 0x89, 0x18, 0x74, 0x24, - 0xa0, 0xbb, 0xbc, 0x28, 0x26, 0x81, 0x9a, 0x9a, 0x08, 0x98, 0x89, 0x73, 0x36, 0x90, 0xba, 0xad, - 0x28, 0x35, 0x01, 0xa9, 0xac, 0x9a, 0x08, 0x20, 0x55, 0x23, 0xc9, 0xcb, 0x9a, 0x40, 0x15, 0x98, - 0x8a, 0x89, 0x80, 0x99, 0x18, 0x65, 0x33, 0xb8, 0xcc, 0x9b, 0x61, 0x23, 0x90, 0xca, 0xaa, 0x09, - 0x00, 0x41, 0x44, 0x02, 0xdb, 0xba, 0x8a, 0x73, 0x82, 0x99, 0x99, 0x08, 0x88, 0x88, 0x58, 0x45, - 0x03, 0xca, 0xdb, 0x1a, 0x63, 0x02, 0xa8, 0xba, 0x9a, 0x00, 0x10, 0x53, 0x43, 0xa2, 0xbd, 0xbb, - 0x2a, 0x36, 0x91, 0x99, 0x9a, 0x08, 0x90, 0x89, 0x55, 0x54, 0x92, 0xcb, 0xac, 0x39, 0x26, 0x81, - 0xa9, 0xab, 0x88, 0x00, 0x21, 0x43, 0x44, 0xb8, 0xbc, 0xcb, 0x38, 0x15, 0x90, 0x99, 0x89, 0x00, - 0xa8, 0x30, 0x46, 0x36, 0xa0, 0xbd, 0x9c, 0x51, 0x23, 0x98, 0xba, 0x9b, 0x08, 0x10, 0x23, 0x73, - 0x13, 0xca, 0xdb, 0x9c, 0x31, 0x13, 0x80, 0x98, 0x8b, 0x98, 0x1a, 0x21, 0x77, 0x24, 0xb9, 0xcc, - 0x0a, 0x52, 0x12, 0xa8, 0xb9, 0x8a, 0x00, 0x10, 0x18, 0x55, 0x12, 0xba, 0xcd, 0x8b, 0x22, 0x12, - 0x00, 0xb9, 0x08, 0x10, 0x00, 0x4a, 0x77, 0x03, 0xda, 0xbb, 0x39, 0x34, 0x03, 0xa9, 0xcc, 0x09, - 0x11, 0x81, 0x48, 0x34, 0x82, 0xcd, 0xbc, 0x19, 0x12, 0x33, 0x90, 0xab, 0x00, 0x00, 0xb8, 0x73, - 0x57, 0x81, 0xcb, 0xab, 0x30, 0x33, 0x03, 0xca, 0xbb, 0x28, 0x02, 0x9b, 0x44, 0x45, 0xa2, 0xbd, - 0x9d, 0x08, 0x20, 0x14, 0x99, 0x88, 0x21, 0x80, 0x9b, 0x64, 0x53, 0xb0, 0xbc, 0x9b, 0x32, 0x44, - 0x91, 0xca, 0x8a, 0x21, 0x91, 0x19, 0x34, 0x35, 0xd8, 0xbd, 0xab, 0x10, 0x53, 0x82, 0xa9, 0x18, - 0x12, 0x98, 0x38, 0x37, 0x25, 0xe9, 0xbb, 0x0a, 0x32, 0x25, 0xa0, 0xaa, 0x0a, 0x12, 0x89, 0x52, - 0x32, 0x17, 0xdb, 0xbc, 0x8b, 0x21, 0x44, 0x90, 0x88, 0x28, 0x90, 0x0a, 0x51, 0x34, 0x05, 0xda, - 0xac, 0x19, 0x31, 0x23, 0xb8, 0xaa, 0x28, 0xa0, 0x18, 0x33, 0x75, 0x84, 0xdb, 0xcc, 0x09, 0x11, - 0x33, 0x89, 0x10, 0x11, 0x9a, 0x00, 0x31, 0x66, 0x93, 0xcc, 0xac, 0x20, 0x21, 0x14, 0xa9, 0x9a, - 0x02, 0x08, 0x01, 0x11, 0x65, 0xa1, 0xce, 0xac, 0x01, 0x11, 0x13, 0x18, 0x11, 0x90, 0x0a, 0x22, - 0x73, 0x33, 0xf8, 0xcc, 0x0a, 0x22, 0x21, 0x03, 0xab, 0x19, 0xa8, 0x20, 0x14, 0x32, 0x26, 0xfa, - 0xbf, 0x09, 0x01, 0x30, 0x03, 0x00, 0x02, 0xba, 0x28, 0x21, 0x37, 0x14, 0xfb, 0xac, 0x18, 0x02, - 0x31, 0x93, 0x9a, 0x90, 0x9a, 0x31, 0x43, 0x53, 0x13, 0xff, 0xbb, 0x18, 0x00, 0x51, 0x02, 0x11, - 0x98, 0x9b, 0x08, 0x52, 0x34, 0x92, 0xcf, 0x9a, 0x11, 0x80, 0x53, 0x91, 0x08, 0x89, 0x9a, 0x10, - 0x42, 0x53, 0xa1, 0xef, 0x8a, 0x00, 0x09, 0x42, 0x11, 0x02, 0xa9, 0x9a, 0x28, 0x44, 0x33, 0xf8, - 0xbc, 0x19, 0x01, 0x20, 0x24, 0x90, 0x88, 0x98, 0x9b, 0x52, 0x33, 0x24, 0xfa, 0xbf, 0x89, 0x00, - 0x20, 0x24, 0x11, 0x90, 0x9a, 0x8b, 0x63, 0x33, 0x02, 0xed, 0xab, 0x28, 0x01, 0x41, 0x13, 0x98, - 0x89, 0xca, 0x09, 0x45, 0x22, 0x81, 0xdf, 0xab, 0x08, 0x08, 0x33, 0x25, 0x82, 0xa9, 0xba, 0x39, - 0x27, 0x12, 0x91, 0xcf, 0x9a, 0x11, 0x11, 0x32, 0x13, 0x99, 0xc9, 0xab, 0x48, 0x25, 0x22, 0xb1, - 0xff, 0x9a, 0x08, 0x20, 0x21, 0x24, 0x80, 0xba, 0xaa, 0x51, 0x24, 0x11, 0xc8, 0xbe, 0x0a, 0x21, - 0x12, 0x42, 0x82, 0x89, 0xba, 0x9b, 0x52, 0x43, 0x22, 0xf8, 0xbf, 0x99, 0x10, 0x21, 0x42, 0x12, - 0xa8, 0xbb, 0x1a, 0x54, 0x22, 0x81, 0xfa, 0xac, 0x18, 0x12, 0x12, 0x32, 0x91, 0xa9, 0xbb, 0x09, - 0x53, 0x22, 0x34, 0xfd, 0x9f, 0x88, 0x10, 0x01, 0x32, 0x03, 0xaa, 0xab, 0x30, 0x25, 0x02, 0xa0, - 0xdf, 0x8a, 0x21, 0x12, 0x21, 0x13, 0xa1, 0xaa, 0x89, 0xa9, 0x20, 0x45, 0x93, 0xff, 0x8d, 0x08, - 0x01, 0x11, 0x33, 0x91, 0xbb, 0x08, 0x21, 0x34, 0x81, 0xea, 0xbf, 0x29, 0x32, 0x21, 0x12, 0x31, - 0xb9, 0x19, 0x90, 0xbd, 0x18, 0x44, 0xf1, 0xbf, 0x88, 0x00, 0x12, 0x12, 0x25, 0xa9, 0x99, 0x10, - 0x20, 0x14, 0xa8, 0xfc, 0x8c, 0x20, 0x23, 0x22, 0x88, 0x02, 0x8b, 0x23, 0xda, 0x9b, 0x31, 0x23, - 0xff, 0x9d, 0x80, 0x00, 0x12, 0x21, 0x04, 0xaa, 0x00, 0x10, 0x40, 0x84, 0xcb, 0xbe, 0x1a, 0x24, - 0x33, 0x02, 0x0a, 0xa1, 0x59, 0x84, 0xcb, 0x8a, 0x21, 0xa1, 0xef, 0x89, 0x88, 0x21, 0x12, 0x31, - 0x92, 0x8c, 0x01, 0x88, 0x63, 0xb1, 0xcd, 0x9c, 0x20, 0x25, 0x32, 0x90, 0x0a, 0x81, 0x62, 0xb0, - 0xad, 0x19, 0x11, 0xc0, 0xad, 0x99, 0x89, 0x32, 0x25, 0x31, 0xc1, 0x19, 0x98, 0x19, 0x25, 0xea, - 0xad, 0x09, 0x62, 0x13, 0x02, 0xa9, 0x29, 0x13, 0x14, 0xdc, 0x9b, 0x08, 0x02, 0xaa, 0xdb, 0x89, - 0xaa, 0x72, 0x12, 0x42, 0xa8, 0x88, 0x9b, 0x42, 0x92, 0xdf, 0x89, 0x18, 0x36, 0x01, 0x81, 0xab, - 0x51, 0x22, 0xb1, 0xbd, 0x9a, 0x18, 0x00, 0x90, 0x9c, 0xb8, 0x8e, 0x43, 0x10, 0x33, 0xb9, 0x99, - 0x39, 0x16, 0xfb, 0xac, 0x08, 0x71, 0x23, 0x10, 0xa8, 0x8c, 0x43, 0x11, 0xba, 0xab, 0xab, 0x18, - 0x10, 0xc0, 0x1a, 0xfc, 0x2a, 0x23, 0x30, 0x83, 0xaf, 0x18, 0x23, 0x91, 0xdd, 0x9c, 0x10, 0x56, - 0x01, 0x80, 0xb9, 0x18, 0x24, 0x98, 0x9a, 0xca, 0x8a, 0x11, 0x20, 0x98, 0xa2, 0xff, 0x10, 0x11, - 0x10, 0xb0, 0x9c, 0x31, 0x02, 0xa9, 0xec, 0x8b, 0x62, 0x17, 0x00, 0x98, 0x99, 0x38, 0x03, 0xaa, - 0x99, 0xbd, 0x28, 0x81, 0x28, 0x41, 0xf1, 0x8c, 0x20, 0x12, 0x98, 0xdc, 0x19, 0x33, 0x90, 0xa0, - 0xcf, 0x08, 0x64, 0x12, 0x88, 0x98, 0x98, 0x40, 0xb0, 0x89, 0xa9, 0xab, 0x33, 0x9a, 0x53, 0x14, - 0xdd, 0x89, 0x42, 0x91, 0xba, 0xad, 0x31, 0x03, 0x28, 0xf0, 0xac, 0x40, 0x26, 0x81, 0x80, 0x98, - 0x89, 0x12, 0xc9, 0x99, 0xaa, 0x4a, 0x94, 0x09, 0x53, 0xb1, 0xbd, 0x28, 0x24, 0xb9, 0xcc, 0x8a, - 0x33, 0x81, 0x32, 0xfc, 0x8b, 0x54, 0x23, 0x80, 0x80, 0xa9, 0x18, 0x80, 0xdb, 0x9a, 0x9a, 0x52, - 0x98, 0x71, 0x12, 0xca, 0xab, 0x32, 0x82, 0xfb, 0xab, 0x19, 0x32, 0x11, 0xa2, 0xcf, 0x48, 0x44, - 0x02, 0x80, 0x98, 0x99, 0x08, 0x80, 0xbc, 0x99, 0x08, 0x00, 0x39, 0x77, 0x81, 0xca, 0x09, 0x21, - 0xa8, 0xce, 0x89, 0x20, 0x13, 0x80, 0xd9, 0x0a, 0x63, 0x34, 0x11, 0x80, 0xa9, 0x99, 0x99, 0xb0, - 0x9f, 0x01, 0x90, 0x08, 0x44, 0x23, 0xc0, 0x9e, 0x10, 0x01, 0xeb, 0xac, 0x08, 0x30, 0x04, 0xa9, - 0x99, 0x11, 0x74, 0x05, 0x10, 0x88, 0x99, 0x98, 0x89, 0xb8, 0x2b, 0x93, 0x9c, 0x42, 0x15, 0x33, - 0xea, 0x8a, 0x00, 0xb0, 0xcf, 0x9b, 0x08, 0x63, 0x91, 0x9a, 0x20, 0x11, 0x56, 0x01, 0x00, 0x88, - 0x99, 0xa9, 0x9b, 0xba, 0x62, 0xb0, 0x29, 0x25, 0x11, 0x83, 0xae, 0x88, 0x11, 0xfb, 0xcc, 0x9a, - 0x30, 0x15, 0xa9, 0x28, 0x11, 0x51, 0x16, 0x80, 0x90, 0x88, 0x00, 0xc9, 0x9c, 0x19, 0x02, 0x9a, - 0x73, 0x02, 0x30, 0xd1, 0x8b, 0x09, 0x90, 0xfb, 0xcc, 0x8a, 0x42, 0x82, 0x8b, 0x32, 0x02, 0x74, - 0x83, 0x88, 0x98, 0x18, 0x01, 0xfc, 0x89, 0x01, 0x80, 0x19, 0x24, 0x01, 0x32, 0xea, 0x89, 0x89, - 0xa0, 0xdd, 0xbd, 0x29, 0x24, 0xa8, 0x19, 0x23, 0x32, 0x47, 0x90, 0x88, 0x88, 0x20, 0x91, 0xdf, - 0x00, 0x01, 0x89, 0x11, 0x02, 0x30, 0x04, 0xac, 0x98, 0x19, 0xe8, 0xcd, 0x9d, 0x31, 0x82, 0x8a, - 0x11, 0x32, 0x72, 0x04, 0x99, 0x88, 0x10, 0x12, 0xf8, 0x8e, 0x11, 0x90, 0x10, 0x11, 0x08, 0x28, - 0xa3, 0x8e, 0x08, 0x11, 0xea, 0xce, 0x8a, 0x14, 0x90, 0x00, 0x11, 0x02, 0x62, 0x82, 0x9b, 0x10, - 0x22, 0x83, 0xdf, 0x0b, 0x03, 0x08, 0x32, 0x81, 0x98, 0x40, 0xd8, 0x1a, 0x20, 0x83, 0xdf, 0xcd, - 0x18, 0x12, 0x09, 0x11, 0x12, 0x00, 0x54, 0xb8, 0x09, 0x31, 0x33, 0xe1, 0xcd, 0x29, 0x01, 0x28, - 0x13, 0x90, 0x9a, 0x22, 0xbd, 0x21, 0x42, 0xd1, 0xcf, 0xbb, 0x41, 0x81, 0x10, 0x11, 0x11, 0x38, - 0x07, 0xba, 0x11, 0x22, 0x12, 0xfa, 0x9d, 0x10, 0x01, 0x22, 0x02, 0xc9, 0x09, 0xa2, 0x1c, 0x15, - 0x01, 0xfa, 0xbd, 0x8b, 0x23, 0x00, 0x21, 0x11, 0x91, 0x72, 0x94, 0x8a, 0x11, 0x21, 0x81, 0xcd, - 0x9c, 0x22, 0x21, 0x32, 0xa1, 0xbd, 0x28, 0xa8, 0x72, 0x83, 0xa8, 0xde, 0xcb, 0x09, 0x13, 0x01, - 0x22, 0x00, 0x09, 0x45, 0xa0, 0x28, 0x02, 0x20, 0xa2, 0xef, 0x89, 0x22, 0x21, 0x04, 0xb9, 0x9d, - 0x01, 0x18, 0x26, 0xa0, 0xba, 0xcd, 0xac, 0x18, 0x13, 0x20, 0x04, 0x98, 0x38, 0x16, 0x98, 0x12, - 0x99, 0x31, 0xb2, 0xdf, 0x19, 0x23, 0x42, 0xa2, 0xcc, 0x09, 0x00, 0x52, 0x03, 0xca, 0xac, 0xdb, - 0x8c, 0x20, 0x02, 0x32, 0x80, 0x98, 0x63, 0x02, 0x10, 0x98, 0x9a, 0x73, 0xc0, 0xac, 0x38, 0x25, - 0x12, 0xb8, 0xbd, 0x18, 0x30, 0x35, 0x91, 0xbd, 0xab, 0xbe, 0x0a, 0x21, 0x22, 0x13, 0x10, 0x18, - 0x34, 0x43, 0xa2, 0xba, 0x3b, 0x47, 0xda, 0xab, 0x50, 0x24, 0x00, 0xaa, 0xac, 0x10, 0x44, 0x02, - 0xb8, 0xae, 0xb9, 0xad, 0x88, 0x41, 0x11, 0x11, 0x00, 0x01, 0x42, 0x33, 0xc9, 0xaa, 0x61, 0x93, - 0xdb, 0x9c, 0x54, 0x01, 0x80, 0xaa, 0x9b, 0x41, 0x34, 0x01, 0xeb, 0xab, 0xcb, 0x9b, 0x19, 0x34, - 0x01, 0x12, 0x01, 0x30, 0x36, 0x14, 0xcb, 0x08, 0x22, 0xb8, 0xce, 0x29, 0x36, 0x01, 0x98, 0xdb, - 0x1a, 0x52, 0x13, 0x98, 0xda, 0xbc, 0xab, 0xaa, 0x31, 0x34, 0x11, 0x12, 0xb8, 0x73, 0x42, 0x91, - 0x8c, 0x11, 0x88, 0xa8, 0xad, 0x41, 0x37, 0x88, 0xa9, 0xbc, 0x20, 0x54, 0x81, 0x90, 0xdb, 0xac, - 0x9a, 0x88, 0x20, 0x34, 0x81, 0x80, 0x2b, 0x26, 0x43, 0xb8, 0x29, 0xa8, 0xa9, 0x88, 0x89, 0x71, - 0x57, 0x98, 0xb9, 0x8b, 0x42, 0x23, 0x08, 0xb1, 0xdf, 0x9b, 0x09, 0x80, 0x38, 0x16, 0x88, 0x99, - 0x40, 0x23, 0x01, 0x8a, 0x92, 0xac, 0x0a, 0x32, 0xb0, 0x74, 0x17, 0xaa, 0xaa, 0x28, 0x13, 0x13, - 0x11, 0xf9, 0xbf, 0x8a, 0x08, 0x80, 0x52, 0x02, 0xaa, 0x0a, 0x45, 0x01, 0x00, 0x09, 0xc8, 0x99, - 0x28, 0x15, 0x09, 0x65, 0xa1, 0xab, 0x8b, 0x32, 0x01, 0x24, 0x91, 0xcf, 0xac, 0x09, 0x80, 0x10, - 0x35, 0xb0, 0x9b, 0x58, 0x15, 0x08, 0x01, 0x98, 0xac, 0x88, 0x41, 0x02, 0x39, 0x37, 0xca, 0xaa, - 0x30, 0x92, 0x59, 0x13, 0xca, 0xce, 0x9a, 0x18, 0x80, 0x48, 0x05, 0xba, 0x09, 0x63, 0x81, 0x21, - 0x91, 0xcb, 0x8a, 0x28, 0x34, 0x82, 0x50, 0x93, 0xae, 0x0a, 0x31, 0xa8, 0x64, 0x91, 0xdb, 0xbb, - 0x8b, 0x11, 0x08, 0x44, 0xa2, 0xad, 0x20, 0x34, 0x11, 0x33, 0xe9, 0x9c, 0x08, 0x30, 0x24, 0x00, - 0x11, 0xc0, 0xad, 0x18, 0x12, 0x2a, 0x47, 0xb9, 0xbc, 0xbb, 0x18, 0x80, 0x28, 0x35, 0xd8, 0x8b, - 0x31, 0x36, 0x31, 0x93, 0xaf, 0x9a, 0x11, 0x33, 0x23, 0x90, 0x00, 0xe9, 0x9b, 0x29, 0x04, 0x70, - 0x93, 0xad, 0xcb, 0x0a, 0x80, 0x88, 0x30, 0x05, 0xba, 0x8a, 0x72, 0x24, 0x23, 0xd9, 0xab, 0x0a, - 0x43, 0x22, 0x12, 0x88, 0x89, 0xca, 0xbb, 0x71, 0x02, 0x42, 0xd9, 0xcb, 0xab, 0x88, 0x89, 0x88, - 0x35, 0x92, 0xdb, 0x09, 0x74, 0x23, 0x81, 0xdb, 0x9a, 0x20, 0x23, 0x22, 0x12, 0xb0, 0x9b, 0xea, - 0x8c, 0x44, 0x01, 0x81, 0xdb, 0xac, 0x8a, 0x9a, 0x89, 0x41, 0x23, 0xb8, 0xbe, 0x38, 0x67, 0x02, - 0x98, 0xba, 0x09, 0x22, 0x22, 0x33, 0x02, 0xfa, 0x0a, 0xca, 0x49, 0x24, 0x90, 0x98, 0xbc, 0xaa, - 0xcb, 0xaa, 0x31, 0x32, 0x92, 0xd9, 0x9e, 0x73, 0x24, 0x91, 0xa9, 0xaa, 0x20, 0x22, 0x63, 0x23, - 0xa9, 0xbd, 0x80, 0xab, 0x55, 0x82, 0xaa, 0x9a, 0x89, 0xda, 0xac, 0x10, 0x03, 0xb9, 0x0a, 0x92, - 0x2e, 0x77, 0x81, 0x98, 0x88, 0x08, 0x08, 0x42, 0x23, 0xa8, 0xca, 0x8c, 0x91, 0x3a, 0x47, 0xa8, - 0x9b, 0x01, 0xb9, 0xbc, 0x0a, 0x11, 0xc9, 0x9a, 0x40, 0x91, 0x71, 0x27, 0x98, 0x09, 0x80, 0x00, - 0x29, 0x36, 0x82, 0xbb, 0xbb, 0x0b, 0x91, 0x74, 0x86, 0xba, 0x19, 0x81, 0xba, 0x9c, 0x00, 0x90, - 0xbc, 0x89, 0x40, 0x22, 0x77, 0x91, 0x99, 0x10, 0x00, 0x90, 0x41, 0x24, 0xb8, 0x9c, 0xb8, 0x1a, - 0x31, 0x37, 0xc8, 0xab, 0x41, 0xa0, 0xcb, 0x0a, 0x88, 0xca, 0x8a, 0x88, 0x62, 0x53, 0x15, 0xb9, - 0x89, 0x32, 0x82, 0x18, 0x45, 0x01, 0xbd, 0x08, 0xba, 0x20, 0x73, 0x83, 0xcc, 0x0a, 0x13, 0xc8, - 0x9b, 0x80, 0xa9, 0xcb, 0x81, 0x0b, 0x56, 0x43, 0x92, 0xbc, 0x28, 0x24, 0x00, 0x30, 0x13, 0xd0, - 0x8d, 0x90, 0xab, 0x51, 0x24, 0xc1, 0xac, 0x28, 0x83, 0xbc, 0x89, 0xa8, 0x99, 0x0a, 0xd0, 0x2b, - 0x67, 0x22, 0xc8, 0x8a, 0x31, 0x22, 0x18, 0x21, 0x00, 0xcc, 0x20, 0xea, 0x8b, 0x63, 0x03, 0xdb, - 0x0a, 0x12, 0xa0, 0x9c, 0x99, 0x99, 0x09, 0x12, 0xde, 0x38, 0x37, 0x81, 0xbb, 0x18, 0x43, 0x12, - 0x00, 0x00, 0x98, 0x0c, 0x83, 0xcf, 0x2a, 0x35, 0xb0, 0x9d, 0x10, 0x10, 0xb9, 0x9a, 0xa9, 0x09, - 0x30, 0xf2, 0xaf, 0x62, 0x13, 0xa9, 0x8a, 0x11, 0x43, 0x01, 0x08, 0x90, 0x89, 0x21, 0xf9, 0xac, - 0x51, 0x13, 0xdb, 0x09, 0x00, 0x81, 0xac, 0x9a, 0x08, 0x11, 0x82, 0xfd, 0x1b, 0x55, 0x01, 0xaa, - 0x08, 0x20, 0x24, 0x00, 0x80, 0x88, 0x08, 0x90, 0xdd, 0x0a, 0x54, 0x91, 0x9c, 0x88, 0x01, 0xa9, - 0xac, 0x09, 0x13, 0x01, 0xd9, 0xaf, 0x48, 0x44, 0x91, 0x8a, 0x08, 0x31, 0x13, 0x88, 0x10, 0x90, - 0x08, 0xd9, 0xad, 0x18, 0x45, 0xc0, 0x8b, 0x00, 0xb8, 0xcb, 0xac, 0x52, 0x81, 0x90, 0xea, 0x9b, - 0x53, 0x35, 0x98, 0x0a, 0x00, 0x41, 0x02, 0x18, 0x81, 0x99, 0x89, 0xb9, 0x9d, 0x28, 0x47, 0xda, - 0x08, 0xa0, 0x9c, 0xba, 0x39, 0x25, 0x80, 0xbb, 0xdb, 0x1b, 0x65, 0x14, 0x99, 0x81, 0x99, 0x32, - 0x11, 0x22, 0xb8, 0x99, 0x09, 0xc1, 0xbc, 0x5a, 0x07, 0x8b, 0x81, 0xdc, 0x9b, 0x8a, 0x42, 0x13, - 0xb0, 0x8c, 0xda, 0x19, 0x55, 0x03, 0x80, 0xa8, 0x8a, 0x43, 0x23, 0x80, 0x8a, 0xab, 0x54, 0xc0, - 0xab, 0x49, 0x04, 0x88, 0xf9, 0xbc, 0x0a, 0x00, 0x43, 0x82, 0xba, 0x81, 0xae, 0x28, 0x55, 0x04, - 0x90, 0xba, 0x1a, 0x34, 0x02, 0x88, 0xa9, 0x4a, 0x06, 0xaa, 0xbb, 0x71, 0x02, 0xaa, 0xeb, 0xab, - 0x00, 0x30, 0x25, 0xa8, 0x1a, 0xa0, 0xac, 0x40, 0x57, 0x81, 0x99, 0xab, 0x48, 0x13, 0x80, 0x90, - 0x8a, 0x63, 0xa2, 0xdb, 0x09, 0x34, 0xa0, 0xbc, 0xbd, 0x09, 0x00, 0x53, 0x81, 0x99, 0x11, 0xe9, - 0x9a, 0x73, 0x24, 0xa0, 0xba, 0x9a, 0x53, 0x01, 0x81, 0x99, 0x48, 0x15, 0xc9, 0x9b, 0x31, 0x14, - 0xcb, 0xac, 0xbb, 0x09, 0x51, 0x13, 0x80, 0x18, 0xa2, 0xce, 0x28, 0x46, 0x02, 0xb9, 0xbb, 0x08, - 0x34, 0x12, 0xa9, 0x29, 0x46, 0xa2, 0xbc, 0x18, 0x22, 0xa0, 0xcf, 0x99, 0xab, 0x28, 0x25, 0x01, - 0x00, 0x11, 0xda, 0x8c, 0x52, 0x24, 0x80, 0xcb, 0x9a, 0x18, 0x44, 0x91, 0x89, 0x52, 0x23, 0xda, - 0x8a, 0x11, 0x00, 0xeb, 0x9b, 0xcb, 0x8c, 0x43, 0x02, 0x11, 0x11, 0xa0, 0xbe, 0x20, 0x34, 0x13, - 0xa8, 0xbd, 0xab, 0x61, 0x05, 0x99, 0x30, 0x25, 0x90, 0xab, 0x01, 0x89, 0xd9, 0xab, 0xda, 0xbd, - 0x28, 0x24, 0x10, 0x42, 0x81, 0xba, 0x0b, 0x22, 0x45, 0x80, 0x90, 0xbf, 0x0a, 0x73, 0x81, 0x0a, - 0x53, 0x82, 0x99, 0x08, 0xa8, 0xba, 0x9d, 0xa0, 0xbe, 0x9c, 0x42, 0x02, 0x30, 0x14, 0xa9, 0x98, - 0x80, 0x00, 0x03, 0x73, 0xe0, 0x9c, 0x28, 0x24, 0xa9, 0x50, 0x24, 0x88, 0x08, 0x90, 0xcc, 0x9a, - 0x18, 0xe9, 0xbb, 0x19, 0x24, 0x11, 0x53, 0x91, 0x0a, 0x81, 0x9a, 0x99, 0x61, 0x15, 0xeb, 0x8a, - 0x41, 0x82, 0x0a, 0x44, 0x02, 0x20, 0x90, 0xfa, 0x9c, 0x08, 0x80, 0xdb, 0x8a, 0x20, 0x22, 0x33, - 0x23, 0xa9, 0x63, 0xc8, 0xcb, 0x18, 0x34, 0xa2, 0xbf, 0x28, 0x13, 0x80, 0x40, 0x34, 0x22, 0x12, - 0xd9, 0xbf, 0x0a, 0x80, 0xa8, 0xbd, 0x18, 0x10, 0x44, 0x02, 0x00, 0x20, 0x03, 0xce, 0x9b, 0x42, - 0x12, 0xc8, 0x8d, 0x12, 0x10, 0x00, 0x32, 0x35, 0x24, 0x91, 0xed, 0x9b, 0x00, 0x88, 0xc9, 0x8b, - 0x00, 0x60, 0x23, 0x80, 0x10, 0x32, 0xe0, 0xbd, 0x28, 0x23, 0x91, 0xdb, 0x18, 0x11, 0x21, 0x21, - 0x44, 0x44, 0x13, 0xe8, 0xcc, 0x09, 0x00, 0xa9, 0xaa, 0x9a, 0x10, 0x65, 0x11, 0x80, 0x28, 0x02, - 0xdc, 0x9b, 0x41, 0x03, 0xb9, 0x89, 0x18, 0x22, 0x21, 0x52, 0x34, 0x36, 0x83, 0xfc, 0xab, 0x11, - 0xa8, 0xaa, 0xb9, 0x8a, 0x52, 0x36, 0x01, 0x9a, 0x32, 0xb1, 0xbf, 0x1a, 0x25, 0x98, 0x99, 0x80, - 0x29, 0x11, 0x34, 0x12, 0x72, 0x25, 0xa0, 0xbf, 0x19, 0x81, 0xba, 0x8a, 0xb9, 0x1a, 0x55, 0x15, - 0x98, 0x09, 0x13, 0xd9, 0x9c, 0x40, 0x01, 0xa9, 0x28, 0x98, 0x18, 0x42, 0x04, 0x18, 0x54, 0x23, - 0xfa, 0xab, 0x20, 0xb8, 0xac, 0x88, 0xba, 0x50, 0x45, 0x92, 0x99, 0x20, 0x02, 0xbe, 0x0a, 0x33, - 0xa0, 0x9b, 0x23, 0xaa, 0x62, 0x23, 0xb0, 0x61, 0x45, 0x93, 0xcd, 0x89, 0x82, 0xba, 0x8b, 0x98, - 0x0c, 0x54, 0x23, 0xa9, 0x09, 0x52, 0xc1, 0x9d, 0x28, 0x02, 0x99, 0x08, 0x81, 0x3a, 0x16, 0x90, - 0x8b, 0x56, 0x23, 0xb8, 0xae, 0x28, 0xa0, 0xac, 0x89, 0xa9, 0x60, 0x23, 0x81, 0x8b, 0x32, 0x23, - 0xfd, 0x8a, 0x31, 0x90, 0x88, 0x09, 0x11, 0x62, 0xa0, 0xab, 0x71, 0x26, 0x01, 0xca, 0x9a, 0x11, - 0xca, 0x9a, 0x9a, 0x20, 0x34, 0x91, 0x88, 0x51, 0x23, 0xb1, 0xcf, 0x09, 0x23, 0x89, 0xa9, 0x39, - 0x25, 0x02, 0xbf, 0x29, 0x46, 0x13, 0xa0, 0xac, 0x89, 0x01, 0xbc, 0xab, 0x28, 0x33, 0x92, 0x9e, - 0x43, 0x33, 0x81, 0xeb, 0xab, 0x20, 0x14, 0xa9, 0x8b, 0x54, 0x02, 0xea, 0x9c, 0x43, 0x44, 0x01, - 0xa9, 0xaa, 0x09, 0xa1, 0xae, 0x0a, 0x23, 0xa1, 0xda, 0x3a, 0x26, 0x13, 0xa9, 0x9c, 0x89, 0x30, - 0x93, 0xad, 0x31, 0x26, 0xc8, 0xcc, 0x39, 0x44, 0x23, 0x90, 0x99, 0xac, 0x18, 0xc9, 0x9b, 0x31, - 0x84, 0xbd, 0x9b, 0x73, 0x23, 0x91, 0xba, 0x89, 0x8a, 0x53, 0xb8, 0x8a, 0x54, 0x82, 0xbd, 0xbb, - 0x73, 0x33, 0x13, 0x89, 0xc9, 0x9c, 0x81, 0xab, 0x29, 0x33, 0xf8, 0x9e, 0x18, 0x53, 0x11, 0xa9, - 0x8a, 0x90, 0x28, 0x84, 0xaa, 0x39, 0x26, 0xd8, 0xba, 0x0b, 0x37, 0x23, 0x01, 0x80, 0xfb, 0x89, - 0x80, 0x99, 0x31, 0xa1, 0xcf, 0x89, 0x31, 0x26, 0x80, 0xaa, 0x09, 0x88, 0x40, 0x91, 0xab, 0x51, - 0x82, 0xcb, 0xcb, 0x59, 0x25, 0x22, 0x01, 0xa8, 0xbd, 0x88, 0x88, 0x08, 0x23, 0xfc, 0x9c, 0x18, - 0x53, 0x03, 0x99, 0xaa, 0x00, 0x88, 0x34, 0xc8, 0x8d, 0x42, 0x80, 0xbb, 0xab, 0x72, 0x24, 0x31, - 0x01, 0xca, 0x9d, 0x00, 0x98, 0x28, 0xa3, 0xcf, 0x0a, 0x21, 0x34, 0x91, 0xa9, 0x8a, 0x80, 0x51, - 0x84, 0xfb, 0x19, 0x23, 0xa8, 0xaa, 0x8b, 0x64, 0x22, 0x24, 0xa8, 0xcb, 0x09, 0x90, 0xa9, 0x61, - 0xd0, 0xac, 0x10, 0x32, 0x23, 0x98, 0xaa, 0xac, 0x31, 0x36, 0xd0, 0xad, 0x41, 0x81, 0x98, 0xa9, - 0x19, 0x44, 0x53, 0x02, 0xbb, 0x8b, 0x80, 0xba, 0x2c, 0x17, 0xcc, 0x89, 0x21, 0x22, 0x82, 0x88, - 0xca, 0x1b, 0x35, 0x82, 0xde, 0x09, 0x24, 0x98, 0x89, 0x99, 0x38, 0x45, 0x24, 0xb0, 0xab, 0x08, - 0xa9, 0xac, 0x72, 0xb1, 0xad, 0x28, 0x32, 0x10, 0x11, 0xb8, 0xad, 0x30, 0x24, 0xea, 0x9c, 0x31, - 0x04, 0x8a, 0x89, 0x9a, 0x71, 0x44, 0x01, 0xaa, 0x99, 0x98, 0xbb, 0x38, 0x26, 0xfb, 0x8a, 0x31, - 0x02, 0x20, 0x81, 0xdb, 0x09, 0x22, 0xb1, 0xbf, 0x18, 0x34, 0x90, 0x99, 0xa8, 0x8b, 0x77, 0x13, - 0x90, 0xb9, 0x8a, 0xb9, 0x09, 0x44, 0xa1, 0xbf, 0x19, 0x33, 0x11, 0x12, 0xc9, 0x9b, 0x01, 0x09, - 0xea, 0x8a, 0x40, 0x25, 0x99, 0x09, 0xba, 0x70, 0x27, 0x01, 0x98, 0xcb, 0x8a, 0x80, 0x31, 0x02, - 0xfb, 0x9d, 0x31, 0x22, 0x20, 0x80, 0xbb, 0x0a, 0xd9, 0x19, 0x99, 0x80, 0x50, 0x05, 0x89, 0x90, - 0x0a, 0x76, 0x23, 0x80, 0xca, 0xad, 0x10, 0x01, 0x12, 0xb9, 0xce, 0x09, 0x43, 0x13, 0x00, 0x99, - 0xab, 0x99, 0xaf, 0x22, 0x88, 0xa8, 0x51, 0x01, 0x00, 0x00, 0x38, 0x67, 0x12, 0xa8, 0xfb, 0x0c, - 0x12, 0x01, 0x90, 0xbb, 0x9c, 0x30, 0x35, 0x12, 0x98, 0xa9, 0xba, 0xcd, 0x2b, 0x04, 0x98, 0x99, - 0x63, 0x02, 0x11, 0x99, 0x42, 0x45, 0x81, 0xea, 0xac, 0x38, 0x13, 0x00, 0xdb, 0x9b, 0x09, 0x35, - 0x24, 0x90, 0x98, 0xba, 0xad, 0xcb, 0x50, 0x92, 0x99, 0x09, 0x35, 0x22, 0x91, 0x19, 0x33, 0x35, - 0xd8, 0xcd, 0x9a, 0x53, 0x01, 0xb8, 0xac, 0x88, 0x41, 0x43, 0x02, 0xa9, 0xa9, 0xdb, 0xbb, 0x9a, - 0x54, 0x98, 0xba, 0x71, 0x33, 0x02, 0x99, 0x11, 0x18, 0x83, 0xdd, 0xbb, 0x19, 0x37, 0x90, 0xcb, - 0x8a, 0x11, 0x34, 0x33, 0xa1, 0xad, 0xb9, 0xbb, 0xcc, 0x2a, 0x15, 0xba, 0x19, 0x56, 0x23, 0x88, - 0x08, 0x80, 0x09, 0x90, 0xbc, 0xad, 0x58, 0x14, 0xb9, 0xac, 0x20, 0x32, 0x44, 0x12, 0xe9, 0xab, - 0x88, 0xa9, 0xbc, 0x30, 0x92, 0xab, 0x71, 0x37, 0x02, 0x09, 0x80, 0xaa, 0x09, 0x81, 0xca, 0x9c, - 0x52, 0x02, 0xcc, 0x09, 0x22, 0x43, 0x24, 0x90, 0xce, 0x8a, 0x00, 0xb9, 0xab, 0x21, 0x90, 0x29, - 0x77, 0x23, 0x80, 0x08, 0xa9, 0xbb, 0x30, 0x82, 0xcc, 0x0a, 0x23, 0xa2, 0xae, 0x31, 0x32, 0x47, - 0x01, 0xea, 0xab, 0x18, 0xa0, 0xbb, 0x9b, 0x20, 0x12, 0x74, 0x35, 0x12, 0x00, 0xa9, 0xbc, 0x8b, - 0x33, 0x98, 0xdb, 0x1a, 0x32, 0xa2, 0x8a, 0x33, 0x76, 0x15, 0xb8, 0xbc, 0x8b, 0x01, 0xba, 0xdb, - 0x0b, 0x30, 0x25, 0x63, 0x24, 0x01, 0x80, 0xdb, 0x9a, 0x08, 0x13, 0xa8, 0xdb, 0x18, 0x42, 0x91, - 0x88, 0x31, 0x67, 0x91, 0xca, 0xaa, 0x0a, 0x80, 0xba, 0xad, 0x09, 0x73, 0x13, 0x42, 0x13, 0x01, - 0xda, 0xab, 0x99, 0x20, 0x14, 0xa8, 0x9e, 0x18, 0x34, 0x98, 0x19, 0x73, 0x12, 0xc9, 0xbb, 0xbb, - 0x09, 0xa0, 0xeb, 0xac, 0x38, 0x47, 0x10, 0x32, 0x21, 0xb8, 0xbc, 0xa9, 0x9a, 0x52, 0x12, 0xd9, - 0x9b, 0x42, 0x23, 0xb9, 0x41, 0x34, 0xa0, 0xca, 0xdc, 0xaa, 0x00, 0x99, 0xfb, 0x0a, 0x63, 0x13, - 0x20, 0x23, 0x82, 0xbd, 0x99, 0xaa, 0x0a, 0x45, 0x81, 0xeb, 0x28, 0x22, 0x82, 0x8c, 0x33, 0x03, - 0x9a, 0xf9, 0xbc, 0x9a, 0x00, 0xb8, 0xbf, 0x41, 0x43, 0x02, 0x22, 0x33, 0xc9, 0x9c, 0xa9, 0xab, - 0x38, 0x37, 0xc0, 0x8c, 0x32, 0x12, 0xb0, 0x2a, 0x14, 0x08, 0x00, 0xde, 0x9c, 0x89, 0x01, 0xdb, - 0x0b, 0x35, 0x23, 0x12, 0x32, 0x93, 0xcb, 0xcb, 0xba, 0xaa, 0x72, 0x07, 0xaa, 0x29, 0x13, 0x11, - 0xbb, 0x31, 0x10, 0x11, 0xe8, 0xbf, 0x9a, 0x39, 0xa1, 0xcd, 0x38, 0x25, 0x12, 0x11, 0x22, 0x91, - 0xcc, 0xab, 0xaa, 0x2a, 0x57, 0x81, 0xab, 0x31, 0x12, 0xa0, 0x8c, 0x12, 0x22, 0x80, 0xed, 0xbc, - 0x8a, 0x32, 0xd8, 0x9c, 0x43, 0x22, 0x11, 0x21, 0x25, 0xb8, 0xbd, 0x9a, 0xab, 0x72, 0x24, 0xb8, - 0x1a, 0x33, 0x91, 0xdb, 0x29, 0x23, 0x82, 0xa9, 0xee, 0xbb, 0x10, 0x03, 0xeb, 0x3a, 0x25, 0x00, - 0x18, 0x52, 0x03, 0xdb, 0xaa, 0xa9, 0x2a, 0x46, 0x02, 0xbb, 0x40, 0x13, 0xc9, 0x9b, 0x22, 0x03, - 0x88, 0xc0, 0xdf, 0x89, 0x21, 0xa0, 0xbb, 0x73, 0x82, 0x98, 0x31, 0x26, 0xb0, 0xbb, 0xa9, 0xab, - 0x73, 0x24, 0xb0, 0x8a, 0x25, 0x80, 0xbc, 0x28, 0x12, 0x90, 0x18, 0xf9, 0xbc, 0x28, 0x82, 0xd9, - 0x29, 0x25, 0x98, 0x0a, 0x37, 0x01, 0xca, 0x9a, 0xa9, 0x28, 0x27, 0x02, 0xba, 0x30, 0x04, 0xc9, - 0x8b, 0x22, 0x80, 0x88, 0x91, 0xcf, 0x8a, 0x21, 0xa8, 0x9c, 0x52, 0x93, 0xbb, 0x71, 0x17, 0x98, - 0x9a, 0x8a, 0x89, 0x52, 0x23, 0xa8, 0x0a, 0x43, 0xb0, 0xac, 0x28, 0x92, 0x88, 0x18, 0xe8, 0xac, - 0x08, 0xa1, 0xab, 0x38, 0x37, 0xdb, 0x19, 0x66, 0x81, 0xa9, 0xaa, 0x98, 0x30, 0x26, 0x82, 0x99, - 0x10, 0x03, 0xbc, 0x8a, 0x21, 0xaa, 0x10, 0x02, 0xbc, 0xdb, 0xaa, 0xbc, 0x28, 0x63, 0xc1, 0x9d, - 0x52, 0x26, 0xa0, 0xaa, 0x9b, 0x10, 0x43, 0x24, 0x80, 0x89, 0x31, 0xd1, 0x8b, 0x98, 0xa9, 0x0a, - 0x42, 0x03, 0xa0, 0xdf, 0xbb, 0x29, 0x12, 0x81, 0xcc, 0x3a, 0x47, 0x13, 0xba, 0xcb, 0x29, 0x23, - 0x43, 0x22, 0xa1, 0x99, 0x41, 0xca, 0x00, 0xdc, 0x9b, 0x32, 0x23, 0x24, 0xfa, 0xad, 0x89, 0x21, - 0x90, 0x9a, 0x99, 0x63, 0x24, 0x82, 0xda, 0x8b, 0x33, 0x12, 0x43, 0x15, 0xa8, 0x8c, 0x22, 0x89, - 0xd9, 0xbe, 0x20, 0x33, 0x33, 0xb1, 0xdf, 0xaa, 0x11, 0x80, 0x8a, 0x80, 0x00, 0x32, 0x53, 0x03, - 0xdb, 0x48, 0x02, 0x18, 0x55, 0x81, 0xcb, 0x38, 0x13, 0xa0, 0xef, 0x0b, 0x33, 0x42, 0x01, 0xda, - 0xbb, 0x0a, 0x12, 0xa8, 0x29, 0x81, 0x80, 0x99, 0x72, 0x05, 0x09, 0x22, 0x88, 0x32, 0x24, 0xfa, - 0x9a, 0x73, 0x01, 0xc9, 0xbd, 0x39, 0x25, 0x22, 0xa0, 0xbd, 0xaa, 0x18, 0x01, 0xa8, 0x32, 0x80, - 0xda, 0x09, 0x54, 0x02, 0x28, 0x81, 0x18, 0x20, 0xb2, 0xae, 0x2a, 0x67, 0x90, 0xeb, 0x9a, 0x42, - 0x14, 0x82, 0xaa, 0xbc, 0x9a, 0x20, 0x82, 0x1a, 0x05, 0xb8, 0xac, 0x21, 0x45, 0x01, 0x08, 0x01, - 0x98, 0x08, 0xab, 0xb8, 0x78, 0x47, 0xc9, 0xab, 0x09, 0x45, 0x22, 0x98, 0xca, 0xbc, 0x09, 0x32, - 0x90, 0x30, 0x93, 0xcd, 0x19, 0x11, 0x35, 0x90, 0x21, 0x90, 0xab, 0x89, 0x90, 0x9c, 0x77, 0x93, - 0xbc, 0x9a, 0x28, 0x47, 0x01, 0xa8, 0xcb, 0xab, 0x38, 0x12, 0x00, 0x33, 0xe9, 0x9b, 0x81, 0x31, - 0x16, 0x10, 0x82, 0xaa, 0xba, 0x00, 0xda, 0x70, 0x17, 0xa9, 0x9b, 0x98, 0x50, 0x25, 0x01, 0xda, - 0xbb, 0x89, 0x21, 0x11, 0x31, 0x92, 0xae, 0x19, 0x80, 0x50, 0x23, 0x21, 0xba, 0xaa, 0x8b, 0xa0, - 0x0d, 0x77, 0x81, 0xaa, 0x9a, 0x89, 0x64, 0x24, 0xa8, 0xcc, 0x9a, 0x00, 0x11, 0x11, 0x14, 0xaa, - 0x9a, 0x81, 0x8a, 0x73, 0x14, 0xa0, 0x9a, 0x90, 0x9a, 0x99, 0x71, 0x17, 0x98, 0xa9, 0x99, 0x1a, - 0x66, 0x02, 0xca, 0xaa, 0x89, 0x18, 0x21, 0x32, 0x92, 0xac, 0x18, 0xb9, 0x1a, 0x77, 0x81, 0x9a, - 0x18, 0x98, 0xaa, 0x28, 0x55, 0x02, 0xa9, 0xa9, 0xac, 0x60, 0x35, 0xa0, 0xad, 0x9a, 0x88, 0x10, - 0x22, 0x43, 0xa8, 0x0b, 0xa1, 0xac, 0x60, 0x25, 0xa9, 0x8a, 0x21, 0xba, 0x8c, 0x31, 0x37, 0x82, - 0x9a, 0xdb, 0x1b, 0x45, 0x04, 0xca, 0xab, 0x88, 0x89, 0x22, 0x32, 0x24, 0xa9, 0x09, 0xeb, 0x19, - 0x44, 0x82, 0xac, 0x28, 0x92, 0xbc, 0x19, 0x62, 0x26, 0x90, 0xb9, 0xbb, 0x61, 0x23, 0xa1, 0xaf, - 0x89, 0x99, 0x10, 0x12, 0x31, 0x04, 0x88, 0xaa, 0x9d, 0x31, 0x22, 0xc0, 0x8b, 0x33, 0xe9, 0xab, - 0x18, 0x76, 0x14, 0xa8, 0xaa, 0x0a, 0x24, 0x01, 0xca, 0x9d, 0x99, 0x88, 0x21, 0x12, 0x62, 0x03, - 0xa9, 0xbb, 0x19, 0x12, 0x8a, 0x98, 0x30, 0x80, 0xeb, 0xad, 0x30, 0x77, 0x07, 0xa9, 0x89, 0x18, - 0x02, 0x89, 0xba, 0xab, 0x8a, 0x20, 0x43, 0x00, 0x65, 0x01, 0xb9, 0x99, 0x08, 0xc0, 0x2b, 0x12, - 0x88, 0x08, 0xa9, 0xbb, 0x7b, 0x77, 0x85, 0x9a, 0x88, 0x10, 0x98, 0x89, 0xba, 0x9c, 0x00, 0x32, - 0x83, 0x39, 0x47, 0x00, 0xaa, 0x89, 0xa9, 0xdc, 0x30, 0x92, 0x00, 0x10, 0x90, 0xbc, 0x75, 0x27, - 0x98, 0x9a, 0x88, 0x80, 0x99, 0x88, 0xcc, 0x09, 0x21, 0x23, 0xa0, 0x40, 0x44, 0x93, 0xab, 0xc9, - 0xac, 0xab, 0x34, 0x00, 0x81, 0x23, 0xea, 0x09, 0x77, 0x22, 0xa8, 0x9b, 0x98, 0x99, 0x99, 0xb8, - 0xad, 0x10, 0x34, 0x22, 0xb9, 0x59, 0x36, 0xa1, 0xaa, 0xda, 0xaa, 0x0a, 0x33, 0x11, 0x41, 0xa1, - 0xaa, 0x3b, 0x77, 0x17, 0xa8, 0x99, 0x98, 0x89, 0x89, 0xb8, 0x8a, 0x42, 0x33, 0x82, 0xbd, 0x72, - 0x13, 0xa0, 0xab, 0xcb, 0xba, 0x2b, 0x16, 0x31, 0x83, 0x9a, 0xb9, 0x78, 0x57, 0x81, 0xaa, 0x99, - 0x98, 0xa9, 0x09, 0xb9, 0x39, 0x45, 0x12, 0xa9, 0x0b, 0x45, 0x02, 0xa8, 0xbb, 0xdc, 0xab, 0x30, - 0x43, 0x34, 0xb0, 0xaa, 0x1a, 0x67, 0x14, 0x98, 0xba, 0x98, 0xba, 0x9a, 0x08, 0x99, 0x62, 0x24, - 0x80, 0xb8, 0x29, 0x25, 0x11, 0xa8, 0xec, 0xbc, 0x0a, 0x31, 0x54, 0x03, 0xca, 0x89, 0x31, 0x45, - 0x02, 0x99, 0xbb, 0xba, 0xac, 0xa9, 0x08, 0x18, 0x47, 0x81, 0x01, 0x9a, 0x88, 0x33, 0x34, 0xc0, - 0xcf, 0x9b, 0x89, 0x52, 0x34, 0xa1, 0x9d, 0x01, 0x32, 0x23, 0x02, 0xda, 0xba, 0xcb, 0x9a, 0x1a, - 0x11, 0x20, 0x30, 0x57, 0xa2, 0xac, 0x19, 0x43, 0x12, 0xca, 0xbe, 0x8a, 0x20, 0x45, 0x03, 0xcb, - 0x18, 0x00, 0x31, 0x23, 0x13, 0xea, 0xbc, 0xba, 0x99, 0x00, 0x03, 0x89, 0x75, 0x14, 0xba, 0xab, - 0x58, 0x23, 0x81, 0xeb, 0xcb, 0x08, 0x41, 0x24, 0x90, 0x9b, 0x80, 0x38, 0x24, 0x42, 0x81, 0xda, - 0xbc, 0x8a, 0x99, 0x18, 0x01, 0x30, 0x77, 0x91, 0xab, 0x9b, 0x44, 0x11, 0x91, 0xbc, 0xbb, 0x18, - 0x54, 0x14, 0xa8, 0x8a, 0x9a, 0x41, 0x33, 0x03, 0x08, 0xfa, 0x9b, 0x9a, 0xaa, 0x1a, 0x04, 0x73, - 0x14, 0xc9, 0xab, 0x29, 0x25, 0x22, 0xb8, 0xae, 0x9a, 0x11, 0x54, 0x02, 0xa9, 0xbb, 0x0a, 0x64, - 0x02, 0x80, 0x00, 0xba, 0xab, 0xab, 0xcc, 0x38, 0x43, 0x25, 0xa9, 0xab, 0x10, 0x18, 0x46, 0x02, - 0xca, 0xad, 0x18, 0x01, 0x64, 0x81, 0xda, 0x9b, 0x40, 0x16, 0x98, 0x18, 0x08, 0xa8, 0x8a, 0xb8, - 0xbd, 0x41, 0x24, 0x90, 0x9a, 0x29, 0xb1, 0x49, 0x35, 0x81, 0xeb, 0x8a, 0x81, 0x19, 0x37, 0xa0, - 0xcd, 0x08, 0x53, 0x92, 0x8a, 0x11, 0x01, 0xc9, 0x89, 0xcc, 0x8b, 0x73, 0x01, 0x8a, 0x08, 0x11, - 0xba, 0x52, 0x22, 0xa0, 0xac, 0x18, 0xb8, 0x78, 0x23, 0xfa, 0x8b, 0x21, 0x34, 0xaa, 0x29, 0x24, - 0x81, 0xcb, 0xba, 0xce, 0x19, 0x25, 0xa0, 0x00, 0x01, 0xa0, 0x8c, 0x44, 0x02, 0xa9, 0x8b, 0x12, - 0xac, 0x50, 0x92, 0xaf, 0x10, 0x31, 0x93, 0x9c, 0x52, 0x13, 0xa1, 0xbc, 0xda, 0xbc, 0x59, 0x13, - 0x19, 0x81, 0x08, 0xd0, 0x3a, 0x26, 0x80, 0xa9, 0x19, 0xa2, 0xad, 0x31, 0xd8, 0x29, 0x02, 0x42, - 0xfa, 0x29, 0x24, 0x12, 0xa8, 0xac, 0xdc, 0x9b, 0x41, 0x22, 0x02, 0x99, 0x00, 0xcc, 0x62, 0x02, - 0xa0, 0x89, 0x21, 0xe9, 0x9a, 0x18, 0x20, 0x12, 0x18, 0xc1, 0x9f, 0x53, 0x22, 0x01, 0xba, 0xcc, - 0xbd, 0x8a, 0x61, 0x23, 0x91, 0x99, 0xb8, 0x2a, 0x27, 0x81, 0x8a, 0x18, 0x82, 0xdc, 0xba, 0x40, - 0x23, 0x00, 0x98, 0xcc, 0x39, 0x36, 0x11, 0x81, 0xcb, 0xdc, 0xab, 0x1b, 0x55, 0x03, 0x98, 0x99, - 0x9a, 0x41, 0x14, 0xa8, 0x08, 0x12, 0xc9, 0xbd, 0x8b, 0x55, 0x81, 0x80, 0x9a, 0x9a, 0x42, 0x14, - 0x11, 0x90, 0xfb, 0xac, 0xab, 0x48, 0x36, 0x01, 0xb9, 0x8a, 0x18, 0x32, 0x02, 0x8a, 0x31, 0x92, - 0xcf, 0xcb, 0x3a, 0x27, 0x00, 0xb9, 0x89, 0x18, 0x32, 0x23, 0x43, 0xe8, 0xbd, 0xbb, 0x9a, 0x72, - 0x16, 0x80, 0xaa, 0x08, 0x10, 0x11, 0x00, 0x18, 0x00, 0xb9, 0xbd, 0xad, 0x71, 0x13, 0xa8, 0xab, - 0x81, 0x00, 0x41, 0x24, 0x13, 0xed, 0xab, 0x8a, 0x19, 0x65, 0x03, 0xb9, 0x9a, 0x10, 0x10, 0x11, - 0x21, 0x80, 0xaa, 0xac, 0xda, 0x0c, 0x56, 0x91, 0xa9, 0x09, 0x80, 0x09, 0x63, 0x23, 0xc8, 0xbd, - 0x9a, 0x99, 0x50, 0x36, 0x80, 0xab, 0x09, 0x00, 0x11, 0x21, 0x03, 0xcb, 0x89, 0x90, 0xbe, 0x51, - 0x24, 0xb8, 0xac, 0x10, 0x98, 0x39, 0x67, 0x00, 0xca, 0x8b, 0x99, 0x19, 0x54, 0x22, 0xa8, 0x8c, - 0x88, 0x00, 0x21, 0x33, 0xc9, 0x8b, 0x20, 0xe9, 0x3a, 0x24, 0x01, 0xeb, 0x0b, 0x01, 0x88, 0x71, - 0x15, 0xa9, 0xbc, 0x99, 0x9a, 0x72, 0x13, 0x02, 0xca, 0x89, 0x08, 0x12, 0x31, 0xa3, 0xae, 0x28, - 0x82, 0x8d, 0x43, 0x90, 0xa0, 0xae, 0x18, 0x81, 0x08, 0x56, 0x91, 0xca, 0x9a, 0xba, 0x39, 0x37, - 0x02, 0x90, 0xaa, 0x88, 0x28, 0x13, 0x12, 0xfb, 0x0a, 0x43, 0xa0, 0x48, 0x02, 0xca, 0xca, 0x9d, - 0x32, 0x81, 0x28, 0x07, 0x9a, 0xba, 0xbb, 0x8e, 0x53, 0x34, 0xa1, 0x98, 0x9a, 0x08, 0x31, 0x91, - 0xda, 0x8b, 0x72, 0x03, 0x19, 0x12, 0xb2, 0xcf, 0xa9, 0x19, 0x15, 0x80, 0x98, 0x88, 0x80, 0xca, - 0xbf, 0x30, 0x54, 0x03, 0x9a, 0x81, 0x0a, 0x00, 0x01, 0xdd, 0x09, 0x18, 0x45, 0x00, 0x11, 0x00, - 0xfa, 0x9b, 0xa8, 0x41, 0x12, 0xb9, 0x9c, 0x21, 0x02, 0xfa, 0x0c, 0x33, 0x44, 0xb0, 0x2a, 0x90, - 0x19, 0x80, 0xf8, 0x8c, 0x10, 0x41, 0x14, 0x11, 0x01, 0xc9, 0xcc, 0x89, 0x9a, 0x44, 0x91, 0xbc, - 0x2a, 0x33, 0x91, 0xbd, 0x58, 0x33, 0x22, 0xda, 0x20, 0xb9, 0x01, 0xb8, 0xbf, 0x29, 0x04, 0x52, - 0x22, 0x32, 0xc0, 0xbb, 0xbe, 0xa9, 0x4a, 0x15, 0xb9, 0x9c, 0x50, 0x01, 0xa8, 0x89, 0x34, 0x22, - 0x03, 0x9e, 0x90, 0x1a, 0xb1, 0xad, 0x00, 0x42, 0x98, 0x63, 0x33, 0x05, 0x99, 0xdb, 0xbb, 0xac, - 0x52, 0x80, 0xaa, 0x18, 0x34, 0xa8, 0xab, 0x62, 0x33, 0x23, 0xb8, 0x9c, 0xb9, 0x9a, 0xcc, 0x38, - 0x32, 0xa3, 0x8f, 0x55, 0x33, 0x82, 0xca, 0xbc, 0xbc, 0x0a, 0x33, 0x88, 0x88, 0x30, 0xa4, 0xad, - 0x48, 0x35, 0x32, 0x81, 0xdb, 0xaa, 0x9a, 0x88, 0x2a, 0x27, 0x91, 0xeb, 0x2a, 0x47, 0x11, 0x90, - 0xb9, 0xdb, 0xab, 0x28, 0x13, 0x21, 0x88, 0x88, 0xdc, 0x29, 0x44, 0x33, 0x81, 0x91, 0xcc, 0xbb, - 0x1a, 0x00, 0x54, 0x02, 0xcb, 0xad, 0x71, 0x33, 0x02, 0xaa, 0xcb, 0xcc, 0x9a, 0x32, 0x33, 0x81, - 0xba, 0xbb, 0x9d, 0x54, 0x34, 0x81, 0x88, 0xa9, 0xea, 0x8b, 0x21, 0x31, 0x32, 0xd8, 0xbd, 0x0b, - 0x57, 0x12, 0x90, 0xa9, 0xca, 0xcb, 0x2a, 0x34, 0x12, 0xa8, 0xcb, 0x9a, 0x49, 0x36, 0x12, 0x98, - 0x98, 0xaa, 0xdc, 0x29, 0x13, 0x22, 0x80, 0xdc, 0xac, 0x61, 0x24, 0x02, 0xa9, 0xba, 0xbc, 0xac, - 0x51, 0x23, 0x81, 0xbb, 0xac, 0x0a, 0x55, 0x22, 0x81, 0x99, 0xa9, 0xb9, 0xad, 0x52, 0x02, 0x81, - 0xb8, 0xcd, 0x29, 0x45, 0x22, 0x91, 0xaa, 0xcb, 0xad, 0x0b, 0x36, 0x01, 0xa8, 0xba, 0x9c, 0x42, - 0x34, 0x12, 0xa8, 0x9a, 0xaa, 0xda, 0x2a, 0x26, 0x00, 0x99, 0xca, 0x8c, 0x53, 0x24, 0x12, 0xa9, - 0xbb, 0xdc, 0xab, 0x58, 0x24, 0x91, 0xaa, 0xac, 0x29, 0x44, 0x23, 0x81, 0xaa, 0x9a, 0xaa, 0xac, - 0x60, 0x13, 0x88, 0xba, 0xac, 0x49, 0x36, 0x14, 0x80, 0xaa, 0xc9, 0xae, 0x8a, 0x62, 0x02, 0x98, - 0xab, 0x8b, 0x51, 0x24, 0x13, 0xa8, 0x99, 0xaa, 0xbb, 0x8a, 0x55, 0x81, 0x99, 0xab, 0x8a, 0x73, - 0x26, 0x01, 0x89, 0x99, 0xdc, 0x9b, 0x19, 0x45, 0x91, 0xa9, 0xab, 0x19, 0x45, 0x23, 0x00, 0x99, - 0xa9, 0xbb, 0x9a, 0x1a, 0x36, 0x91, 0xab, 0xa9, 0x39, 0x77, 0x03, 0x88, 0x01, 0xda, 0xbd, 0x8a, - 0x20, 0x26, 0x98, 0xaa, 0x9a, 0x40, 0x44, 0x11, 0x00, 0x88, 0xbb, 0xab, 0xab, 0x48, 0x25, 0xa8, - 0x99, 0x89, 0x60, 0x36, 0x80, 0x21, 0xa1, 0xcf, 0xbb, 0x89, 0x52, 0x13, 0xa9, 0xbb, 0x09, 0x63, - 0x14, 0x22, 0x81, 0xb8, 0xbd, 0xaa, 0x99, 0x51, 0x04, 0x99, 0x89, 0x08, 0x62, 0x23, 0x21, 0x24, - 0xf9, 0xbd, 0x9b, 0x19, 0x54, 0x81, 0x9a, 0x9a, 0x18, 0x43, 0x43, 0x23, 0x98, 0xcb, 0xdb, 0x9a, - 0x09, 0x44, 0x91, 0x98, 0x08, 0x08, 0x72, 0x22, 0x32, 0x91, 0xee, 0xcb, 0x89, 0x31, 0x14, 0xa0, - 0xa9, 0x9a, 0x21, 0x35, 0x44, 0x02, 0xba, 0xba, 0xad, 0x99, 0x40, 0x13, 0x88, 0x98, 0x88, 0x19, - 0x56, 0x24, 0x02, 0xc0, 0xbf, 0xab, 0x08, 0x34, 0x01, 0xa8, 0xba, 0x19, 0x43, 0x45, 0x24, 0xb0, - 0x9b, 0xca, 0x9b, 0x09, 0x24, 0x11, 0x98, 0x99, 0x11, 0x3a, 0x77, 0x04, 0x08, 0xc9, 0xbd, 0x8a, - 0x20, 0x14, 0x00, 0xb9, 0x8a, 0x12, 0x61, 0x35, 0x82, 0xba, 0xa9, 0xbc, 0x89, 0x18, 0x03, 0x12, - 0xca, 0x30, 0xb2, 0x71, 0x57, 0x80, 0x08, 0xeb, 0xab, 0x08, 0x31, 0x82, 0x80, 0xba, 0x20, 0x81, - 0x67, 0x12, 0x90, 0x9a, 0xb9, 0x9c, 0x98, 0x30, 0x81, 0x80, 0x29, 0x84, 0x2a, 0x77, 0x82, 0x00, - 0xb1, 0xcf, 0x8a, 0x08, 0x32, 0x98, 0x80, 0x19, 0x01, 0x50, 0x26, 0x01, 0x90, 0x9a, 0xbc, 0x9b, - 0x89, 0x04, 0x8a, 0x12, 0x32, 0xa9, 0x75, 0x33, 0x08, 0x43, 0xfa, 0xaf, 0x88, 0x28, 0x82, 0x09, - 0x01, 0x00, 0x19, 0x34, 0x21, 0x23, 0xa0, 0xdb, 0xae, 0x9a, 0x18, 0xb1, 0x3a, 0x25, 0x01, 0x39, - 0x23, 0x36, 0x52, 0x84, 0xee, 0xaa, 0x08, 0x20, 0x91, 0x29, 0x13, 0x91, 0x18, 0x10, 0x55, 0x13, - 0xa8, 0xeb, 0xab, 0x99, 0x11, 0xaa, 0x71, 0x12, 0xa0, 0x00, 0x49, 0x25, 0x34, 0xd0, 0xbe, 0x9a, - 0x80, 0x22, 0xa8, 0x52, 0x12, 0x99, 0x89, 0x38, 0x47, 0x82, 0xba, 0xca, 0x8a, 0x09, 0x81, 0x8b, - 0x54, 0x02, 0xa9, 0x80, 0x72, 0x24, 0x02, 0xfb, 0xac, 0x89, 0x10, 0x82, 0x08, 0x43, 0x92, 0x9a, - 0xa9, 0x73, 0x26, 0xa8, 0x9a, 0xab, 0x08, 0x00, 0xa8, 0x28, 0x35, 0xb1, 0x9a, 0x38, 0x77, 0x12, - 0x98, 0xbd, 0x9c, 0x80, 0x10, 0x01, 0x10, 0x42, 0x90, 0xaa, 0x3a, 0x57, 0x02, 0xa9, 0xac, 0x19, - 0x98, 0x88, 0x88, 0x88, 0x35, 0xb8, 0x19, 0x73, 0x35, 0x10, 0xe9, 0xac, 0x09, 0x98, 0x11, 0x02, - 0x8b, 0x27, 0x88, 0x99, 0x38, 0x27, 0x80, 0xd9, 0x1a, 0x82, 0xab, 0x01, 0xba, 0x1d, 0x25, 0x09, - 0x11, 0x31, 0x14, 0x13, 0xef, 0x88, 0x90, 0x8a, 0x12, 0xb8, 0x4b, 0x26, 0x08, 0xa9, 0x38, 0x34, - 0xa1, 0xae, 0x42, 0xc8, 0x0a, 0xa0, 0xbc, 0x40, 0x14, 0x01, 0x99, 0x30, 0x24, 0xc0, 0x0c, 0x92, - 0xcc, 0x2a, 0x91, 0xbb, 0x71, 0x06, 0x90, 0x9a, 0x20, 0x23, 0xa0, 0x49, 0xa3, 0xbf, 0x18, 0xcb, - 0x8a, 0x73, 0x12, 0xa8, 0x89, 0x40, 0x02, 0x90, 0x10, 0xe9, 0xcb, 0x00, 0x98, 0x8a, 0x57, 0x01, - 0xaa, 0x9a, 0x31, 0x24, 0x01, 0x21, 0xfb, 0x9c, 0x98, 0x9a, 0x20, 0x46, 0x91, 0x9a, 0x89, 0x33, - 0x33, 0x10, 0xa1, 0xdf, 0x9a, 0x08, 0x88, 0x39, 0x47, 0x90, 0xaa, 0x9a, 0x52, 0x24, 0x81, 0xa0, - 0xcd, 0x89, 0x98, 0x89, 0x51, 0x15, 0xa9, 0x8a, 0x18, 0x35, 0x12, 0x90, 0xda, 0xbb, 0x0b, 0x02, - 0x90, 0x70, 0x14, 0xa9, 0xbb, 0x2b, 0x57, 0x22, 0x98, 0xca, 0xac, 0x00, 0x88, 0x80, 0x52, 0x92, - 0xab, 0x89, 0x72, 0x24, 0x01, 0xa9, 0xad, 0xaa, 0x30, 0x92, 0xa9, 0x51, 0x04, 0xba, 0xac, 0x51, - 0x36, 0x82, 0xba, 0xbc, 0x9a, 0x11, 0x91, 0x19, 0x23, 0xc0, 0x9b, 0x32, 0x77, 0x13, 0xa0, 0xbc, - 0x99, 0x89, 0x33, 0xc8, 0x9b, 0x63, 0x92, 0xb9, 0x9a, 0x73, 0x37, 0xa8, 0xab, 0xa9, 0x19, 0x11, - 0xa9, 0x09, 0x01, 0x98, 0x41, 0x63, 0x37, 0x02, 0xcc, 0x99, 0x90, 0x28, 0x92, 0xcc, 0x19, 0x43, - 0x82, 0xba, 0x1b, 0x77, 0x82, 0xaa, 0x8a, 0x89, 0x18, 0x80, 0xbb, 0x80, 0x30, 0x13, 0x43, 0x74, - 0x25, 0xc9, 0x9a, 0x00, 0x88, 0x10, 0xca, 0x9e, 0x20, 0x34, 0x98, 0xa9, 0x58, 0x17, 0xa8, 0x8a, - 0x88, 0x89, 0x88, 0xa8, 0x9c, 0x08, 0x52, 0x21, 0x34, 0x44, 0xa1, 0xad, 0x29, 0x81, 0x99, 0xa9, - 0xdd, 0x1a, 0x43, 0x14, 0x99, 0x8a, 0x53, 0x83, 0xaa, 0x88, 0xab, 0xbc, 0x88, 0xeb, 0x89, 0x30, - 0x25, 0x53, 0x33, 0x02, 0xfb, 0x09, 0x12, 0xa0, 0x9d, 0xba, 0x9d, 0x30, 0x35, 0x02, 0xa8, 0x09, - 0x42, 0x00, 0x11, 0xdc, 0xbb, 0x0c, 0x98, 0x9b, 0x10, 0x30, 0x57, 0x33, 0x03, 0xb9, 0x9c, 0x23, - 0x01, 0xde, 0x9a, 0xaa, 0x19, 0x35, 0x23, 0x03, 0xba, 0x8a, 0x33, 0x56, 0xb0, 0xbc, 0xad, 0x08, - 0x99, 0x10, 0x91, 0x50, 0x36, 0x23, 0x98, 0xaa, 0x30, 0x81, 0xf1, 0x9f, 0x98, 0x89, 0x21, 0x14, - 0x22, 0x82, 0xbc, 0x89, 0x64, 0x83, 0xca, 0xcb, 0x0b, 0x81, 0x09, 0x12, 0x99, 0x64, 0x34, 0x81, - 0x9a, 0x20, 0xa2, 0x89, 0xff, 0x09, 0x88, 0x00, 0x12, 0x22, 0x32, 0xc0, 0xac, 0x38, 0x47, 0xa8, - 0xbb, 0x9d, 0x10, 0x90, 0x10, 0x91, 0x18, 0x45, 0x24, 0x90, 0x1a, 0x13, 0xac, 0xfa, 0x8c, 0x01, - 0x09, 0x10, 0x22, 0x23, 0x22, 0xfa, 0x8a, 0x73, 0x93, 0xbb, 0xbd, 0x09, 0x02, 0x88, 0x11, 0x08, - 0x11, 0x47, 0x13, 0xa8, 0x42, 0xc8, 0xbb, 0xbe, 0x38, 0x81, 0x89, 0x31, 0x34, 0x10, 0x02, 0xaf, - 0x30, 0x27, 0xa9, 0xbd, 0x8b, 0x21, 0x90, 0x08, 0x22, 0x80, 0x48, 0x47, 0x01, 0x18, 0x92, 0xcc, - 0xac, 0x8a, 0x32, 0x98, 0x09, 0x53, 0x12, 0x20, 0xb1, 0x8d, 0x73, 0x92, 0xeb, 0x9c, 0x18, 0x01, - 0x88, 0x08, 0x13, 0x98, 0x72, 0x24, 0x10, 0x10, 0xd9, 0xbd, 0x99, 0x28, 0x12, 0xa8, 0x2a, 0x26, - 0x12, 0x10, 0xa8, 0x39, 0x14, 0xfb, 0xbe, 0x89, 0x11, 0x82, 0x99, 0x40, 0x83, 0x19, 0x56, 0x12, - 0x01, 0xb8, 0xcd, 0xab, 0x88, 0x30, 0x03, 0xca, 0x60, 0x13, 0x11, 0x08, 0x88, 0x81, 0xac, 0xdd, - 0xab, 0x09, 0x33, 0xa0, 0x8a, 0x64, 0x81, 0x21, 0x36, 0x23, 0xb0, 0xad, 0xcd, 0x09, 0x88, 0x31, - 0x91, 0x8c, 0x54, 0x12, 0x90, 0x08, 0x00, 0xdb, 0x99, 0xbc, 0xa9, 0x18, 0x16, 0x9a, 0x18, 0x35, - 0x01, 0x31, 0x36, 0x82, 0xcc, 0xba, 0x9c, 0x80, 0x09, 0x25, 0xba, 0x38, 0x47, 0x01, 0x98, 0x18, - 0xb9, 0x9c, 0xa8, 0x9b, 0xca, 0x48, 0x93, 0x0a, 0x42, 0x37, 0x80, 0x40, 0x23, 0xe9, 0x9a, 0xb9, - 0x8a, 0xa8, 0x4a, 0x84, 0x0a, 0x73, 0x26, 0x98, 0x89, 0x90, 0xac, 0x88, 0x89, 0xa0, 0xab, 0x40, - 0x91, 0x11, 0x72, 0x27, 0x99, 0x21, 0x92, 0x9c, 0xb9, 0x89, 0xa8, 0xeb, 0x48, 0x81, 0x20, 0x57, - 0x82, 0x9a, 0x88, 0xaa, 0x8a, 0x98, 0x00, 0xda, 0x9c, 0x21, 0x22, 0x32, 0x77, 0x90, 0x09, 0x01, - 0xb8, 0x99, 0x89, 0x92, 0xbc, 0x9e, 0x32, 0x11, 0x71, 0x25, 0x98, 0x99, 0xba, 0x9a, 0x88, 0x20, - 0x92, 0xde, 0x8b, 0x43, 0x12, 0x42, 0x14, 0xba, 0x18, 0x81, 0xdb, 0x09, 0x21, 0xd9, 0xeb, 0x0b, - 0x25, 0x11, 0x53, 0x12, 0xc9, 0x9a, 0xba, 0x89, 0x20, 0x22, 0xf9, 0xbd, 0x29, 0x26, 0x01, 0x12, - 0x80, 0x9c, 0x00, 0x98, 0x89, 0x32, 0xa0, 0xcf, 0xdb, 0x40, 0x23, 0x21, 0x23, 0x90, 0xad, 0xb9, - 0x9c, 0x18, 0x23, 0x91, 0xdf, 0x9b, 0x62, 0x13, 0x10, 0x80, 0xa8, 0x8a, 0xa8, 0x88, 0x51, 0x83, - 0xda, 0xcd, 0x8b, 0x54, 0x02, 0x21, 0x81, 0xa9, 0x9a, 0xeb, 0x09, 0x32, 0x81, 0xd9, 0xbd, 0x29, - 0x36, 0x02, 0x01, 0xa9, 0x9a, 0x98, 0x8a, 0x22, 0x27, 0xb8, 0xbd, 0xbc, 0x48, 0x35, 0x21, 0x01, - 0x99, 0xa9, 0xca, 0xab, 0x38, 0x27, 0xb9, 0xdb, 0x9b, 0x62, 0x24, 0x82, 0xa8, 0xaa, 0x80, 0x9a, - 0x20, 0x54, 0x82, 0xcd, 0x9a, 0x8a, 0x52, 0x34, 0x82, 0x90, 0x9a, 0xb9, 0xaa, 0x9b, 0x76, 0xa1, - 0xaa, 0xbb, 0x29, 0x55, 0x14, 0x88, 0xaa, 0x89, 0xa0, 0x08, 0x51, 0x33, 0xea, 0xac, 0x08, 0x08, - 0x52, 0x15, 0x80, 0xa8, 0x89, 0x99, 0xa9, 0x48, 0x17, 0xca, 0x9a, 0x09, 0x30, 0x55, 0x82, 0xa9, - 0xaa, 0x88, 0x00, 0x10, 0x54, 0x91, 0xcd, 0x0a, 0x81, 0x08, 0x64, 0x01, 0x88, 0x99, 0x99, 0x90, - 0x09, 0x55, 0xa0, 0xae, 0x88, 0x00, 0x51, 0x33, 0xb0, 0xba, 0xba, 0x28, 0x02, 0x61, 0x04, 0xe9, - 0xab, 0x20, 0x90, 0x30, 0x27, 0x80, 0x98, 0xb9, 0x18, 0xa8, 0x63, 0x13, 0xfb, 0x8d, 0x80, 0x18, - 0x44, 0x82, 0xa9, 0x9a, 0xaa, 0x41, 0x11, 0x33, 0xb8, 0xcf, 0x0a, 0x02, 0x09, 0x52, 0x22, 0x90, - 0xa9, 0xac, 0x02, 0x49, 0x06, 0x91, 0xbe, 0x0a, 0x80, 0x61, 0x14, 0x90, 0xb9, 0xb9, 0x8a, 0x35, - 0x31, 0x91, 0xdb, 0xad, 0x20, 0x91, 0x20, 0x22, 0x14, 0x88, 0xda, 0x0b, 0x13, 0x54, 0x80, 0xd0, - 0xae, 0x18, 0x08, 0x54, 0x01, 0xa8, 0xaa, 0xba, 0x38, 0x27, 0x82, 0xa9, 0xda, 0x0a, 0x21, 0x08, - 0x10, 0x40, 0x12, 0x98, 0xbe, 0x19, 0x45, 0x02, 0x08, 0xfa, 0x8c, 0x00, 0x38, 0x34, 0x90, 0xa9, - 0xdb, 0x9a, 0x71, 0x23, 0x98, 0xaa, 0xbc, 0x38, 0x01, 0x88, 0x00, 0x53, 0x13, 0xc9, 0xcc, 0x58, - 0x24, 0x98, 0x80, 0xbd, 0x08, 0x88, 0x61, 0x13, 0x99, 0xc9, 0xbb, 0x09, 0x67, 0x81, 0x99, 0xb9, - 0x1a, 0x21, 0x80, 0x99, 0x20, 0x53, 0x91, 0xba, 0x9d, 0x56, 0x81, 0x89, 0xa8, 0x89, 0x99, 0x8a, - 0x55, 0x82, 0x89, 0xcb, 0x9b, 0x78, 0x16, 0xa0, 0xaa, 0x99, 0x20, 0x02, 0xaa, 0x88, 0x40, 0x14, - 0x89, 0xba, 0x79, 0x25, 0xa8, 0x0a, 0x01, 0x98, 0xcc, 0x2a, 0x26, 0x88, 0xaa, 0xab, 0x09, 0x67, - 0x82, 0xba, 0x99, 0x08, 0x12, 0xb0, 0x8a, 0xa9, 0x73, 0x12, 0x98, 0x0b, 0x44, 0x13, 0xae, 0x31, - 0x82, 0xda, 0xac, 0x32, 0x83, 0xba, 0x88, 0xbb, 0x70, 0x37, 0xb0, 0xac, 0x08, 0x00, 0x02, 0xa8, - 0xc9, 0x8b, 0x73, 0x83, 0x99, 0x50, 0x01, 0xb0, 0x2d, 0x16, 0x98, 0xaa, 0x0a, 0x12, 0xb8, 0x0c, - 0x91, 0x1c, 0x57, 0x80, 0xb9, 0x0a, 0x80, 0x10, 0x02, 0xca, 0xbd, 0x2a, 0x37, 0xa1, 0x19, 0x05, - 0x8a, 0xb9, 0x72, 0x83, 0x99, 0xa9, 0x8a, 0x80, 0xba, 0x58, 0xb2, 0x71, 0x85, 0x9b, 0x99, 0x18, - 0x00, 0x42, 0xc1, 0xcc, 0x8b, 0x40, 0x24, 0x88, 0x53, 0xc8, 0x8a, 0x08, 0x27, 0x90, 0x88, 0xba, - 0x89, 0x88, 0xa9, 0x43, 0x31, 0x37, 0xeb, 0x89, 0x00, 0x81, 0x28, 0x84, 0xdb, 0xac, 0x08, 0x43, - 0x03, 0x51, 0x92, 0xaf, 0x18, 0x40, 0x03, 0x08, 0xb8, 0xbc, 0x89, 0x98, 0x29, 0x45, 0x53, 0xc0, - 0xac, 0x18, 0x21, 0x90, 0x32, 0xc0, 0xbe, 0x8a, 0x20, 0x43, 0x23, 0x15, 0xea, 0x8b, 0x28, 0x34, - 0x02, 0x80, 0xea, 0xab, 0x08, 0x80, 0x40, 0x35, 0x82, 0xcd, 0xaa, 0x31, 0x03, 0x18, 0x03, 0xed, - 0x9b, 0x08, 0x32, 0x43, 0x33, 0xb2, 0xcf, 0x89, 0x41, 0x23, 0x10, 0xb0, 0xcd, 0x8a, 0x80, 0x10, - 0x73, 0x12, 0xa9, 0xbd, 0x0a, 0x34, 0x80, 0x11, 0xc1, 0xbd, 0x89, 0x28, 0x33, 0x44, 0x03, 0xd9, - 0xbc, 0x18, 0x34, 0x23, 0x01, 0xfa, 0xab, 0x89, 0x10, 0x31, 0x36, 0x80, 0xda, 0xac, 0x38, 0x14, - 0x00, 0x81, 0xeb, 0x9b, 0x08, 0x31, 0x43, 0x43, 0x81, 0xdc, 0x9b, 0x30, 0x44, 0x13, 0xb0, 0xbd, - 0xaa, 0x18, 0x21, 0x62, 0x04, 0xa8, 0xcc, 0x9a, 0x52, 0x02, 0x00, 0xb8, 0xbc, 0x8a, 0x28, 0x33, - 0x63, 0x33, 0xb0, 0xbf, 0x9a, 0x52, 0x24, 0x82, 0xca, 0xab, 0x89, 0x10, 0x22, 0x54, 0x82, 0xdb, - 0xbb, 0x1a, 0x45, 0x11, 0xa8, 0xbb, 0xba, 0x88, 0x41, 0x33, 0x64, 0x03, 0xda, 0xbb, 0x09, 0x55, - 0x13, 0xb0, 0xbb, 0xab, 0x08, 0x12, 0x43, 0x36, 0xb0, 0xae, 0xaa, 0x20, 0x35, 0x92, 0xbb, 0xab, - 0x8b, 0x08, 0x52, 0x43, 0x45, 0xa1, 0xcb, 0xab, 0x39, 0x57, 0x81, 0x99, 0xaa, 0x99, 0x10, 0x20, - 0x52, 0x14, 0xda, 0xaa, 0x89, 0x30, 0x17, 0xa8, 0x9a, 0x99, 0x98, 0x00, 0x42, 0x53, 0x15, 0xb8, - 0xcb, 0x9b, 0x71, 0x15, 0x98, 0x99, 0x9a, 0x09, 0x01, 0x30, 0x53, 0xa3, 0xbd, 0xa9, 0x89, 0x72, - 0x93, 0xaa, 0xa9, 0x99, 0x08, 0x11, 0x45, 0x53, 0x93, 0xbb, 0xbd, 0x0a, 0x66, 0x01, 0x89, 0xaa, - 0x99, 0x10, 0x08, 0x33, 0x34, 0xe0, 0x9b, 0x9a, 0x1a, 0x36, 0xb0, 0xa9, 0x9a, 0x99, 0x00, 0x50, - 0x35, 0x44, 0xa0, 0xcb, 0xbb, 0x58, 0x26, 0x81, 0xb9, 0xaa, 0x08, 0x80, 0x30, 0x43, 0x14, 0xeb, - 0x99, 0xa9, 0x29, 0x15, 0xa8, 0xb9, 0x9a, 0x89, 0x10, 0x56, 0x33, 0x24, 0xca, 0xac, 0x9b, 0x72, - 0x14, 0x90, 0xba, 0x99, 0x00, 0x18, 0x22, 0x53, 0x92, 0xbc, 0xba, 0xae, 0x21, 0x04, 0x88, 0xb9, - 0xab, 0x89, 0x61, 0x24, 0x35, 0x02, 0xdb, 0xbb, 0x1b, 0x46, 0x13, 0xa9, 0xca, 0x89, 0x81, 0x00, - 0x31, 0x16, 0x90, 0xaa, 0xdc, 0x8b, 0x11, 0x12, 0x80, 0xdb, 0x0a, 0x28, 0x34, 0x54, 0x23, 0xa2, - 0xbe, 0xac, 0x30, 0x35, 0x03, 0xba, 0xbc, 0x18, 0x10, 0x88, 0x54, 0x02, 0xa0, 0xcc, 0xbc, 0x89, - 0x21, 0x24, 0xb0, 0xac, 0x08, 0x21, 0x43, 0x26, 0x23, 0xb1, 0xcf, 0x8a, 0x31, 0x53, 0x82, 0xba, - 0x9c, 0x11, 0x90, 0x29, 0x16, 0x11, 0xc0, 0xbc, 0xac, 0x89, 0x31, 0x06, 0xb9, 0x09, 0x12, 0x00, - 0x43, 0x25, 0x12, 0xf8, 0xac, 0x08, 0x31, 0x35, 0x90, 0xcb, 0x09, 0x02, 0xa9, 0x61, 0x12, 0x00, - 0xe9, 0xbb, 0xcb, 0x19, 0x53, 0x92, 0x9b, 0x20, 0x82, 0x39, 0x46, 0x02, 0x21, 0xec, 0x9b, 0x08, - 0x43, 0x34, 0xb9, 0xab, 0x28, 0xa1, 0x2a, 0x47, 0x80, 0x80, 0xcc, 0xca, 0xab, 0x20, 0x35, 0xa8, - 0x19, 0x22, 0xb9, 0x60, 0x43, 0x10, 0x93, 0xbe, 0x9c, 0x39, 0x34, 0x13, 0xba, 0x9b, 0x21, 0xba, - 0x71, 0x04, 0x88, 0x80, 0xbd, 0xbe, 0x0b, 0x21, 0x23, 0x99, 0x53, 0x81, 0x8c, 0x53, 0x02, 0x20, - 0xb2, 0xcf, 0x8b, 0x32, 0x14, 0x02, 0xba, 0x89, 0x02, 0x09, 0x45, 0x90, 0x09, 0xa0, 0xef, 0x9c, - 0x18, 0x18, 0x12, 0x20, 0x23, 0xc9, 0x2a, 0x26, 0x10, 0x12, 0xd9, 0xce, 0x19, 0x14, 0x01, 0x81, - 0xa9, 0x10, 0xa0, 0x30, 0x05, 0x99, 0x18, 0xe8, 0xcf, 0x89, 0x81, 0x39, 0x23, 0x22, 0x92, 0xbd, - 0x40, 0x12, 0x33, 0x11, 0xfd, 0x9c, 0x20, 0x03, 0x20, 0x92, 0x0b, 0x01, 0xa9, 0x41, 0x01, 0x88, - 0x31, 0xff, 0x9e, 0x08, 0x98, 0x40, 0x22, 0x22, 0xb9, 0x9c, 0x21, 0x33, 0x24, 0xb2, 0xff, 0x09, - 0x11, 0x81, 0x21, 0x90, 0x18, 0x91, 0xaa, 0x11, 0x11, 0x21, 0xc4, 0xff, 0x8a, 0x90, 0x89, 0x53, - 0x22, 0x82, 0xba, 0x9b, 0x42, 0x34, 0x12, 0xfa, 0xac, 0x18, 0x12, 0x10, 0x13, 0x88, 0x12, 0xc0, - 0x9c, 0x31, 0x02, 0x22, 0xfa, 0xdf, 0x89, 0xa0, 0x28, 0x25, 0x13, 0xa0, 0xbb, 0x1b, 0x45, 0x22, - 0x80, 0xcd, 0x9b, 0x30, 0x02, 0x31, 0x02, 0x10, 0x02, 0xdd, 0x0a, 0x33, 0x11, 0x82, 0xef, 0xbb, - 0x89, 0x88, 0x52, 0x44, 0x01, 0xa9, 0xac, 0x38, 0x25, 0x11, 0xa8, 0xcd, 0x8a, 0x31, 0x11, 0x12, - 0x12, 0x11, 0xd0, 0xac, 0x39, 0x23, 0x21, 0xc1, 0xff, 0x9a, 0x88, 0x01, 0x32, 0x35, 0x91, 0xdb, - 0x8a, 0x42, 0x13, 0x01, 0xd9, 0xbc, 0x1a, 0x33, 0x12, 0x20, 0x23, 0x11, 0xdc, 0x9b, 0x21, 0x23, - 0x22, 0xf8, 0xef, 0x89, 0x00, 0x01, 0x32, 0x14, 0xa8, 0xad, 0x18, 0x33, 0x13, 0x90, 0xfb, 0xac, - 0x20, 0x23, 0x01, 0x30, 0x12, 0xa0, 0xad, 0x8a, 0x31, 0x21, 0x23, 0xff, 0x9e, 0x08, 0x00, 0x01, - 0x43, 0x03, 0xda, 0x8a, 0x20, 0x33, 0x82, 0xa9, 0xcf, 0x8a, 0x42, 0x12, 0x18, 0x21, 0x01, 0xaa, - 0x99, 0xab, 0x21, 0x32, 0xb4, 0xff, 0x8f, 0x00, 0x00, 0x10, 0x33, 0x91, 0xbc, 0x08, 0x22, 0x33, - 0x90, 0xfa, 0xae, 0x28, 0x33, 0x01, 0x01, 0x41, 0x98, 0x08, 0xa9, 0x9c, 0x18, 0x22, 0xf8, 0xdf, - 0x08, 0x00, 0x10, 0x21, 0x24, 0xc8, 0x8a, 0x10, 0x11, 0x14, 0xa9, 0xdd, 0x8a, 0x41, 0x13, 0x11, - 0x08, 0x12, 0x89, 0x02, 0xdc, 0x8a, 0x01, 0x82, 0xef, 0x8a, 0x08, 0x00, 0x22, 0x41, 0x04, 0xab, - 0x09, 0x01, 0x52, 0x82, 0xcc, 0xbd, 0x18, 0x44, 0x12, 0x81, 0x19, 0x81, 0x38, 0xb3, 0xce, 0x09, - 0x08, 0xc1, 0xbd, 0x89, 0x80, 0x30, 0x25, 0x31, 0x92, 0x8d, 0x08, 0x08, 0x44, 0xb8, 0xce, 0x8a, - 0x31, 0x26, 0x21, 0x90, 0x09, 0x11, 0x42, 0xd9, 0xac, 0x88, 0x00, 0xb9, 0xbb, 0x9b, 0x98, 0x73, - 0x15, 0x21, 0xb0, 0x09, 0xa8, 0x48, 0x04, 0xfb, 0x9d, 0x00, 0x62, 0x12, 0x01, 0xb8, 0x28, 0x32, - 0x83, 0xde, 0x89, 0x89, 0x88, 0x89, 0xb8, 0x0a, 0xaa, 0x66, 0x81, 0x21, 0xa8, 0x98, 0x9b, 0x44, - 0xa1, 0xcf, 0x19, 0x10, 0x35, 0x11, 0x82, 0xac, 0x41, 0x23, 0xd8, 0xab, 0x99, 0x8a, 0x88, 0x12, - 0xbb, 0xc8, 0x1e, 0x16, 0x80, 0x12, 0x99, 0xaa, 0x49, 0x04, 0xfb, 0x9b, 0x10, 0x62, 0x15, 0x10, - 0xa8, 0x8b, 0x53, 0x81, 0xba, 0x9a, 0xba, 0x8a, 0x28, 0x93, 0x1b, 0xfc, 0x58, 0x82, 0x18, 0x82, - 0xbc, 0x09, 0x34, 0xa0, 0xbf, 0x0b, 0x21, 0x57, 0x02, 0x00, 0xab, 0x19, 0x16, 0xa8, 0x8a, 0xb8, - 0xab, 0x00, 0x31, 0x91, 0x90, 0xbf, 0x33, 0x11, 0x21, 0xf8, 0x9d, 0x21, 0x82, 0xa9, 0xeb, 0x0a, - 0x72, 0x35, 0x00, 0x98, 0xaa, 0x40, 0x93, 0xab, 0x98, 0xdc, 0x08, 0x80, 0x20, 0x21, 0xd1, 0x8a, - 0x30, 0x04, 0x99, 0xde, 0x19, 0x23, 0x98, 0x98, 0xbf, 0x18, 0x56, 0x03, 0x80, 0x99, 0x98, 0x31, - 0xc0, 0x8a, 0xa8, 0x9d, 0x01, 0x8a, 0x33, 0x15, 0xda, 0x8a, 0x34, 0x90, 0xdb, 0x9d, 0x31, 0x81, - 0x28, 0xe0, 0xac, 0x50, 0x35, 0x01, 0x98, 0x98, 0x89, 0x13, 0xcb, 0x99, 0xb9, 0x3a, 0xc3, 0x2b, - 0x27, 0x92, 0xcb, 0x39, 0x05, 0xb9, 0xbd, 0x0a, 0x33, 0x80, 0x32, 0xfd, 0x8a, 0x63, 0x24, 0x80, - 0x88, 0x99, 0x19, 0x91, 0xba, 0xaa, 0x99, 0x32, 0xdb, 0x72, 0x13, 0xb0, 0xad, 0x32, 0x91, 0xdc, - 0x9c, 0x08, 0x22, 0x10, 0xa2, 0xaf, 0x38, 0x56, 0x02, 0x08, 0xa8, 0x89, 0x88, 0x80, 0xca, 0x88, - 0x08, 0x98, 0x3a, 0x37, 0x13, 0xfa, 0x1a, 0x11, 0xb8, 0xbf, 0x89, 0x20, 0x13, 0x81, 0xca, 0x0b, - 0x72, 0x36, 0x01, 0x80, 0xa9, 0x99, 0x88, 0xb0, 0x9d, 0x11, 0x98, 0x09, 0x53, 0x32, 0x94, 0x9f, - 0x01, 0x01, 0xec, 0x9b, 0x98, 0x41, 0x12, 0xa9, 0x89, 0x80, 0x73, 0x27, 0x10, 0x98, 0x99, 0x89, - 0x89, 0xb8, 0x2a, 0x93, 0x9c, 0x32, 0x13, 0x46, 0xc0, 0x0a, 0x10, 0xd9, 0xbe, 0x9b, 0x09, 0x54, - 0xa1, 0x89, 0x11, 0x09, 0x57, 0x11, 0x00, 0x99, 0x99, 0x98, 0x9a, 0xaa, 0x42, 0xa8, 0x39, 0x15, - 0x18, 0x06, 0x9b, 0x08, 0x01, 0xed, 0xbc, 0x9b, 0x40, 0x14, 0xa9, 0x20, 0x92, 0x60, 0x16, 0x10, - 0x88, 0x99, 0x08, 0xb8, 0x9d, 0x19, 0x83, 0x8a, 0x44, 0x92, 0x40, 0xb1, 0x0b, 0x89, 0xa0, 0xef, - 0xdb, 0x0a, 0x42, 0x91, 0x89, 0x23, 0x88, 0x65, 0x02, 0x80, 0x98, 0x09, 0x01, 0xec, 0x89, 0x11, - 0x88, 0x28, 0x24, 0x88, 0x23, 0xca, 0x08, 0x9a, 0xd0, 0xce, 0xae, 0x29, 0x14, 0xa8, 0x10, 0x02, - 0x30, 0x37, 0x90, 0x80, 0x89, 0x20, 0xb2, 0xdf, 0x18, 0x81, 0x88, 0x22, 0x00, 0x30, 0x84, 0x9b, - 0xa0, 0x1a, 0xf9, 0xcf, 0x9c, 0x41, 0x81, 0x89, 0x11, 0x11, 0x51, 0x14, 0x99, 0x88, 0x28, 0x12, - 0xf9, 0x8f, 0x11, 0x88, 0x20, 0x01, 0x88, 0x18, 0x92, 0x8c, 0x00, 0x21, 0xfc, 0xcd, 0x0a, 0x23, - 0x90, 0x10, 0x02, 0x02, 0x73, 0x93, 0x8b, 0x10, 0x32, 0x82, 0xff, 0x1a, 0x01, 0x18, 0x12, 0x81, - 0x99, 0x20, 0xd0, 0x19, 0x21, 0x93, 0xff, 0xcb, 0x28, 0x02, 0x08, 0x21, 0x11, 0x80, 0x45, 0xb8, - 0x19, 0x21, 0x34, 0xe0, 0xad, 0x29, 0x01, 0x20, 0x13, 0xa0, 0x9b, 0x13, 0x9e, 0x21, 0x32, 0xf1, - 0xce, 0x9c, 0x31, 0x80, 0x20, 0x11, 0x01, 0x38, 0x07, 0xab, 0x21, 0x21, 0x03, 0xfb, 0x9d, 0x20, - 0x10, 0x22, 0x82, 0xba, 0x1a, 0xb2, 0x2c, 0x17, 0x81, 0xfa, 0xbd, 0x0a, 0x22, 0x00, 0x21, 0x01, - 0x80, 0x72, 0xa3, 0x8a, 0x22, 0x21, 0x91, 0xde, 0x9a, 0x22, 0x12, 0x43, 0xa0, 0xad, 0x10, 0xa8, - 0x73, 0x01, 0xa8, 0xce, 0xcb, 0x19, 0x22, 0x10, 0x12, 0x01, 0x89, 0x36, 0xa8, 0x38, 0x02, 0x21, - 0xb2, 0xff, 0x09, 0x21, 0x21, 0x13, 0xda, 0x9b, 0x01, 0x28, 0x27, 0x98, 0xca, 0xdb, 0x9d, 0x28, - 0x02, 0x20, 0x12, 0x98, 0x48, 0x14, 0x89, 0x03, 0xa8, 0x41, 0xc2, 0xbe, 0x19, 0x34, 0x42, 0xa1, - 0xcc, 0x09, 0x00, 0xc2, 0x02, 0x00, 0x00, 0x7d, 0x0b, 0x02, 0x01, 0x00, 0x28, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x00, 0x78, 0x77, 0x77, 0x37, 0xc9, 0x8b, 0xa4, 0x8e, 0x61, 0xc3, 0x8e, 0x20, - 0x98, 0x88, 0x43, 0x9a, 0xd1, 0x48, 0x80, 0x10, 0x11, 0x81, 0x89, 0xa0, 0x88, 0x8a, 0xa1, 0x62, - 0xfa, 0xab, 0x2a, 0xa1, 0x0e, 0x02, 0x62, 0x02, 0x12, 0x30, 0x01, 0x00, 0xc0, 0x0b, 0xc0, 0xbc, - 0xdb, 0x68, 0x84, 0xbc, 0x19, 0x00, 0x80, 0x30, 0xb2, 0x1b, 0x84, 0xaa, 0x18, 0x14, 0x71, 0xb1, - 0x2c, 0x16, 0xa9, 0x89, 0x00, 0x88, 0x9a, 0x88, 0xab, 0x0d, 0x34, 0xf9, 0x2a, 0x17, 0xcb, 0x18, - 0xb8, 0x40, 0x91, 0x49, 0x24, 0x90, 0x19, 0x03, 0xba, 0xcb, 0x30, 0x24, 0x98, 0x08, 0x81, 0x40, - 0xb3, 0xbe, 0xa9, 0x19, 0x80, 0x90, 0x51, 0xb9, 0xff, 0x0c, 0x23, 0x11, 0x18, 0x35, 0x03, 0xa9, - 0x08, 0x90, 0x20, 0xfb, 0xa9, 0x2b, 0x95, 0x3b, 0x15, 0xeb, 0x9a, 0x88, 0x80, 0x8a, 0x12, 0x50, - 0x93, 0x1d, 0x15, 0x88, 0x98, 0x28, 0x82, 0x30, 0x18, 0xf2, 0x9f, 0x20, 0x81, 0xbc, 0x1b, 0x12, - 0x00, 0x29, 0x77, 0xa1, 0xad, 0x19, 0x01, 0x00, 0x90, 0x1a, 0x37, 0x80, 0x20, 0x92, 0x9b, 0xea, - 0x9b, 0x41, 0x82, 0x00, 0x01, 0x18, 0x03, 0xee, 0x09, 0x01, 0x99, 0x52, 0x88, 0x21, 0x80, 0x99, - 0x90, 0xac, 0x29, 0x47, 0x90, 0x31, 0x34, 0xb8, 0xae, 0xba, 0x2a, 0xb1, 0x9d, 0x53, 0x01, 0x00, - 0xd9, 0x0a, 0x02, 0x01, 0x19, 0xb1, 0x1d, 0x17, 0x98, 0xba, 0x3a, 0x25, 0xb2, 0x9f, 0x32, 0xb8, - 0xcb, 0x29, 0x04, 0x8b, 0x21, 0x13, 0x40, 0x37, 0x01, 0xda, 0x9c, 0x21, 0xa0, 0xdb, 0xab, 0x28, - 0x13, 0x61, 0x26, 0x98, 0x88, 0x00, 0xb8, 0xaa, 0xac, 0x20, 0x81, 0x58, 0x27, 0xc9, 0x28, 0x93, - 0xbc, 0x18, 0x21, 0x01, 0x62, 0x83, 0x40, 0x82, 0xca, 0x0b, 0x13, 0xfb, 0x0a, 0x08, 0x91, 0xbf, - 0x10, 0x80, 0x91, 0x1a, 0x36, 0x81, 0x18, 0x22, 0x21, 0xa0, 0xed, 0xac, 0x22, 0xb1, 0x2a, 0x35, - 0xb8, 0xbd, 0xaa, 0x00, 0xaa, 0x02, 0x8b, 0x42, 0x67, 0x01, 0x90, 0x9a, 0x10, 0x46, 0x03, 0x10, - 0x98, 0xbb, 0xad, 0xa9, 0xae, 0x09, 0xa0, 0xac, 0x73, 0x93, 0x89, 0x32, 0x90, 0x89, 0x34, 0x91, - 0x89, 0x24, 0xfc, 0x0c, 0x32, 0x03, 0xb9, 0x20, 0x25, 0xa1, 0x10, 0xa0, 0xac, 0x9a, 0x9c, 0x28, - 0x22, 0x25, 0xb9, 0x99, 0xdc, 0xac, 0x51, 0xb0, 0x8c, 0x08, 0x71, 0x23, 0x82, 0x00, 0xc0, 0x8c, - 0x08, 0xb8, 0x1a, 0xa0, 0x61, 0x91, 0x09, 0x91, 0xdc, 0xab, 0x63, 0x02, 0xd9, 0x8a, 0x02, 0xab, - 0x38, 0x36, 0x81, 0x0a, 0x54, 0x01, 0x20, 0x94, 0x0a, 0x26, 0xfb, 0x8b, 0x98, 0x99, 0x21, 0x01, - 0x81, 0xda, 0xbc, 0x19, 0x34, 0x02, 0x11, 0x52, 0x13, 0x98, 0x51, 0x34, 0xe1, 0xae, 0x31, 0x82, - 0x0a, 0x43, 0xa9, 0x9a, 0x9a, 0x08, 0x10, 0xea, 0x9c, 0x8a, 0x44, 0x43, 0x23, 0xb9, 0x9d, 0x80, - 0x9a, 0x21, 0x90, 0xad, 0x18, 0x32, 0x15, 0x98, 0xaa, 0x41, 0xfb, 0x8c, 0x90, 0x89, 0x53, 0x33, - 0x81, 0xab, 0x12, 0xeb, 0xca, 0x1a, 0x12, 0x12, 0xea, 0x8a, 0x72, 0x92, 0x8a, 0x44, 0x22, 0x20, - 0xd8, 0xac, 0xbb, 0x9a, 0x73, 0x92, 0x18, 0x02, 0x81, 0xcb, 0xa9, 0xaa, 0x09, 0x51, 0x12, 0xb0, - 0x78, 0x06, 0x08, 0x00, 0x90, 0x18, 0x03, 0x42, 0x91, 0x60, 0x24, 0x81, 0xdc, 0x9b, 0x21, 0xc9, - 0x99, 0x88, 0xd9, 0x09, 0x11, 0x40, 0x15, 0xd9, 0xbb, 0x18, 0x81, 0x51, 0x03, 0xbc, 0x38, 0x23, - 0x01, 0xa2, 0xbf, 0x19, 0xa0, 0xbd, 0xac, 0x71, 0x13, 0x89, 0x31, 0x33, 0x33, 0x12, 0xf9, 0xbe, - 0xaa, 0xbb, 0x1b, 0x53, 0x53, 0x13, 0x91, 0xab, 0x22, 0xa9, 0x9a, 0x98, 0x78, 0x46, 0x01, 0x9a, - 0x8a, 0xcc, 0x8b, 0x09, 0x80, 0x89, 0x80, 0x90, 0x58, 0x16, 0x42, 0x83, 0x18, 0x45, 0x03, 0x98, - 0x20, 0x20, 0xc3, 0x9d, 0x11, 0x88, 0xcc, 0xca, 0x9a, 0xa8, 0xcc, 0xac, 0x99, 0x89, 0x10, 0x25, - 0x12, 0x62, 0x24, 0x90, 0x09, 0x22, 0xb8, 0xbd, 0x10, 0x11, 0x08, 0x91, 0x18, 0xc0, 0xcf, 0x09, - 0x20, 0x53, 0x13, 0x08, 0xd8, 0x9c, 0x88, 0x20, 0xfa, 0xbc, 0x8a, 0x90, 0x40, 0x45, 0x34, 0x88, - 0x08, 0x01, 0x00, 0x8a, 0xa8, 0xab, 0xfc, 0x8c, 0x31, 0x03, 0x09, 0xa1, 0xad, 0x88, 0x21, 0x11, - 0x03, 0x1a, 0x77, 0x22, 0x02, 0x89, 0x99, 0xa9, 0x08, 0x44, 0x12, 0xc9, 0x38, 0x31, 0xd1, 0xbe, - 0x8a, 0xda, 0x99, 0xb9, 0xaf, 0x8a, 0x21, 0x32, 0x35, 0xa1, 0x9c, 0x19, 0x91, 0x51, 0x36, 0x91, - 0xaa, 0x38, 0x36, 0xc8, 0xad, 0x38, 0x22, 0x23, 0xb8, 0xcc, 0x9c, 0x98, 0xab, 0x89, 0x20, 0x53, - 0x11, 0x81, 0x80, 0xba, 0x60, 0x13, 0xba, 0x2a, 0x77, 0x12, 0x88, 0xab, 0xca, 0x19, 0x22, 0x22, - 0xb8, 0xcc, 0x58, 0x14, 0x99, 0x0a, 0x90, 0x9a, 0x88, 0xac, 0x18, 0x36, 0x33, 0x44, 0x54, 0x34, - 0x01, 0xa9, 0xbc, 0xab, 0xe9, 0x8a, 0x22, 0x81, 0xab, 0xa0, 0xcc, 0x09, 0x90, 0x1a, 0x83, 0xef, - 0xab, 0x20, 0x15, 0x10, 0x21, 0x02, 0x11, 0x62, 0x14, 0xb9, 0x8c, 0x63, 0x02, 0xa8, 0x8a, 0x31, - 0xe9, 0xbb, 0xbb, 0xcd, 0x09, 0x52, 0x02, 0xa9, 0xa9, 0x28, 0x35, 0x01, 0xca, 0x8b, 0x45, 0x03, - 0xb9, 0x1a, 0x81, 0x32, 0x08, 0x66, 0x12, 0xb8, 0x8b, 0xb0, 0xad, 0x19, 0x01, 0xea, 0x08, 0x98, - 0x31, 0x21, 0x14, 0x43, 0x11, 0x84, 0x9c, 0x61, 0x37, 0x12, 0x91, 0xeb, 0xcc, 0x8a, 0x99, 0x88, - 0x52, 0x03, 0x11, 0x90, 0x09, 0x02, 0xfd, 0x9a, 0x08, 0x99, 0x28, 0x36, 0x02, 0x99, 0xaa, 0x28, - 0x27, 0x81, 0x08, 0x81, 0xba, 0x51, 0x84, 0x89, 0x01, 0xda, 0x9b, 0x08, 0xfa, 0x9a, 0x81, 0xac, - 0x40, 0x83, 0xdc, 0x89, 0x10, 0x11, 0x45, 0x12, 0x88, 0x80, 0x21, 0x36, 0x81, 0xab, 0x08, 0x00, - 0xa0, 0x00, 0xfb, 0xbf, 0x2a, 0x24, 0x81, 0x98, 0x9b, 0x30, 0x47, 0xa0, 0xaa, 0x9a, 0x00, 0x32, - 0x12, 0x55, 0x02, 0xca, 0x8a, 0xa0, 0xbd, 0x30, 0x05, 0xaa, 0x99, 0x08, 0x21, 0x04, 0xce, 0x8a, - 0xa9, 0x8b, 0x18, 0x34, 0x53, 0x25, 0x12, 0x00, 0x11, 0x24, 0xdb, 0x8a, 0x98, 0xa9, 0x19, 0xf8, - 0xad, 0x28, 0x53, 0x22, 0x98, 0x89, 0x99, 0xf8, 0xae, 0x98, 0x08, 0x81, 0x11, 0x28, 0x35, 0x98, - 0x00, 0x32, 0x83, 0x8b, 0x77, 0x14, 0x10, 0x10, 0x90, 0x9a, 0xc8, 0x8b, 0xb9, 0xca, 0x9b, 0x01, - 0x89, 0x80, 0xec, 0xbc, 0x09, 0x55, 0x22, 0x90, 0x58, 0x24, 0x08, 0xb8, 0xab, 0xaa, 0x31, 0xa9, - 0xfa, 0xad, 0x88, 0x30, 0x12, 0x00, 0x9b, 0x21, 0x55, 0x12, 0xa0, 0xcf, 0x89, 0x10, 0x81, 0x42, - 0x34, 0x82, 0x08, 0x02, 0xba, 0xee, 0xab, 0x08, 0x88, 0x73, 0x24, 0x02, 0x89, 0xba, 0x9c, 0xba, - 0x8c, 0x98, 0xcc, 0x0a, 0x10, 0x01, 0x53, 0x44, 0x12, 0x00, 0x90, 0x09, 0x36, 0x90, 0x30, 0x33, - 0x81, 0xcb, 0x30, 0xc9, 0x29, 0x25, 0xd1, 0x9d, 0x99, 0x89, 0xa8, 0xaa, 0xdc, 0xbc, 0x89, 0x00, - 0x41, 0x55, 0x92, 0x0a, 0x42, 0x33, 0x91, 0x9b, 0xab, 0x81, 0xb9, 0x8b, 0xf9, 0x9d, 0x41, 0x35, - 0xa0, 0xab, 0x88, 0xec, 0xac, 0x10, 0x22, 0xa0, 0x40, 0x45, 0x23, 0x00, 0x10, 0xc1, 0xbf, 0x8a, - 0x11, 0x81, 0x8a, 0x43, 0xb2, 0xdf, 0x89, 0x08, 0x11, 0x33, 0x25, 0x98, 0xa0, 0x8a, 0xb8, 0xbc, - 0x18, 0x33, 0x54, 0x24, 0x00, 0xca, 0x8b, 0x41, 0x25, 0x92, 0x39, 0x27, 0x80, 0x20, 0xc0, 0xbf, - 0x9b, 0x08, 0x98, 0x89, 0xaa, 0x3a, 0x37, 0x81, 0xb9, 0x0b, 0xa1, 0x2a, 0x43, 0x25, 0x32, 0x33, - 0x92, 0x19, 0x14, 0x00, 0xd8, 0xce, 0x9a, 0x10, 0x90, 0x0a, 0x37, 0xf8, 0x8a, 0x21, 0xa9, 0x8a, - 0x99, 0x33, 0xa9, 0x71, 0x25, 0x12, 0x90, 0xaa, 0x41, 0xa1, 0xbf, 0xa9, 0xab, 0x20, 0x34, 0xa8, - 0x60, 0x91, 0x99, 0xcd, 0x19, 0x12, 0x80, 0x99, 0x73, 0x27, 0xa8, 0x19, 0x33, 0x90, 0x9c, 0x88, - 0x12, 0xb9, 0x8a, 0x54, 0x33, 0x45, 0x82, 0xeb, 0xac, 0x8b, 0x12, 0x98, 0x88, 0x9a, 0x89, 0x00, - 0x20, 0x05, 0xbd, 0x9a, 0x98, 0x48, 0x57, 0x11, 0x99, 0x20, 0x53, 0x33, 0x03, 0xda, 0xcb, 0x89, - 0xca, 0x08, 0x90, 0xac, 0x08, 0x01, 0x12, 0xc9, 0x9c, 0x18, 0x08, 0x65, 0x25, 0x90, 0x09, 0x90, - 0xab, 0x40, 0x92, 0x8b, 0xfb, 0x9c, 0x89, 0x22, 0x42, 0x03, 0x89, 0xcb, 0x18, 0x08, 0x23, 0x12, - 0xa8, 0x75, 0x17, 0x00, 0x10, 0x98, 0xbb, 0xc9, 0x9b, 0x0a, 0x73, 0x12, 0x54, 0x81, 0xa9, 0x89, - 0x89, 0xa0, 0x9b, 0xd9, 0x1a, 0xb1, 0xbf, 0xaa, 0x19, 0x90, 0x09, 0x74, 0x82, 0x09, 0x10, 0x88, - 0x21, 0x73, 0x46, 0x12, 0x90, 0xab, 0x08, 0xb9, 0xad, 0xaa, 0x10, 0x08, 0x51, 0x14, 0xcb, 0x08, - 0xa8, 0x89, 0x42, 0xfc, 0x9c, 0x08, 0xa8, 0x09, 0x42, 0x23, 0x63, 0x34, 0x82, 0x9a, 0x90, 0x08, - 0xcb, 0xa0, 0xef, 0x88, 0x08, 0x98, 0x41, 0x25, 0x01, 0x98, 0x89, 0x20, 0x92, 0x3a, 0x33, 0x46, - 0x32, 0x81, 0xab, 0xd9, 0xbf, 0x0a, 0x83, 0xbb, 0x8a, 0x32, 0x82, 0xab, 0x18, 0x98, 0xbf, 0xbd, - 0x40, 0x25, 0x11, 0x11, 0x90, 0x8a, 0xb8, 0xde, 0x0a, 0x42, 0x84, 0xaa, 0x73, 0x23, 0x80, 0x28, - 0x90, 0x88, 0xfb, 0x9c, 0x18, 0x98, 0x49, 0x05, 0xba, 0x0a, 0xc9, 0x9a, 0x00, 0xda, 0xaa, 0x30, - 0xa1, 0x71, 0x37, 0x22, 0x80, 0x99, 0x88, 0xa0, 0x9b, 0xaa, 0xdb, 0xbe, 0x19, 0x53, 0x35, 0x23, - 0x00, 0xb9, 0x0a, 0x14, 0xeb, 0xaa, 0x10, 0xa0, 0x09, 0x53, 0x13, 0x30, 0x27, 0xc9, 0xac, 0x31, - 0x82, 0xeb, 0x89, 0x00, 0xb9, 0x9c, 0x08, 0x01, 0x99, 0x80, 0x0b, 0x56, 0x43, 0x91, 0x88, 0x21, - 0x12, 0xda, 0x2a, 0x33, 0xd0, 0x59, 0x24, 0xa9, 0xcb, 0x38, 0x82, 0xce, 0x89, 0x19, 0x81, 0xbc, - 0x58, 0x15, 0x99, 0x00, 0xb8, 0x9a, 0x9a, 0xde, 0xab, 0x10, 0x32, 0x22, 0x32, 0x37, 0x22, 0x42, - 0xa8, 0x3a, 0x25, 0xa8, 0xac, 0x38, 0x47, 0x91, 0x89, 0x89, 0x08, 0xfb, 0xbc, 0x18, 0x81, 0x18, - 0x14, 0x98, 0x51, 0x35, 0x14, 0x01, 0xd9, 0xaa, 0xba, 0xcd, 0x8a, 0x22, 0x01, 0x89, 0x81, 0x09, - 0x33, 0x92, 0x1c, 0x25, 0x92, 0x08, 0x80, 0x8b, 0x43, 0xa8, 0x29, 0x02, 0x66, 0x34, 0xc0, 0x9b, - 0x18, 0x82, 0x30, 0x05, 0xba, 0xbf, 0x63, 0x80, 0xcc, 0x8a, 0x00, 0x10, 0x12, 0xca, 0xbd, 0xbc, - 0x2a, 0x23, 0x02, 0x10, 0x43, 0x44, 0x44, 0x22, 0x32, 0xa3, 0xce, 0xba, 0x18, 0x00, 0x44, 0x80, - 0x00, 0x20, 0xa2, 0xac, 0xcb, 0xdb, 0x8a, 0xa8, 0x30, 0x36, 0x12, 0x42, 0xd0, 0xbe, 0x08, 0x20, - 0x81, 0xaa, 0x50, 0x81, 0x08, 0x52, 0x02, 0x9a, 0x10, 0xcc, 0x9b, 0xc8, 0x8c, 0x99, 0xc8, 0x48, - 0x24, 0x11, 0x54, 0x23, 0x01, 0x80, 0x31, 0x26, 0xc9, 0xbd, 0xab, 0x08, 0xa0, 0xbc, 0x50, 0x24, - 0xa0, 0xcb, 0xab, 0x28, 0x35, 0x81, 0x19, 0x13, 0x99, 0x29, 0x57, 0xfa, 0xbb, 0x18, 0x31, 0x43, - 0x04, 0xa8, 0x19, 0x22, 0x13, 0x01, 0x52, 0xb0, 0xae, 0x18, 0x23, 0x01, 0xd8, 0xcd, 0x9a, 0x00, - 0x00, 0xb8, 0xbd, 0x8a, 0x18, 0x57, 0x13, 0xa8, 0x8a, 0xa9, 0x18, 0x44, 0x23, 0x81, 0xca, 0xbc, - 0xab, 0x19, 0x34, 0xc8, 0xac, 0x51, 0x23, 0xa0, 0xac, 0x28, 0x45, 0x32, 0x81, 0x9a, 0x8a, 0x91, - 0xee, 0xab, 0x10, 0x11, 0x20, 0x46, 0x22, 0x00, 0xb9, 0xbf, 0xab, 0x29, 0x01, 0xda, 0xab, 0x28, - 0x55, 0x22, 0x88, 0x80, 0x88, 0x21, 0x31, 0x14, 0xc8, 0xaf, 0x28, 0x24, 0x32, 0x82, 0xeb, 0xaa, - 0x38, 0x25, 0x90, 0x9a, 0xbb, 0xcc, 0x28, 0x32, 0x16, 0xa8, 0xba, 0x09, 0xca, 0x09, 0xa9, 0x8c, - 0x64, 0x02, 0x99, 0x19, 0x34, 0x12, 0xfb, 0x1a, 0x43, 0x81, 0x00, 0xda, 0x8a, 0x08, 0x81, 0x9a, - 0x88, 0xcb, 0x1b, 0x67, 0x81, 0x00, 0x80, 0x21, 0x73, 0x81, 0xbb, 0x9d, 0x10, 0x01, 0x00, 0x98, - 0xcd, 0xbb, 0x89, 0xda, 0xac, 0x40, 0x02, 0x40, 0x44, 0x23, 0x40, 0x82, 0xcc, 0x19, 0x13, 0x81, - 0x90, 0xbf, 0xbb, 0x28, 0x22, 0x23, 0x00, 0x64, 0x24, 0x01, 0x80, 0x88, 0xe9, 0xbc, 0x9b, 0x10, - 0xa9, 0xbb, 0x88, 0x8b, 0x37, 0x08, 0x00, 0x43, 0xb9, 0x18, 0xab, 0x52, 0x44, 0xc0, 0xbd, 0x29, - 0x15, 0x08, 0x10, 0x21, 0x23, 0xb8, 0xae, 0x19, 0xb9, 0x9d, 0x44, 0x08, 0x31, 0x72, 0x13, 0x99, - 0xfa, 0x9a, 0x89, 0xa9, 0x89, 0x22, 0x92, 0xec, 0x9a, 0x62, 0x25, 0x82, 0x18, 0xa0, 0xab, 0xac, - 0x88, 0xaa, 0x0a, 0x41, 0x36, 0x23, 0xa9, 0x71, 0x81, 0x01, 0x01, 0xeb, 0x0b, 0x32, 0x25, 0x00, - 0x81, 0x20, 0xe8, 0xcd, 0xbb, 0x9a, 0x9a, 0x22, 0x45, 0x22, 0x11, 0x98, 0x11, 0x98, 0xa8, 0x39, - 0xfc, 0x9b, 0x99, 0x22, 0xa9, 0xf9, 0x8c, 0x08, 0x38, 0x27, 0x31, 0x12, 0x10, 0x34, 0x82, 0xaa, - 0xda, 0xed, 0x9b, 0x09, 0x21, 0x24, 0x91, 0x09, 0x01, 0xa9, 0x99, 0x08, 0xa0, 0xdb, 0xbd, 0x70, - 0x27, 0x01, 0x98, 0xaa, 0x28, 0xa3, 0xae, 0x9a, 0x20, 0x82, 0xca, 0x28, 0x45, 0x33, 0x13, 0x11, - 0x83, 0xeb, 0x0a, 0x12, 0xfa, 0xbc, 0x99, 0x10, 0x01, 0x28, 0x67, 0x81, 0x98, 0x99, 0x99, 0xaa, - 0x99, 0x01, 0x30, 0xc2, 0x9b, 0x41, 0x43, 0xb8, 0xcc, 0x8a, 0x28, 0x36, 0x10, 0x12, 0x31, 0x46, - 0x02, 0xcc, 0xbb, 0x89, 0x89, 0xc8, 0x0c, 0x13, 0x44, 0x00, 0x63, 0x82, 0x99, 0x89, 0xaa, 0x21, - 0xe9, 0x8c, 0x23, 0xb0, 0x9b, 0xd9, 0xbf, 0x19, 0x83, 0x08, 0x52, 0x35, 0x12, 0x80, 0x90, 0x10, - 0x20, 0xd8, 0xbb, 0xbe, 0x08, 0x81, 0x99, 0x50, 0x35, 0x01, 0x18, 0xa8, 0x0a, 0x55, 0xe0, 0x8b, - 0x00, 0x32, 0x11, 0x24, 0x01, 0xcf, 0xaa, 0xaa, 0xaa, 0x8a, 0x82, 0x99, 0x60, 0x24, 0x53, 0x35, - 0x01, 0x88, 0x08, 0xa9, 0xbd, 0xdc, 0x8b, 0x01, 0x18, 0x20, 0x14, 0x81, 0x0b, 0x26, 0x91, 0x88, - 0x22, 0x03, 0x20, 0x31, 0xb0, 0xf0, 0xbf, 0xeb, 0x89, 0x89, 0x10, 0x43, 0x23, 0x11, 0x33, 0x43, - 0x23, 0xed, 0x9b, 0x99, 0xdb, 0x30, 0x42, 0x23, 0xa8, 0x08, 0xa8, 0xec, 0x99, 0x1a, 0x33, 0x33, - 0x73, 0x35, 0x12, 0xa8, 0xbe, 0x8b, 0x10, 0xd8, 0x8a, 0x32, 0x02, 0xca, 0xaa, 0x52, 0x91, 0x10, - 0x01, 0xb8, 0xab, 0x09, 0x77, 0x83, 0xa8, 0x9a, 0xeb, 0xac, 0x19, 0x35, 0x12, 0x80, 0x88, 0x88, - 0x11, 0xa8, 0x8a, 0x48, 0x34, 0x44, 0xa8, 0xbc, 0xbe, 0xbd, 0xad, 0x20, 0x32, 0x32, 0x35, 0x34, - 0x11, 0x90, 0x99, 0xea, 0xad, 0x08, 0x32, 0x92, 0xda, 0x9b, 0x80, 0xb9, 0x1b, 0x36, 0xb8, 0x8d, - 0x54, 0x33, 0x02, 0x88, 0x88, 0x88, 0x11, 0xf9, 0xbe, 0xaa, 0x88, 0x20, 0x33, 0x45, 0x23, 0x01, - 0x12, 0xc9, 0xab, 0xd9, 0xbc, 0x9a, 0x00, 0x33, 0x24, 0x88, 0xf9, 0x0b, 0x43, 0x81, 0x8a, 0x20, - 0xd0, 0x19, 0x11, 0xb0, 0xad, 0x28, 0x63, 0x14, 0x88, 0x98, 0x0a, 0x34, 0xe1, 0xbe, 0x8a, 0x99, - 0x18, 0x34, 0x23, 0x21, 0x26, 0x21, 0xa2, 0xbb, 0x9b, 0x18, 0xdc, 0x20, 0x00, 0xf9, 0x0a, 0x90, - 0x50, 0x03, 0x41, 0x23, 0x91, 0xbd, 0xbc, 0x20, 0xc9, 0xbc, 0x8a, 0x08, 0x44, 0x81, 0x01, 0x48, - 0x24, 0x12, 0xa0, 0x0d, 0x24, 0x20, 0x57, 0x82, 0xa8, 0xdb, 0xac, 0x8a, 0x80, 0xba, 0x9b, 0x52, - 0x34, 0x22, 0x33, 0x33, 0x34, 0xb0, 0xcf, 0xaa, 0xb9, 0xac, 0x8a, 0x32, 0xb8, 0x3a, 0x62, 0x35, - 0x32, 0x33, 0xb1, 0xbd, 0x39, 0x05, 0x9a, 0xa8, 0xac, 0xaa, 0xeb, 0x19, 0x12, 0xa8, 0x0b, 0x33, - 0x22, 0x65, 0x14, 0x41, 0x82, 0x10, 0x80, 0x81, 0x9a, 0x30, 0x67, 0xc9, 0xbd, 0xba, 0x99, 0x01, - 0xa8, 0x8b, 0x31, 0x44, 0x55, 0x02, 0x00, 0x31, 0xa0, 0x89, 0x99, 0x98, 0xdd, 0xab, 0x20, 0x88, - 0x46, 0x31, 0x13, 0x81, 0xba, 0xdb, 0x1a, 0x83, 0xee, 0x9b, 0x08, 0x88, 0x08, 0x80, 0xa9, 0x9a, - 0x51, 0x27, 0x22, 0x32, 0x81, 0xa9, 0x29, 0x44, 0xb0, 0xad, 0x08, 0xfa, 0x8a, 0x81, 0xba, 0x8c, - 0x22, 0x80, 0x72, 0x26, 0x81, 0x21, 0xa8, 0xdc, 0x89, 0x32, 0x00, 0x88, 0x12, 0x98, 0xcc, 0x0a, - 0x32, 0x12, 0xa8, 0x28, 0xe2, 0xae, 0x30, 0x45, 0xa0, 0xaa, 0xa8, 0xbe, 0xa9, 0x9a, 0x10, 0x01, - 0xa8, 0x74, 0x17, 0x88, 0x11, 0x31, 0x33, 0x02, 0x20, 0x10, 0x91, 0xbe, 0x99, 0x9b, 0xf9, 0xcf, - 0xba, 0xa9, 0xa9, 0x09, 0x42, 0x34, 0x24, 0x42, 0x34, 0x80, 0x89, 0xb9, 0xbd, 0xa9, 0xa9, 0xac, - 0x08, 0x18, 0x13, 0x66, 0x23, 0x02, 0x99, 0x81, 0x89, 0x89, 0x33, 0xe9, 0xbb, 0xca, 0xab, 0xca, - 0xcb, 0xaa, 0x51, 0x47, 0x13, 0x02, 0x10, 0x81, 0xa9, 0x09, 0x91, 0xbc, 0xac, 0xea, 0xcb, 0xaa, - 0x88, 0x08, 0x53, 0x24, 0x43, 0x01, 0xa9, 0xba, 0xcc, 0x20, 0x34, 0x01, 0x21, 0x90, 0x49, 0x46, - 0x03, 0x00, 0xcd, 0x9a, 0x21, 0x03, 0x98, 0x09, 0xe9, 0xac, 0x89, 0x01, 0xda, 0xcd, 0x9a, 0x88, - 0x28, 0x54, 0x82, 0xab, 0x89, 0x10, 0x66, 0x13, 0x01, 0x18, 0x34, 0x00, 0xb0, 0x9c, 0xb9, 0xba, - 0xcf, 0xa9, 0xab, 0x39, 0x14, 0x80, 0x22, 0x32, 0x46, 0x33, 0x42, 0x03, 0xa9, 0xdb, 0xdb, 0xaa, - 0xaa, 0x21, 0x80, 0xcb, 0x89, 0xa8, 0x71, 0x17, 0x00, 0x20, 0x21, 0x04, 0xb8, 0xbb, 0xcc, 0xbc, - 0xaa, 0xaa, 0x09, 0x33, 0x52, 0x43, 0x46, 0x23, 0x11, 0x20, 0x12, 0x90, 0xcb, 0xbd, 0xcc, 0xbb, - 0x19, 0x00, 0xdb, 0x28, 0x84, 0x99, 0x9c, 0x03, 0xbb, 0xcb, 0x09, 0x73, 0x14, 0x08, 0x43, 0x44, - 0x82, 0xa8, 0x09, 0xb8, 0xac, 0xb9, 0x28, 0x35, 0x14, 0x30, 0xc1, 0x9b, 0xaa, 0x73, 0x43, 0xa1, - 0xcd, 0xbb, 0x09, 0xa9, 0x19, 0x82, 0x10, 0x71, 0x36, 0x53, 0x00, 0x88, 0x10, 0xc9, 0xaa, 0xab, - 0x88, 0xf9, 0x9c, 0x89, 0x80, 0x11, 0xa9, 0x70, 0x14, 0x88, 0x11, 0x12, 0x43, 0x12, 0xa0, 0x19, - 0xa8, 0xc9, 0xaf, 0xba, 0x99, 0xd9, 0x19, 0x73, 0x14, 0x90, 0x09, 0x33, 0x83, 0xcb, 0xbe, 0x9b, - 0xbb, 0xbc, 0xcb, 0xaa, 0x20, 0x73, 0x25, 0x12, 0x22, 0x33, 0x02, 0x89, 0x19, 0x03, 0x98, 0x99, - 0xb0, 0xff, 0x8a, 0x20, 0x92, 0xcb, 0xac, 0x20, 0x98, 0x08, 0x80, 0xda, 0x29, 0x46, 0x33, 0x23, - 0x12, 0x32, 0xb0, 0xbe, 0xdb, 0xad, 0x08, 0xa9, 0xad, 0xa8, 0x38, 0x34, 0x23, 0x10, 0x24, 0x21, - 0x54, 0x23, 0x90, 0xfa, 0xae, 0xaa, 0x8b, 0x32, 0x81, 0x41, 0x45, 0x11, 0x23, 0x22, 0x99, 0xf9, - 0x8b, 0x99, 0xeb, 0x8a, 0x21, 0xc9, 0xbb, 0x8a, 0x11, 0x91, 0x00, 0x54, 0x11, 0x41, 0x45, 0x02, - 0x32, 0xb9, 0xcd, 0x09, 0xc8, 0x29, 0x02, 0x21, 0x62, 0x33, 0x43, 0x02, 0x20, 0xa1, 0xdb, 0x9e, - 0x89, 0x00, 0xeb, 0xbb, 0xdb, 0xbb, 0x19, 0x01, 0x63, 0x34, 0x12, 0x10, 0x35, 0x91, 0xac, 0x18, - 0xa0, 0xcc, 0x38, 0x91, 0xaa, 0x69, 0xa1, 0x9a, 0x10, 0xaa, 0x0b, 0xd3, 0x8f, 0x32, 0x25, 0x31, - 0x03, 0x08, 0x22, 0x12, 0xd8, 0xce, 0x0a, 0xa0, 0xba, 0x9b, 0x28, 0x15, 0x19, 0x00, 0x44, 0x90, - 0x8a, 0x99, 0xb8, 0x9d, 0xcf, 0x98, 0xaa, 0xbc, 0x08, 0x18, 0x57, 0x22, 0x42, 0x35, 0x03, 0x80, - 0x00, 0xa8, 0x9b, 0x0a, 0x81, 0xce, 0xab, 0xca, 0xab, 0xba, 0xbc, 0x9b, 0x39, 0x47, 0x34, 0x12, - 0x90, 0xb8, 0x9d, 0x9a, 0x89, 0x10, 0x18, 0x21, 0x53, 0x24, 0x32, 0x25, 0xa0, 0x1c, 0x03, 0xfb, - 0x9a, 0xa9, 0x8b, 0x33, 0x33, 0xe0, 0x9c, 0x81, 0x98, 0x08, 0x30, 0x13, 0x62, 0x47, 0x04, 0xa8, - 0xab, 0x99, 0x89, 0x02, 0x18, 0x42, 0xe0, 0xbe, 0x99, 0xaa, 0x8a, 0x12, 0x98, 0x99, 0x73, 0x15, - 0x20, 0x33, 0x43, 0x33, 0x02, 0x60, 0x83, 0xda, 0x99, 0x9b, 0x99, 0x33, 0x91, 0xad, 0x99, 0x21, - 0x29, 0x67, 0x01, 0xac, 0x89, 0xcb, 0xbd, 0xad, 0x9b, 0x08, 0x00, 0x20, 0x18, 0x46, 0x33, 0x24, - 0x22, 0x22, 0x42, 0x32, 0x81, 0x99, 0xdc, 0xbd, 0xbb, 0xbc, 0x99, 0x00, 0x11, 0x64, 0x23, 0x01, - 0x00, 0x98, 0xa9, 0xaa, 0xdd, 0x9a, 0x09, 0xc8, 0x9b, 0x63, 0x03, 0x80, 0x20, 0x45, 0x01, 0x00, - 0xb8, 0x9c, 0xa8, 0xcc, 0x9b, 0x22, 0x00, 0x32, 0xfd, 0x9b, 0x30, 0x36, 0x34, 0x01, 0x10, 0x92, - 0xa9, 0x6a, 0x25, 0x81, 0x38, 0x04, 0x98, 0x0a, 0xd9, 0xbe, 0xbc, 0x9b, 0xdb, 0x9b, 0x10, 0x08, - 0x00, 0x38, 0x45, 0x12, 0x80, 0x38, 0xd8, 0x48, 0x55, 0x02, 0x08, 0xa8, 0x9b, 0x9a, 0x22, 0x64, - 0x01, 0x31, 0x23, 0xc8, 0xaa, 0x9b, 0xfb, 0xab, 0xba, 0x9a, 0xca, 0xac, 0xa9, 0xbc, 0x8a, 0x43, - 0x67, 0x23, 0x32, 0x13, 0x01, 0x99, 0xa0, 0xbe, 0xcb, 0xaa, 0x89, 0xa9, 0x8b, 0x21, 0x14, 0x09, - 0x44, 0x33, 0x34, 0x23, 0x21, 0x44, 0x90, 0x10, 0xb1, 0xcf, 0x30, 0x13, 0xb8, 0x28, 0xc0, 0x30, - 0x23, 0xfc, 0x9e, 0x98, 0xca, 0x9c, 0x01, 0xad, 0x19, 0x91, 0x89, 0x32, 0x03, 0x40, 0x03, 0x08, - 0x52, 0x24, 0x09, 0x45, 0x34, 0x03, 0x52, 0x24, 0x82, 0xa9, 0xeb, 0xcc, 0xaa, 0x9b, 0x80, 0x08, - 0x11, 0x9a, 0x22, 0xb1, 0xdf, 0x31, 0x23, 0x81, 0x11, 0x11, 0x12, 0xba, 0xcd, 0xcb, 0x8b, 0x62, - 0x12, 0x18, 0x44, 0x13, 0x32, 0x16, 0x00, 0xb9, 0xab, 0xcc, 0xab, 0x9c, 0xa8, 0x38, 0xd0, 0xac, - 0x22, 0x32, 0x55, 0x12, 0x73, 0x82, 0x99, 0x00, 0xc9, 0xac, 0x98, 0xaa, 0xbb, 0x09, 0x43, 0x92, - 0xab, 0xb9, 0xcf, 0x18, 0x90, 0x08, 0x42, 0x45, 0x03, 0x99, 0x08, 0x42, 0x22, 0x90, 0x79, 0x45, - 0x12, 0x12, 0xa0, 0xbc, 0x89, 0xa1, 0xad, 0xac, 0x08, 0xc9, 0xac, 0x09, 0x91, 0xbe, 0x9b, 0x22, - 0x89, 0x10, 0x23, 0x88, 0x76, 0x23, 0x43, 0x43, 0x23, 0x14, 0xa9, 0x89, 0x80, 0xbe, 0x08, 0xb8, - 0xbe, 0x9a, 0x0a, 0x91, 0xdb, 0x8d, 0x44, 0x02, 0x89, 0x31, 0x42, 0x83, 0x9c, 0x89, 0xb0, 0x8a, - 0xc9, 0xad, 0x63, 0x11, 0x33, 0x83, 0xa9, 0xb9, 0xcf, 0x89, 0xb9, 0xae, 0x89, 0x08, 0xa9, 0x19, - 0x72, 0x25, 0x01, 0x81, 0x31, 0x34, 0x34, 0x21, 0x21, 0x90, 0xca, 0xbb, 0xbf, 0x99, 0x10, 0xe8, - 0xbb, 0x9a, 0x99, 0xbc, 0x8a, 0x88, 0xa8, 0x61, 0x45, 0x04, 0x99, 0x01, 0x91, 0x9d, 0x40, 0x05, - 0x18, 0x36, 0x82, 0xa9, 0x28, 0xc9, 0xba, 0x2a, 0x01, 0x81, 0x9b, 0x73, 0xa4, 0x9c, 0x98, 0xdb, - 0xdb, 0x8a, 0x8a, 0x11, 0x53, 0x35, 0x33, 0x01, 0x12, 0x01, 0x90, 0xb9, 0x09, 0x90, 0xcf, 0x9a, - 0xc9, 0xdd, 0xab, 0x09, 0x12, 0x98, 0x51, 0x26, 0x81, 0x01, 0x11, 0x33, 0x81, 0x99, 0x89, 0xba, - 0x9a, 0xce, 0x80, 0x9a, 0x71, 0x25, 0x00, 0x18, 0x32, 0xc0, 0xcd, 0x9b, 0xb8, 0xbf, 0x9b, 0x81, - 0x09, 0xa9, 0x08, 0x35, 0x21, 0x64, 0x33, 0x22, 0x21, 0x24, 0x01, 0x89, 0x53, 0xa1, 0x29, 0xa0, - 0xdd, 0x99, 0xca, 0xbb, 0xca, 0xbb, 0xba, 0xab, 0x68, 0x34, 0x12, 0x80, 0x32, 0x83, 0x9c, 0x73, - 0x14, 0x88, 0x43, 0x80, 0x38, 0xa2, 0xbf, 0xcb, 0xcc, 0x19, 0x11, 0x22, 0x34, 0x90, 0xab, 0xa9, - 0xaa, 0x2a, 0xf0, 0x8b, 0x52, 0x12, 0x40, 0x26, 0x90, 0xca, 0x19, 0x22, 0x34, 0x33, 0x34, 0xb1, - 0xcf, 0x8a, 0xaa, 0xbc, 0xbb, 0x99, 0x18, 0x80, 0x61, 0x14, 0x02, 0x19, 0x25, 0xa8, 0x41, 0x12, - 0x90, 0x80, 0x00, 0x13, 0x30, 0x57, 0x12, 0x10, 0x18, 0x26, 0x12, 0xa8, 0xfb, 0xbd, 0xbb, 0xca, - 0x8a, 0xcb, 0x9a, 0x09, 0x00, 0x54, 0x02, 0x32, 0x34, 0x04, 0x00, 0x08, 0x34, 0x22, 0x22, 0x03, - 0xa9, 0x10, 0xfd, 0x9d, 0xa9, 0x9a, 0x99, 0xa9, 0x8c, 0xba, 0x10, 0x73, 0x92, 0x8b, 0x65, 0x82, - 0x30, 0x24, 0x02, 0xa9, 0x08, 0x80, 0xeb, 0xab, 0x8a, 0x20, 0x91, 0x89, 0x09, 0x14, 0x9d, 0xe8, - 0xaf, 0x09, 0x80, 0x0a, 0x10, 0x90, 0x28, 0x08, 0x16, 0xb9, 0x70, 0x37, 0x02, 0x20, 0x33, 0x33, - 0x34, 0x14, 0xc9, 0xcd, 0xac, 0x98, 0xa9, 0xaa, 0x08, 0xc9, 0x9a, 0x18, 0x22, 0xb8, 0x8a, 0x64, - 0x83, 0x1a, 0x64, 0x23, 0x12, 0x98, 0x11, 0x41, 0x34, 0x34, 0x00, 0x90, 0xcd, 0xbc, 0x98, 0xbc, - 0x8a, 0xb9, 0x9a, 0xdd, 0x9a, 0x33, 0x10, 0x33, 0x10, 0x80, 0x74, 0x43, 0x03, 0x52, 0x03, 0x01, - 0xa9, 0x09, 0x99, 0xfb, 0xbe, 0xaa, 0x8a, 0x41, 0xa1, 0x9b, 0x12, 0xd9, 0x29, 0xd0, 0xac, 0x39, - 0x17, 0x11, 0x11, 0x26, 0x81, 0x98, 0x18, 0x34, 0x90, 0x09, 0x42, 0xb9, 0xca, 0xbc, 0x9a, 0x09, - 0x81, 0xc8, 0xcd, 0xcb, 0xbb, 0xab, 0xa9, 0x0b, 0x02, 0x8b, 0x76, 0x35, 0x13, 0x32, 0x53, 0x82, - 0x80, 0x63, 0x02, 0xb9, 0x9c, 0xba, 0x88, 0xbc, 0xb9, 0xba, 0xdf, 0x09, 0x90, 0x10, 0x22, 0xb9, - 0x52, 0x01, 0x20, 0x32, 0xa0, 0x54, 0x91, 0x49, 0x37, 0x82, 0x9a, 0x0a, 0x80, 0xb9, 0xbd, 0x9a, - 0x88, 0x81, 0xbc, 0xa0, 0xdf, 0x9a, 0x28, 0x81, 0xa8, 0x68, 0x14, 0x01, 0x99, 0x52, 0x36, 0x80, - 0x31, 0x23, 0x80, 0x12, 0xca, 0x9c, 0x90, 0xaf, 0xa8, 0xa9, 0xac, 0xaa, 0xfb, 0xbc, 0x99, 0x9a, - 0x62, 0x33, 0x10, 0x35, 0x13, 0x11, 0x98, 0x10, 0x63, 0x13, 0x88, 0x32, 0xd8, 0xab, 0x80, 0xb9, - 0xdf, 0x9a, 0xa9, 0x0b, 0x82, 0xaa, 0x38, 0x83, 0xda, 0xbc, 0x29, 0x94, 0xdb, 0x3a, 0x67, 0x11, - 0x22, 0x11, 0x80, 0x01, 0xc9, 0x09, 0x32, 0xa0, 0xb9, 0x9f, 0xb9, 0xbd, 0xca, 0x9a, 0x19, 0x10, - 0x44, 0x10, 0x90, 0x50, 0x02, 0xa8, 0x9c, 0x53, 0x43, 0x43, 0x33, 0x01, 0x89, 0x88, 0xc8, 0xbf, - 0x09, 0xc1, 0xab, 0x09, 0xa8, 0x8c, 0x81, 0xd8, 0xbf, 0x99, 0x18, 0x41, 0x16, 0x80, 0x01, 0x28, - 0x03, 0x43, 0x52, 0xa3, 0x09, 0x40, 0x12, 0x61, 0x03, 0x99, 0xa8, 0xfb, 0xac, 0xca, 0xad, 0xaa, - 0x98, 0xaa, 0x98, 0x61, 0x23, 0x12, 0x23, 0x98, 0x28, 0x27, 0x11, 0x42, 0x14, 0x44, 0x43, 0xa1, - 0xba, 0xac, 0xb9, 0xce, 0x8a, 0x01, 0x08, 0x88, 0x90, 0x18, 0xd8, 0xac, 0x10, 0xaa, 0x31, 0x54, - 0x35, 0x23, 0x52, 0x23, 0x80, 0x29, 0x15, 0xc9, 0x9b, 0xa0, 0xea, 0x9d, 0x08, 0xb0, 0x9a, 0xb9, - 0x0b, 0x11, 0x99, 0x74, 0x95, 0xac, 0x10, 0x32, 0x00, 0x12, 0x74, 0x23, 0x00, 0x08, 0x88, 0x89, - 0xdb, 0x89, 0x00, 0xb8, 0x9c, 0x9a, 0xb8, 0xff, 0x9d, 0x18, 0x80, 0x88, 0x88, 0x21, 0x32, 0x11, - 0x46, 0x80, 0x18, 0x81, 0x28, 0x37, 0x82, 0x19, 0x32, 0xb0, 0x1a, 0xa1, 0xcb, 0xde, 0xac, 0xaa, - 0xba, 0xaa, 0x18, 0x21, 0x21, 0x38, 0x16, 0x60, 0x33, 0x11, 0x53, 0x25, 0x90, 0x09, 0x53, 0x92, - 0xac, 0x21, 0xc8, 0xca, 0xbc, 0xbb, 0x18, 0xb1, 0x0c, 0x22, 0x24, 0xa0, 0x9a, 0xb1, 0xaf, 0xdb, - 0x41, 0x33, 0x32, 0x25, 0x12, 0x73, 0x82, 0x18, 0x81, 0xcd, 0x89, 0x98, 0x9a, 0x99, 0xcd, 0x8a, - 0x00, 0x10, 0x90, 0x10, 0xfa, 0x9f, 0x18, 0x80, 0x18, 0x45, 0x22, 0x12, 0x88, 0x22, 0x11, 0x43, - 0x02, 0xc9, 0x9b, 0x19, 0x20, 0x27, 0xb9, 0xbf, 0x9b, 0xca, 0xad, 0x20, 0x80, 0x8a, 0x53, 0x13, - 0x80, 0x09, 0xa1, 0xce, 0x0a, 0x43, 0x21, 0x44, 0x33, 0x00, 0x81, 0x08, 0x43, 0xb0, 0xbf, 0xaa, - 0xbc, 0xbb, 0xac, 0x10, 0xc0, 0xaa, 0x89, 0x72, 0x25, 0x00, 0x51, 0x13, 0xa8, 0x19, 0x13, 0x02, - 0xaa, 0x98, 0xba, 0x8b, 0x54, 0xe8, 0xbc, 0xa9, 0x9b, 0x52, 0x33, 0xc8, 0x99, 0xca, 0xcd, 0x99, - 0x00, 0xca, 0x89, 0x62, 0x34, 0x23, 0x21, 0x10, 0x13, 0x10, 0x54, 0x53, 0x33, 0x90, 0xbb, 0xac, - 0x99, 0xde, 0x9b, 0xa8, 0xcc, 0x89, 0x9a, 0x88, 0x32, 0xba, 0x31, 0x25, 0x11, 0x37, 0x90, 0x52, - 0x12, 0x12, 0x42, 0x23, 0x24, 0x01, 0x8a, 0x90, 0xfb, 0xcd, 0xab, 0xab, 0x8a, 0x38, 0x25, 0xa8, - 0x00, 0x9a, 0xb8, 0x9d, 0x10, 0x90, 0x2a, 0x56, 0x15, 0x21, 0x34, 0x23, 0x12, 0x91, 0xbd, 0x98, - 0xb9, 0xcf, 0x9a, 0xa8, 0xdb, 0x99, 0xba, 0x08, 0x10, 0xa8, 0x61, 0x11, 0x31, 0x56, 0x33, 0x24, - 0x01, 0x31, 0x02, 0x88, 0x01, 0xbe, 0x11, 0xb8, 0xbc, 0x19, 0x90, 0xc1, 0xff, 0x9a, 0x99, 0xbb, - 0x08, 0x99, 0x99, 0x10, 0x11, 0x47, 0x01, 0x22, 0x33, 0x46, 0x35, 0x21, 0x10, 0x10, 0xa0, 0xba, - 0x09, 0xd8, 0xae, 0x9a, 0xca, 0xbd, 0xaa, 0x89, 0x21, 0xa0, 0x8a, 0x31, 0x32, 0x66, 0x25, 0x80, - 0x20, 0x22, 0x23, 0x03, 0x10, 0x08, 0xfb, 0xbf, 0x98, 0x89, 0x89, 0xb8, 0xae, 0x08, 0x11, 0x89, - 0x44, 0x91, 0x8a, 0x31, 0x03, 0xa8, 0x70, 0x22, 0x91, 0x49, 0x35, 0x32, 0x34, 0x14, 0xba, 0xdb, - 0x2a, 0x03, 0xf9, 0x9c, 0x90, 0xda, 0xac, 0x98, 0xab, 0xcb, 0x48, 0x12, 0x21, 0x42, 0x23, 0x64, - 0x12, 0x02, 0x11, 0x02, 0x88, 0x88, 0x82, 0x9a, 0xa9, 0x34, 0xdb, 0x9a, 0x00, 0xe3, 0xae, 0xbb, - 0xc9, 0x9b, 0x9a, 0xc0, 0xbc, 0x19, 0x10, 0x10, 0x22, 0x67, 0x23, 0x33, 0x12, 0x08, 0x24, 0xda, - 0x2a, 0x13, 0xdd, 0x19, 0xa0, 0x9a, 0xd9, 0xab, 0x88, 0xad, 0x01, 0x98, 0x40, 0x03, 0x40, 0x13, - 0xcc, 0x72, 0x35, 0x12, 0x22, 0xa0, 0xaa, 0xa9, 0xec, 0x89, 0x00, 0x91, 0xce, 0x19, 0x22, 0x88, - 0xa0, 0x9d, 0xa8, 0xaa, 0x38, 0x04, 0xaa, 0x01, 0x8b, 0x43, 0x37, 0x18, 0x33, 0x45, 0x31, 0x36, - 0x33, 0x12, 0x42, 0x93, 0x99, 0xc9, 0xcc, 0xad, 0xcc, 0xac, 0xaa, 0xab, 0x9a, 0x18, 0x63, 0x33, - 0x12, 0x33, 0x32, 0x24, 0xa2, 0x8e, 0x32, 0x91, 0x09, 0x61, 0x93, 0xcb, 0x0a, 0x32, 0x91, 0x9c, - 0xb9, 0xcc, 0xba, 0xce, 0xaa, 0x09, 0x10, 0x34, 0x11, 0x43, 0x23, 0x42, 0x33, 0x32, 0x34, 0x11, - 0x22, 0x12, 0xbc, 0x91, 0xdf, 0xcc, 0x9a, 0x99, 0xda, 0xad, 0x11, 0x01, 0xea, 0x09, 0x11, 0x98, - 0x41, 0x44, 0x33, 0x01, 0x00, 0x72, 0x23, 0x01, 0x11, 0xb8, 0x9a, 0xbb, 0x49, 0xc3, 0xbf, 0x98, - 0xc9, 0x9d, 0x88, 0x98, 0x99, 0x89, 0x11, 0x22, 0xbc, 0xa8, 0xad, 0xc9, 0x69, 0x14, 0x22, 0x41, - 0x25, 0x21, 0x41, 0x25, 0x01, 0x00, 0x89, 0xdb, 0xcb, 0xcd, 0xab, 0x9a, 0xab, 0x18, 0x31, 0x24, - 0x11, 0x33, 0x46, 0x13, 0x80, 0x28, 0x44, 0x02, 0x89, 0xca, 0xbc, 0xac, 0x89, 0x89, 0x01, 0x02, - 0xec, 0x0a, 0x01, 0x11, 0x34, 0x81, 0x32, 0x92, 0xbe, 0x32, 0xba, 0x81, 0x9c, 0x39, 0x14, 0x11, - 0x77, 0x04, 0x20, 0x13, 0x08, 0x00, 0x98, 0x21, 0xfb, 0xaf, 0x89, 0x89, 0xb9, 0xcb, 0x89, 0xea, - 0x9b, 0x21, 0xb8, 0x28, 0x46, 0x03, 0x22, 0x44, 0x33, 0x91, 0x88, 0x90, 0x9a, 0x08, 0xc9, 0x8b, - 0xc9, 0x9d, 0x98, 0x38, 0x26, 0xa8, 0x1a, 0x02, 0xdc, 0xcc, 0xbd, 0x8a, 0x00, 0x90, 0x40, 0x23, - 0x12, 0x55, 0x24, 0x32, 0x12, 0x11, 0x22, 0x03, 0xce, 0xba, 0xaa, 0xdc, 0xac, 0x99, 0x98, 0x89, - 0x89, 0x21, 0x04, 0x31, 0x65, 0x24, 0x22, 0x21, 0x01, 0x90, 0x88, 0xaa, 0x08, 0xb8, 0x0c, 0x80, - 0xfd, 0xab, 0x89, 0x99, 0x99, 0xe8, 0x9e, 0x00, 0xba, 0x8b, 0x12, 0xa8, 0x0b, 0x03, 0x01, 0x77, - 0x06, 0x90, 0x20, 0x23, 0x11, 0x01, 0x81, 0x48, 0x53, 0x12, 0x88, 0x91, 0xcf, 0xbb, 0xb9, 0xbd, - 0xdb, 0xab, 0x89, 0x11, 0x33, 0x03, 0x1a, 0x56, 0x24, 0x28, 0x34, 0x82, 0x88, 0x02, 0xba, 0x9d, - 0x10, 0xb9, 0xae, 0x18, 0x80, 0x00, 0x88, 0x88, 0x61, 0xc1, 0x09, 0x18, 0xf8, 0x9d, 0x99, 0x30, - 0x11, 0x44, 0x32, 0x43, 0x33, 0x23, 0x33, 0x83, 0xcd, 0x09, 0xb9, 0xdb, 0xce, 0xbd, 0x9a, 0xac, - 0x8a, 0x09, 0x11, 0x44, 0x33, 0x24, 0x11, 0xa8, 0x08, 0x99, 0x55, 0x33, 0xc8, 0x8a, 0x21, 0x33, - 0x80, 0x98, 0x9b, 0x10, 0xb8, 0x9c, 0x90, 0xcd, 0x19, 0x82, 0xbf, 0xbc, 0xdc, 0x9d, 0x00, 0xa9, - 0x00, 0x00, 0x21, 0x23, 0x57, 0x23, 0x23, 0x24, 0x99, 0x30, 0x34, 0x43, 0x92, 0xbd, 0xba, 0xcd, - 0xab, 0x90, 0xeb, 0xab, 0x18, 0x98, 0x00, 0x50, 0x36, 0x33, 0x23, 0x10, 0x33, 0x24, 0x9a, 0xe9, - 0xcc, 0xab, 0xb8, 0xaa, 0x10, 0x82, 0xab, 0x08, 0x71, 0x17, 0x80, 0x19, 0x90, 0xac, 0xb9, 0xad, - 0x09, 0x22, 0x91, 0x8b, 0x66, 0x23, 0x22, 0x33, 0x23, 0x21, 0x45, 0x81, 0xb9, 0xcd, 0xb9, 0xbb, - 0xbd, 0xba, 0x9d, 0x08, 0x09, 0x88, 0x32, 0x23, 0x00, 0x82, 0x69, 0x37, 0x13, 0x08, 0x52, 0x12, - 0x00, 0x22, 0xfa, 0x9b, 0x12, 0x89, 0x62, 0x13, 0xa0, 0xac, 0xa0, 0xbc, 0x8a, 0xdb, 0x8c, 0x13, - 0xa9, 0xbd, 0x10, 0x88, 0x09, 0x44, 0x11, 0x54, 0x12, 0x33, 0x37, 0x12, 0x90, 0x99, 0xc8, 0xaf, - 0xb9, 0x99, 0xa9, 0xdc, 0x9c, 0x99, 0x99, 0x32, 0x23, 0x64, 0x34, 0x33, 0x23, 0x13, 0x81, 0xea, - 0x8b, 0xc9, 0xbb, 0xaa, 0x98, 0xab, 0x21, 0x51, 0x02, 0x40, 0x43, 0x35, 0xb0, 0xaa, 0x9a, 0xfc, - 0x9c, 0xa9, 0xdb, 0x8a, 0x12, 0x80, 0x61, 0x34, 0x12, 0x21, 0x44, 0x24, 0x81, 0x98, 0x08, 0x10, - 0xea, 0xab, 0x88, 0x8a, 0xfb, 0xab, 0x08, 0x00, 0x88, 0xbc, 0xbc, 0x19, 0x45, 0x43, 0x01, 0x00, - 0x22, 0x22, 0x32, 0x93, 0xfb, 0xbf, 0x08, 0x10, 0x00, 0x33, 0xb0, 0x18, 0xcb, 0xac, 0x30, 0xd8, - 0xcb, 0x29, 0x23, 0x80, 0xb8, 0xdf, 0x18, 0x22, 0x21, 0x10, 0x72, 0x15, 0x88, 0x00, 0x22, 0xa8, - 0x2a, 0x26, 0xa0, 0xcd, 0xdb, 0xab, 0xbc, 0xab, 0x19, 0x23, 0x28, 0x37, 0x63, 0x22, 0x01, 0x10, - 0x00, 0xa9, 0x9c, 0x00, 0x00, 0xb8, 0x1a, 0x09, 0x47, 0x13, 0x00, 0x18, 0xa1, 0x0a, 0xa0, 0xbe, - 0xbd, 0xce, 0x9a, 0x89, 0xb8, 0xbc, 0xad, 0x30, 0x25, 0x22, 0x22, 0x35, 0x13, 0x42, 0x33, 0x24, - 0xc8, 0xbd, 0x9a, 0x0a, 0x90, 0xda, 0x9c, 0xa9, 0xba, 0x19, 0x22, 0x33, 0x43, 0x13, 0x74, 0x23, - 0x01, 0xfb, 0x0a, 0x00, 0x99, 0x89, 0x90, 0x30, 0x08, 0x47, 0xa0, 0x8a, 0x21, 0xa9, 0xba, 0x68, - 0x93, 0x9d, 0x30, 0x92, 0xae, 0x18, 0x13, 0xa9, 0xcc, 0xcb, 0x2a, 0x25, 0x42, 0x46, 0x22, 0x22, - 0x13, 0x00, 0xb9, 0xad, 0x88, 0xdc, 0xbc, 0xaa, 0xca, 0x8a, 0x08, 0x22, 0x44, 0x33, 0x14, 0xb9, - 0x00, 0xaa, 0xbb, 0xab, 0x9b, 0x42, 0x74, 0x25, 0x89, 0x09, 0x10, 0x92, 0x1a, 0x45, 0x25, 0x00, - 0xa8, 0x08, 0xf9, 0xbb, 0xce, 0xab, 0x00, 0x90, 0x89, 0x30, 0x23, 0x21, 0x54, 0x34, 0x13, 0x22, - 0x13, 0x33, 0x92, 0x9a, 0x39, 0x95, 0xff, 0xab, 0xa9, 0xba, 0xaa, 0x40, 0x24, 0x00, 0x02, 0x42, - 0x24, 0xba, 0x49, 0x26, 0xa8, 0x09, 0x01, 0xb8, 0x8b, 0x21, 0x00, 0x98, 0x24, 0x98, 0xc9, 0x79, - 0x23, 0x12, 0xc8, 0xaa, 0xce, 0x09, 0xfa, 0xbb, 0xb9, 0xae, 0x10, 0x32, 0x22, 0x33, 0x24, 0x32, - 0x35, 0x34, 0x35, 0x13, 0x80, 0xb8, 0xaf, 0xb9, 0xbc, 0xbc, 0xaa, 0x8a, 0x21, 0x12, 0xc9, 0x40, - 0x33, 0xa2, 0xae, 0x00, 0x34, 0x12, 0x03, 0x20, 0x93, 0xda, 0xaf, 0x13, 0x99, 0x8a, 0x67, 0x12, - 0x02, 0x09, 0x81, 0xb8, 0xcd, 0xaa, 0xaa, 0x9b, 0x81, 0xcd, 0x28, 0x26, 0x11, 0x98, 0x08, 0x31, - 0x54, 0x23, 0x12, 0x22, 0x01, 0x13, 0xca, 0xce, 0xbc, 0x9b, 0xb9, 0x0b, 0x04, 0x09, 0x10, 0x22, - 0x25, 0xb0, 0x8a, 0x9b, 0x22, 0x82, 0xbf, 0xab, 0xbc, 0xc9, 0x2b, 0x12, 0x57, 0x00, 0x18, 0x34, - 0x34, 0x25, 0x80, 0xa0, 0x19, 0xca, 0xc0, 0xbe, 0xce, 0xaa, 0x88, 0x9a, 0x08, 0x23, 0x31, 0x64, - 0x15, 0x21, 0x23, 0x81, 0x08, 0x01, 0x08, 0xc0, 0xac, 0xaa, 0x80, 0x48, 0x92, 0xbe, 0xab, 0xaa, - 0xac, 0x10, 0x52, 0x83, 0x8c, 0x73, 0x82, 0xaa, 0x09, 0x21, 0x04, 0x80, 0xaa, 0x89, 0x45, 0x03, - 0x51, 0x35, 0x02, 0x99, 0x10, 0xf8, 0xad, 0x99, 0x98, 0xa9, 0xb9, 0x3a, 0x06, 0xbe, 0x9b, 0x98, - 0x8a, 0x64, 0x12, 0x21, 0x53, 0x33, 0x02, 0x09, 0x02, 0xed, 0xab, 0xaa, 0x19, 0x34, 0x90, 0xba, - 0xa9, 0xbe, 0x28, 0x23, 0x82, 0x0a, 0x11, 0x08, 0x45, 0xb0, 0x9f, 0x09, 0x08, 0x9a, 0x46, 0x32, - 0x34, 0x33, 0x53, 0x82, 0x09, 0x22, 0xba, 0xcd, 0xcc, 0xbc, 0xba, 0xaa, 0x98, 0xba, 0x18, 0x47, - 0x32, 0x14, 0x21, 0x11, 0x22, 0x90, 0xa9, 0x69, 0x15, 0x08, 0x98, 0xd9, 0x8c, 0x90, 0xda, 0xab, - 0xaa, 0xac, 0x21, 0x53, 0x01, 0x01, 0x31, 0x23, 0x90, 0xfa, 0x9d, 0x9a, 0x80, 0x88, 0x18, 0x33, - 0x83, 0x59, 0x67, 0x12, 0x11, 0x12, 0xca, 0x19, 0x80, 0xdb, 0xaa, 0xac, 0x98, 0xba, 0xdb, 0xab, - 0xa9, 0x9a, 0x1a, 0x57, 0x45, 0x22, 0x01, 0x10, 0x33, 0x02, 0xda, 0x9c, 0x10, 0xa0, 0x0a, 0x02, - 0xdb, 0xac, 0x8b, 0x99, 0x88, 0xa9, 0x0a, 0x72, 0x37, 0x00, 0x21, 0xb1, 0xdf, 0x9a, 0x18, 0x21, - 0x22, 0x88, 0x36, 0x12, 0x22, 0x25, 0xb8, 0xcc, 0x99, 0xca, 0x8c, 0x80, 0xa0, 0xac, 0x20, 0x22, - 0x90, 0xba, 0xcc, 0x9a, 0x50, 0x35, 0x13, 0x89, 0x32, 0x23, 0x01, 0x81, 0x68, 0x25, 0xcb, 0x8a, - 0x42, 0xd0, 0xbb, 0x9c, 0x10, 0x08, 0x11, 0x62, 0x83, 0x99, 0x8b, 0xc1, 0x9e, 0x08, 0xeb, 0xaa, - 0x32, 0x22, 0x81, 0x73, 0x27, 0x20, 0x32, 0x13, 0x10, 0xa1, 0xad, 0xca, 0xab, 0xcc, 0xcc, 0xab, - 0x08, 0x98, 0x8a, 0x11, 0x81, 0x71, 0x36, 0x32, 0x01, 0x10, 0x99, 0x30, 0x32, 0x92, 0xac, 0x09, - 0xba, 0xde, 0x8b, 0xa1, 0xcd, 0x89, 0x33, 0x91, 0x89, 0x11, 0xba, 0xbe, 0xed, 0x8a, 0x21, 0x04, - 0x89, 0x18, 0x34, 0x54, 0x23, 0x13, 0x88, 0x08, 0x30, 0xc2, 0x9b, 0x00, 0xfc, 0xbc, 0x98, 0xaa, - 0x89, 0x80, 0x89, 0xba, 0x52, 0x23, 0x99, 0x61, 0x27, 0x98, 0x31, 0x25, 0x02, 0x20, 0x33, 0x25, - 0xd9, 0x09, 0xda, 0xbc, 0xa9, 0x8a, 0x38, 0x81, 0x38, 0x36, 0x81, 0xda, 0x9d, 0xa9, 0x99, 0x28, - 0x81, 0x31, 0x15, 0x10, 0x62, 0x23, 0x01, 0x21, 0x21, 0x37, 0x02, 0x00, 0x02, 0xfb, 0xcd, 0xcc, - 0xaa, 0x99, 0x9a, 0x9a, 0x21, 0x01, 0x18, 0x35, 0x43, 0x63, 0x23, 0x42, 0x03, 0x20, 0xa1, 0x8a, - 0xb8, 0xce, 0x0a, 0x91, 0xac, 0x73, 0x83, 0x99, 0x10, 0x01, 0x80, 0xb8, 0xcf, 0xcb, 0x8a, 0x00, - 0x22, 0x43, 0x34, 0x21, 0x21, 0x83, 0xab, 0xeb, 0x89, 0x51, 0x03, 0x20, 0x46, 0x91, 0xcb, 0xab, - 0x99, 0x9a, 0xec, 0x9a, 0x80, 0x00, 0x90, 0x80, 0x8b, 0xa0, 0x1a, 0x55, 0x46, 0x23, 0x02, 0x31, - 0x23, 0xa8, 0x18, 0xc0, 0xec, 0xbc, 0x8b, 0x89, 0x00, 0x01, 0xd9, 0x9c, 0xba, 0xbe, 0x9b, 0x00, - 0x00, 0x63, 0x00, 0x43, 0x63, 0x12, 0x23, 0x90, 0x29, 0x47, 0x13, 0x20, 0x02, 0xfb, 0x0a, 0x00, - 0xb8, 0xbc, 0xca, 0xcd, 0x9a, 0x00, 0x18, 0x34, 0x22, 0x10, 0x43, 0x24, 0x11, 0x01, 0xa9, 0xda, - 0xaf, 0x18, 0x22, 0xa0, 0x8a, 0x09, 0x44, 0x36, 0x82, 0xcb, 0xbb, 0x99, 0x9a, 0xba, 0xbc, 0x19, - 0x12, 0x29, 0x25, 0x12, 0xdc, 0x19, 0x54, 0x14, 0xb0, 0x8a, 0x32, 0x25, 0xa8, 0x29, 0x02, 0xca, - 0xcb, 0x9b, 0x00, 0x10, 0xfb, 0xdf, 0x88, 0xa9, 0xab, 0x20, 0x81, 0x40, 0x13, 0x73, 0x45, 0x13, - 0x18, 0x01, 0x11, 0x80, 0x08, 0x21, 0x00, 0x91, 0xcf, 0x88, 0xea, 0xbc, 0xa9, 0xba, 0x18, 0x01, - 0xdb, 0x19, 0x53, 0x33, 0x12, 0x08, 0x21, 0x32, 0x24, 0xa0, 0x9b, 0x40, 0x57, 0x22, 0x43, 0x23, - 0xf9, 0xac, 0xbb, 0x9a, 0xbb, 0x1a, 0x32, 0x90, 0x88, 0x20, 0x55, 0x34, 0xa1, 0x89, 0xa9, 0x0b, - 0xb8, 0x0a, 0x45, 0x12, 0x41, 0x14, 0x88, 0x61, 0x14, 0xa9, 0xb9, 0xaa, 0xed, 0xbb, 0xbc, 0xba, - 0x8a, 0x09, 0x65, 0x32, 0x34, 0x12, 0xb9, 0x38, 0x24, 0x22, 0x32, 0x43, 0x13, 0xd9, 0x1a, 0x63, - 0xa1, 0xbd, 0xbb, 0xaa, 0x9a, 0xca, 0x9b, 0xfd, 0xbb, 0x19, 0x02, 0x20, 0x35, 0x21, 0x00, 0x32, - 0x33, 0x54, 0x13, 0xd8, 0x0b, 0x21, 0x41, 0x34, 0x82, 0x99, 0xbd, 0xac, 0xea, 0xbc, 0x29, 0x12, - 0x19, 0x43, 0x03, 0x9a, 0xa8, 0xb9, 0xbf, 0x30, 0xb1, 0xab, 0xad, 0x41, 0x37, 0x81, 0x10, 0x52, - 0x22, 0x12, 0xca, 0xbd, 0xdb, 0xbb, 0x19, 0x33, 0x03, 0x10, 0x41, 0x02, 0x01, 0xba, 0xdf, 0x29, - 0x23, 0x88, 0x10, 0x54, 0x33, 0x84, 0x08, 0x21, 0x81, 0x41, 0x82, 0xca, 0xbf, 0x99, 0xba, 0xdc, - 0xab, 0xa9, 0x98, 0x9a, 0x09, 0x99, 0xda, 0x70, 0x25, 0x11, 0x32, 0x24, 0x34, 0x80, 0x08, 0x90, - 0x8b, 0x60, 0x25, 0x82, 0xaa, 0x38, 0xd2, 0xbe, 0xac, 0xca, 0xab, 0xab, 0x31, 0x04, 0xaa, 0x21, - 0xb2, 0x79, 0x25, 0x80, 0x09, 0x28, 0x64, 0x22, 0x12, 0x80, 0xcb, 0xbb, 0xba, 0x9b, 0xa9, 0x89, - 0x72, 0x34, 0x23, 0xd8, 0xbb, 0xca, 0xcc, 0x9b, 0x89, 0x41, 0x43, 0x34, 0x43, 0x22, 0x31, 0x23, - 0x31, 0x01, 0xd9, 0xbb, 0xa8, 0xdd, 0xbc, 0xbc, 0x9b, 0x89, 0x99, 0x98, 0x9b, 0x88, 0x9b, 0x73, - 0x27, 0x08, 0x32, 0x33, 0x43, 0x45, 0x22, 0x98, 0x18, 0x13, 0x88, 0x52, 0x92, 0xce, 0xab, 0xb9, - 0xbd, 0xbc, 0xba, 0xaa, 0x9a, 0x00, 0x18, 0x64, 0x13, 0x21, 0x22, 0x44, 0x12, 0x91, 0x39, 0x35, - 0x90, 0x38, 0x14, 0x18, 0x15, 0xb9, 0x1a, 0xe8, 0xbd, 0x9a, 0x89, 0xc8, 0x9d, 0x90, 0xba, 0x0b, - 0x43, 0x21, 0x45, 0x22, 0x22, 0x44, 0x34, 0x22, 0x00, 0xb9, 0x0a, 0x99, 0xf9, 0xdf, 0x98, 0x99, - 0x00, 0x30, 0x24, 0x80, 0xaa, 0xcc, 0xbc, 0xba, 0x8a, 0x53, 0x43, 0x43, 0x23, 0x23, 0x34, 0x33, - 0x11, 0x01, 0xca, 0x8b, 0xa0, 0xae, 0xbb, 0xbe, 0x9c, 0x88, 0xa0, 0xbc, 0x89, 0xc9, 0xac, 0x10, - 0x20, 0xd0, 0x2a, 0x12, 0xcb, 0x70, 0x27, 0x12, 0x01, 0x10, 0x00, 0x09, 0x20, 0x24, 0xb9, 0x1a, - 0xc1, 0x8c, 0x81, 0xd9, 0xbe, 0xba, 0x9d, 0x08, 0x20, 0x34, 0x13, 0x08, 0x53, 0x92, 0xac, 0x18, - 0xa9, 0x9a, 0x71, 0x02, 0x28, 0x36, 0x03, 0xcb, 0x09, 0x88, 0x51, 0x24, 0xea, 0xbc, 0xb9, 0xaa, - 0xac, 0x19, 0x82, 0x89, 0x75, 0x23, 0x21, 0x02, 0x98, 0x18, 0x33, 0x32, 0x00, 0x22, 0x02, 0xbb, - 0xd8, 0xaf, 0x88, 0xb8, 0xdf, 0xcb, 0xcc, 0x9a, 0x99, 0xba, 0x9a, 0x52, 0x34, 0x45, 0x32, 0x13, - 0x88, 0x88, 0x88, 0x10, 0xa8, 0x38, 0x27, 0x91, 0x18, 0x91, 0xdc, 0xad, 0x09, 0x18, 0x01, 0x08, - 0x98, 0xdd, 0xbc, 0xaa, 0x88, 0x08, 0x10, 0x45, 0x23, 0x12, 0x44, 0x54, 0x12, 0x80, 0x98, 0xa8, - 0xbb, 0x18, 0xb9, 0x1b, 0xf8, 0xdf, 0x88, 0x89, 0x08, 0x80, 0x08, 0x53, 0x12, 0x00, 0x28, 0x12, - 0xb0, 0xad, 0x52, 0x53, 0x33, 0x01, 0x08, 0x91, 0xcd, 0x88, 0x88, 0x11, 0xfa, 0x9f, 0x88, 0x9a, - 0xca, 0x9a, 0x8b, 0x32, 0x34, 0x32, 0x34, 0x13, 0x11, 0x31, 0x24, 0x42, 0x13, 0xba, 0x5a, 0x57, - 0x81, 0x00, 0x98, 0x99, 0xb9, 0xca, 0xba, 0xdf, 0xab, 0x9a, 0x99, 0x10, 0x81, 0x39, 0x32, 0x35, - 0x44, 0x35, 0x23, 0x00, 0x21, 0x81, 0x18, 0x90, 0xdf, 0x19, 0xa8, 0x09, 0x01, 0xca, 0x09, 0xca, - 0x0a, 0x41, 0x92, 0xac, 0xfa, 0x8a, 0x89, 0x00, 0x54, 0x12, 0x63, 0x33, 0x32, 0x80, 0xbb, 0x0b, - 0x12, 0xa8, 0xdc, 0x9d, 0x08, 0xcc, 0xbb, 0xcd, 0xba, 0x8a, 0x00, 0x41, 0x14, 0x01, 0x53, 0x12, - 0x92, 0x0a, 0x63, 0x03, 0x21, 0x23, 0x22, 0x02, 0x18, 0x36, 0xe9, 0x9b, 0x22, 0xfa, 0xaa, 0xa8, - 0xab, 0xc9, 0xbb, 0x8b, 0xaa, 0x88, 0x41, 0x77, 0x03, 0x99, 0x09, 0x91, 0x30, 0x03, 0x00, 0x54, - 0x91, 0x71, 0x17, 0x88, 0x08, 0xa0, 0xbc, 0x88, 0xa8, 0xc9, 0xbd, 0x8a, 0x80, 0x28, 0x03, 0x20, - 0x53, 0x23, 0x73, 0x13, 0x00, 0x88, 0x00, 0x08, 0xd8, 0x8b, 0x12, 0xc0, 0xae, 0x98, 0x9d, 0x00, - 0x91, 0xdc, 0xbb, 0x8a, 0x10, 0x11, 0x90, 0x28, 0x46, 0x23, 0x22, 0x11, 0x46, 0x43, 0x34, 0x12, - 0x80, 0x08, 0x80, 0x43, 0xc8, 0xbc, 0xab, 0xcd, 0xab, 0x99, 0xca, 0xbc, 0x9b, 0x09, 0x22, 0x21, - 0xfa, 0x8d, 0x32, 0x10, 0x45, 0x22, 0x33, 0x33, 0xa1, 0x2b, 0x47, 0x80, 0x99, 0x11, 0xc9, 0xcc, - 0x9c, 0xa8, 0x8b, 0xa0, 0xcb, 0x20, 0x34, 0x43, 0x82, 0x9a, 0x00, 0x98, 0x09, 0x01, 0xcb, 0x88, - 0x30, 0x75, 0x15, 0x20, 0x45, 0x92, 0x9a, 0xb8, 0xdf, 0xcb, 0x09, 0x02, 0xa9, 0x08, 0x20, 0x53, - 0x02, 0x21, 0x23, 0x00, 0x10, 0x24, 0x51, 0x25, 0x90, 0x28, 0xc0, 0x8c, 0x20, 0x80, 0x88, 0xba, - 0x19, 0xb2, 0xff, 0xad, 0x99, 0xba, 0x99, 0x08, 0x90, 0x29, 0x34, 0x33, 0x55, 0x25, 0x01, 0x10, - 0x11, 0x40, 0x05, 0x08, 0x10, 0x90, 0x20, 0xa1, 0xff, 0x8a, 0x98, 0xa9, 0x20, 0x82, 0xa9, 0xbd, - 0x29, 0x12, 0x20, 0x82, 0xbe, 0x19, 0x34, 0x12, 0x20, 0xa8, 0x31, 0x72, 0x27, 0x01, 0xa8, 0x8a, - 0xfc, 0x9b, 0x88, 0x80, 0x38, 0x26, 0x01, 0x08, 0x90, 0xcb, 0x18, 0x91, 0x8d, 0x11, 0xc9, 0xac, - 0x39, 0x77, 0x22, 0x10, 0x12, 0x00, 0x12, 0x81, 0xfd, 0xac, 0x8a, 0x98, 0x89, 0x09, 0x01, 0x21, - 0xa0, 0x9a, 0x9a, 0x52, 0x42, 0xb3, 0xae, 0x31, 0x26, 0x20, 0x34, 0x11, 0x08, 0x21, 0x34, 0x01, - 0x99, 0x0a, 0xa3, 0xcf, 0xcd, 0x89, 0x9a, 0x98, 0x8d, 0x11, 0x01, 0x89, 0xa9, 0xbc, 0xcb, 0x0a, - 0x64, 0x12, 0x34, 0x33, 0x12, 0x31, 0x16, 0xb9, 0xaf, 0x0a, 0x01, 0xa9, 0x40, 0x82, 0xb9, 0x8a, - 0xa0, 0xdb, 0xbd, 0x98, 0x8a, 0x40, 0x37, 0x23, 0x01, 0x98, 0x19, 0x26, 0x22, 0x91, 0xa9, 0x68, - 0x93, 0xdf, 0xaa, 0x9b, 0x00, 0x10, 0x52, 0x12, 0x90, 0xa9, 0xcb, 0xcd, 0xab, 0x18, 0x31, 0x27, - 0x12, 0x01, 0x30, 0x54, 0x33, 0x31, 0x23, 0x82, 0xcb, 0x88, 0xca, 0xcf, 0xac, 0x19, 0x91, 0x09, - 0x88, 0x00, 0xeb, 0x9a, 0x89, 0x09, 0x02, 0x88, 0x30, 0x57, 0x01, 0x32, 0x02, 0x20, 0x22, 0x80, - 0x73, 0x23, 0xcb, 0x9b, 0x9a, 0x80, 0xfb, 0x9b, 0xdb, 0x9b, 0x18, 0x11, 0x02, 0x80, 0x71, 0x13, - 0x20, 0x84, 0xbc, 0x70, 0x24, 0x12, 0x11, 0xa9, 0xcb, 0xcc, 0x89, 0xa9, 0xa9, 0x29, 0x92, 0x38, - 0x93, 0xdd, 0xbd, 0x9d, 0x01, 0x51, 0x23, 0x02, 0x00, 0x31, 0x73, 0x35, 0x12, 0x21, 0x81, 0x9b, - 0xca, 0xdb, 0xbd, 0x8a, 0x98, 0xbd, 0x19, 0x32, 0x12, 0x43, 0xd8, 0x9a, 0xeb, 0xac, 0x0a, 0x11, - 0x44, 0x12, 0x32, 0x33, 0x14, 0xa8, 0x9b, 0x89, 0x98, 0x20, 0x37, 0xa1, 0xbd, 0x18, 0x41, 0x92, - 0xac, 0x08, 0x02, 0xdc, 0x09, 0x12, 0xc9, 0xba, 0xad, 0x40, 0x84, 0x08, 0x44, 0x21, 0x01, 0x98, - 0xbc, 0xec, 0xac, 0x9a, 0x38, 0x36, 0x01, 0x80, 0x11, 0x22, 0xc1, 0xad, 0x8a, 0x90, 0x09, 0x31, - 0x12, 0x23, 0x12, 0x72, 0x16, 0x32, 0x82, 0xde, 0x89, 0x00, 0x01, 0x99, 0x01, 0x89, 0x52, 0x24, - 0x02, 0xeb, 0xcb, 0xba, 0x9a, 0xa0, 0xad, 0x9a, 0x31, 0x24, 0x64, 0x13, 0xa0, 0xcb, 0x09, 0x11, - 0x21, 0x20, 0x34, 0x55, 0x35, 0x02, 0x08, 0x11, 0xc8, 0xae, 0x08, 0xb8, 0xbc, 0xcb, 0xbb, 0x9c, - 0x18, 0x81, 0x19, 0x14, 0x51, 0x44, 0x23, 0x08, 0x81, 0x98, 0xac, 0x33, 0xb9, 0xbb, 0x58, 0x24, - 0x81, 0x89, 0xfb, 0xab, 0xba, 0x49, 0x25, 0xb0, 0x9e, 0x00, 0x00, 0x88, 0x61, 0x13, 0x02, 0x41, - 0x16, 0x12, 0x90, 0x9c, 0x00, 0xd9, 0xad, 0x80, 0x88, 0x10, 0x22, 0xb0, 0xff, 0xaa, 0x09, 0x22, - 0x21, 0x00, 0x24, 0xb8, 0xaa, 0x40, 0x13, 0x45, 0x12, 0x10, 0x45, 0x01, 0x89, 0x30, 0x34, 0xc8, - 0x9b, 0xe9, 0xbe, 0x9b, 0xaa, 0xbb, 0xab, 0xaa, 0x71, 0x25, 0x00, 0x22, 0x33, 0x90, 0xaa, 0x18, - 0x32, 0xb2, 0xbf, 0x58, 0x12, 0x00, 0x42, 0xb1, 0xae, 0x89, 0x18, 0x22, 0xc8, 0x8c, 0x30, 0x25, - 0x90, 0xaa, 0x53, 0x82, 0xac, 0x18, 0x56, 0x23, 0x88, 0x80, 0xda, 0xbb, 0xba, 0x18, 0x12, 0xfc, - 0xab, 0x28, 0x81, 0x88, 0x11, 0x83, 0xa9, 0x38, 0x27, 0x90, 0x30, 0x90, 0x49, 0x14, 0x42, 0x55, - 0x04, 0x08, 0xb8, 0xae, 0x08, 0xc8, 0xac, 0x21, 0x33, 0x12, 0x32, 0x83, 0xfe, 0x9c, 0x10, 0xaa, - 0x89, 0x42, 0x32, 0x13, 0xa9, 0xb9, 0x9a, 0xad, 0x09, 0x20, 0xa3, 0x79, 0x14, 0x22, 0x44, 0x14, - 0xa8, 0x98, 0x88, 0xbc, 0x0a, 0x25, 0xea, 0x8b, 0x53, 0x12, 0x88, 0x80, 0x52, 0x03, 0xca, 0xaa, - 0x21, 0xb1, 0xcf, 0x19, 0x91, 0xeb, 0x9c, 0x08, 0x32, 0x82, 0x8a, 0x13, 0x32, 0x11, 0x42, 0x67, - 0x80, 0x9a, 0x99, 0x01, 0x08, 0xc9, 0x98, 0x9b, 0xe9, 0x1b, 0x24, 0x92, 0xbf, 0x08, 0x22, 0x44, - 0x53, 0x82, 0xba, 0x10, 0x00, 0x01, 0xaa, 0x18, 0xfb, 0xbf, 0x18, 0xa1, 0xbc, 0x8a, 0x32, 0x33, - 0x13, 0x38, 0x43, 0xb8, 0xff, 0x28, 0x11, 0x31, 0x37, 0x81, 0x00, 0x98, 0xaa, 0x18, 0x80, 0xbc, - 0x40, 0x02, 0x18, 0x12, 0xb8, 0xcf, 0xaa, 0xcb, 0xbc, 0x9b, 0x18, 0x32, 0x43, 0x37, 0x03, 0x10, - 0x01, 0x08, 0xb9, 0xbd, 0xcd, 0xaa, 0x00, 0x20, 0x43, 0x23, 0x51, 0x15, 0x80, 0xa9, 0xdc, 0xbb, - 0x9b, 0xb8, 0x9b, 0x42, 0x02, 0x31, 0x55, 0x22, 0x20, 0x43, 0x34, 0x34, 0xd8, 0xab, 0x99, 0xdc, - 0x0a, 0x82, 0xcb, 0xbb, 0x99, 0x28, 0x06, 0x88, 0x08, 0x24, 0x32, 0x37, 0x24, 0x80, 0x31, 0x81, - 0x18, 0x24, 0xb9, 0xaa, 0x9a, 0xda, 0x9a, 0x9a, 0xab, 0xcf, 0xac, 0x9a, 0x89, 0x31, 0x24, 0x22, - 0x92, 0x20, 0xc9, 0x60, 0x34, 0x12, 0x33, 0x03, 0xfb, 0x8d, 0x98, 0xdc, 0xaa, 0xbc, 0x8c, 0x80, - 0x38, 0x46, 0x24, 0x12, 0x02, 0x80, 0xe9, 0x9b, 0x89, 0x00, 0x09, 0xba, 0x18, 0x31, 0x22, 0x31, - 0x92, 0x64, 0xfa, 0x8d, 0x20, 0xa0, 0x8c, 0x20, 0x13, 0xaa, 0x8a, 0x73, 0x34, 0x91, 0x19, 0x22, - 0x80, 0x10, 0xc8, 0xcc, 0x89, 0x91, 0xed, 0x89, 0x21, 0x44, 0x33, 0x23, 0xc8, 0xbc, 0x38, 0x02, - 0xa9, 0xd9, 0x8c, 0x00, 0x08, 0x88, 0x10, 0x91, 0xfc, 0x29, 0x37, 0xa1, 0xaa, 0xba, 0x9a, 0xca, - 0x9c, 0x31, 0x24, 0x34, 0xb8, 0x2a, 0x92, 0xdf, 0x09, 0x10, 0x62, 0x24, 0x00, 0x89, 0x22, 0x83, - 0xcd, 0xab, 0x98, 0x9a, 0xab, 0x41, 0x33, 0xc8, 0x9b, 0x48, 0x33, 0xeb, 0x8a, 0xd9, 0xcd, 0x28, - 0x35, 0x23, 0x12, 0x01, 0x89, 0x41, 0x24, 0x98, 0xda, 0xbd, 0x8a, 0x98, 0x9a, 0x0a, 0x43, 0x23, - 0x42, 0x36, 0x14, 0x80, 0x90, 0x19, 0xb1, 0xad, 0x9a, 0x99, 0x32, 0xf0, 0x1a, 0x25, 0xa1, 0x9a, - 0x89, 0xaa, 0x08, 0x10, 0xfb, 0xbb, 0xce, 0x9b, 0x89, 0x11, 0x29, 0x25, 0x08, 0x74, 0x15, 0x99, - 0x08, 0x80, 0x98, 0x8a, 0xca, 0x8c, 0x31, 0x35, 0x83, 0xbc, 0x09, 0x23, 0xc0, 0xbd, 0x09, 0x92, - 0xae, 0x30, 0x02, 0xaa, 0x9a, 0x18, 0x35, 0x44, 0x02, 0x09, 0x82, 0x72, 0x57, 0x02, 0x99, 0xba, - 0xdb, 0x9a, 0x01, 0x00, 0x01, 0x20, 0x12, 0x82, 0x61, 0x13, 0x90, 0xcb, 0x9a, 0x51, 0x35, 0x11, - 0x80, 0xb9, 0x10, 0x18, 0x57, 0x03, 0xdc, 0xac, 0xab, 0x9a, 0x08, 0x98, 0x32, 0x12, 0x21, 0x31, - 0x54, 0x02, 0xbc, 0x61, 0x22, 0x90, 0x0b, 0xb9, 0x09, 0xec, 0x89, 0x00, 0xd9, 0xbb, 0x30, 0x15, - 0x22, 0x41, 0x26, 0x11, 0x92, 0xdd, 0xbb, 0xbb, 0xab, 0x42, 0x24, 0x12, 0x18, 0x13, 0x20, 0x91, - 0xbf, 0x59, 0x45, 0x03, 0x8a, 0x98, 0xaa, 0xcb, 0x9a, 0x99, 0x38, 0x47, 0x12, 0x28, 0x43, 0x02, - 0xba, 0xbc, 0xcb, 0xab, 0x53, 0x82, 0xca, 0x28, 0x43, 0x02, 0x40, 0x45, 0xa1, 0xac, 0xb9, 0xac, - 0xab, 0x89, 0x31, 0x32, 0x73, 0x81, 0x89, 0x10, 0x02, 0x32, 0x90, 0xfe, 0xcc, 0x9a, 0x80, 0x81, - 0x08, 0x20, 0x04, 0x88, 0x72, 0x16, 0xa0, 0x0a, 0x10, 0x00, 0x10, 0x98, 0xaa, 0xcf, 0x89, 0x99, - 0x28, 0x14, 0x98, 0x19, 0x22, 0x20, 0x46, 0x82, 0xba, 0x9a, 0xa9, 0x8b, 0x56, 0x82, 0xab, 0x54, - 0x02, 0x31, 0x35, 0x23, 0x91, 0xac, 0x89, 0xf9, 0x9b, 0x08, 0x82, 0xeb, 0xbb, 0x18, 0x32, 0x54, - 0x81, 0xca, 0x29, 0x23, 0xa8, 0x18, 0x08, 0x02, 0x80, 0xa0, 0x0f, 0x34, 0x32, 0xb9, 0xde, 0x8b, - 0x90, 0xae, 0x9b, 0x89, 0x88, 0x99, 0x00, 0xaf, 0x62, 0x81, 0x18, 0x36, 0x02, 0x80, 0x53, 0x91, - 0xaa, 0xb9, 0xbe, 0x8b, 0x21, 0x01, 0x54, 0x83, 0xaa, 0x00, 0xd9, 0xac, 0x80, 0x30, 0x14, 0xcd, - 0x0a, 0x02, 0x40, 0x14, 0x21, 0x53, 0x33, 0x35, 0x12, 0xb8, 0xdc, 0xcb, 0xbb, 0xab, 0x09, 0x21, - 0x32, 0x55, 0x01, 0x20, 0x24, 0xa1, 0xb9, 0xbb, 0xcb, 0xdf, 0x8a, 0x21, 0x81, 0x00, 0x43, 0x35, - 0x82, 0x90, 0xba, 0xbc, 0xbc, 0x0a, 0x42, 0x93, 0x9a, 0x12, 0xc9, 0x19, 0xa9, 0xba, 0xee, 0x1b, - 0x34, 0x81, 0x10, 0xa8, 0x3a, 0x57, 0xa8, 0x88, 0x99, 0xbb, 0x71, 0x25, 0x81, 0x98, 0x00, 0x32, - 0x02, 0xa0, 0xbf, 0x89, 0xca, 0x29, 0x02, 0xcb, 0x9a, 0xaa, 0x9b, 0x61, 0x55, 0x23, 0x32, 0x32, - 0x91, 0xaa, 0xdb, 0xbb, 0x9b, 0xab, 0xaa, 0x70, 0x26, 0x31, 0x23, 0xc8, 0xbd, 0xba, 0xda, 0x9e, - 0x89, 0x00, 0x00, 0x31, 0x24, 0x53, 0x44, 0x22, 0x80, 0x99, 0xba, 0xad, 0xa9, 0xbc, 0xaa, 0xaa, - 0x39, 0x25, 0x43, 0x21, 0x25, 0x22, 0xb1, 0xcf, 0xbb, 0xbd, 0x9a, 0x20, 0x44, 0x12, 0x20, 0x23, - 0x02, 0x08, 0xa0, 0x89, 0x29, 0x73, 0x37, 0x11, 0xb9, 0xdb, 0xab, 0x08, 0xc9, 0x9a, 0x18, 0x01, - 0x41, 0x33, 0x23, 0xa0, 0xaa, 0xb9, 0xac, 0x55, 0x33, 0xe9, 0x09, 0x33, 0x84, 0xaa, 0x58, 0x36, - 0xa0, 0x19, 0xc8, 0xcd, 0x9a, 0x89, 0x12, 0x22, 0xb0, 0xaf, 0x00, 0x20, 0x41, 0x43, 0x12, 0x11, - 0x91, 0x9a, 0x02, 0xda, 0xde, 0x9b, 0x21, 0x90, 0x2a, 0x36, 0x12, 0x91, 0x18, 0x83, 0xff, 0xab, - 0xcb, 0xbb, 0x29, 0x33, 0x31, 0x45, 0x34, 0x82, 0x98, 0x10, 0x43, 0xa0, 0x9c, 0x10, 0x12, 0x40, - 0x03, 0xb9, 0x4a, 0x15, 0xba, 0x19, 0x91, 0xed, 0xab, 0x98, 0xab, 0xbb, 0x0a, 0x52, 0x03, 0xca, - 0xbb, 0x2b, 0x77, 0x22, 0x23, 0x23, 0x12, 0x11, 0x92, 0xca, 0xdd, 0xbd, 0xbc, 0x1a, 0x43, 0x03, - 0xa9, 0x08, 0x10, 0x22, 0x25, 0xb9, 0xda, 0x8b, 0x73, 0x03, 0x80, 0x99, 0x09, 0x11, 0x33, 0xcb, - 0x8a, 0x01, 0xfd, 0xab, 0xbb, 0x80, 0xcb, 0x99, 0x11, 0x22, 0x22, 0x34, 0xb1, 0xef, 0xba, 0x42, - 0x32, 0x32, 0x23, 0x44, 0x01, 0x31, 0x35, 0x11, 0x90, 0x48, 0x44, 0x83, 0x99, 0xca, 0xce, 0xbb, - 0xbc, 0x9c, 0x00, 0x10, 0x01, 0xca, 0x38, 0x33, 0x44, 0x23, 0x62, 0x33, 0x81, 0x10, 0xa1, 0x0b, - 0xd1, 0xcf, 0x9a, 0x00, 0x21, 0x01, 0xba, 0x89, 0x89, 0x30, 0x25, 0xfb, 0x89, 0x21, 0x33, 0x08, - 0x12, 0xfc, 0x9b, 0x43, 0xb1, 0x0c, 0x52, 0x34, 0x34, 0xc8, 0xad, 0x88, 0xba, 0xbc, 0x99, 0x90, - 0x8a, 0x30, 0x36, 0x02, 0x31, 0x04, 0x98, 0xab, 0x41, 0x45, 0x12, 0x42, 0x83, 0x10, 0x31, 0x45, - 0xa2, 0xcd, 0x0a, 0xa0, 0xab, 0x88, 0xda, 0xa9, 0xbb, 0x1a, 0x24, 0x33, 0x73, 0xc1, 0xab, 0x19, - 0x11, 0xeb, 0xab, 0x30, 0xb8, 0x73, 0x27, 0x21, 0x22, 0x01, 0x28, 0x13, 0xcd, 0xab, 0x99, 0x11, - 0xdd, 0xac, 0x88, 0x00, 0x11, 0x01, 0x18, 0x44, 0x33, 0x82, 0xbc, 0x0c, 0x21, 0x52, 0x84, 0xaa, - 0xa9, 0xeb, 0xbb, 0x99, 0xaa, 0x30, 0x24, 0x02, 0x42, 0xb0, 0xa9, 0xdb, 0xab, 0x20, 0x09, 0x57, - 0x24, 0x82, 0xab, 0x20, 0x20, 0x67, 0x43, 0x12, 0x80, 0x99, 0xb9, 0xbe, 0x99, 0x00, 0xc8, 0x0a, - 0x24, 0x13, 0xd9, 0xbe, 0x8a, 0xba, 0xac, 0x00, 0x51, 0x13, 0x21, 0x37, 0x01, 0xaa, 0x89, 0x08, - 0x73, 0x12, 0x11, 0x11, 0x90, 0xb9, 0xbe, 0x89, 0xaa, 0x8b, 0x53, 0x10, 0xc8, 0x9b, 0x01, 0x99, - 0x99, 0xdd, 0xab, 0x21, 0xb0, 0xaa, 0x0b, 0xec, 0x59, 0x34, 0x32, 0x44, 0x24, 0x01, 0xa9, 0xbc, - 0xcb, 0xcb, 0xcb, 0xab, 0x20, 0x53, 0x12, 0x31, 0x24, 0x22, 0x82, 0x38, 0x36, 0x13, 0x98, 0x19, - 0x36, 0x90, 0xab, 0xdb, 0x9a, 0xc9, 0x8b, 0x81, 0xfa, 0xbb, 0xb0, 0xbe, 0x09, 0x01, 0xcb, 0x39, - 0x52, 0x13, 0x19, 0x13, 0xa9, 0xa0, 0x58, 0x37, 0x46, 0x12, 0x00, 0x08, 0x11, 0x11, 0x99, 0x73, - 0x91, 0xea, 0xcb, 0xbb, 0x9b, 0xac, 0x89, 0x9a, 0x28, 0x47, 0x83, 0x08, 0x11, 0xa8, 0xac, 0x31, - 0x02, 0x99, 0x41, 0x24, 0x23, 0x33, 0xfc, 0x9a, 0x99, 0xa9, 0x09, 0xa8, 0x51, 0x63, 0x25, 0x10, - 0x00, 0xa9, 0x0a, 0xa1, 0xbf, 0x99, 0xa0, 0xab, 0x54, 0x42, 0x25, 0x00, 0x30, 0x16, 0xa0, 0x89, - 0xfb, 0xba, 0xba, 0xbc, 0x89, 0x00, 0x10, 0x32, 0x37, 0x80, 0x21, 0x02, 0xda, 0x1a, 0x52, 0x34, - 0x14, 0x81, 0x10, 0x81, 0x9b, 0xda, 0xae, 0x19, 0x90, 0x18, 0x14, 0xba, 0xab, 0x02, 0xcc, 0x89, - 0x88, 0xba, 0x1b, 0x52, 0x05, 0xcc, 0x9a, 0x89, 0x62, 0x32, 0x23, 0xca, 0x0a, 0x13, 0x19, 0x77, - 0x12, 0x80, 0x88, 0x10, 0x00, 0xba, 0xdc, 0xbb, 0xca, 0xab, 0x00, 0x00, 0x42, 0x45, 0x14, 0x00, - 0xa9, 0x38, 0x37, 0x92, 0x08, 0x01, 0xa0, 0xbd, 0xab, 0xb9, 0xcf, 0x99, 0x09, 0x41, 0x12, 0x31, - 0x02, 0xba, 0xbd, 0x11, 0xa8, 0xcd, 0x18, 0x10, 0x23, 0x73, 0x24, 0x22, 0x12, 0x23, 0x20, 0x33, - 0xa1, 0xce, 0xbb, 0xcc, 0xcd, 0x9b, 0x98, 0x00, 0xb9, 0x8b, 0x90, 0xdb, 0x50, 0x24, 0x21, 0x12, - 0x90, 0x3a, 0x37, 0x88, 0x11, 0x82, 0x99, 0xa9, 0x50, 0x57, 0x12, 0x81, 0x88, 0x98, 0xda, 0xab, - 0x00, 0xba, 0x8b, 0xda, 0x9b, 0x30, 0x13, 0x10, 0xa1, 0x53, 0x45, 0x01, 0x20, 0x12, 0x99, 0xcb, - 0xaa, 0x0a, 0x32, 0x45, 0x23, 0xa9, 0xdd, 0xdb, 0xcb, 0xaa, 0xaa, 0x9a, 0x52, 0x24, 0x11, 0x31, - 0x33, 0x52, 0x34, 0x12, 0x54, 0x23, 0x90, 0x19, 0xda, 0xdb, 0xcc, 0xba, 0x9a, 0x09, 0x00, 0x10, - 0x11, 0x90, 0x19, 0xb1, 0x9c, 0x12, 0x44, 0x55, 0x23, 0xa0, 0x99, 0x09, 0x44, 0x12, 0x00, 0x42, - 0x01, 0x20, 0x43, 0x92, 0x9c, 0xb8, 0xcf, 0xbb, 0x9a, 0x09, 0x19, 0x11, 0x32, 0x91, 0x1b, 0x30, - 0x17, 0xbb, 0x41, 0x23, 0x13, 0x90, 0xbb, 0xb9, 0x99, 0xdb, 0xeb, 0x8a, 0x32, 0x34, 0x81, 0xcb, - 0xba, 0xbe, 0x8b, 0x53, 0x82, 0x90, 0x09, 0x63, 0x11, 0xa0, 0x30, 0x25, 0x90, 0x0a, 0x56, 0x13, - 0x80, 0x88, 0xeb, 0xbc, 0x8a, 0x21, 0xa8, 0xba, 0xca, 0xdb, 0xab, 0xa8, 0x9b, 0x33, 0x26, 0x42, - 0x44, 0x25, 0x22, 0x11, 0x90, 0x99, 0x09, 0x91, 0xca, 0xcd, 0x9a, 0x89, 0x99, 0x3a, 0x37, 0x21, - 0x20, 0x22, 0xb9, 0x0b, 0xfb, 0xbc, 0x9c, 0x88, 0x18, 0x43, 0x81, 0x31, 0x02, 0x00, 0x12, 0x33, - 0x14, 0x10, 0x21, 0x33, 0x03, 0xcf, 0xaa, 0xaa, 0xab, 0x0a, 0x12, 0x41, 0x35, 0x90, 0xaa, 0xa1, - 0xbb, 0x31, 0x51, 0x13, 0x89, 0x55, 0x13, 0x80, 0x19, 0x22, 0xe9, 0xab, 0x88, 0xa8, 0xdc, 0xab, - 0xb9, 0x09, 0xa0, 0xcb, 0x28, 0x73, 0x02, 0x01, 0x11, 0x24, 0x99, 0x40, 0x25, 0x01, 0x00, 0x20, - 0x91, 0x99, 0x9a, 0x09, 0x42, 0x92, 0x10, 0x43, 0xb0, 0xbe, 0xb9, 0xbd, 0xdb, 0xab, 0x11, 0x00, - 0x28, 0x55, 0x22, 0x11, 0x10, 0x32, 0x34, 0x02, 0xcb, 0x9b, 0xb9, 0xaf, 0x9a, 0xa9, 0xcb, 0x09, - 0x23, 0x33, 0x13, 0x21, 0x23, 0x21, 0x11, 0xb0, 0x9b, 0x39, 0x13, 0xab, 0x00, 0x00, 0x20, 0x33, - 0x33, 0x21, 0x01, 0x99, 0x19, 0x93, 0xbd, 0xcb, 0x99, 0xcb, 0x89, 0x41, 0x24, 0x81, 0xa8, 0x9a, - 0x9a, 0x09, 0x30, 0x53, 0x01, 0x30, 0x35, 0x14, 0x10, 0x33, 0xa1, 0xbb, 0xbb, 0x9a, 0xb9, 0xab, - 0xbb, 0x0a, 0xbb, 0xac, 0x10, 0xba, 0xbb, 0xbb, 0x32, 0x43, 0x33, 0x33, 0x12, 0x12, 0x99, 0x9a, - 0x10, 0xd9, 0xab, 0x20, 0x12, 0x31, 0x01, 0x01, 0xb9, 0x9a, 0x09, 0x21, 0xb0, 0xae, 0x10, 0x90, - 0xa9, 0x20, 0x53, 0x13, 0x00, 0x19, 0x35, 0x83, 0x99, 0x0b, 0x21, 0xb9, 0xbc, 0xba, 0xdb, 0x89, - 0x09, 0x21, 0x33, 0x43, 0x00, 0x31, 0x13, 0xb0, 0xab, 0xb9, 0x99, 0x10, 0x23, 0xa0, 0x99, 0x32, - 0x31, 0x53, 0x02, 0x98, 0x00, 0x90, 0x9b, 0x00, 0xb9, 0xac, 0x08, 0x31, 0x92, 0xb9, 0x10, 0xc9, - 0x9b, 0x23, 0xb0, 0x9b, 0x21, 0x11, 0x22, 0x11, 0x21, 0x33, 0x03, 0xa9, 0x19, 0x21, 0x90, 0x9a, - 0xa9, 0x19, 0x99, 0xab, 0x99, 0xbb, 0x1a, 0x12, 0x12, 0x12, 0x01, 0x99, 0x10, 0x12, 0x11, 0x11, - 0x11, 0x91, 0x09, 0x10, 0x00, 0x9a, 0x29, 0x23, 0x91, 0x99, 0xa9, 0xab, 0xa9, 0x9a, 0x10, 0x01, - 0x09, 0x99, 0x11, 0x13, 0x11, 0x11, 0x22, 0x21, 0x12, 0x11, 0x01, 0xb9, 0x9b, 0xa9, 0x9a, 0x10, - 0x11, 0x21, 0x91, 0x19, 0x90, 0xa9, 0x99, 0x99, 0x99, 0x90, 0x99, 0x09, 0x00, 0x99, 0x10, 0x31, - 0x12, 0x01, 0x21, 0x22, 0x11, 0x10, 0x90, 0xb9, 0xab, 0x99, 0x9a, 0x11, 0x12, 0x90, 0x09, 0x90, - 0x99, 0x0a, 0x01, 0x00, 0x11, 0x11, 0x12, 0x11, 0x09, 0x00, 0x90, 0x19, 0x11, 0x11, 0x91, 0x90, - 0x90, 0xa9, 0x99, 0x0a, 0x99, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x01, 0x00, 0x01, - 0x99, 0x99, 0x99, 0x10, 0x00, 0x10, 0x19, 0x10, 0x01, 0x00, 0x00, 0x00, 0x99, 0x90, 0x09, 0x09, - 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x70, -}; - diff --git a/build/tests/yuv2rgb/yuv2rgb.rsf.template b/build/tests/yuv2rgb/yuv2rgb.rsf.template deleted file mode 100644 index a67b1fa4..00000000 --- a/build/tests/yuv2rgb/yuv2rgb.rsf.template +++ /dev/null @@ -1,222 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile ./etc/myGameBanner.bnr - BannerFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr - - # - # Permit TmpJump: for TWL "ApplicationJump" function - # - #PermitLandingTmpJump $(TWL_IPL_MAKEROM_PERMIT_TMP_JUMP) - - ### - ### Setting for TWL - ### - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - WramMappingDirect $(TWL_IPL_RED_ROOT)/build/components/jackal.TWL/wram_regs/wram_regs.rbin - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion Japan - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SCFG: scfg lock [TRUE/FALSE] - # - LockSCFG FALSE - - # - # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] - # - HwAESSlotB TRUE - - # - # NANDAccess: nand access control [TRUE/FALSE] - # - NANDAccess TRUE - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - - ### - #### END -} - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType System - AppType User - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - - # - # Data only title : [TRUE/FALSE] - # don't have to edit - DataOnly FALSE - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # use "4NAJ" for hyena - GameCode HNAJ - GameCode NTRJ - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile FALSE -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(MAKEROM_ROMROOT) - Root / - File $(MAKEROM_ROMFILES) -}

    d2lrW7P3iL1&ET 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
    #2vD(JNJ9J!y3(@vd(_H;XS4q2yN$Z4mJ?1|G( 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 diff --git a/build/tests/TestMaker/doc/twl_cls_checksheet_20080508.xls b/build/tests/TestMaker/doc/twl_cls_checksheet_20080508.xls deleted file mode 100644 index 9329f55a13afb8f88bfaf768246aceaeca73d0fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50688 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 diff --git a/build/tests/TestMaker/doc/twl_parentalcontrol_spec_20080704.xls b/build/tests/TestMaker/doc/twl_parentalcontrol_spec_20080704.xls deleted file mode 100644 index 3a612ccae775578a7488dfebf294b7a5ab61b49a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 make ĂB -- FONT eXg ROM 쐬ɂ make fonttest -> make ĂB -- PARENTAL eXg ROM 쐬ɂ make parentaltest -> make ĂB -- EULA eXg ROM 쐬ɂ make eulatest -> make ĂB -- L make ƌɁAmake forcls Ƒł‚ƁA~ - CLS pfBNg (forCLS) ܂B - -* ROM p[^ -- romparam.yaml Ƀp[^w肳Ă܂B -- CLS eXgpp[^ɊւẮA - ./docs/twl_cls_checksheet_20080508.xls QƂĂB -- FONT eXgpp[^ɊւẮA - ./docs/20080617_DS_fontcodeList_NOE_FIANL.xls QƂĂB -- PARENTAL eXgpp[^ɊւẮA - ./docs/twl_parentalcontrol_spec_20080704.xls QƂĂB -- EULA eXgpp[^ɊւẮA - ㌟ؓȅڍׂ‚߂Kv܂B - -* CLS eXg - HZ0A : System/NAND/ZLA --> ShopApp / Menu - HZ4A : System/NAND/f[^ --> ʐ^ - HZ5A : System/\/NAND/f[^ --> Firm - KZ2A : User/NAND --> Shop ̔ App \ No newline at end of file diff --git a/build/tests/TestMaker/romparam.yaml b/build/tests/TestMaker/romparam.yaml deleted file mode 100644 index 051094cf736b819d73b25c63b626409e4c24c0d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2036 zcmd6oKWkG_7{;H1AmkG`ID~ZRpy4e#1(&oZFL9gCD?AT>JoH`@Hw`bY(D$ESe~x zfeMOz|3yB@SD71b^8FfWSY`Y!zvQRCtLxZ^RJ^ib%QmOScxes%rhjh zjqOvaQwCHus5Rv(Ngd`7$2zC99zs^wNjR3M9q?5n{}F5P-Idu{C9cHib<*3cWN%!r zqo1b@SjB+EE~=#K{G8Tkrmz|4Tmx({bBp=!bD6%&PkPMXCu?xppXzmbI(40S$c#N4 zaL4z!z`ck|HClo3%2aB7+Oc2CdysJC`4rJB@g7gy zlYE?nsQxsuKIO@%KTTYm@?_MXCf=QrsD2~bf4t<~FY>nOw>WwGb+TuFQ7*dg^SqrI FoB-d$3dR5c diff --git a/build/tests/TestMaker/rsf/ROM-TS_custom.rsf b/build/tests/TestMaker/rsf/ROM-TS_custom.rsf deleted file mode 100644 index 3b2f97af..00000000 --- a/build/tests/TestMaker/rsf/ROM-TS_custom.rsf +++ /dev/null @@ -1,319 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "MY APP NAME" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G/4G] - # - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile ./etc/myGameBanner.bnr - BannerFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # CommonClientKey: launcher deliver common client Key [TRUE/FALSE] - # - #CommonClientKey FALSE - - # - # HwAESSlotA_SSLClientCert: launcher deliver HW AES slot A setting [TRUE/FALSE] - # - #HwAESSlotA_SSLClientCert FALSE - - # - # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] - # - #HwAESSlotB FALSE - - # - # HwAESSlotB for Sign JPEG for Launcher: launcher deliver HW AES slot B setting for Sign JPEG for Launcher [TRUE/FALSE] - # - #HwAESSlotB_SignJPEGForLauncher FALSE - - # - # HwAESSlotC: launcher deliver HW AES slot C setting [TRUE/FALSE] - # - #HwAESSlotC FALSE - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess FALSE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - #NANDAccess FALSE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - # - # Disable debug [TRUE/FALSE] - # - DisableDebug FALSE - - # - # Agree EULA [TRUE/FALSE] - # - #AgreeEULA FALSE - - # - # Agree EULA version [1 - 255] - # - #AgreeEULAVersion 1 - - ### - #### END -} - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - #Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - #Launch TRUE - - # - # Boot allowed Media: [GameCard] - # - Media NAND - - # - # Data only title : [TRUE/FALSE] - # don't have to edit - #DataOnly FALSE - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - #GameCode ABCJ - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Game card power on: [TRUE/FALSE] - # - #GameCardOn FALSE - - # - # Game card transferd to nitro mode: [TRUE/FALSE] - # - #GameCardNitroMode FALSE - - # - # Shared2 file size: [DISABLE/0-4194304/0K-4096K/0M-4M] - # - #Shared2File0Size Disable - #Shared2File1Size Disable - #Shared2File2Size Disable - #Shared2File3Size Disable - #Shared2File4Size Disable - #Shared2File5Size Disable -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(MAKEROM_ROMROOT) - Root / - File $(MAKEROM_ROMFILES) -} - -Rating -{ - # - # Permited age to play for each rating organization - # - # Supported organization - # - CERO (OGN0) : for Japan - # - ESRB (OGN1) : for North America - # - BBFC (OGN2) : obsolete organization - # - USK (OGN3) : for German - # - PEGI_GEN (OGN4) : for Europe - # - PEGI_FINLAND (OGN5) : obsolete organization - # - PEGI_PRT (OGN6) : for Portugal - # - PEGI_BBFC (OGN7) : for UK - # - OFLC (OGN8) : for Australia and NewZealand - # - GRB (OGN9) : for Korea - # - OGN10 : reserved - # - OGN11 : reserved - # - OGN12 : reserved - # - OGN13 : reserved - # - OGN14 : reserved - # - OGN15 : reserved - # - # Available age [ 0 - 31 / PENDING / FREE ] - - CERO FREE -# ESRB FREE -# USK FREE -# PEGI_GEN FREE -# PEGI_PRT FREE -# PEGI_BBFC FREE -# OFLC FREE -# GRB FREE -} diff --git a/build/tests/TestMaker/script/clsdir.py b/build/tests/TestMaker/script/clsdir.py deleted file mode 100644 index bfbfa795..00000000 --- a/build/tests/TestMaker/script/clsdir.py +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/env python -# -*- coding:utf-8 -*- - -import os, sys, shutil -import yaml,codecs -import binascii - -romparampath = sys.argv[1] -romparam = yaml.load(codecs.open(romparampath,'r','utf16')) - -#----- 定数 -rsfkey = 'RSF' -bnrkey = 'Banner' -eulakey = 'EULA' -ratingkey = 'Rating' - -#----- forCLS ディレクトリの生成 ------------------------------------ -forclsdir = './forCLS' -try: - os.mkdir(forclsdir) -except: - print 'clsdir.py : can not create dir %s' % forclsdir - -#----- cls 操作用ディレクトリの生成 --------------------------------- -for num in romparam.keys(): - gamecode = romparam[num][rsfkey]['GameCode'] - tadpath = ''.join(['./roms/','twl_',gamecode,'.tad']) - - #----- gamecode dir の生成. - if os.path.exists(tadpath): - try: - clsappdir = ''.join([forclsdir,'/',gamecode]) - os.mkdir(clsappdir) - except: - print 'clsdir.py : can not create dir %s' % clsappdir - else: - print 'clsdir.py : can not create dir %s' % clsappdir - continue - - #----- version ディレクトリの生成 - verdir = ''.join([clsappdir,'/v',str(romparam[num][rsfkey]['Version'])]) - try: - os.mkdir(verdir) - except: - print 'clsdir.py : can not create dir %s' % verdir - continue - - #----- tadfile のコピー - try: - shutil.copy(tadpath,verdir) - except (IOError, os.error), why: - print "Can't copy %s to %s: %s" % (`tadpath`, `verdir`, str(why)) - continue - - #----- TitleID 取得 - tmpId = 0x00030000 - keys = ('AppType','Launch','Media','DataOnly','Secure') - for shiftbit, key in enumerate(keys): - if key == 'Launch': - if not romparam[num][rsfkey][key]: - tmpId = tmpId + (1< 2 and key[1] == 1][:-29] - fonts = [sheet[key][1] for key in keys if key[0] > 2 and key[1] == 2][:-29] - - #--- ROM の作成順序の変更 - if reverseflg: - fontcodes.reverse() - fonts.reverse() - - #--- romparam.yaml の生成 - try: - yamlfile = codecs.open(yamlpath, 'w', 'utf16') - except: - print 'genparam.py : can not open %s file' % yamlpath - continue - else: - #--- 定数値 - version = '0x0000' - apptype = 'USER' - launch = 'TRUE' - media = 'NAND' - dataonly = 'FALSE' - secure = 'FALSE' - etikect = 'personalized' - titlename = '' - titletype = 'TWL_APP' - filename = 'banner.bnr' - bnrver = '3' - codes = map(chr,range(ord('a'),ord('z')+1)) - for index, font in enumerate(fonts): - #--- gamecode, bnrtitle の決定 - gamecode = ''.join(['4',codes[index/26],codes[(index%26)],'A']) - #--- 0x0060 だけ特別対応 Excel データが存在しないため(img 貼付) - if fontcodes[index] == '0x0060': - bnrline1 = repr(''.join(['\x60_',fontcodes[index]]))[2:-1] - else: - bnrline1 = repr(''.join([font,'_',fontcodes[index]]))[2:-1] - #--- index - yamlfile.write('#-- ROM No.%d ------------------------\n' % index) - yamlfile.write('%d:\n' % index) - #--- rsf & properties parameter - yamlfile.write(' RSF :\n') - yamlfile.write(' GameCode : %s\n' % gamecode ) - yamlfile.write(' Version : %s\n' % version ) - #yamlfile.write(' AppType : %s\n' % apptype ) - #yamlfile.write(' Launch : %s\n' % launch ) - yamlfile.write(' Media : %s\n' % media ) - #yamlfile.write(' DataOnly : %s\n' % dataonly ) - #yamlfile.write(' Secure : %s\n' % secure ) - yamlfile.write(' TitleName : %s\n' % titlename ) - yamlfile.write(' TitleType : %s\n' % titletype ) - yamlfile.write(' eTicket : %s\n' % etikect ) - #--- bsf parameter - yamlfile.write(' Banner :\n') - yamlfile.write(' File : %s\n' % filename ) - yamlfile.write(' Version : %s\n' % bnrver ) - for language in ('JP','EN','FR','GE','IT','SP','CN','HN'): - bnrline2 = ''.join(['No.',str(index),' Lang:',language]) - if font == '"': - yamlfile.write(" %s : ['%s', '%s']\n" % (language, bnrline1, bnrline2)) - else: - yamlfile.write(' %s : ["%s", "%s"]\n' % (language, bnrline1, bnrline2)) - yamlfile.write('\n\n') - finally: - yamlfile.close() \ No newline at end of file diff --git a/build/tests/TestMaker/script/parentalcontrol.py b/build/tests/TestMaker/script/parentalcontrol.py deleted file mode 100644 index 105a36d4..00000000 --- a/build/tests/TestMaker/script/parentalcontrol.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python -# -*- coding:utf-8 -*- - -import sys, yaml, codecs - - -target = sys.argv[1] -yamlpath = sys.argv[2] -#target = '../config/twl_parentalcontrol_spec.yaml' -#yamlpath = '../romparam.yaml' -ognparam = yaml.load(codecs.open(target,'r','utf16')) - -#--- romparam.yaml の生成 -try: - yamlfile = codecs.open(yamlpath, 'w', 'utf16') -except: - print '%s : can not open %s file' % ('hoge', yamlpath) -else: - #--- 定数値 - version = '0x0000' - apptype = 'USER' - launch = 'TRUE' - media = 'NAND' - dataonly = 'FALSE' - secure = 'FALSE' - etikect = 'personalized' - titlename = '' - titletype = 'TWL_APP' - filename = 'banner.bnr' - bnrver = '3' - codes = map(chr,range(ord('a'),ord('z')+1)) - - index = 0 - for ogn in sorted(ognparam.keys()): - #--- CardRegion の決定 - region = ognparam[ogn][0] - for age in ognparam[ogn][1]: - #--- gamecode, bnrtitle の決定 - gamecode = ''.join(['4',codes[index/26],codes[(index%26)],'A']) - bnrline1 = ''.join([ogn,'/',str(age)]) - #--- index - yamlfile.write('#-- ROM No.%d ------------------------\n' % index) - yamlfile.write('%d:\n' % index) - #--- rsf & properties parameter - yamlfile.write(' RSF :\n') - yamlfile.write(' GameCode : %s\n' % gamecode ) - yamlfile.write(' Version : %s\n' % version ) - yamlfile.write(' AppType : %s\n' % apptype ) - yamlfile.write(' Launch : %s\n' % launch ) - yamlfile.write(' Media : %s\n' % media ) - yamlfile.write(' DataOnly : %s\n' % dataonly ) - yamlfile.write(' Secure : %s\n' % secure ) - yamlfile.write(' CardRegion : %s\n' % region ) - yamlfile.write(' TitleName : %s\n' % titlename ) - yamlfile.write(' TitleType : %s\n' % titletype ) - yamlfile.write(' eTicket : %s\n' % etikect ) - #--- bsf parameter - yamlfile.write(' Banner :\n') - yamlfile.write(' File : %s\n' % filename ) - yamlfile.write(' Version : %s\n' % bnrver ) - for language in ('JP','EN','FR','GE','IT','SP','CN','HN'): - bnrline2 = ''.join(['No.',str(index),' Lang:',language]) - yamlfile.write(" %s : %s" % (language,str(yaml.dump([bnrline1,bnrline2])))) - #--- Rating - yamlfile.write(' Rating :\n') - yamlfile.write(' Ogn : %s\n' % ogn ) - yamlfile.write(' Age : %s\n' % age ) - yamlfile.write('\n\n') - index = index + 1 -finally: - yamlfile.close() \ No newline at end of file diff --git a/build/tests/TestMaker/script/rename_eula.py b/build/tests/TestMaker/script/rename_eula.py deleted file mode 100644 index d65863f1..00000000 --- a/build/tests/TestMaker/script/rename_eula.py +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env python -# -*- coding:utf-8 -*- - -import os, sys, yaml, codecs - -#yamlpath = sys.argv[1] -yamlpath = '../romparam.yaml' -romparam = yaml.load(codecs.open(yamlpath,'r','utf16')) - -#----- 定数 -rsfkey = 'RSF' -bnrkey = 'Banner' -eulakey = 'EULA' -ratingkey = 'Rating' - -os.chdir('../roms') - -for num in romparam.keys(): - srcname = ''.join(['twl_',romparam[num][rsfkey]['GameCode'],'.tad']) - destname = ''.join([str(romparam[num][bnrkey]['JP'][0]),'.tad']) - os.rename(srcname,destname) \ No newline at end of file diff --git a/build/tests/TestMaker/script/rename_font.py b/build/tests/TestMaker/script/rename_font.py deleted file mode 100644 index 47074a1e..00000000 --- a/build/tests/TestMaker/script/rename_font.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env python -# -*- coding:utf-8 -*- - -import os, sys, yaml, codecs - -#yamlpath = sys.argv[1] -yamlpath = '../romparam.yaml' -romparam = yaml.load(codecs.open(yamlpath,'r','utf16')) - -#----- 定数 -rsfkey = 'RSF' -bnrkey = 'Banner' -eulakey = 'EULA' -ratingkey = 'Rating' - -os.chdir('../roms') - -for num in romparam.keys(): - srcname = ''.join(['twl_',romparam[num][rsfkey]['GameCode'],'.tad']) - #destname = ''.join([('No.%03d_' % num), - # romparam[num][bnrkey]['JP'][0].split('_')[1], - # '.tad']) - destname = ''.join([('No.%03d_' % num), - romparam[num][bnrkey]['JP'][1].split('_')[0], - '_L2.tad']) - - try: - os.rename(srcname,destname) - except: - print srcname, destname \ No newline at end of file diff --git a/build/tests/TestMaker/script/rename_parental.py b/build/tests/TestMaker/script/rename_parental.py deleted file mode 100644 index 5d6d11fe..00000000 --- a/build/tests/TestMaker/script/rename_parental.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env python -# -*- coding:utf-8 -*- - -import os, sys, yaml, codecs - -#yamlpath = sys.argv[1] -yamlpath = '../romparam.yaml' -romparam = yaml.load(codecs.open(yamlpath,'r','utf16')) - -#----- 定数 -rsfkey = 'RSF' -bnrkey = 'Banner' -eulakey = 'EULA' -ratingkey = 'Rating' - -os.chdir('../roms') - -for num in romparam.keys(): - srcname = ''.join(['twl_',romparam[num][rsfkey]['GameCode'],'.tad']) - destname = ''.join([str(romparam[num][bnrkey]['JP'][0]).replace('/','_'),'.tad']) - os.rename(srcname,destname) - - srcname = ''.join(['twl_',romparam[num][rsfkey]['GameCode'],'.srl']) - destname = ''.join([str(romparam[num][bnrkey]['JP'][0]).replace('/','_'),'.srl']) - os.rename(srcname,destname) \ No newline at end of file diff --git a/build/tests/UjiPackage/Makefile b/build/tests/UjiPackage/Makefile deleted file mode 100644 index 9b70d85c..00000000 --- a/build/tests/UjiPackage/Makefile +++ /dev/null @@ -1,98 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - build -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -# iZpp[X쐬Makefile - -TARGET_FIRM = SYSTEMMENU - -# -------------------------------- -# c[ւExport - -ifdef TWLSYSTEM_ROOT -export NITROSYSTEM_ROOT = $(TWLSYSTEM_ROOT) -endif - -export TARGET_CODEGEN = ALL - -# -------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -# check mandatory packages - -ifneq ($(TWLSDK_PRIVATE),TRUE) -$(error "TwlSDK-private is needed.") -endif - -ifneq ($(TWLSDK_SYSMENU_PRIVATE),TRUE) -$(error "TwlSDK-SysMenu-private is needed.") -endif - -ifneq ($(TWLSDK_SECURE7_PRIVATE),TRUE) -$(error "TwlSDK-Secure7-private is needed.") -endif - -ifneq ($(TWLSDK_TWL_WIRELESS_PRIVATE),TRUE) -$(error "TwlSDK-TwlWireless-private is needed.") -endif - -#---------------------------------------------------------------------------- - -SUBDIRS = \ - $(TWL_IPL_RED_ROOT)/build/libraries_sysmenu/namut/ARM9 \ - $(TWL_IPL_RED_ROOT)/build/libraries_sysmenu/reloc_info/ARM7 \ - $(TWL_IPL_RED_ROOT)/build/libraries_sysmenu/hotsw/ARM7 \ - $(TWL_IPL_RED_ROOT)/build/tests/TestComponent/ARM7.TWL - -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -FIND := find -ARCHIVE_ROOT ?= . -PACKING_DATE_AND_TIME ?= $(shell date +"%Y%m%d %H%M") -PACKING_DATE ?= $(word 1,$(PACKING_DATE_AND_TIME)) -PACKING_TIME ?= $(word 2,$(PACKING_DATE_AND_TIME)) -ARCHIVE ?= TwlIPL-uji-$(PACKING_DATE)-$(PACKING_TIME).zip -PACKAGE_TMP ?= ./TwlIPL - -.PHONY: package - -package: - @echo --- Copy sources ---; \ - mkdir -p $(PACKAGE_TMP); \ - mkdir -p $(PACKAGE_TMP)/build; \ - mkdir -p $(PACKAGE_TMP)/build/tests; \ - mkdir -p $(PACKAGE_TMP)/build/systemMenu_tools; \ - $(CP) $(TWL_IPL_RED_ROOT)/build/tests/TestComponent $(PACKAGE_TMP)/build/tests/TestComponent; \ - $(CP) $(TWL_IPL_RED_ROOT)/build/systemMenu_tools/common $(PACKAGE_TMP)/build/systemMenu_tools/common; \ - echo --- Build TwlIPL ---; \ - $(MAKE) full; \ - echo --- Packaging ---; \ - mkdir -p $(PACKAGE_TMP); \ - $(CP) $(TWL_IPL_RED_ROOT)/setup $(PACKAGE_TMP)/setup; \ - $(CP) $(TWL_IPL_RED_ROOT)/lib $(PACKAGE_TMP)/lib; \ - $(CP) $(TWL_IPL_RED_ROOT)/include $(PACKAGE_TMP)/include; \ - $(CP) $(TWL_IPL_RED_ROOT)/components $(PACKAGE_TMP)/components; \ - $(CP) $(TWL_IPL_RED_ROOT)/build/buildtools $(PACKAGE_TMP)/build/buildtools; \ - $(FIND) $(PACKAGE_TMP) -name ".svn" -a -type d -print -prune -exec $(RM) $(VERBOSE) {} \; - zip -r $(ARCHIVE_ROOT)/$(ARCHIVE) $(PACKAGE_TMP) - - - -#===== End of Makefile ===== diff --git a/build/tests/UjiPackage/readme.txt b/build/tests/UjiPackage/readme.txt deleted file mode 100644 index 80107ac6..00000000 --- a/build/tests/UjiPackage/readme.txt +++ /dev/null @@ -1,24 +0,0 @@ -iZpvOpTwlIPLpbP[W쐬Makefile - -KvTwlSDKpbP[W - - TWLSDK-5_1-20090303-jp.zip - TWLSDK-5_1-20090303-private-jp.zip - TWLSDK-5_1-20090303-private-Secure7-jp.zip - TWLSDK-5_1-20090303-private-SysMenu-jp.zip - TwlSDK-5_1-20090303-private-TwlWireless-jp.zip - - - -1. eϐݒ - -$ export TWLSDK_PLATFORM=TWL -$ export TWLSYSTEM_ROOT=(TwlSystem̃CXg[fBNg) -TWLSYSTEM͎gp܂񂪁ATwlIPLcommondefsƉ߂Ȃ߁A -@ݒ肵ĂB - -2. package^[Qbgw肵make - -$ make package - -TwlIPL-uji-(t)-().zip ̃fBNgɐ܂B diff --git a/build/tests/WDSTest/Makefile b/build/tests/WDSTest/Makefile deleted file mode 100644 index fe71f85b..00000000 --- a/build/tests/WDSTest/Makefile +++ /dev/null @@ -1,40 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED -TWL_PROC = ARM9 - -SRCS = main.c -TARGET_BIN = main.srl - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -LLIBRARIES += WDS$(TWL_LIBSUFFIX).a - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/WDSTest/src/main.c b/build/tests/WDSTest/src/main.c deleted file mode 100644 index e896b5bb..00000000 --- a/build/tests/WDSTest/src/main.c +++ /dev/null @@ -1,297 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - WDSTest - File: main.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#include -#include - -// q[v֐ -static void InitializeAllocateSystem(void); - -// ANZX|Cg̃fobO\p֐ -static void DumpWDSApInfo( WDSApInfo *apinfo ); - -void VBlankIntr(void); - -// WDS񓯊֐̃R[obN֐ -// R[obN֐ł̓AvP[ṼXe[gϐg_appstateύX -void WDS_Initialize_CB(void *arg); -void WDS_StartScan_CB(void *arg); -void WDS_EndScan_CB(void *arg); -void WDS_End_CB(void *arg); - -// AvP[V𐧌䂷Xe[g̗񋓌^ -typedef enum AppState { - APP_STATE_WDSINIT, - APP_STATE_WDSWAITINIT, - APP_STATE_WDSSCAN, - APP_STATE_WDSWAITSCAN, - APP_STATE_WDSCOMPLETESCAN, - APP_STATE_WDSENDSCAN, - APP_STATE_WDSWAITENDSCAN, - APP_STATE_WDSCOMPLETEENDSCAN, - APP_STATE_WDSEND, - APP_STATE_WDSWAITEND, - APP_STATE_WDSCOMPLETEEND -} AppState; - -// AvP[V𐧌䂷Xe[gϐ -static AppState g_appstate = APP_STATE_WDSINIT; - -// 󂯎r[Ri[ϐ(̔z`[oRŃzbgX|bg`lɓn) -static WDSBriefApInfo briefapinfo[WDS_APINFO_MAX]; - -// Ԍvp -static OSTick wdsBegin; - -/*---------------------------------------------------------------------------* - Name: NitroMain - - Description: main - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void NitroMain(void) -{ - u8 *wdsSysBuf; - OSTick wdsScanBeginTick = 0; - - // e평 - OS_Init(); - OS_InitTick(); - OS_InitAlarm(); - - //---- interrupt setting - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - OS_EnableIrqMask(OS_IE_V_BLANK); - OS_EnableIrq(); - GX_VBlankIntr(TRUE); - - InitializeAllocateSystem(); - - // WDSCugpobt@m(32oCgACgĂKv) - wdsSysBuf = OS_Alloc( WDS_GetWorkAreaSize() ); - if( wdsSysBuf == NULL) - { - OS_Panic("OS_Alloc Failed"); - } - - // C[v - while( 1 ) { - OSTick now; - int i; - - OS_WaitVBlankIntr(); - switch( g_appstate ) - { - case APP_STATE_WDSINIT: - // CjVXe[g - - // WDSCȕ֐ĂяoA̔񓯊̊҂ - OS_Printf("*** WDS_Initialize\n"); - g_appstate = APP_STATE_WDSWAITINIT; - wdsBegin = OS_GetTick(); - if( WDS_Initialize( wdsSysBuf, WDS_Initialize_CB, 0 ) == 0 ) - { - OS_Printf("WDS_Initialize successed\n"); - } - else { - OS_TPrintf("WDS_Initialize failed"); - g_appstate = APP_STATE_WDSCOMPLETEEND; - } - break; - OS_Printf("*** WDS_Initialize waiting asyncronous process\n"); - case APP_STATE_WDSWAITINIT: - case APP_STATE_WDSWAITSCAN: - case APP_STATE_WDSWAITENDSCAN: - case APP_STATE_WDSWAITEND: - // 񓯊̊҂ƒXe[gQ - - // R[obN֐ĂяoAXe[gύX̂҂Ă΂悢 - break; - case APP_STATE_WDSSCAN: - // ォAr[RXLɈXLsꍇɓĂXe[g - - //OS_Printf("*** WDS_StartScan\n"); - // r[RXL񓯊Jn - g_appstate = APP_STATE_WDSWAITSCAN; - wdsBegin = OS_GetTick(); - if( WDS_StartScan( WDS_StartScan_CB ) == 0 ) - { - if( wdsScanBeginTick == 0 ) - wdsScanBeginTick = OS_GetTick(); - } - else { - OS_TPrintf("WDS_EndScan failed"); - g_appstate = APP_STATE_WDSEND; - } - break; - case APP_STATE_WDSCOMPLETESCAN: - // XLɓĂXe[g - - // ̃XLł̓r[RȂƂ̂ŁA2bԃr[RMJԂ - now = OS_GetTick(); - if( OS_TicksToMilliSeconds(now - wdsScanBeginTick) < 2000 ) - { - // ăXL̂߂ɃXLJnXe[gɈڍs - g_appstate = APP_STATE_WDSSCAN; - } - else { - // XLIXe[gɈڍs - g_appstate = APP_STATE_WDSENDSCAN; - } - break; - case APP_STATE_WDSENDSCAN: - // XLIۂɓĂXe[g - OS_Printf("*** WDS_EndScan\n"); - - // XLI񓯊Jn - wdsBegin = OS_GetTick(); - g_appstate = APP_STATE_WDSWAITENDSCAN; - if( WDS_EndScan( WDS_EndScan_CB ) == 0 ) - { - OS_Printf("WDS_EndScan successed\n"); - } - else { - OS_TPrintf("WDS_EndScan failed"); - g_appstate = APP_STATE_WDSEND; - } - break; - case APP_STATE_WDSCOMPLETEENDSCAN: - // XLI񓯊IۂɓėXe[g - OS_Printf("*** WDS_GetApInfoAll\n"); - if( WDS_GetApInfoAll( briefapinfo ) != 0 ) - { - OS_Panic("WDS_GetApInfoAll failed\n"); - } - for( i = 0 ; i < WDS_APINFO_MAX ; i++ ) - { - if( briefapinfo[i].isvalid == TRUE ) - { - OS_TPrintf("rssi: %d\n", briefapinfo[i].rssi); - DumpWDSApInfo( &briefapinfo[i].apinfo ); - } - } - g_appstate = APP_STATE_WDSEND; - break; - case APP_STATE_WDSEND: - // WDSCuIAn[h̓d𗎂Ƃ񓯊Jn - OS_Printf("*** WDS_End\n"); - g_appstate = APP_STATE_WDSWAITEND; - wdsBegin = OS_GetTick(); - if( WDS_End( WDS_End_CB ) == 0 ) - { - OS_Printf("WDS_End successed\n"); - } - else { - OS_Panic("WDS_End failed"); - } - break; - case APP_STATE_WDSCOMPLETEEND: - // WDSCủۂɓėXe[g - - OS_TPrintf("WDS completed\n"); - OS_Terminate(); - } - } -} - -// ANZX|Cg̃fobO\p֐ -static void DumpWDSApInfo( WDSApInfo *apinfo ) -{ - int i; - char buf[256]; - - OS_TPrintf( "================================\n" ); - // SSID - MI_CpuCopy8( apinfo->ssid, buf, WDS_SSID_BUF_SIZE) ; - buf[WDS_SSID_BUF_SIZE] = 0x00; - OS_TPrintf( "SSID: %s\n", buf ); - - // APNUM - MI_CpuCopy8( apinfo->apnum, buf, WDS_APNUM_BUF_SIZE) ; - buf[WDS_APNUM_BUF_SIZE] = 0x00; - OS_TPrintf( "APNUM: %s\n", buf ); - - // CHANNEL - OS_TPrintf( "channel: %d\n", apinfo->channel ); - - // ENCRYPTFLAG - OS_TPrintf( "encryptmethod: %d\n", apinfo->encryptflag); - - // WEPKEY - OS_TPrintf( "WEPKEY: " ); - for( i = 0 ; i < WDS_WEPKEY_BUF_SIZE ; i++ ) - { - OS_TPrintf( "%02x", apinfo->wepkey[i] ); - } - OS_TPrintf( "\n" ); - OS_TPrintf( "================================\n" ); -} - -static void VBlankIntr(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); -} - -// q[v֐ -static void InitializeAllocateSystem(void) -{ - void *tempLo; - OSHeapHandle hh; - - tempLo = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetArenaLo(OS_ARENA_MAIN, tempLo); - hh = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - if (hh < 0) - { - OS_Panic("ARM9: Fail to create heap...\n"); - } - hh = OS_SetCurrentHeap(OS_ARENA_MAIN, hh); -} - -static void WDS_Initialize_CB(void *arg) -{ -#pragma unused(arg) - OS_TPrintf("WDS_Initialize_CB\n"); - g_appstate = APP_STATE_WDSSCAN; - OS_TPrintf("Elapsed time = %llu\n", OS_TicksToMicroSeconds( OS_GetTick() - wdsBegin ) ); -} - -static void WDS_StartScan_CB(void *arg) -{ -#pragma unused(arg) - OS_TPrintf("WDS_StartScan_CB\n"); - g_appstate = APP_STATE_WDSCOMPLETESCAN; - OS_TPrintf("Elapsed time = %llu\n", OS_TicksToMicroSeconds( OS_GetTick() - wdsBegin ) ); -} - -static void WDS_EndScan_CB(void *arg) -{ -#pragma unused(arg) - OS_TPrintf("WDS_EndScan_CB\n"); - g_appstate = APP_STATE_WDSCOMPLETEENDSCAN; - OS_TPrintf("Elapsed time = %llu\n", OS_TicksToMicroSeconds( OS_GetTick() - wdsBegin ) ); -} - -static void WDS_End_CB(void *arg) -{ -#pragma unused(arg) - OS_TPrintf("WDS_End_CB\n"); - g_appstate = APP_STATE_WDSCOMPLETEEND; - OS_TPrintf("Elapsed time = %llu\n", OS_TicksToMicroSeconds( OS_GetTick() - wdsBegin ) ); -} diff --git a/build/tests/WDSWrapperTest/Makefile b/build/tests/WDSWrapperTest/Makefile deleted file mode 100644 index efc21709..00000000 --- a/build/tests/WDSWrapperTest/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: WDSWrapperTest -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED -TWL_PROC = ARM9 - -SRCS = main.c -TARGET_BIN = main.srl - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -LLIBRARIES += WDS$(TWL_LIBSUFFIX).a - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/WDSWrapperTest/src/main.c b/build/tests/WDSWrapperTest/src/main.c deleted file mode 100644 index c103a5d8..00000000 --- a/build/tests/WDSWrapperTest/src/main.c +++ /dev/null @@ -1,197 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - WDSWrapperTest - File: main.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#include - -// VuN֐ -static void VBlankIntr(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); -} - -// q[v֐ -static void InitializeAllocateSystem(void) -{ - void *tempLo; - OSHeapHandle hh; - - tempLo = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetArenaLo(OS_ARENA_MAIN, tempLo); - hh = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - if (hh < 0) - { - OS_Panic("ARM9: Fail to create heap...\n"); - } - hh = OS_SetCurrentHeap(OS_ARENA_MAIN, hh); -} - -// WDSWrapperpAP[^ -static void *Alloc_WDSWrapper( u32 size ) -{ - return OS_Alloc( size ); -} - -static void Free_WDSWrapper( void *ptr ) -{ - OS_Free( ptr ); -} - -char *callbackstring[] = { - "WDSWRAPPER_CALLBACK_INITIALIZE", - "WDSWRAPPER_CALLBACK_CLEANUP", - "WDSWRAPPER_CALLBACK_STARTSCAN", - "WDSWRAPPER_CALLBACK_STARTSCAN2", - "WDSWRAPPER_CALLBACK_STOPSCAN", -}; - -// WDSWrapperpR[obN֐ -static void Callback_WDSWrapper( void *ptr ) -{ - WDSWrapperCallbackParam *callback = (WDSWrapperCallbackParam *)ptr; - OS_TPrintf("Callback_WDSWrapper: %s %d ", callbackstring[callback->callback], callback->errcode ); - - switch( callback->callback ) { - case WDSWRAPPER_CALLBACK_INITIALIZE: - OS_TPrintf( "" ); - break; - case WDSWRAPPER_CALLBACK_STARTSCAN2: - // nbԊũr[RԌXL񕪂 - // r[R󂯎ĂȂƂʂoꍇA\܂ - if( WDS_WrapperCheckValidBeacon() == WDSWRAPPER_ERRCODE_FAILURE ) - OS_TPrintf( "\܂" ); - else { - OS_TPrintf( "\‚܂" ); - } - // Mr[Rf[^Argumenẗɏ -#ifdef SDK_TWL - OS_TPrintf( "\n" ); - WDS_WrapperSetArgumentParam(); -#endif - break; - case WDSWRAPPER_CALLBACK_STARTSCAN: - // nbԊũr[RԌXL񕪂 - // r[R󂯎Ăꍇ̂݋\t܂ - if( WDS_WrapperCheckValidBeacon() == WDSWRAPPER_ERRCODE_SUCCESS ) - OS_TPrintf( "\‚܂" ); - break; - case WDSWRAPPER_CALLBACK_STOPSCAN: - if( WDS_WrapperCheckValidBeacon() == WDSWRAPPER_ERRCODE_FAILURE ) - OS_TPrintf( "\܂" ); - else { - OS_TPrintf( "\‚܂" ); - } - break; - case WDSWRAPPER_CALLBACK_CLEANUP: - OS_TPrintf( "" ); - break; - } - OS_TPrintf( "\n" ); -} - -// X[v[hɓOɌĂяoR[obN֐ -static void Callback_WDSPreSleep( void *ptr ) -{ -#pragma unused( ptr ) - WDS_WrapperCleanup(); - while( WDS_WrapperCheckThreadRunning() == WDSWRAPPER_ERRCODE_SUCCESS ) - OS_Sleep( 100 ); -} - -// X[v[h畜AۂɌĂяoR[obN֐ -static void Callback_WDSPostSleep( void *ptr ) -{ -#pragma unused( ptr ) - WDSWrapperInitializeParam param; - - // WDSWrapperƓJn - param.threadprio = 20; - param.dmano = 1; - - param.callback = Callback_WDSWrapper; - param.alloc = Alloc_WDSWrapper; - param.free = Free_WDSWrapper; - WDS_WrapperInitialize( param ); -} - -// C֐ -void NitroMain(void) -{ - WDSWrapperInitializeParam param; - u16 lastpad = 0x0000; - u16 nowpad = 0x0000; - PMSleepCallbackInfo presleepcallbackinfo, postsleepcallbackinfo; - - // e평 - OS_Init(); - OS_InitTick(); - OS_InitAlarm(); - - //---- interrupt setting - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - OS_EnableIrqMask(OS_IE_V_BLANK); - OS_EnableIrq(); - GX_VBlankIntr(TRUE); - - //---- power manager callback - PM_SetSleepCallbackInfo( &presleepcallbackinfo, Callback_WDSPreSleep, NULL ); - PM_AppendPreSleepCallback( &presleepcallbackinfo ); - PM_SetSleepCallbackInfo( &postsleepcallbackinfo, Callback_WDSPostSleep, NULL ); - PM_AppendPostSleepCallback( &postsleepcallbackinfo ); - - InitializeAllocateSystem(); - - OS_TPrintf( "WDSWrapper Sample\n\n" ); - OS_TPrintf( "X{^: WDSbp[WDSAԌXLJn\n" ); - OS_TPrintf( "B{^: XL𒆒f\n" ); - OS_TPrintf( "A{^: XLĊJ\n" ); - OS_TPrintf( "Y{^: XL𒆒fAWDSbp[WDS\n" ); - OS_TPrintf( "X^[g{^: q[v_v\\n" ); - OS_TPrintf( "ZNg{^: X[v[hin/out\n" ); - - // L[͂ŒfEĊJE - while( 1 ) { - lastpad = nowpad; - nowpad = PAD_Read(); - - // A{^: XLĊJ - // B{^: XL𒆒f - // X{^: bp[ - // Y{^: bp[ - // X^[g{^: q[v_v\ - if( ( lastpad ^ nowpad ) & PAD_BUTTON_A && !( nowpad & PAD_BUTTON_A ) ) - WDS_WrapperStartScan(); - if( ( lastpad ^ nowpad ) & PAD_BUTTON_B && !( nowpad & PAD_BUTTON_B ) ) - WDS_WrapperStopScan(); - if( ( lastpad ^ nowpad ) & PAD_BUTTON_X && !( nowpad & PAD_BUTTON_X ) ) { - // WDSWrapperƓJn - param.threadprio = 20; - param.dmano = 1; - - param.callback = Callback_WDSWrapper; - param.alloc = Alloc_WDSWrapper; - param.free = Free_WDSWrapper; - WDS_WrapperInitialize( param ); - } - if( ( lastpad ^ nowpad ) & PAD_BUTTON_Y && !( nowpad & PAD_BUTTON_Y ) ) - WDS_WrapperCleanup(); - if( ( lastpad ^ nowpad ) & PAD_BUTTON_START && !( nowpad & PAD_BUTTON_START ) ) - OS_DumpHeap( OS_ARENA_MAIN, OS_CURRENT_HEAP_HANDLE ); - if( ( lastpad ^ nowpad ) & PAD_BUTTON_SELECT && !( nowpad & PAD_BUTTON_SELECT ) ) { - PM_GoSleepMode( PM_TRIGGER_KEY, PM_PAD_LOGIC_OR, PAD_BUTTON_SELECT ); - } - OS_Sleep( 100 ); - } -} diff --git a/build/tests/WirelessChecker/@ b/build/tests/WirelessChecker/@ deleted file mode 100644 index bd33deb9..00000000 --- a/build/tests/WirelessChecker/@ +++ /dev/null @@ -1 +0,0 @@ -NINTENDO_RED_CONFIDENTIAL diff --git a/build/tests/WirelessChecker/Makefile b/build/tests/WirelessChecker/Makefile deleted file mode 100644 index b8b4ad89..00000000 --- a/build/tests/WirelessChecker/Makefile +++ /dev/null @@ -1,133 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tools - Wireless Checker -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL -override TARGET_CODEGEN = ARM -override TWL_ARCHGEN = LIMITED - -SUBDIRS = libraries components rsf banner - -RES_DIR = ./resources - -SRCDIR = src -INCDIR = include $(ROOT)/build/libraries/wm/common.TWL/inc \ - $(ROOT)/build/libraries/wm/ARM9.TWL/nwm/inc - -ifeq ($(TWL_NANDAPP),TRUE) -ROM_SPEC = rsf/wireless_checker_nand.rsf -else -ROM_SPEC = rsf/wireless_checker.rsf -endif - -BANNER_FILE = ./banner/000A_WLCK.bnr -MAKEROM_FLAGS = -DBANNER_FILE='$(BANNER_FILE)' - -#---------------------------------- -# Font - -FONTCVTR_DIR = $(call empath,$(TWLSYSTEM_ROOT))/tools/fontcvtr -FONT_BMP = $(RES_DIR)/ds_ipl10.bmp - -TARGET_OBJ += $(FONT_O) -EXT_OBJS += $(OBJDIR)/$(FONT_O) - - -FONT_RES_LC = $(RES_DIR)/font.NFTR -FONT_O_LC = font.o - -FONT_RES = $(FONT_RES_LC) -FONT_O = $(FONT_O_LC) - -MACRO_FLAGS += -DTWLNMENU_USE_LC_FONT - - -LDIRT_CLEAN += $(FONT_RES_LC) $(FONT_RES_NO_LC) *.rsf $(REVISION_C) - -#---------------------------------------------------------------------------- - -ifeq ($(TWL_NANDAPP),TRUE) -TARGET_BIN = WirelessChecker_nand.tad -else -TARGET_BIN = WirelessChecker.srl -endif - -ifeq ($(TWL_NANDAPP),TRUE) -LCFILE_AUTOGEN = $(BINDIR)/$(notdir $(LCFILE_SPEC:.lsf=.autogen.nand.lcf)) -LDRES_AUTOGEN = $(BINDIR)/$(notdir $(LCFILE_SPEC:.lsf=.autogen.nand.response)) -endif - -SRCS = main.cpp \ - frame.cpp \ - test.cpp \ - test_wm.cpp \ - test_nwm.cpp \ - test_fatal.cpp \ - test_recovery.cpp \ - util/util.cpp \ - util/canvas.cpp \ - util/wprintf.cpp \ - util/memory.cpp - -LINCLUDES = $(ROOT)/build/libraries/wm/ARM9.TWL/nwm/inc \ - $(ROOT)/build/libraries/wm/common.TWL/inc - -LLIBRARY_DIRS = -LLIBRARIES = - -COMPONENT_NAME = racoon -MAKEROM_ARM7_BASE = ./components/racoon_wckr/bin/$(TWL_BUILDTYPE_ARM7)/racoon -MAKEROM_ARM7 = $(MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - -include $(TWLSYSTEM_ROOT)/build/buildtools/commondefs - -LIBRARIES_UNLINK := libnwm$(TWL_LIBSUFFIX).a - -LLIBRARY_DIRS += ./libraries/nwm/ARM9/lib/$(TWL_BUILDTYPE_ARM9) -LLIBRARIES += libnwm.WCKR$(TWL_LIBSUFFIX).a - -#---------------------------------------------------------------------------- - -# convert font - -$(FONT_RES): $(FONT_BMP) $(FONT_FILTER) -ifdef SILENT - echo "make font:" $(notdir $<) -endif - $(FONTCVTR_DIR)/fontcvtrc.exe \ - -i bmp -if $< -io $(FONTCVTR_DIR)/xlor/ds_ipl.xlor -ib 1 \ - -o nitro -of $@ -oe utf16 -oa 0x23 $(FONT_OPTION) - -$(OBJDIR)/$(FONT_O): $(FONT_RES) -ifdef SILENT - echo " b2o font:" $(notdir $<) -endif - $(BIN2OBJ) $< $@ --begin font_NFTR_begin --end font_NFTR_end --align 32 - -INSTALL_TARGETS = $(BINDIR)/$(TARGET_BIN) -INSTALL_DIR = ./ -#$(TWLSDK_INSTALL_ROOT)/bin/$(CODEGEN_PROC)-$(TWL_PLATFORM)/$(TWL_BUILD_DIR) - -do-build: $(TARGETS) -ifneq ($(TWL_NANDAPP),TRUE) - $(REMAKE) TWL_NANDAPP=TRUE SKIP_SUBDIR=TRUE -endif - -include $(TWLSYSTEM_ROOT)/build/buildtools/modulerules -include $(TWLSDK_ROOT)/build/buildtools/twl/modulerules.add-ins.nadk - -#===== End of Makefile ===== diff --git a/build/tests/WirelessChecker/banner/000A_WLCK.bmp b/build/tests/WirelessChecker/banner/000A_WLCK.bmp deleted file mode 100644 index 51252b83b8943e0a1e79119cf95de67d5188ea13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmd5&yA1*{3^j-W7=e;4PC`ye7uRfYE!l*QHE_)gNUXpH;n^`FN0$!gUi^D@&ORLH zHMz{V_rNZ&q7AI2Y{M<3gjI>!2VKd+s!IA$dfl%yO()!Cn335p zsDzUfG^B-*vUukU-g1_gMc%6VdZ&Q+=|B2^|Hj8034{AMwjbMo&1`Dvi-6bVzk6x? PU!QHC);Rh%e{lXc5>BI@ diff --git a/build/tests/WirelessChecker/banner/000A_WLCK.bsf b/build/tests/WirelessChecker/banner/000A_WLCK.bsf deleted file mode 100644 index a8d31c5b491b015fa7ba43f623f9ed2fcd6f4c17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 982 zcmbtTJ5Iwu5PdZgcd(KMq<}`EqXWw}CI}Elp^QRgj3tO8l9~hL5LBE14nPaHprPUl z2zWEg2DyM{HS%hAKJU%XU!PsIRN(nycG4vv_O+DgoLcA#2kSL-3NmUZ2D6%C8K zh40BeEBLEY_0gQ1_#E2Wx3X6`w1kWyND2E|vBsL!Tw1OvPJ$3q?n6n`@ef{xBnU6F z{n0&{SbjN9gYa@rZDbXD#3FDSy8DXt+rv0;DlvOk6H#}}{YiU)h<$Fd&c)ZP`}7T8 C{Dh1E diff --git a/build/tests/WirelessChecker/banner/Makefile b/build/tests/WirelessChecker/banner/Makefile deleted file mode 100644 index f6ef1ca6..00000000 --- a/build/tests/WirelessChecker/banner/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#--------------------------------------------------------------------------- -# Project: NitroSDK - tools -# File: Makefile -# -# Copyright 2003,2004 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Log: Makefile,v $ -# Revision 1.1 2004/11/01 08:25:59 ooe -# (none) -# -# $NoKeywords: $ -#--------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -BANNER_ICON = 000A_WLCK.bmp -BANNER_SPEC = 000A_WLCK.bsf - -TARGETS = $(BANNER_SPEC:.bsf=.bnr) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON_NAME).nbfc $(BANNER_ICON_NAME).nbfp - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/WirelessChecker/components/Makefile b/build/tests/WirelessChecker/components/Makefile deleted file mode 100644 index 6ca34f03..00000000 --- a/build/tests/WirelessChecker/components/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TWL WLAN - components -# File: Makefile -# -# Copyright 2003 - 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Log: Makefile,v $ -# -# -# $NoKeywords: $ -#---------------------------------------------------------------------------- - - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS_P += racoon_wckr - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/WirelessChecker/components/racoon_wckr/Makefile b/build/tests/WirelessChecker/components/racoon_wckr/Makefile deleted file mode 100644 index 81bcb35e..00000000 --- a/build/tests/WirelessChecker/components/racoon_wckr/Makefile +++ /dev/null @@ -1,56 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - racoon.TWL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -# Definition to override for racoon_wckr -# - -LLIBRARIES += libnwm_sp.WCKR$(TWL_LIBSUFFIX).a -LLIBRARY_DIRS += ../../libraries/nwm/ARM7/lib/$(TWL_BUILDTYPE) - -COMPONENT_DIR += $(ROOT)/build/components/racoon.TWL -COMPONENT_SRC_DIR += $(ROOT)/build/components/mongoose.TWL/src - -override SRCS = $(COMPONENT_SRC_DIR)/main.c $(COMPONENT_SRC_DIR)/initScfg.c - -override TARGET_NAME = racoon - -# Generate my own lsf from original lsf of mongoose -LSF_ORG = $(COMPONENT_DIR)/$(TARGET_NAME).lsf -MAKE_LSF = make_lsf.pl -AUTOGEN_LSF = $(TARGET_NAME)_wckr.lsf - -LDIRT_CLEAN = $(AUTOGEN_LSF) - -override TARGET_NEF = $(TARGET_NAME).tef -override LCFILE_SPEC = $(AUTOGEN_LSF) -override LCFILE_TEMPLATE = $(COMPONENT_DIR)/$(TARGET_NAME).lcf.template -override LDRES_TEMPLATE = $(COMPONENT_DIR)/$(TARGET_NAME).response.template - -override TWL_INSTALL_COMPONENTSDIR= -override INSTALL_TARGETS = -override INSTALL_DIR = - -# - -include $(TWLSDK_ROOT)/build/components/racoon.TWL/Makefile - -$(AUTOGEN_LSF): $(LSF_ORG) $(MAKE_LSF) - @echo " make:" $@ - @perl $(MAKE_LSF) $(TARGET_NAME) - -#===== End of Makefile ===== diff --git a/build/tests/WirelessChecker/components/racoon_wckr/make_lsf.pl b/build/tests/WirelessChecker/components/racoon_wckr/make_lsf.pl deleted file mode 100755 index b3c48384..00000000 --- a/build/tests/WirelessChecker/components/racoon_wckr/make_lsf.pl +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlWLAN - components - mongoose_sdlog.TWL -# File: make_lsf.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $ROOT; - -my $COMPONENT = $ARGV[0]; -print $COMPONENT; -# search TWLSDK_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWLSDK_ROOT/s) { - $ROOT = $ENV{$_}; - } -} - -my $src = sprintf("$ROOT/build/components/%s.TWL/%s.lsf", $COMPONENT, $COMPONENT); -my $dst = sprintf("%s_wckr.lsf", $COMPONENT); - - -my $rn = "\x0D\x0A"; - -open(F, $src) or die "cant open $src\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst") or die "cant open $dst\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/libnwm_sp/ ) - { - $line =~ s/libnwm_sp/libnwm_sp\.WCKR/; - } - - print OUT $line; -} -close(OUT); diff --git a/build/tests/WirelessChecker/libraries/Makefile b/build/tests/WirelessChecker/libraries/Makefile deleted file mode 100644 index 401e4ee5..00000000 --- a/build/tests/WirelessChecker/libraries/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS = nwm - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/WirelessChecker/libraries/nwm/ARM7/Makefile b/build/tests/WirelessChecker/libraries/nwm/ARM7/Makefile deleted file mode 100644 index 3d20987a..00000000 --- a/build/tests/WirelessChecker/libraries/nwm/ARM7/Makefile +++ /dev/null @@ -1,126 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - WM - libraries -# File: Makefile -# -# Copyright 2003 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- -override TARGET_PLATFORM = TWL - -# Codegen for sub processer -TWL_PROC = ARM7 - -# build ARM & THUMB libraries -TARGET_CODEGEN ?= ALL - -MACRO_FLAGS = -DNWM_WRACK_FIRMWARE - -NWM_SRCDIR = $(ROOT)/build/libraries/wm/ARM7.TWL/nwm - -#---------------------------------------------------------------------------- - -# INCDIR ӓ_F -INCDIR = $(NWM_SRCDIR)/inc $(NWM_SRCDIR)/../../inc \ - $(NWM_SRCDIR)/../../ARM7/inc $(NWM_SRCDIR)/../../common.TWL/inc \ - $(NWM_SRCDIR)/../common/inc \ - $(NWM_SRCDIR)/../../../wpa/include \ - $(TWLWIRELESS_ROOT)/include \ - $(TWLWIRELESS_ROOT)/host/include \ - $(TWLWIRELESS_ROOT)/host/wlan/include \ - $(TWLWIRELESS_ROOT)/host/os/twl/include \ - $(TWLWIRELESS_ROOT)/host/os/twl/library/athioctl/include \ - $(TWLWIRELESS_ROOT)/host/os/nitro/include \ - $(TWLWIRELESS_ROOT)/host/os/nitro/library/athioctl/include \ - $(ROOT)/build/libraries/spi/ARM7/include - -SRCDIR_ = ../../ARM7/src src ../../common.TWL/src - -SRCDIR = $(addprefix $(NWM_SRCDIR)/, $(SRCDIR_)) - -SRCS_ARM7 = nwmsp_system.c \ - nwmsp_cmd.c \ - nwmsp_event.c \ - nwmsp_wlan_handler.c \ - nwmsp_event_handler.c \ - nwmsp_beaconinfo.c - -SRCS_COMMON = nwm_loaddev.c \ - nwm_unloaddev.c \ - nwm_open.c \ - nwm_close.c \ - nwm_startscan.c \ - nwm_connect.c \ - nwm_disconnect.c \ - nwm_sendframe.c \ - nwm_recvframe.c \ - nwm_setwepkey.c \ - nwm_setpowersave.c \ - nwm_wpa.c \ - nwm_qos.c \ - nwm_reset.c - -SRCS = $(addprefix $(NWM_SRCDIR)/src/, $(SRCS_ARM7)) \ - $(addprefix $(NWM_SRCDIR)/../../common.TWL/src/, $(SRCS_COMMON)) \ - ../src/nwm_installfirm_autogen.c - -TARGET_LIB = libnwm_sp.WCKR$(TWL_LIBSUFFIX).a - -#---------------------------------------------------------------------------- - -# DEBUGŃrh̏ꍇARELEASEłŃrh -# DEBUGł̃Cu𑕂܂B - -ifdef TARGET_DEBUG -TWL_BUILD_TYPE = RELEASE -else -ifdef TWL_DEBUG -TWL_BUILD_TYPE = RELEASE -CCFLAGS += -DNWM_DEBUG -else -ifdef NITRO_DEBUG -TWL_BUILD_TYPE = RELEASE -endif -endif -endif - -#---------------------------------------------------------------------------- -# Default ł LIMITED ̃Cu쐬܂ -TWL_ARCHGEN ?= LIMITED - -#---------------------------------------------------------------------------- - -# Vp̃fobOtOȂ - -ifdef NWM_DEBUG -CCFLAGS += -DNWM_DEBUG -endif - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#INSTALL_TARGETS = $(TARGETS) -#INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR) -#GDIRT_INSTALLED = $(addprefix $(INSTALL_DIR)/,$(notdir $(INSTALL_TARGETS))) - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== - diff --git a/build/tests/WirelessChecker/libraries/nwm/ARM9/Makefile b/build/tests/WirelessChecker/libraries/nwm/ARM9/Makefile deleted file mode 100644 index e8ecb1e6..00000000 --- a/build/tests/WirelessChecker/libraries/nwm/ARM9/Makefile +++ /dev/null @@ -1,95 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - WM - libraries -# File: Makefile -# -# Copyright 2003 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -#SUBDIRS = wm_lib - -override TARGET_PLATFORM = TWL - -# Codegen for sub processer -TWL_PROC = ARM9 -TARGET_CODEGEN ?= ALL - -MACRO_FLAGS = -DNWM_WRACK_FIRMWARE - -NWM_SRCDIR = $(ROOT)/build/libraries/wm/ARM9.TWL/nwm - -# HYBRID / LIMITED ̃Cu쐬܂ -TWL_ARCHGEN ?= ALL - -# LoadDeviceEx œ]t@[EFÃfBNg -TWLWIRELESS_FW_DIR = $(ROOT)/add-ins/TwlWireless/$(TWLWIRELESS_PACKAGE)/binfile - -SRCDIR = ./src ../../common.TWL/src -INCDIR = $(NWM_SRCDIR)/inc $(NWM_SRCDIR)/../../inc $(NWM_SRCDIR)/../../ARM9/inc \ - $(NWM_SRCDIR)/../../common.TWL/inc $(NWM_SRCDIR)/../common/inc - -SRCS_ARM9 = nwm_init.c \ - nwm_system.c \ - nwm_end.c \ - nwm_cmd.c \ - nwm_passphrase.c - -SRCS_COMMON = nwm_loaddev.c \ - nwm_unloaddev.c \ - nwm_open.c \ - nwm_close.c \ - nwm_startscan.c \ - nwm_connect.c \ - nwm_disconnect.c \ - nwm_setwepkey.c \ - nwm_setpowersave.c \ - nwm_sendframe.c \ - nwm_recvframe.c \ - nwm_wpa.c \ - nwm_qos.c \ - nwm_reset.c - -SRCS = $(addprefix $(NWM_SRCDIR)/src/, $(SRCS_ARM9)) \ - $(addprefix $(NWM_SRCDIR)/../../common.TWL/src/, $(SRCS_COMMON)) \ - ../src/nwm_installfirm_autogen.c - -EXT_OBJS = $(OBJDIR)/nwm_firm.o - -TARGET_LIB = libnwm.WCKR$(TWL_LIBSUFFIX).a - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#INSTALL_TARGETS = $(TARGETS) - -#INSTALL_DIR = $(TWL_INSTALL_LIBDIR) - -GDIRT_INSTALLED = $(addprefix $(INSTALL_DIR)/,$(notdir $(INSTALL_TARGETS))) - -#---------------------------------------------------------------------------- -# Vp̃fobOtOȂ - -ifdef NWM_DEBUG -CCFLAGS += -DNWM_DEBUG -endif - -CCFLAGS += -DENABLE_RXACK - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -$(OBJDIR)/nwm_firm.o: $(TWLWIRELESS_FW_DIR)/nwm_firm.bin - $(BIN2OBJ) $(call empath, $<) $@ - -#===== End of Makefile ===== diff --git a/build/tests/WirelessChecker/libraries/nwm/Makefile b/build/tests/WirelessChecker/libraries/nwm/Makefile deleted file mode 100644 index a7c14231..00000000 --- a/build/tests/WirelessChecker/libraries/nwm/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - libraries - wm -# File: Makefile -# -# Copyright 2003 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - - -TARGET_PLATFORM := TWL - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS = scripts - -ifneq ($(filter TWL,$(TARGET_PLATFORM_LIST)),) -SUBDIRS_P += ARM9 -ifeq ($(TWLSDK_PRIVATE),TRUE) -SUBDIRS_P += ARM7 -endif -endif - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/WirelessChecker/libraries/nwm/scripts/Makefile b/build/tests/WirelessChecker/libraries/nwm/scripts/Makefile deleted file mode 100644 index 2582bc5b..00000000 --- a/build/tests/WirelessChecker/libraries/nwm/scripts/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - libraries - wm -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_CODEGEN := ARM -override TWL_ARCHGEN := LIMITED - -NWM_ORG = $(ROOT)/build/libraries/wm/common.TWL/src/nwm_installfirm.c -MAKE_NWM = make_nwm_fw_wrack.pl -AUTOGEN_NWM = src/nwm_installfirm_autogen.c -LDIRT_CLEAN += $(AUTOGEN_NWM) - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -TARGETS = $(AUTOGEN_NWM) - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -$(AUTOGEN_NWM): $(NWM_ORG) $(MAKE_NWM) - @echo " make:" $@ - @perl $(MAKE_NWM) - -#===== End of Makefile ===== diff --git a/build/tests/WirelessChecker/libraries/nwm/scripts/make_nwm_fw_wrack.pl b/build/tests/WirelessChecker/libraries/nwm/scripts/make_nwm_fw_wrack.pl deleted file mode 100755 index 50d2ebf4..00000000 --- a/build/tests/WirelessChecker/libraries/nwm/scripts/make_nwm_fw_wrack.pl +++ /dev/null @@ -1,108 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - -# File: make_nwm_fw_wrack.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $rn = "\x0D\x0A"; - -my $SDKROOT; - -# search TWLSDK_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWLSDK_ROOT/s) { - $SDKROOT = $ENV{$_}; - } -} - -my $src = "$SDKROOT/build/libraries/wm/common.TWL/src/nwm_installfirm.c"; -my $dst_dir = "../src"; -my $dst_file = "nwm_installfirm_autogen.c"; - -open(F, $src) or die "cant open $src\n"; -my @lines = ; -close(F); - -mkdir $dst_dir unless -e $dst_dir; - -my $in_instfirm_count = 0; - -open(OUT, ">$dst_dir/$dst_file") or die "cant open $dst_dir/$dst_file\n"; -foreach my $line ( @lines ) -{ - if ( $line =~ m/^NWMRetCode NWMi_InstallFirmware\(NWMCallbackFunc callback, void\* addr, u32 size, BOOL isColdstart\)/ ) - { - print OUT <<__WRACK_FIRMWARE_API__; - -\#ifdef NWM_WRACK_FIRMWARE -NWMRetCode NWMi_WrackFirmware(NWMCallbackFunc callback); - -NWMRetCode NWMi_WrackFirmware(NWMCallbackFunc callback) -{ - NWMArm9Buf *sys = NWMi_GetSystemWork(); - NWMRetCode result; - - // R[obN֐o^ - NWMi_SetCallbackTable(NWM_APIID_INSTALL_FIRMWARE, callback); - - // ARM7FIFOŒʒm - result = NWMi_SendCommand(NWM_APIID_INSTALL_FIRMWARE, 5, - (u32)(sys->NWM7), (u32)(sys->status), (u32)(sys->fifo7to9), NULL, FALSE); - - return NWM_RETCODE_OPERATING; -} -\#endif // NWM_WRACK_FIRMWARE - -__WRACK_FIRMWARE_API__ - } - - if ( $line =~ m/MCU_SetWifiLedBlinkingStatus\( FALSE \);/ ) - { - print OUT "#ifndef NWM_WRACK_FIRMWARE", $rn; - } - - if( $line =~ m/^installfirm_err:/ ) - { - print OUT <<__WRACK_FIRMWARE__; - -\#else // NWM_WRACK_FIRMWARE -\#pragma unused (err) - // set WiFi_RST to disable WiFi - NWMSPi_SetWiFiReset(FALSE); - OS_Sleep(1); // wait 1msec - // set WiFi_RST to enable WiFi - NWMSPi_SetWiFiReset(TRUE); - { - NWMCallback *cb; - - NWMSP_ClearAPIActiveFlag(NWM_APIID_INSTALL_FIRMWARE); - // I - cb = (NWMCallback *)NWMSP_GetBuffer4Callback2Nwm9(); - cb->apiid = NWM_APIID_INSTALL_FIRMWARE; - cb->retcode = NWM_RETCODE_FATAL_ERROR; - NWMSP_ReturnResult2Nwm9((void *)cb); - return; - } -\#endif // NWM_WRACK_FIRMWARE -__WRACK_FIRMWARE__ - } - print OUT $line; - - -} -close(OUT); - diff --git a/build/tests/WirelessChecker/readme.txt b/build/tests/WirelessChecker/readme.txt deleted file mode 100644 index 980f4e29..00000000 --- a/build/tests/WirelessChecker/readme.txt +++ /dev/null @@ -1,62 +0,0 @@ -* WirelessChecker - {̃fobOp @\`FbNvO - -- mF菇 - -1. {̖tO̊mF - - ʂ́uON/OFFݒvсuOFF{́v̐ݒmFĂB - gpłԂ́Aȉ̏ԂłB - - ON/OFFݒ[ON ] - OFF{[No ] - - -2. DS̏eXg - - DS̏XLIeXg܂B - ANeBuXL(dgoXL)s܂B - LED̓_łmF邱ƂŖɓ삵Ă邱ƂmFĂB - ܂AON/OFFݒOFFɂ邱ƂŁAs邱ƂmFĂB - -3. TWL̏eXg - - TWL̏XLIeXg܂B - ANeBuXL(dgoXL)s܂B - LED̓_łmF邱ƂŖɓ삵Ă邱ƂmFĂB - ܂AON/OFFݒOFFɂ邱ƂŁAs邱ƂmFĂB - -4. FATALG[JoeXg - - TWLW[̃t@[EFAG~[gAɂFATALG[A - AvWvɂn[hEFAZbgŁAt@[EFA[hĂ邱ƂmF܂B - ċNɎITWL̏`FbNs܂B`FbNALED_łĂ邱ƂmFĂB - -iȉ̍ڂ̓IvVłBj - -5. FATALG[G~[V - 4.FATALG[蓮ŋN܂B̑sAuTWL̏eXgvs邱ƂmFĂB - - -- TODO - -ENOAƂ̃fobOɂނĉp\ΉiHj - -- ύX - -- 080801 - NANDAvɑΉB - oi[ljB - Q[R[hljB - -- 080731 - FINALROMŃrhB - eXgp̃vgfobOoĂ̂CB - R}hO{ꉻB - TwlSDK 5.0 RC1ŃrhB - -- 080730 - ʂɊȈՃwv\B - -- 080725 - ŏ̃[X - diff --git a/build/tests/WirelessChecker/resources/ds_ipl10.bmp b/build/tests/WirelessChecker/resources/ds_ipl10.bmp deleted file mode 100644 index 6fc8eedc4107a86244e2b3a56e2555d3588b880f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 922102 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