diff --git a/TODO.txt b/TODO.txt
new file mode 100644
index 0000000..9a68e49
--- /dev/null
+++ b/TODO.txt
@@ -0,0 +1,4 @@
+Paul's list of needed code updates and cleanups:
+
+- Create generic host/scripts/app/dict.lua function that new dictionaries
+ can use until the point where they need custom transfer functions
diff --git a/WindowsDriverPackage/7ZDP_LZMA.sfx b/WindowsDriverPackage/7ZDP_LZMA.sfx
new file mode 100644
index 0000000..51982ec
Binary files /dev/null and b/WindowsDriverPackage/7ZDP_LZMA.sfx differ
diff --git a/WindowsDriverPackage/7zDP_LZMA.cfg b/WindowsDriverPackage/7zDP_LZMA.cfg
new file mode 100644
index 0000000..3ca78f9
--- /dev/null
+++ b/WindowsDriverPackage/7zDP_LZMA.cfg
@@ -0,0 +1,6 @@
+;!@Install@!UTF-8!
+RunProgram="dpscat.exe"
+RunProgram="x86:dpinst32.exe"
+RunProgram="x64:dpinst64.exe"
+GUIMode="2"
+;!@InstallEnd@!
\ No newline at end of file
diff --git a/WindowsDriverPackage/INL_Retro-Prog.inf b/WindowsDriverPackage/INL_Retro-Prog.inf
new file mode 100644
index 0000000..67af5d3
Binary files /dev/null and b/WindowsDriverPackage/INL_Retro-Prog.inf differ
diff --git a/WindowsDriverPackage/InstallDriver.exe b/WindowsDriverPackage/InstallDriver.exe
new file mode 100644
index 0000000..024dea1
Binary files /dev/null and b/WindowsDriverPackage/InstallDriver.exe differ
diff --git a/WindowsDriverPackage/Instructions.txt b/WindowsDriverPackage/Instructions.txt
new file mode 100644
index 0000000..b01549c
--- /dev/null
+++ b/WindowsDriverPackage/Instructions.txt
@@ -0,0 +1,64 @@
+/* Auto-generated By libusbK InfWizard
+*
+* DEVICE DRIVER CLIENT INSTALLER By Travis Lee Robinson (libusbdotnet@gmail.com)
+*
+* Summary:
+* - libusbK client installers combine proven LZMA sfx technology with a professional driver installation tool
+* creating a tightly packed and feature rich solution for end-user driver installations.
+*
+* FACTS:
+* - Packaged in a modified LZMA sfx module. See: http://7zsfx.info/en. This module is highly configurable
+* with installer-like options.
+* - Uses dpinst.exe, by Microsoft. Dpinst.exe is a robust multi-language driver installation utility. This
+* utility has a set of configurable wizard screens to ease end-user installations. Features also include:
+* - Install multiple .inf files at once, each can contain multiple devices with multiple hardware
+* identifiers.
+* - Uninstall via add/remove programs. (removes from driver-store)
+* - Silent/wizardless operation modes.
+* - Simplistic xml-based configuration. (dpinst.xml)
+* - Customizable EULA.
+* - For a complete list of dpinst.exe features see:
+* http://msdn.microsoft.com/en-us/library/windows/hardware/ff553383%28v=vs.85%29.aspx
+*
+* ORDER OF OPERATIONS (InstallDriver.exe - default config):
+* -# End-user launches InstallDriver.exe. If not already running with elevated permssions, the user will
+* immediately be prompted with a UAC warning:
+* http://msdn.microsoft.com/en-us/library/windows/desktop/aa511445.aspx If you do not sign
+* InstallDriver.exe with a code signing certificate, the UAC prompt will display "Unknown Name" and
+* "Unknown Publisher" in the message box. Purchasing a cheap code signing certificate will allow you to
+* set these values.
+* -# SFX module:Extracts driver setup files to a temporary folder.
+* -# SFX module:Runs dpscat.exe. This utility creates self signed catalog files from .inf files and the
+* binaries they reference. These signed catalog files prevent windows from prompting the user with an
+* unverified publisher warning: http://www.codeproject.com/KB/system/wiisensor/wiisensor10.png
+* -# SFX module:Runs dpinst.exe. Device drivers are pre-installed. If the device has not been connected it
+* will be available for use upon first connection. All devices known to windows matching your hardware IDs
+* will be flagged for re-install. If the device is currently connected, drivers are immediately installed,
+* the device is retarted and available immediately.
+* -# SFX module:On wizard exit, removes the temporary extraction folder.
+*
+* ORDER OF OPERATIONS (re-pack-files.cmd - default config):
+* -# The following files are compressed into a normal LZMA .7z file.
+* - All ".inf" files in the current folder
+* - All files and folders starting with "dpinst" in the current folder.
+* - All files matching "dpscat.*" in the current folder.
+* - All files and folders in the x86, amd64, and data sub-folders. (recursive)
+* -# The SFX module, SFX config file and .7z file are merged together using a binary copy.
+* eg: COPY /B sfx_module+sfx_config+files.7z installer.exe
+*
+* \note Run the "re-pack-files.cmd" batch file after modifying any part of the package.
+*
+* CUSTOMIZATION:
+* - Customizing the SFX Module:
+* - SFX customization is done in the "7zDP_LZMA.cfg" file.
+* - See http://7zsfx.info/en/
+* - Customizing the driver installation:
+* - dpinst.exe customization is done in the "dpinst.xml" file.
+* - See http://msdn.microsoft.com/en-us/library/windows/hardware/ff553383%28v=vs.85%29.aspx
+* - Other customization:
+* - .inf file can be hand modified as needed.
+* - Files can be added or removed as needed.
+* - Icon and resource text can be changed with a standard resource editor such as ResourcHacker:
+* http://www.angusj.com/resourcehacker/
+*
+*/
diff --git a/WindowsDriverPackage/_DriverFiles.7z b/WindowsDriverPackage/_DriverFiles.7z
new file mode 100644
index 0000000..b0814b5
Binary files /dev/null and b/WindowsDriverPackage/_DriverFiles.7z differ
diff --git a/WindowsDriverPackage/amd64/libusb0.dll b/WindowsDriverPackage/amd64/libusb0.dll
new file mode 100644
index 0000000..f916b08
Binary files /dev/null and b/WindowsDriverPackage/amd64/libusb0.dll differ
diff --git a/WindowsDriverPackage/amd64/libusb0.sys b/WindowsDriverPackage/amd64/libusb0.sys
new file mode 100644
index 0000000..0718dfb
Binary files /dev/null and b/WindowsDriverPackage/amd64/libusb0.sys differ
diff --git a/WindowsDriverPackage/amd64/libusbK.dll b/WindowsDriverPackage/amd64/libusbK.dll
new file mode 100644
index 0000000..62f058a
Binary files /dev/null and b/WindowsDriverPackage/amd64/libusbK.dll differ
diff --git a/WindowsDriverPackage/dpinst.xml b/WindowsDriverPackage/dpinst.xml
new file mode 100644
index 0000000..431935d
--- /dev/null
+++ b/WindowsDriverPackage/dpinst.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ 1
+ 1
+
diff --git a/WindowsDriverPackage/dpinst32.exe b/WindowsDriverPackage/dpinst32.exe
new file mode 100644
index 0000000..410a135
Binary files /dev/null and b/WindowsDriverPackage/dpinst32.exe differ
diff --git a/WindowsDriverPackage/dpinst64.exe b/WindowsDriverPackage/dpinst64.exe
new file mode 100644
index 0000000..0096441
Binary files /dev/null and b/WindowsDriverPackage/dpinst64.exe differ
diff --git a/WindowsDriverPackage/dpscat.exe b/WindowsDriverPackage/dpscat.exe
new file mode 100644
index 0000000..ac5d701
Binary files /dev/null and b/WindowsDriverPackage/dpscat.exe differ
diff --git a/WindowsDriverPackage/re-pack-files.cmd b/WindowsDriverPackage/re-pack-files.cmd
new file mode 100644
index 0000000..11c91d4
--- /dev/null
+++ b/WindowsDriverPackage/re-pack-files.cmd
@@ -0,0 +1,67 @@
+@ECHO OFF
+SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
+
+SET FILES_TO_PACK=*.inf dpinst* dpscat.* .\data* .\x86* .\amd64*
+SET SFX_MODULE=7zDP_LZMA.sfx
+SET SFX_MODULE_CFG=7zDP_LZMA.cfg
+SET INSTALL_DRIVER_EXE=InstallDriver.exe
+SET DRIVER_FILES_7Z=_DriverFiles.7z
+SET 7Z_SWITCHES=-air0 -mx
+
+SET CMD_EXIT_CODE=0
+
+IF EXIST "!7ZA_EXE!" (SET 7Z_RUN="!7ZA_EXE!") ELSE CALL :Find7Zip 7z.exe 7za.exe 7zan.exe
+IF !7Z_RUN! EQU "" (
+ ECHO 7Zip is required to re-pack this installer.
+ ECHO 1] Download and install 7Zip. http://www.7-zip.org/
+ ECHO 2] Add the bin folder to the PATH environment variable.
+ ECHO "Control Panel->System->Advanced->Environment Variables..."
+ SET CMD_EXIT_CODE=1
+ GOTO Error
+)
+
+IF EXIST "!INSTALL_DRIVER_EXE!" DEL /Q "!INSTALL_DRIVER_EXE!"
+IF NOT "!ERRORLEVEL!" EQU "0" (
+ ECHO Access denied or file in-use "!INSTALL_DRIVER_EXE!"
+ SET CMD_EXIT_CODE=2
+ GOTO Error
+)
+
+IF EXIST "!DRIVER_FILES_7Z!" DEL /Q "!DRIVER_FILES_7Z!"
+IF NOT "!ERRORLEVEL!" EQU "0" (
+ ECHO Access denied or file in-use "!DRIVER_FILES_7Z!"
+ SET CMD_EXIT_CODE=3
+ GOTO Error
+)
+
+!7Z_RUN! a "!DRIVER_FILES_7Z!" !FILES_TO_PACK! !7Z_SWITCHES!
+IF NOT "!ERRORLEVEL!" EQU "0" (
+ ECHO Failed re-packing. Check your 7Zip installation at
+ ECHO !7Z_RUN!
+ SET CMD_EXIT_CODE=4
+ GOTO Error
+)
+
+COPY /B "!SFX_MODULE!"+"!SFX_MODULE_CFG!"+"!DRIVER_FILES_7Z!" "!INSTALL_DRIVER_EXE!"
+
+ECHO.
+ECHO Done.
+ECHO "!INSTALL_DRIVER_EXE!" re-packed!
+GOTO :EOF
+
+:Find7Zip
+ SET 7Z_RUN="%~$PATH:1"
+ IF NOT !7Z_RUN! EQU "" (
+ ECHO 7Zip found at: !7Z_RUN!
+ SET 7Z_RUN="%~1"
+ GOTO :EOF
+ )
+ SHIFT /1
+ IF "%~1" EQU "" GOTO :EOF
+ GOTO Find7Zip
+GOTO :EOF
+
+:Error
+ IF NOT DEFINED NO_REPACK_ERROR_WAIT PAUSE
+ EXIT %CMD_EXIT_CODE%
+GOTO :EOF
\ No newline at end of file
diff --git a/WindowsDriverPackage/x86/libusb0.sys b/WindowsDriverPackage/x86/libusb0.sys
new file mode 100644
index 0000000..5322e5b
Binary files /dev/null and b/WindowsDriverPackage/x86/libusb0.sys differ
diff --git a/WindowsDriverPackage/x86/libusb0_x86.dll b/WindowsDriverPackage/x86/libusb0_x86.dll
new file mode 100644
index 0000000..6e475b9
Binary files /dev/null and b/WindowsDriverPackage/x86/libusb0_x86.dll differ
diff --git a/WindowsDriverPackage/x86/libusbK_x86.dll b/WindowsDriverPackage/x86/libusbK_x86.dll
new file mode 100644
index 0000000..a52cb98
Binary files /dev/null and b/WindowsDriverPackage/x86/libusbK_x86.dll differ
diff --git a/firmware/build_avr/avr_kazzo.elf b/firmware/build_avr/avr_kazzo.elf
index fe29be5..403838c 100644
Binary files a/firmware/build_avr/avr_kazzo.elf and b/firmware/build_avr/avr_kazzo.elf differ
diff --git a/firmware/build_avr/avr_kazzo.hex b/firmware/build_avr/avr_kazzo.hex
index 3efb968..39639d5 100644
--- a/firmware/build_avr/avr_kazzo.hex
+++ b/firmware/build_avr/avr_kazzo.hex
@@ -1,4 +1,4 @@
-:100000000C9476000C9448160C9493000C94930076
+:100000000C9476000C9463160C9493000C9493005B
:100010000C9493000C9493000C9493000C94930014
:100020000C9493000C9493000C9493000C94930004
:100030000C9493000C9493000C9493000C949300F4
@@ -13,744 +13,748 @@
:1000C00049006E00660069006E00690074006500FA
:1000D0004E00650073004C006900760065007300F7
:1000E0002E0063006F006D000403090411241FBE7D
-:1000F000CFEFD4E0DEBFCDBF11E0A0E0B1E0EEE194
+:1000F000CFEFD4E0DEBFCDBF11E0A0E0B1E0E4E59A
:10010000FFE202C005900D92A630B107D9F723E0B7
-:10011000A6E0B1E001C01D92AD3DB207E1F70E943B
-:100120005C170C948D170C9400000F931F93CF93C2
-:10013000DF93EC01FB01D9010091490110914A01C3
-:10014000888187FF09C08E818C93442399F00481B4
-:10015000158180E883831DC08FEF8C938E818093FF
-:100160003401442309F44BC0709366036093650324
-:1001700080E9F0CFE0912101F09122018381883D57
-:10018000A1F50481158180E88383E0912101F0913C
-:1001900022011782E0912101F091220183818039AF
-:1001A000F1F48A81813711F08034C9F4E09165035C
-:1001B000F09166030480F581E02D8C818083E091CD
-:1001C0006503F09166030480F581E02D8D818183C4
-:1001D000E0916503F091660387818E5F8783C80194
-:1001E000DF91CF911F910F910895803D11F41C92E2
-:1001F000CCCF8FEF8C9380E10E946C10C6CFE09142
-:100200002101F09122018381811106C0F0936603E0
-:10021000E093650380E9B8CF883969F7E8CFE5E571
-:10022000F1E08FEF819391E0E536F907D9F78093FC
-:100230004801809327018093470180932601809392
-:10024000380180931401809337018093130181E07A
-:100250000C946C10CF93DF93FC0150E0CA01820F25
-:10026000911D4197E4F52223E1F183818F3FD9F578
-:1002700082818F3FD1F5DA01AB5ABE4FED0180E0AC
-:1002800099919F3FA1F58F5F2813FACF6283138264
-:10029000982F9295990F907E915096831782108691
-:1002A0001182108211861286138614861586168690
-:1002B000178695E0440F551F9A95E1F720910001AC
-:1002C00030910101420F531F5583448390E06D9399
-:1002D0009F5F8913FCCF80E0DF91CF9108958EEB73
-:1002E000FBCF82ECF9CF8FEBF7CF80ECF5CF81EC31
-:1002F000F3CFCF93DF93DC01EB019A0112969C912F
-:10030000129780ED890F803318F513968C9113970F
-:10031000813041F0E8F08230A9F08330B1F085EB14
-:10032000888346C0E4E2F1E0913509F476C048F5EF
-:10033000913309F449C078F49923B9F19033E1F18C
-:1003400084EBEECFE5E3F1E0EFCFE1E1F1E0ECCFDC
-:10035000E5E4F1E0E9CF933309F446C0E8F19035E4
-:1003600079F7188286E0898386818A8383818B83EB
-:1003700087818C8380858D8382818E8387858F831F
-:1003800017C0903808F05FC0903708F055C090361D
-:1003900079F19136C9F1923599F6188282E0898314
-:1003A00080818A8381818B8303C00E940F01188220
-:1003B000CE01DF91CF91089514968C9114971596E4
-:1003C0009C9191878287F3CF14968C911497159600
-:1003D0009C9193878487EBCF14968C9114971596F4
-:1003E0009C9195878687E3CF14968C918787DFCF82
-:1003F000188281E089831496ED91FC911597EB5A50
-:10040000FE4F80818A83D4CF188281E08983E09176
-:100410002101F09122018381F5CF188286E0898342
-:1004200081858A8382858B8383858C8384858D8374
-:1004300085858E838685A3CF40E0BF01CD01DF9106
-:10044000CF910C949500892F8770813049F0F8F096
-:10045000823001F1833009F062CFE1E1F1E002C0C6
-:10046000E4E2F1E0903808F4A3CF9838B0F0905966
-:10047000983008F09DCF188213968C91139780873F
-:1004800014968D919C9115979183808391CFE5E48B
-:10049000F1E0E8CFE5E3F1E0E5CF14964C91149755
-:1004A00015966C91159713962C91CF010E942A01F5
-:1004B00037CF90914801809127018F3F79F481E0F7
-:1004C0009F3F09F480E0909138019F3F09F083E05D
-:1004D000909114019F3F09F084E0089582E0F3CFEA
-:1004E000623059F421E08534920749F121E08432E9
-:1004F000920789F485E491E00EC0633069F421E04D
-:1005000085349207E1F021E084329207D9F021E0AE
-:100510008533920779F308956430E9F721E0853453
-:10052000920769F021E08432920761F021E085337F
-:10053000920759F021E08131920769F7DBCF84E21D
-:1005400091E0089585E391E0089581E191E00895B7
-:100550001F93CF93DF930E947210823D09F071C008
-:100560000E9459028093060185E491E09093220154
-:10057000809321010E947210823DA1F4D091060166
-:100580008091210190912201C1E0CD1708F45FC054
-:10059000909322018093210120E8FC01238380EDC8
-:1005A0000E946C100E947210823F41F480EF0E9402
-:1005B0006C10E0912101F091220113820E947210CF
-:1005C000C82F803DE1F48091210190912201FC012E
-:1005D00023812038A1F4609106010E94700290935B
-:1005E000220180932101FC011782C3830E943F03F3
-:1005F000E0912101F0912201882371F183830E940F
-:100600007210182F803FC9F4C0912101D0912201AE
-:100610008B81883991F460910601CE010E947002AD
-:100620009093220180932101FC0113821B83CE0150
-:100630000E94300A8823C9F08B83DF91CF911F91EC
-:1006400008950E947210823F09F094CF89CF6D2FD8
-:100650000E947002CF5F99CF208580819181820FA7
-:10066000911D9183808388EDC9CF84EF8B8328858A
-:1006700088819981820F911D99838883DECFEF92C3
-:10068000FF920F931F93CF93DF93EC01E880F980E3
-:100690001E2D8985823109F4F8C068F4803191F00B
-:1006A000813109F490C083ECDF91CF911F910F91BC
-:1006B000FF90EF900895833109F4EAC0843199F7EF
-:1006C00080E0F2CF8D85813091F441E060E180E0FF
-:1006D00090E80E94D60FB70186E0769567958A95D7
-:1006E000E1F76F7040E080E090EE0E94D60F8D85BC
-:1006F0008330A9F41E2D1F7B6881798106E07695F1
-:1007000067950A95E1F7CB0199278D589B410E9487
-:100710008C0E612F60680FEF2E814A8141C08E31AF
-:1007200061F41E2D1F7B68817981B6E0769567950F
-:10073000BA95E1F780E090ECEACF823211F08B308D
-:1007400069F468817981660F672F661F770B719551
-:10075000CB0199278C5691090E948C0E8D858C3186
-:10076000B1F408811981000F012F001F110B1195A1
-:1007700061E880E090E50E948C0E602F80E090E8B8
-:100780000E948C0E60E080E090E50E948C0E8D85CA
-:100790001E2D8F3151F010680FEF2E814A81612F8D
-:1007A0008C819D810E942D0F6EC01F78106868811A
-:1007B0007981E4E076956795EA95E1F780E090E548
-:1007C0000E948C0EE9CF8D85811109C00FEF2E811B
-:1007D0004A816E2D8C819D810E94650F8F838D854E
-:1007E0008B30C1F46881798155E0769567955A958B
-:1007F000E1F76295607F8FEF9FEF0E948C0E1E2DB8
-:100800001F710FEF2E814A81612F8C819D810E9483
-:10081000650F8F838D858E3FA9F46881798145E0CE
-:10082000769567954A95E1F78FEF9FE30E94B60EA4
-:100830001F710FEF2E814A81612F8C819D810E9453
-:100840009D0F8F838D85813009F03ACFE880F98044
-:1008500034E0F694E7943A95E1F741E060E180E016
-:1008600090E80E94D60F6E2D6F7140E080E090EA14
-:100870000E94D60F612F6F700FEF2E814A818C81FD
-:100880009D810E94650F8F831BCF6E2D606643CFC5
-:100890008FEF84B9C701880F892F881F990B919515
-:1008A00085B95F9A5F9814B86E2D60680FEF2E813E
-:1008B0004A818C819D810E94A513E5CF3F924F9282
-:1008C0005F926F927F928F929F92AF92BF92CF92E0
-:1008D000DF92EF92FF920F931F93CF93DF934A0122
-:1008E0003901D8011796CC91D0E0462E512C542CCA
-:1008F0004424D80116968C91169790E08C179D078A
-:10090000A8F41796CC9380E0DF91CF911F910F91BF
-:10091000FF90EF90DF90CF90BF90AF909F908F901F
-:100920007F906F905F904F903F9008956AEAC40166
-:10093000F701099565E5C301F701099560EAC4016E
-:10094000F7010995CE0199275C01A428B528D801A3
-:100950001496ED91FC911597E80FF91F6081C50180
-:10096000F70109950E942915C501F6010995382E50
-:10097000C501F60109953812F5CF2196BACF2F920D
-:100980003F924F925F926F927F928F929F92AF921F
-:10099000BF92CF92DF92EF92FF920F931F93CF936C
-:1009A000DF93CDB7DEB727970FB6F894DEBF0FBE43
-:1009B000CDBF582E4A013C832B831F830E83D80161
-:1009C00017964C90042D10E070E0F62FEE27FA8376
-:1009D000E983252C312CFDE82F1AFBE13F0AAE817B
-:1009E000BF8116968C91169790E080179107E0F4DE
-:1009F00017964C9280E027960FB6F894DEBF0FBE94
-:100A0000CDBFDF91CF911F910F91FF90EF90DF90BD
-:100A1000CF90BF90AF909F908F907F906F905F909E
-:100A20004F903F902F90089560E083E794EE0E94EE
-:100A30008C0E6AEAC401F701099565E58B819C81FA
-:100A4000F701099560EAC401F7010995652DC10117
-:100A50000E948C0E642C712CA980BA80A628B7281D
-:100A6000AE81BF811496ED91FC911597E60DF71DAF
-:100A70006081C501F70109950E942915C501F6019C
-:100A80000995282FC5012D83F60109952D8128137D
-:100A9000F3CFAE81BF8114968D919C911597680E0E
-:100AA000791EF3018081281307C043940F5F1F4F05
-:100AB0005198599A599893CF519A599A90CF2F9209
-:100AC0003F924F925F926F927F928F929F92AF92DE
-:100AD000BF92CF92DF92EF92FF920F931F93CF932B
-:100AE000DF9300D000D01F92CDB7DEB7382E4A0179
-:100AF00029011D830C83D80117962C90022D10E03C
-:100B000070E0F62FEE27FA83E983AC81BD8116965B
-:100B10008C91169790E080179107D8F417962C9235
-:100B200080E00F900F900F900F900F90DF91CF917A
-:100B30001F910F91FF90EF90DF90CF90BF90AF90FB
-:100B40009F908F907F906F905F904F903F902F90ED
-:100B5000089561E080E090EC0E948C0E6AEAC40186
-:100B6000F701099560E080E090EC0E948C0E65E54D
-:100B7000C201F701099561E080E090EC0E948C0EC3
-:100B800060EAC401F7010995632D80E090EC0E94B2
-:100B90008C0E622C712CA980BA80A628B728AC8153
-:100BA000BD811496ED91FC911597E60DF71D6081BE
-:100BB000C501F70109950E942915C501F60109959E
-:100BC000282FC5012B83F60109952B812813F3CF1C
-:100BD000AC81BD8114968D919C911597680E791EFC
-:100BE000F3018081281307C023940F5F1F4F519892
-:100BF000599A59988ACF519A599A87CF2F923F92F2
-:100C00004F925F926F927F928F929F92AF92BF921C
-:100C1000CF92DF92EF92FF920F931F93CF93DF93C8
-:100C200000D000D01F92CDB7DEB7582E4A0119016F
-:100C30001D830C83D80117964C90042D10E070E0B2
-:100C4000F62FEE27FA83E983AC81BD8116968C914D
-:100C5000169790E080179107D8F417964C9280E091
-:100C60000F900F900F900F900F90DF91CF911F91E9
-:100C70000F91FF90EF90DF90CF90BF90AF909F903B
-:100C80008F907F906F905F904F903F902F9008953E
-:100C900040E060E180E090E80E94D60F6AEAC4017B
-:100CA000F701099565E5C101F701099560EAC401FD
-:100CB000F7010995A42CB12C69807A806A287B28D9
-:100CC000AC81BD811496ED91FC911597EA0DFB1D49
-:100CD0006081C301F701099541E060E180E090E89F
-:100CE0000E94D60F40E0652D80E090EE0E94D60F66
-:100CF0000E942915C301F6010995282FC3012B83F2
-:100D0000F60109952B812813F3CFAC81BD81149690
-:100D10008D919C911597A80EB91EF501808128131D
-:100D200007C043940F5F1F4F5198599A59988CCF21
-:100D300041E060E180E090E80E94D60F40E0652D40
-:100D400080E090EE0E94D60F519A599A7DCF3F9243
-:100D50004F925F926F927F928F929F92AF92BF92CB
-:100D6000CF92DF92EF92FF920F931F93CF93DF9377
-:100D7000482E662E7A01E901DA0117965C90A52CBF
-:100D8000B12C6AEA8AEA9AE8F901099565E585E5F0
-:100D900095E8FE01099560E28AEA9AE8FE01099564
-:100DA000712C762C6624D70116968C91169790E0BC
-:100DB0008A159B0520F517965C9260E980E090E823
-:100DC000FE01099560E080E090E8FE01099560EF82
-:100DD00080E090E8FE01099580E0DF91CF911F91BE
-:100DE0000F91FF90EF90DF90CF90BF90AF909F90CA
-:100DF0008F907F906F905F904F903F90089564E543
-:100E000080E090E50E948C0E852C912C6401C62810
-:100E1000D72860EAC601FE010995D7011496ED9125
-:100E2000FC911597E80DF91D6081C601FE01099539
-:100E30000E942915C601F8010995382EC601F8014E
-:100E400009953812F5CFD70114968D919C9115977D
-:100E5000880E991EF4018081381208C05394FFEF68
-:100E6000AF1ABF0A5198599A59989DCF61E880E00E
-:100E700090E50E948C0E642D80E090E80E948C0E1C
-:100E800064E580E090E50E948C0E519A599A8BCFD0
-:100E90004F925F926F927F928F929F92AF92BF928A
-:100EA000CF92DF92EF92FF920F931F93CF93DF9336
-:100EB000662E7A01E901DA0117965C90A52CB12C17
-:100EC0006AEA8AEA9AE8F901099565E585E595E80F
-:100ED000FE01099560E28AEA9AE8FE010995712C03
-:100EE000762C6624D70116968C91169790E08A1579
-:100EF0009B0518F517965C9260E980E090E8FE018A
-:100F0000099560E080E090E8FE01099560EF80E0DF
-:100F100090E8FE01099580E0DF91CF911F910F913C
-:100F2000FF90EF90DF90CF90BF90AF909F908F9009
-:100F30007F906F905F904F900895852C912C640165
-:100F4000C628D72860EAC601FE010995D701149684
-:100F5000ED91FC911597E80DF91D6081C601FE0128
-:100F600009950E942915C601F8010995482EC60168
-:100F7000F80109954812F5CFD70114968D919C91EF
-:100F80001597880E991EF4018081481208C0539469
-:100F9000FFEFAF1ABF0A5198599A5998A3CF519AA7
-:100FA000599AA0CF4F925F926F927F928F929F92A9
-:100FB000AF92BF92CF92DF92EF92FF920F931F9367
-:100FC000CF93DF93EA0169015F80A52CB12CE62E57
-:100FD000F12CFE2CEE248E8190E08A159B0598F46E
-:100FE0005F8280E0DF91CF911F910F91FF90EF9092
-:100FF000DF90CF90BF90AF909F908F907F906F9039
-:101000005F904F9008956AEA85E595E1F6010995AC
-:1010100065E58AEA9AE0F601099560EA85E595E1D9
-:10102000F6010995652C712C43018E289F28EC81CF
-:10103000FD81E60DF71D6081C401F60109950E944E
-:101040002915C401F8010995482EC401F801099534
-:101050004812F5CF8C819D81680E791EF301808145
-:10106000481208C05394FFEFAF1ABF0A5198599A1B
-:101070005998B1CF519A599AAECF3F924F925F9201
-:101080006F927F928F929F92AF92BF92CF92DF9298
-:10109000EF92FF920F931F93CF93DF93EA016901C1
-:1010A0005F80A52CB12C482E429480EF4822E62E7A
-:1010B000F12CFE2CEE248E8190E08A159B05A0F485
-:1010C0005F8280E0DF91CF911F910F91FF90EF90B1
-:1010D000DF90CF90BF90AF909F908F907F906F9058
-:1010E0005F904F903F90089560E280E090E80E940A
-:1010F0008C0E6AEA85E595E1F601099560E180E0EC
-:1011000090E80E948C0E65E58AEA9AE0F60109955E
-:1011100060E280E090E80E948C0E60EA85E595E14F
-:10112000F6010995642D80E090E80E948C0E652CF4
-:10113000712C43018E289F28EC81FD81E60DF71D5F
-:101140006081C401F60109950E942915C401F801C6
-:101150000995382EC401F80109953812F5CF8C8114
-:101160009D81680E791EF3018081381208C0539466
-:10117000FFEFAF1ABF0A5198599A59989CCF519ACC
-:10118000599A99CF4F925F926F927F928F929F92CE
-:10119000AF92BF92CF92DF92EF92FF920F931F9385
-:1011A000CF93DF93662E7A01E901DA0117965C90FE
-:1011B000A52CB12C6AEA8AEA9AE0F901099565E55D
-:1011C00085E595E0FE01099560E28AEA9AE0FE0174
-:1011D0000995712C762C6624D70116968C9116975A
-:1011E00090E08A159B0518F517965C9260E980E0FF
-:1011F00090E0FE01099560E080E090E0FE01099535
-:1012000060EF80E090E0FE01099580E0DF91CF91F2
-:101210001F910F91FF90EF90DF90CF90BF90AF9014
-:101220009F908F907F906F905F904F900895852C46
-:10123000912C6401C628D72860EAC601FE010995F1
-:10124000D7011496ED91FC911597E80DF91D608179
-:10125000C601FE0109950E942915C601F8010995EC
-:10126000482EC601F80109954812F5CFD70114960A
-:101270008D919C911597880E991EF40180814812DA
-:1012800008C05394FFEFAF1ABF0A5198599A599862
-:10129000A3CF519A599AA0CF4F925F926F927F92AB
-:1012A0008F929F92AF92BF92CF92DF92EF92FF9276
-:1012B0000F931F93CF93DF93662E7A01E901DA0132
-:1012C00017965C90852C912CA895589800000000EA
-:1012D0000000000000000000000000006AEA8AEA46
-:1012E0009AE0F901099565E585E595E0FE01099526
-:1012F00060E28AEA9AE0FE010995712C762C662458
-:10130000D70116968C91169790E08815990520F5CF
-:1013100017965C9260E980E090E0FE01099560E03C
-:1013200080E090E0FE01099560EF80E090E0FE0132
-:101330000995589A80E0DF91CF911F910F91FF900E
-:10134000EF90DF90CF90BF90AF909F908F907F9065
-:101350006F905F904F90089580EA0E949813C52C7B
-:10136000D12C5601A628B728D7011496ED91FC91EF
-:101370001597EC0DFD1D6081C501FE010995589A78
-:10138000000000000000000000000000000000005D
-:10139000A8950E942915C501F801099558980000E3
-:1013A0000000000000000000000000000000D70165
-:1013B0001496ED91FC911597EC0DFD1D4080841560
-:1013C000C1F0589A0000000000000000000000007A
-:1013D00000000000482EC501F801099558984812F0
-:1013E0001BC0000000000000000000000000000022
-:1013F0000000D70114968D919C911597C80ED91EA7
-:10140000F6018081481229C05394FFEF8F1A9F0A7A
-:101410005198599A599874CF0000000000000000BC
+:10011000A6E0B1E001C01D92A13EB207E1F70E9446
+:1001200077170C94A8170C94000080E008950895A8
+:100130000F931F93CF93DF93EC01FB01D901009143
+:100140004D0110914E01888187FF09C08E818C93EB
+:10015000442399F00481158180E883831DC08FEFCB
+:100160008C938E8180933801442309F44BC07093A3
+:100170006A036093690380E9F0CFE0912501F09173
+:1001800026018381883DA1F50481158180E8838360
+:10019000E0912501F09126011782E0912501F0916F
+:1001A000260183818039F1F48A81813711F080340E
+:1001B000C9F4E0916903F0916A030480F581E02DB0
+:1001C0008C818083E0916903F0916A030480F5815A
+:1001D000E02D8D818183E0916903F0916A0387812D
+:1001E0008E5F8783C801DF91CF911F910F91089592
+:1001F000803D11F41C92CCCF8FEF8C9380E10E9454
+:100200007510C6CFE0912501F091260183818111FF
+:1002100006C0F0936A03E093690380E9B8CF883998
+:1002200069F7E8CFE9E5F1E08FEF819391E0E936F6
+:10023000F907D9F780934C0180932B0180934B01F0
+:1002400080932A0180933C018093180180933B01A5
+:100250008093170181E00C947510CF93DF93FC011C
+:1002600050E0CA01820F911D4197E4F52223E1F18C
+:1002700083818F3FD9F582818F3FD1F5DA01A75A6B
+:10028000BE4FED0180E099919F3FA1F58F5F28134C
+:10029000FACF62831382982F9295990F907E915096
+:1002A0009683178210861182108211861286138619
+:1002B000148615861686178695E0440F551F9A9565
+:1002C000E1F72091000130910101420F531F558346
+:1002D000448390E06D939F5F8913FCCF80E0DF91B2
+:1002E000CF9108958EEBFBCF82ECF9CF8FEBF7CF58
+:1002F00080ECF5CF81ECF3CFCF93DF93DC01EB0102
+:100300009A0112969C91129780ED890F803318F50F
+:1003100013968C911397813041F0E8F08230A9F068
+:100320008330B1F085EB888346C0E8E2F1E0913597
+:1003300009F476C048F5913309F449C078F499235B
+:10034000B9F19033E1F184EBEECFE9E3F1E0EFCFE7
+:10035000E5E1F1E0ECCFE9E4F1E0E9CF933309F432
+:1003600046C0E8F1903579F7188286E08983868166
+:100370008A8383818B8387818C8380858D8382812F
+:100380008E8387858F8317C0903808F05FC09037C1
+:1003900008F055C0903679F19136C9F1923599F649
+:1003A000188282E0898380818A8381818B8303C064
+:1003B0000E9412011882CE01DF91CF910895149608
+:1003C0008C91149715969C9191878287F3CF149600
+:1003D0008C91149715969C9193878487EBCF1496F4
+:1003E0008C91149715969C9195878687E3CF1496E8
+:1003F0008C918787DFCF188281E089831496ED91F5
+:10040000FC911597E75AFE4F80818A83D4CF1882DA
+:1004100081E08983E0912501F09126018381F5CF68
+:10042000188286E0898381858A8382858B83838590
+:100430008C8384858D8385858E838685A3CF40E0DC
+:10044000BF01CD01DF91CF910C949800892F877067
+:10045000813049F0F8F0823001F1833009F062CF49
+:10046000E5E1F1E002C0E8E2F1E0903808F4A3CF62
+:100470009838B0F09059983008F09DCF18821396B4
+:100480008C911397808714968D919C9115979183E9
+:10049000808391CFE9E4F1E0E8CFE9E3F1E0E5CF53
+:1004A00014964C91149715966C91159713962C9160
+:1004B000CF010E942D0137CF90914C0180912B01EB
+:1004C0008F3F79F481E09F3F09F480E090913C01F7
+:1004D0009F3F09F083E0909118019F3F09F084E06D
+:1004E000089582E0F3CF623059F421E08934920715
+:1004F00049F121E08832920789F489E491E00EC045
+:10050000633069F421E089349207E1F021E0883218
+:100510009207D9F021E08933920779F30895643086
+:10052000E9F721E08934920769F021E088329207E7
+:1005300061F021E08933920759F021E0853192077B
+:1005400069F7DBCF88E291E0089589E391E00895AF
+:1005500085E191E008951F93CF93DF930E947B1074
+:10056000823D09F071C00E945C028093060189E41B
+:1005700091E090932601809325010E947B10823D9B
+:10058000A1F4D09106018091250190912601C1E04E
+:10059000CD1708F45FC0909326018093250120E8D1
+:1005A000FC01238380ED0E9475100E947B10823F26
+:1005B00041F480EF0E947510E0912501F091260131
+:1005C00013820E947B10C82F803DE1F480912501A9
+:1005D00090912601FC0123812038A1F4609106014D
+:1005E0000E9473029093260180932501FC011782DB
+:1005F000C3830E944203E0912501F09126018823E4
+:1006000071F183830E947B10182F803FC9F4C09141
+:100610002501D09126018B81883991F460910601E2
+:10062000CE010E9473029093260180932501FC0164
+:1006300013821B83CE010E942A0A8823C9F08B8370
+:10064000DF91CF911F9108950E947B10823F09F0A6
+:1006500094CF89CF6D2F0E947302CF5F99CF2085F1
+:1006600080819181820F911D9183808388EDC9CF14
+:1006700084EF8B83288588819981820F911D9983CE
+:100680008883DECFEF92FF920F931F93CF93DF9378
+:10069000EC01E880F9801E2D8985823109F4F8C0CB
+:1006A00068F4803191F0813109F490C083ECDF91DE
+:1006B000CF911F910F91FF90EF900895833109F42E
+:1006C000EAC0843199F780E0F2CF8D85813091F4D2
+:1006D00041E060E180E090E80E94DF0FB701B6E002
+:1006E00076956795BA95E1F76F7040E080E090EEFF
+:1006F0000E94DF0F8D858330A9F41E2D1F7B68813A
+:100700007981A6E076956795AA95E1F7CB019927BF
+:100710008D589B410E94910E612F60680FEF2E81D2
+:100720004A8141C08E3161F41E2D1F7B6881798121
+:10073000F6E076956795FA95E1F780E090ECEACFE0
+:10074000823211F08B3069F468817981660F672FEE
+:10075000661F770B7195CB0199278C5691090E94E2
+:10076000910E8D858C31B1F408811981000F012F14
+:10077000001F110B119561E880E090E50E94910E39
+:10078000602F80E090E80E94910E60E080E090E5AC
+:100790000E94910E8D851E2D8F3151F010680FEF44
+:1007A0002E814A81612F8C819D810E94320F6EC003
+:1007B0001F7810686881798144E0769567954A953D
+:1007C000E1F780E090E50E94910EE9CF8D858111DF
+:1007D00009C00FEF2E814A816E2D8C819D810E9470
+:1007E0006E0F8F838D858B30C1F46881798135E000
+:1007F000769567953A95E1F76295607F8FEF9FEF69
+:100800000E94910E1E2D1F710FEF2E814A81612FC4
+:100810008C819D810E946E0F8F838D858E3FA9F400
+:100820006881798125E0769567952A95E1F78FEFC4
+:100830009FE30E94BB0E1F710FEF2E814A81612F33
+:100840008C819D810E94A60F8F838D85813009F058
+:100850003ACFE880F98094E0F694E7949A95E1F72E
+:1008600041E060E180E090E80E94DF0F6E2D6F7143
+:1008700040E080E090EA0E94DF0F612F6F700FEF81
+:100880002E814A818C819D810E946E0F8F831BCFA8
+:100890006E2D606643CF8D85811117C01E2D1068A7
+:1008A000EE0CEF2CEE1CFF08F1946E2D8FEF84B947
+:1008B00065B95F9A5F9814B80FEF2E814A81612F56
+:1008C0008C819D810E94B113E1CF813079F76F2D2A
+:1008D0006F736064EBCF3F924F925F926F927F9203
+:1008E0008F929F92AF92BF92CF92DF92EF92FF9240
+:1008F0000F931F93CF93DF934A013901D8011796C5
+:10090000CC91D0E0462E512C542C4424D80116967C
+:100910008C91169790E08C179D07A8F41796CC93AE
+:1009200080E0DF91CF911F910F91FF90EF90DF90CA
+:10093000CF90BF90AF909F908F907F906F905F907F
+:100940004F903F9008956AEAC401F701099565E563
+:10095000C301F701099560EAC401F7010995CE01C9
+:1009600099275C01A428B528D8011496ED91FC9133
+:100970001597E80FF91F6081C501F70109950E94DD
+:100980004415C501F6010995382EC501F6010995F2
+:100990003812F5CF2196BACF2F923F924F925F92A5
+:1009A0006F927F928F929F92AF92BF92CF92DF927F
+:1009B000EF92FF920F931F93CF93DF93CDB7DEB7E4
+:1009C00027970FB6F894DEBF0FBECDBF582E4A0151
+:1009D0003C832B831F830E83D80117964C90042DE4
+:1009E00010E070E0F62FEE27FA83E983252C312CF6
+:1009F000FDE82F1AFBE13F0AAE81BF8116968C916C
+:100A0000169790E080179107E0F417964C9280E0DB
+:100A100027960FB6F894DEBF0FBECDBFDF91CF9102
+:100A20001F910F91FF90EF90DF90CF90BF90AF900C
+:100A30009F908F907F906F905F904F903F902F90FE
+:100A4000089560E083E794EE0E94910E6AEAC40183
+:100A5000F701099565E58B819C81F701099560EAAD
+:100A6000C401F7010995652DC1010E94910E642C06
+:100A7000712CA980BA80A628B728AE81BF811496B0
+:100A8000ED91FC911597E60DF71D6081C501F70109
+:100A900009950E944415C501F6010995282FC50145
+:100AA0002D83F60109952D812813F3CFAE81BF81E7
+:100AB00014968D919C911597680E791EF301808193
+:100AC000281307C043940F5F1F4F5198599A5998A4
+:100AD00093CF519A599A90CF2F923F924F925F9213
+:100AE0006F927F928F929F92AF92BF92CF92DF923E
+:100AF000EF92FF920F931F93CF93DF9300D000D01C
+:100B00001F92CDB7DEB7382E4A0129011D830C8311
+:100B1000D80117962C90022D10E070E0F62FEE27EA
+:100B2000FA83E983AC81BD8116968C91169790E08B
+:100B300080179107D8F417962C9280E00F900F90B1
+:100B40000F900F900F90DF91CF911F910F91FF9019
+:100B5000EF90DF90CF90BF90AF909F908F907F905D
+:100B60006F905F904F903F902F90089561E080E0EC
+:100B700090EC0E94910E6AEAC401F701099560E0C9
+:100B800080E090EC0E94910E65E5C201F7010995A5
+:100B900061E080E090EC0E94910E60EAC401F701F0
+:100BA0000995632D80E090EC0E94910E622C712CCF
+:100BB000A980BA80A628B728AC81BD811496ED9192
+:100BC000FC911597E60DF71D6081C501F7010995A8
+:100BD0000E944415C501F6010995282FC5012B83F4
+:100BE000F60109952B812813F3CFAC81BD811496B2
+:100BF0008D919C911597680E791EF30180812813C1
+:100C000007C023940F5F1F4F5198599A59988ACF64
+:100C1000519A599A87CF2F923F924F925F926F923B
+:100C20007F928F929F92AF92BF92CF92DF92EF927C
+:100C3000FF920F931F93CF93DF9300D000D01F92AA
+:100C4000CDB7DEB7582E4A0119011D830C83D80198
+:100C500017964C90042D10E070E0F62FEE27FA83E3
+:100C6000E983AC81BD8116968C91169790E0801730
+:100C70009107D8F417964C9280E00F900F900F9048
+:100C80000F900F90DF91CF911F910F91FF90EF90F8
+:100C9000DF90CF90BF90AF909F908F907F906F909C
+:100CA0005F904F903F902F90089540E060E180E08A
+:100CB00090E80E94DF0F6AEAC401F701099565E533
+:100CC000C101F701099560EAC401F7010995A42C57
+:100CD000B12C69807A806A287B28AC81BD8114960A
+:100CE000ED91FC911597EA0DFB1D6081C301F701A1
+:100CF000099541E060E180E090E80E94DF0F40E06C
+:100D0000652D80E090EE0E94DF0F0E944415C30124
+:100D1000F6010995282FC3012B83F60109952B8134
+:100D20002813F3CFAC81BD8114968D919C911597BA
+:100D3000A80EB91EF5018081281307C043940F5FE8
+:100D40001F4F5198599A59988CCF41E060E180E04B
+:100D500090E80E94DF0F40E0652D80E090EE0E9459
+:100D6000DF0F519A599A7DCF3F924F925F926F92C7
+:100D70007F928F929F92AF92BF92CF92DF92EF922B
+:100D8000FF920F931F93CF93DF93482E662E7A0125
+:100D9000E901DA0117965C90A52CB12C6AEA8AEA7F
+:100DA0009AE8F901099565E585E595E8FE0109955B
+:100DB00060E28AEA9AE8FE010995712C762C662495
+:100DC000D70116968C91169790E08A159B0520F511
+:100DD00017965C9260E980E090E8FE01099560E07A
+:100DE00080E090E8FE01099560EF80E090E8FE0168
+:100DF000099580E0DF91CF911F910F91FF90EF90C7
+:100E0000DF90CF90BF90AF909F908F907F906F902A
+:100E10005F904F903F90089564E580E090E50E94D8
+:100E2000910E852C912C6401C628D72860EAC60152
+:100E3000FE010995D7011496ED91FC911597E80DE7
+:100E4000F91D6081C601FE0109950E944415C60185
+:100E5000F8010995382EC601F80109953812F5CF29
+:100E6000D70114968D919C911597880E991EF401C7
+:100E70008081381208C05394FFEFAF1ABF0A51980F
+:100E8000599A59989DCF61E880E090E50E94910EB3
+:100E9000642D80E090E80E94910E64E580E090E58A
+:100EA0000E94910E519A599A8BCF4F925F926F92F6
+:100EB0007F928F929F92AF92BF92CF92DF92EF92EA
+:100EC000FF920F931F93CF93DF93662E7A01E90170
+:100ED000DA0117965C90A52CB12C6AEA8AEA9AE8A6
+:100EE000F901099565E585E595E8FE01099560E25A
+:100EF0008AEA9AE8FE010995712C762C6624D701BE
+:100F000016968C91169790E08A159B0518F5179602
+:100F10005C9260E980E090E8FE01099560E080E085
+:100F200090E8FE01099560EF80E090E8FE010995E8
+:100F300080E0DF91CF911F910F91FF90EF90DF90B4
+:100F4000CF90BF90AF909F908F907F906F905F9069
+:100F50004F900895852C912C6401C628D72860EA0B
+:100F6000C601FE010995D7011496ED91FC911597E4
+:100F7000E80DF91D6081C601FE0109950E94441526
+:100F8000C601F8010995482EC601F80109954812D5
+:100F9000F5CFD70114968D919C911597880E991EC7
+:100FA000F4018081481208C05394FFEFAF1ABF0AC2
+:100FB0005198599A5998A3CF519A599AA0CF4F92C4
+:100FC0005F926F927F928F929F92AF92BF92CF92D9
+:100FD000DF92EF92FF920F931F93CF93DF93EA017B
+:100FE00069015F80A52CB12CE62EF12CFE2CEE249D
+:100FF0008E8190E08A159B0598F45F8280E0DF91F6
+:10100000CF911F910F91FF90EF90DF90CF90BF9005
+:10101000AF909F908F907F906F905F904F900895CA
+:101020006AEA85E595E1F601099565E58AEA9AE0BF
+:10103000F601099560EA85E595E1F6010995652CCB
+:10104000712C43018E289F28EC81FD81E60DF71D50
+:101050006081C401F60109950E944415C401F8019C
+:101060000995482EC401F80109954812F5CF8C81E5
+:101070009D81680E791EF3018081481208C0539447
+:10108000FFEFAF1ABF0A5198599A5998B1CF519AA8
+:10109000599AAECF3F924F925F926F927F928F920A
+:1010A0009F92AF92BF92CF92DF92EF92FF920F93F7
+:1010B0001F93CF93DF93EA0169015F80A52CB12CC8
+:1010C000482E429480EF4822E62EF12CFE2CEE248E
+:1010D0008E8190E08A159B05A0F45F8280E0DF910D
+:1010E000CF911F910F91FF90EF90DF90CF90BF9025
+:1010F000AF909F908F907F906F905F904F903F90B8
+:10110000089560E280E090E80E94910E6AEA85E529
+:1011100095E1F601099560E180E090E80E94910E6A
+:1011200065E58AEA9AE0F601099560E280E090E8D8
+:101130000E94910E60EA85E595E1F6010995642D1E
+:1011400080E090E80E94910E652C712C43018E285E
+:101150009F28EC81FD81E60DF71D6081C401F60139
+:1011600009950E944415C401F8010995382EC4015F
+:10117000F80109953812F5CF8C819D81680E791E92
+:10118000F3018081381208C05394FFEFAF1ABF0AF1
+:101190005198599A59989CCF519A599A99CF4F92F0
+:1011A0005F926F927F928F929F92AF92BF92CF92F7
+:1011B000DF92EF92FF920F931F93CF93DF93662EF0
+:1011C0007A01E901DA0117965C90A52CB12C6AEA44
+:1011D0008AEA9AE0F901099565E585E595E0FE0161
+:1011E000099560E28AEA9AE0FE010995712C762C55
+:1011F0006624D70116968C91169790E08A159B0568
+:1012000018F517965C9260E980E090E0FE01099580
+:1012100060E080E090E0FE01099560EF80E090E002
+:10122000FE01099580E0DF91CF911F910F91FF9012
+:10123000EF90DF90CF90BF90AF909F908F907F9076
+:101240006F905F904F900895852C912C6401C62873
+:10125000D72860EAC601FE010995D7011496ED91E1
+:10126000FC911597E80DF91D6081C601FE010995F5
+:101270000E944415C601F8010995482EC601F801DF
+:1012800009954812F5CFD70114968D919C91159729
+:10129000880E991EF4018081481208C05394FFEF14
+:1012A000AF1ABF0A5198599A5998A3CF519A599A8F
+:1012B000A0CF4F925F927F928F929F92AF92BF92F8
+:1012C000CF92DF92EF92FF920F931F93CF93DF9312
+:1012D000A62E6A01E901DA011796EC90F12CA89587
+:1012E00000000000000000000000000000000000FE
+:1012F00000006AEA8AEA9AE8F901099565E585E558
+:1013000095E8FE01099560E28AEA9AE8FE010995EE
+:10131000B12CBA2CAA24D60116968C91169790E07F
+:101320008E159F0518F51796EC9260E980E090E81D
+:10133000FE01099560E080E090E8FE01099560EF0C
+:1013400080E090E8FE010995000080E0DF91CF91F8
+:101350001F910F91FF90EF90DF90CF90BF90AF90D3
+:101360009F908F907F905F904F90089580EA0E94A9
+:10137000A4132701552442018A289B28D6011496DC
+:10138000ED91FC911597E40DF51D6081C401FE01FE
+:1013900009950000000000000000000000000000AF
+:1013A00000000000A8950E944415C401F8010995A9
+:1013B000782E000000000000000000000000000087
+:1013C00000000000D6011496ED91FC911597E40DF4
+:1013D000F51D80817816B9F00000000000000000C3
+:1013E00000000000000000000000C401F8010995A1
+:1013F00078120DC000000000000000000000000096
+:10140000000000000000FFEFEF1AFF0A84CF000089
+:1014100000000000000000000000000000000000CC
:1014200000000000000000000000000000000000BC
:1014300000000000000000000000000000000000AC
-:10144000589A0000000000000000000000000000AA
-:101450000000C501F8010995BDCF519A599A50CFA6
-:101460008F929F92AF92BF92CF92DF92EF92FF92B4
-:101470000F931F93CF93DF93EC0188809980B82C52
-:101480008985823169F038F48031C1F0813109F405
-:101490001AC183EC06C0833109F44FC18431C9F706
-:1014A00080E0DF91CF911F910F91FF90EF90DF903F
-:1014B000CF90BF90AF909F908F9008958D858111B0
-:1014C00011C0FAE7CF2EFEE0DF2EA0E5EA2EAEE057
-:1014D000FA2E8E012AEA3AE245E555E5682D606864
-:1014E0000E945E048D85813041F58881998166E096
-:1014F000969587956A95E1F7282F2F70A22E41E0E7
-:1015000060E180E090E80E94D60F40E06A2D80E024
-:1015100090EE0E94D60F7AE7C72E7EE0D72EECE839
-:10152000EE2EEEE0FE2E8E012AEA3AEA45E555ED72
-:10153000682D60688A2D0E94FE058D858330D1F468
-:10154000682D6F736068B62E8881998136E0969514
-:1015500087953A95E1F74AE7C42E4EE0D42E50E540
-:10156000E52E5EE0F52E8E012AEA3AE245E555E5E4
-:101570000E94BF048D858E31D1F46B2D6F7360682E
-:10158000B62E8881998106E0969587950A95E1F7B0
-:101590009AE7C92E9EE0D92E2CE8E22E2EE0F22EFC
-:1015A0008E012AEA3AEA45E555E90E945F058D85F4
-:1015B000823211F08B30F9F468817981660F672FE0
-:1015C000661F770B7195CB0199278C5691090E9464
-:1015D0008C0EBAE7CB2EBEE0DB2E10E5E12E1EE02E
-:1015E000F12E8E012AEA3AE245E555E56B2D606859
-:1015F00080E00E945E048D858C3031F56B2D6F711B
-:101600006068B62E8880998075E0969487947A9564
-:10161000E1F765EA80E090E60E948C0E682D8FEF7E
-:101620009FEF0E948C0EEAE7CE2EEEE0DE2EFCE865
-:10163000EF2EFEE0FF2E8E012AEA3AEA45E555ED4F
-:101640006B2D80E00E945E048D858C3101F58880D1
-:101650009980880C892C881C9908919461E880E015
-:1016600090E50E948C0E682D80E090E80E948C0E20
-:1016700064E580E090E50E948C0E0AE71EE02CE80D
-:101680003EE0AE016B2D6068882D0E94A7068D8517
-:101690008F3109F005CF8880998054E09694879423
-:1016A0005A95E1F7682D80E090E50E948C0E6B2D35
-:1016B0006F7860680AE71EE02CE83EE0AE01882DF6
-:1016C0000E944807EDCE8D85811108C002EA1EE018
-:1016D00026EB3EE0AE01682D0E94D2078D858B304F
-:1016E00091F4882D8F71B82E8881998145E0969567
-:1016F00087954A95E1F702EA1EE026EB3EE0AE014F
-:101700006B2D0E943D088D858E3F09F0C9CE688102
-:10171000798135E0769567953A95E1F78FEF9FE30C
-:101720000E94B60E6B2D6F710AEC1EE02CED3EE0B0
-:10173000AE0180E00E94C208B3CE8FEF84B9C4012D
-:10174000880F892F881F990B919585B95F9A5F98AB
-:1017500014B8682D60680FE413E126E633E1AE01AA
-:1017600080E00E944C099CCE14B88FEF85B93F9A57
-:10177000479881B911B882B914B885B914B885B938
-:101780003898409A3998419A3A98429A3C98449AA3
-:101790003D98459A3E98469A53985B9A55985D9A1B
-:1017A0003B98439A3F98479A57985F9A5098589811
-:1017B0005198599A08950E94B40B399A419A389ACF
-:1017C00040983A9A429A3C9A449A3D9A459A14B85B
-:1017D0008FEF85B914B885B914B885B93F9A479881
-:1017E00081B912B884B915B8479A479814B80895C2
-:1017F0000E94B40B399A419A3C9A449A3D9A459A70
-:10180000589A509A14B88FEF85B914B885B914B89E
-:1018100085B93F9A479881B912B884B915B8479AE3
-:10182000479814B814B885B9579A5F9884B915B811
-:101830005F9A5F9814B80895823081F0833061F028
-:101840008130A1F40898109A1092B20380E290E0DF
-:101850009093B1038093B00380E008955098589A14
-:1018600088E08093B20389E290E0F2CF87E908959F
-:10187000813049F414B88FEF85B9579A5F980E9468
-:10188000B10C80E0089588E908955898509A0000B6
-:1018900089B15098589880FD22C05098589A59B1F3
-:1018A00049B1000039B10000000029B1000000007A
-:1018B000000099B1000000000000000089B15098BC
-:1018C000589850FD0EC040FD0EC030FD0EC020FDEA
-:1018D0000EC090FD0EC080FD0EC080EE089580EF1A
-:1018E000089580E0089581E0089583E0089586E0FA
-:1018F00008958AE008958FE008950F931F93CF9382
-:10190000C82F842F8901C230F9F030F4CC2389F03C
-:10191000C130B1F0C6E90FC0C430F1F0C0F0C0383A
-:10192000C9F781E0F90180830E94450CF8018183A9
-:1019300009C00E94B40B8C2FCF911F910F91089575
-:101940000E94DB0BC0E0F7CF0E94F80BFBCFCF91DA
-:101950001F910F910C941C0CCF911F910F910C941F
-:10196000380C109210018FEF84B915B85F9A5F9808
-:1019700014B85098589A80E88093680310927603C0
-:10198000E7E7F3E0119283E0E739F807D9F7089524
-:1019900060917603813109F441C0109210019FEFEC
-:1019A00094B99091100195B95F9A5F9814B820E0AE
-:1019B00070E03FEF8032C9F4E72FF0E0E958FC4FC8
-:1019C000408150E0022E02C0559547950A94E2F7F7
-:1019D00040FF28C092E034B995B95F9A5F9814B877
-:1019E0002F5F283011F47F5F20E0492F446034B925
-:1019F00045B95F9A5F9814B8615034B995B95F9A48
-:101A00005F9814B86111D6CF9093100140932301D1
-:101A100034B915B85F9A5F9814B8089592E090931E
-:101A20001001BDCF90E0D7CF0F931F93CF93DF93DB
-:101A300050917603B0917703813109F46BC0109215
-:101A400010019FEF94B99091100195B95F9A5F983A
-:101A500014B820E030E07FEFC1E0D0E0803281F4C4
-:101A6000EB2FF0E0022E02C0F595E7950A94E2F71D
-:101A7000E0FF54C0916074B995B95F9A5F9814B84B
-:101A80006032B1F4211105C0E32FF0E0E958FC4FBA
-:101A90001082489B0DC0E32FF0E0E958FC4FA08175
-:101AA0008E01022E01C0000F0A94EAF7A02BA0833A
-:101AB0005150442341F0511106C0926074B995B958
-:101AC0005F9A5F9814B8A92FA46074B9A5B95F9AFA
-:101AD0005F9814B874B995B95F9A5F9814B82F5F7E
-:101AE000283039F43F5FE32FF0E0E958FC4FB08134
-:101AF00020E05111B3CF90931001A09323018FEFF9
-:101B000084B915B85F9A5F9814B8DF91CF911F918F
-:101B10000F91089591E09093100193CF9E7FABCFEA
-:101B2000809168038338D1F580916903883009F486
-:101B300063C0C0F4833009F445C030F4813079F1DA
-:101B40008230A1F18EEE28C0863009F44AC008F038
-:101B50004EC08430B9F781E88093680341E060E2C9
-:101B600081E136C08F30C1F148F48D3031F18E30D3
-:101B700049F781E88093680340E028C0803849F045
-:101B80008F3F49F08031F1F681E88093680340E0AF
-:101B90002CC00C94B10C80EF80936803089581E809
-:101BA0008093680380E20E94C80C14C081E880938F
-:101BB000680341E060E080E20BC081E88093680345
-:101BC00040E0F8CF81E88093680341E060E280E183
-:101BD0000E94140D82E8E0CF81E88093680340E022
-:101BE000BECF81E88093680341E060E2E4CF81E802
-:101BF0008093680380E1D7CF81E88093680381E117
-:101C0000D2CFCF93DF93E901843061F138F4823091
-:101C1000E1F008F58130A1F087E80FC0873039F195
-:101C200028F48530C9F74093760306C0883021F147
-:101C3000803891F70E94B10C80E0DF91CF91089538
-:101C40009091690399838883F7CF4093690383E870
-:101C500080936803F1CF4093690383E8809368031E
-:101C60000E94900D80916803898381E0ECCF4093BE
-:101C7000770350937803E0CF809177038983809135
-:101C800078038A83809179038B8380917A038C8394
-:101C900080917B038D8380917C038E8386E0D3CFFC
-:101CA00082B98FEF84B995B9479A479814B884B927
-:101CB00065B9509A58985098589A14B80895509801
-:101CC00058984098419A429A82B92FEF24B995B911
-:101CD000479A479814B800000000409A97FD419831
-:101CE00000000000000000000000000083B14098E8
-:101CF000419A089582B92FEF24B995B9479A479828
-:101D000014B8409A97FD41980000000000000000C0
-:101D100083B14098419A08955098589882B92FEF0E
-:101D200024B995B9479A479814B8429824B965B927
-:101D3000409A97FD4198000000004098419A429ACD
-:101D400014B80895811520E2920708F4906882B9CA
-:101D50008FEF84B995B9479A479814B84498000012
-:101D600000000000000083B1449A0895811520E22C
-:101D7000920708F4906882B98FEF84B995B9479AB1
-:101D8000479814B884B965B9000045980000459A91
-:101D900014B8089582B98FEF84B995B9479A4798D6
-:101DA00014B8409A4198449800000000000083B1A4
-:101DB000449A4098419A089582B98FEF84B995B9B1
-:101DC000479A479814B84098419884B965B900007B
-:101DD00045980000459A14B8419A089512B82FEF1B
-:101DE00024B988E085B9479A479814B889B18072B8
-:101DF00090E024B924E025B9479A479814B829B14E
-:101E0000207230E041E02115310509F040E061E049
-:101E1000009709F060E0442311F0611116C051E011
-:101E2000232B09F450E021E0892B09F420E055230D
-:101E300011F021110CC0662311F051110AC0442386
-:101E400011F0211108C08FEF089580E1089581E11C
-:101E5000089582E1089583E10895EF92FF920F9330
-:101E6000CF93DF9300D01F92CDB7DEB77C018FEF09
-:101E700084B965B9479A479814B8409A67FD419864
-:101E800042B9000080E0011117C00000000093B1CA
-:101E9000F701E80FF11D90834F5F42B98F5F28175C
-:101EA00090F74098419A0F900F900F90DF91CF914B
-:101EB0000F91FF90EF9008952B834A8389830E94AE
-:101EC000291589814A812B81E2CFEF92FF920F93EE
-:101ED000CF93DF9300D01F92CDB7DEB77C01603285
-:101EE00008F460688FEF84B965B9479A479814B8C9
-:101EF000449842B9000080E0011116C000000000C3
-:101F000093B1F701E80FF11D90834F5F42B98F5FE6
-:101F1000281790F7449A0F900F900F90DF91CF9170
-:101F20000F91FF90EF9008952B834A8389830E943D
-:101F3000291589814A812B81E3CFEF92FF920F937C
-:101F4000CF93DF9300D01F92CDB7DEB77C018FEF28
-:101F500084B965B9479A479814B8409A419844980B
-:101F600042B9000080E0011118C00000000093B1E8
-:101F7000F701E80FF11D90834F5F42B98F5F28177B
-:101F800090F7449A4098419A0F900F900F90DF91EC
-:101F9000CF910F91FF90EF9008952B834A8389830F
-:101FA0000E94291589814A812B81E1CF0F931F93CC
-:101FB000CF93DF938C01D62F442349F080E090E843
-:101FC0000E947A0E60E880E090E80E948C0EC5E0E6
-:101FD000C8010E947A0E6D2FC8010E948C0ED69502
-:101FE000C150B1F7DF91CF911F910F9108950F93D9
-:101FF0001F93CF93C82FCA018901C53079F148F4E6
-:10200000C13029F1E8F0C23031F1C43051F1C0EAF9
-:1020100019C0C23891F150F4C03839F1C138B9F75C
-:1020200021E0F80120830E947A0E24C0C33859F1C0
-:10203000C43869F721E0F80120830E94CA0E1AC053
-:102040000E94500E8C2FCF911F910F9108950E94E6
-:10205000B60EC0E0F7CF0E948C0EFBCF0E94DC0EC4
-:10206000F8CF40E00E94D60FF4CF21E0F8012083A2
-:102070000E945F0EF8018183ECCF21E0F8012083FC
-:102080000E94A20EF7CF81E0F90180830E94EE0E3C
-:10209000F1CFCF93DF93FB01DC0112962C91222329
-:1020A00029F0203479F082ED808308C01082A0915D
-:1020B0000201B0910301EC018C818C93CF01DF917F
-:1020C000CF910895108281E08183A0910201B091A7
-:1020D00003018C918283F2CFE0910201F091030120
-:1020E00080830895E0910201F091030180810895B9
-:1020F0000F931F93D901082F10E00831110508F044
-:10210000C2C2F801EA57FF4E0C948717C0109E1008
-:10211000FB105611A211EE113A12E512EA12EF125B
-:10212000F212F612F912011309130D1310131413FE
-:102130001D1324132813301337133B134631510555
-:1021400008F0A3C2FA01E955FF4E0C948717BD10A1
-:10215000C310C710CB10CF10D310D710DB10DF1077
-:10216000E310E710EB10EF10F31045134513451380
-:102170004513451345134513F7103898409A80E0EE
-:102180001F910F9108953998419A80E0F9CF3A98BC
-:10219000429A80E0F5CF3B98439A80E0F1CF3C989B
-:1021A000449A80E0EDCF3D98459A80E0E9CF3E9893
-:1021B000469A80E0E5CF3F98479A80E0E1CF50987B
-:1021C000589A80E0DDCF5198599A80E0D9CF539842
-:1021D0005B9A80E0D5CF55985D9A80E0D1CF569834
-:1021E0005E9A80E0CDCF57985F9A80E0C9CF509833
-:1021F000589A80E0C5CF4631510508F048C2FA012F
-:10220000EC5FFE4E0C9487171A111E112211261135
-:102210002A112E11321136113A113E114211461176
-:102220004A114E11471347134713471347134713D8
-:10223000471352113898409880E0A2CF39984198BE
-:1022400080E09ECF3A98429880E09ACF3B9843989E
-:1022500080E096CF3C98449880E092CF3D98459896
-:1022600080E08ECF3E98469880E08ACF3F9847988E
-:1022700080E086CF5098589880E082CF5198599846
-:1022800080E07ECF53985B9880E07ACF55985D9838
-:1022900080E076CF56985E9880E072CF57985F982E
-:1022A00080E06ECF5098589880E06ACF4631510553
-:1022B00008F0EFC1FA01E15AFE4E0C948717751130
-:1022C00078117B117E118111841187118A118D1172
-:1022D00090119311961199119C11491349134913A7
-:1022E00049134913491349139F11389A80E048CF85
-:1022F000399A80E045CF3A9A80E042CF3B9A80E01D
-:102300003FCF3C9A80E03CCF3D9A80E039CF3E9A67
-:1023100080E036CF3F9A80E033CF509A80E030CFD4
-:10232000519A80E02DCF539A80E02ACF559A80E0D1
-:1023300027CF569A80E024CF579A80E021CF509A39
-:1023400080E01ECF4631510508F0A5C1FA01E555E0
-:10235000FE4E0C948717C111C411C711CA11CD11BB
-:10236000D011D311D611D911DC11DF11E211E51111
-:10237000E8114B134B134B134B134B134B134B13D2
-:10238000EB11409880E0FCCE419880E0F9CE429875
-:1023900080E0F6CE439880E0F3CE449880E0F0CE23
-:1023A000459880E0EDCE469880E0EACE479880E000
-:1023B000E7CE589880E0E4CE599880E0E1CE5B9873
-:1023C00080E0DECE5D9880E0DBCE5E9880E0D8CE07
-:1023D0005F9880E0D5CE589880E0D2CE4631510546
-:1023E00008F05BC1FA01E950FE4E0C9487170D12FC
-:1023F00010121312161219121C121F122212251279
-:1024000028122B122E12311234124D134D134D136C
-:102410004D134D134D134D133712409A80E0B0CE3B
-:10242000419A80E0ADCE429A80E0AACE439A80E005
-:10243000A7CE449A80E0A4CE459A80E0A1CE469AE9
-:1024400080E09ECE479A80E09BCE589A80E098CE5E
-:10245000599A80E095CE5B9A80E092CE5D9A80E0BA
-:102460008FCE5E9A80E08CCE5F9A80E089CE589ABB
-:1024700080E086CE82E08C934631510508F0A2C000
-:10248000FA01EB5BFD4E0C9487175B1264126D1220
-:1024900076127F12881291129A12A312AC12B51200
-:1024A000BE12C712D012E212E212E212E212E212DD
-:1024B000E212E212D91286B1817011968C931197B3
-:1024C00012961C9280E05CCE86B1827090E01296EB
-:1024D0009C938E93119780E053CE86B1847090E0E8
-:1024E00012969C938E93119780E04ACE86B18870A5
-:1024F00090E012969C938E93119780E041CE86B126
-:10250000807190E012969C938E93119780E038CE64
-:1025100086B1807290E012969C938E93119780E022
-:102520002FCE86B1807490E012969C938E93119773
-:1025300080E026CE86B1807890E012969C938E93B0
-:10254000119780E01DCE89B1817011968C931197FF
-:1025500012961C9280E014CE89B1827090E012969F
-:102560009C938E93119780E00BCE89B1887090E098
-:1025700012969C938E93119780E002CE89B180725F
-:1025800090E012969C938E93119780E0F9CD89B1DB
-:10259000807490E012969C938E93119780E0F0CD1A
-:1025A00089B1807890E012969C938E93119780E089
-:1025B000E7CD89B1817011968C93119712961C9278
-:1025C00080E0DECD1C928DE8DBCD14B88FEF85B9AD
-:1025D00080E0D6CD14B88FEF85B980E0D1CD14B8A6
-:1025E00080E0CECD8FEF84B980E0CACD45B980E0E0
-:1025F000C7CD83B111968C93119781E08C9380E0C5
-:10260000BFCD14B88FEF85B93F9A479881B980E064
-:10261000B7CD8FEF82B980E0B3CD11B880E0B0CDF7
-:102620008FEF81B980E0ACCD42B98FEF84B955B955
-:10263000479A479814B880E0A3CD14B88FEF85B9B6
-:10264000579A5F9880E09CCD57985F9A80E098CD2C
-:102650008FEF84B945B95F9A5F9814B880E090CD48
-:1026600014B88FEF85B9579A5F9880E089CD579855
-:102670005F9A80E085CD8FEF84B945B95F9A5F9806
-:1026800014B880E07DCD8CE87BCD8DE879CD8DE8E8
-:1026900077CD8DE875CD8DE873CD8DE871CD82B99C
-:1026A0008FEF84B995B9479A479814B841984498E0
-:1026B000000000000000000000000000000000001A
-:1026C0000000000083B1449A419A089582B98FEFC7
-:1026D00084B995B9479A479814B884B965B94598AB
-:1026E00041980000000000000000459A419A14B88B
-:1026F0000895CF93DF93952FE901813099F020F071
-:10270000823059F08AEA06C09FEF94B945B95F9AC2
-:102710005F9814B8DF91CF910895842F0E946613BB
-:1027200080E0F8CF8883842F0E944F138983F8CFED
-:102730009FEF94B985B945984198000000000000CA
-:102740000000459A419A14B80895EF92FF920F93B2
-:10275000CF93DF9300D01F92CDB7DEB77C018FEF10
-:1027600084B965B9479A479814B84498419842B9D2
-:1027700080E0011119C0000000000000000093B1CA
-:10278000F701E80FF11D90834F5F42B98F5F281763
-:1027900080F7449A419A0F900F900F90DF91CF915C
-:1027A0000F91FF90EF9008952B834A8389830E94B5
-:1027B000291500000000000089814A812B81DFCFAC
-:1027C000880F991F880F991F20E030E028173907DC
-:1027D00009F40895000000002F5F3F4FF7CF20E07D
-:1027E00030E02817390709F40895000000002F5F32
-:1027F0003F4FF7CFCF93DF9380E190E00E94E0134B
-:10280000C4E0D0E084EF91E00E94E01384EF91E017
-:102810000E94E0132197B1F7C4E0D0E08AEF90E086
-:102820000E94E0138AEF90E00E94E0132197B1F735
-:10283000DF91CF91089580E190E00C94E013CF9365
-:10284000DF931F92CDB7DEB7F901813171F038F413
-:102850008130C1F078F08230C9F082E80FC0813257
-:10286000A9F0823299F08231C1F782E0808312822E
-:1028700011820AC089830E94FA1389810F90DF9127
-:10288000CF9108950E941B1480E0F8CF81E08083EF
-:102890001182FACF482F90E0982F882720E041112D
-:1028A00003C021118068089520953FEF340F432322
-:1028B000F6CF80E090E0089580E0089560E070E059
-:1028C000CB010895CF93DF931F92CDB7DEB7DC0124
-:1028D0008FEF809307011092080187E091E09093B9
-:1028E000C2038093C10316968C9116978983119623
-:1028F000EC9111974E2F50E0FA013197E930F10534
-:1029000008F07DC0EA57FB4E0C9487178F149F1474
-:10291000AD14BB14E514FF14F614C914D71414969F
-:102920004D915C91159728E031E013966C911397C7
-:1029300012968C910E9478108093070152C01496D1
-:102940004D915C91159728E031E013966C911397A7
-:1029500012968C910E947D0CEFCF14964D915C9154
-:10296000159728E031E013966C91139712968C918D
-:102970000E94F70FE1CF14964D915C91159728E0D6
-:1029800031E013966C91139712968C910E947913F3
-:10299000D3CF14964D915C91159728E031E01396B2
-:1029A0006C91139712968C910E941F14C5CF1496A8
-:1029B0004D915C91159728E031E013966C91139737
-:1029C00012968C910E94010EB7CFAE014F5F5F4F00
-:1029D00067E071E0CD010E9479019093C20380937A
-:1029E000C10389810F90DF91CF910895AE014F5FB0
-:1029F0005F4F67E071E0CD010E944910EECF80E8A3
-:102A00009BCFE0916503F091660327814481558156
-:102A1000322F360F231312C0E0916503F091660345
-:102A20008781860F878380913401861B80933401D0
-:102A300081110DC088E9838381E00895FC017191C3
-:102A4000CF01FA01E20FF11D70832F5FE3CF80E029
-:102A50000895CF93DF936091C303635067FD91C0E6
-:102A60008091C003CCE0D0E0C81BD109C953DC4F32
-:102A70008091BF038D3209F0CFC0683009F07FC06C
-:102A800083EC8093B3038AE58093050110920F01D4
-:102A90008881807679F0CE010E9462148F3F09F41C
-:102AA00066C09F81911169C09E81981708F065C02A
-:102AB000892F63C02A811092BC03998191110AC0A9
-:102AC0001092BD032CEB33E082E03093C2032093DD
-:102AD000C103E7CF953029F42093C4032CEB33E0F6
-:102AE000F4CF963099F59B81913059F48EE890E0BF
-:102AF0009093C2038093C10382E190E490930F010D
-:102B0000D0CF923019F48CE790E0F2CF9330A9F750
-:102B1000211108C088EE90E09093C2038093C10316
-:102B200084E0EBCF213041F48EEB90E09093C20330
-:102B30008093C1038AE2E1CF2230F9F680EA90E087
-:102B40009093C2038093C1038EE1D7CF983059F0A0
-:102B5000993019F42093C603C1CF81E09A3009F46B
-:102B6000BDCF80E0BBCF26EC33E081E0AECF9881D3
-:102B700097FD8E8190E890930F018093040110924D
-:102B8000C3038091050184FF3AC0809104018F3F07
-:102B9000B1F1C82F893008F0C8E08C1B8093040184
-:102BA0008091B30398E889278093B303CC23D1F0B5
-:102BB0008091C1039091C20320910F0126FF3FC075
-:102BC000A4EBB3E0FC012C2F34913D9331962150BE
-:102BD000D9F701962FEF2C0F820F911D9093C2030E
-:102BE0008093C1036C2F84EB93E00E944416CC5F6A
-:102BF000CC3019F08FEF80930401C093050184E17C
-:102C000099B1947131F48150D9F71092C4031092A4
-:102C1000BE03DF91CF91089580910F0187FFAFCF61
-:102C2000CE010E9401158F3F21F48EE180930501B2
-:102C3000A6CF882309F4A3CF10920401A0CFE4EB20
-:102C4000F3E0DC012C2F3D9131932150E1F7C1CF0E
-:102C5000E9E6F0E0808182608083E89A0895A82FF9
-:102C6000B92F80E090E041E050EA609530E009C083
-:102C70002D9182279795879510F084279527305EB0
-:102C8000C8F36F5FA8F30895EADF8D939D930895CD
-:102C9000CF93CFB7CF93DF93C3954C9BE9F74C9B72
-:102CA0000BC04C9B09C04C9B07C04C9B05C04C9B68
-:102CB00003C04C9B01C089C06F93C091C003DD2746
-:102CC000C953DC4F2F9365E54C9B03C02F916F9147
-:102CD000E6CF0F931F934F9320E040E15F9309B13C
-:102CE000047104FB27F93F9350E03BE039C01471B5
-:102CF00040642F77012F5F5F1EC0406819B11471C7
-:102D00002F7752501FC0406409B12F770471D1F161
-:102D10005F5F00C023C0406219B12F77147191F139
-:102D20005F5F00C025C004711027515012F45D5F31
-:102D30000000115027952C3F19B1C8F614710127D6
-:102D4000015027952C3FC8F64227499309B10471D9
-:102D500010274F73115027952C3FA8F6469546959E
-:102D600019B1147179F00127015027952C3F98F67D
-:102D70006B5A60F3315009B1B0F600C011E01CBBD2
-:102D8000002717C03B503195C31BD04011E01CBB3E
-:102D90000881033CF9F00B34E9F02091BE0319815E
-:102DA000110F1213EDCF093651F10D3211F0013E22
-:102DB00039F70093C5033F915F914F911F910F9198
-:102DC0002F916F91CCB3C0FD67CFDF91CF91CFBF73
-:102DD000CF9118952091C503222369F31091C30365
-:102DE000112339F534303AF13093C3032093BF03F4
-:102DF0001091C0033BE0311B3093C0031CC0009115
-:102E0000C3030130B4F40AE53091050134FD14C068
-:102E100000930501C3EBD3E013C0052710E000C009
-:102E200000000BB91AC0052710E0221F1DC010E0DA
-:102E300021C04AE502C032ED432FC4E1D0E032E0C8
-:102E40001AB114615C9A0BB11AB954E120E865E338
-:102E500020FF05270BB9279517951C3FF0F66695BF
-:102E6000B8F7B1F720FF05270BB9279517951C3F39
-:102E7000D0F62795179517FF052700001C3F0BB9C3
-:102E8000B0F629913A9519F70B7E1091C403110FF2
-:102E9000C651D0400BB911F01093BE0311E01CBB1A
-:102EA00000611AB11B7E402F4B7E54E05A95F1F71A
-:102EB0000BB91AB94BB97FCF9EE088E10FB6F894F1
-:102EC000A895809360000FBE909360000E94281622
-:102ED000549A80E0815099F4549878940E94B40BED
-:102EE00080EF80936803A8950E9429150E94A8028C
-:102EF00080916803803FB9F30E94900DF4CFA895AC
-:102F0000EFE9FFE03197F1F700C00000E3CFEE0FEB
-:0E2F1000FF1F0590F491E02D0994F894FFCF77
-:062F1E0065019703FF5A54
+:1014400000000000000000000000C401F801099540
+:10145000782ECBCF8F929F92AF92BF92CF92DF9296
+:10146000EF92FF920F931F93CF93DF93EC0188804D
+:101470009980B82C8985823169F038F48031C1F0C7
+:10148000813109F41AC183EC06C0833109F44FC1DC
+:101490008431C9F780E0DF91CF911F910F91FF90C8
+:1014A000EF90DF90CF90BF90AF909F908F90089576
+:1014B0008D85811111C0EFE7CE2EEEE0DE2EF5E531
+:1014C000EF2EFEE0FF2E8E012AEA3AE245E555E5D1
+:1014D000682D60680E946B048D85813041F588819C
+:1014E000998156E0969587955A95E1F7282F2F70A8
+:1014F000A22E41E060E180E090E80E94DF0F40E032
+:101500006A2D80E090EE0E94DF0F6FE7C62E6EE03E
+:10151000D62E71E9E72E7EE0F72E8E012AEA3AEA0E
+:1015200045E555ED682D60688A2D0E940B068D8576
+:101530008330D1F4682D6F736068B62E88819981ED
+:1015400026E0969587952A95E1F73FE7C32E3EE082
+:10155000D32E45E5E42E4EE0F42E8E012AEA3AE23F
+:1015600045E555E50E94CC048D858E31D1F46B2D77
+:101570006F736068B62E88819981B6E096958795DD
+:10158000BA95E1F71FE7C12E1EE0D12E01E9E02E4A
+:101590000EE0F02E8E012AEA3AEA45E555E90E946E
+:1015A0006C058D85823211F08B30F9F46881798178
+:1015B000660F672F661F770B7195CB0199278C56A5
+:1015C00091090E94910EFFE7CF2EFEE0DF2EA5E5E8
+:1015D000EA2EAEE0FA2E8E012AEA3AE245E555E51A
+:1015E0006B2D606880E00E946B048D858C3031F536
+:1015F0006B2D6F716068B62E8880998055E0969447
+:1016000087945A95E1F765EA80E090E60E94910E92
+:10161000682D8FEF9FEF0E94910E6FE7C62E6EE050
+:10162000D62E71E9E72E7EE0F72E8E012AEA3AEAFD
+:1016300045E555ED6B2D80E00E946B048D858C3166
+:1016400001F588809980880C892C881C99089194D0
+:1016500061E880E090E50E94910E682D80E090E8BE
+:101660000E94910E64E580E090E50E94910E0FE7E4
+:101670001EE021E93EE0AE016B2D6068882D0E94DE
+:10168000B4068D858F3109F005CF8880998034E0CC
+:10169000969487943A95E1F7682D80E090E50E9452
+:1016A000910E6B2D6F7860680FE71EE021E93EE038
+:1016B000AE01882D0E945507EDCE8D85811108C0A1
+:1016C00007EA1EE02BEB3EE0AE01682D0E94DF072B
+:1016D0008D858B3091F4882D8F71B82E88819981FA
+:1016E00025E0969587952A95E1F707EA1EE02BEB12
+:1016F0003EE0AE016B2D0E944A088D858E3F09F0B9
+:10170000C9CE6881798195E0769567959A95E1F7DC
+:101710008FEF9FE30E94BB0E6B2D6F710FEC1EE0ED
+:1017200021EE3EE0AE0180E00E94CF08B3CE8D8571
+:10173000811119C0282D2068B22E880C892C881C94
+:1017400099089194682D8FEF84B965B95F9A5F9875
+:1017500014B808E513E122E733E1AE016B2D80E018
+:101760000E94590997CE813071F7692D6F736064BB
+:10177000EACF14B88FEF85B93F9A479881B911B86D
+:1017800082B914B885B914B885B93898409A39988F
+:10179000419A3A98429A3C98449A3D98459A3E9884
+:1017A000469A53985B9A55985D9A3B98439A3F980E
+:1017B000479A57985F9A509858985198599A08950F
+:1017C0000E94B90B399A419A389A40983A9A429AAB
+:1017D0003C9A449A3D9A459A14B88FEF85B914B84B
+:1017E00085B914B885B93F9A479881B912B884B9B8
+:1017F00015B8479A479814B808950E94B90B399ABA
+:10180000419A3C9A449A3D9A459A589A509A14B8EB
+:101810008FEF85B914B885B914B885B93F9A479840
+:1018200081B912B884B915B8479A479814B814B852
+:1018300085B9579A5F9884B915B85F9A5F9814B8BC
+:101840000895823081F0833061F08130A1F40898EE
+:10185000109A1092B60380E290E09093B5038093C3
+:10186000B40380E008955098589A88E08093B603B6
+:1018700089E290E0F2CF87E90895813049F414B805
+:101880008FEF85B9579A5F980E94B60C80E0089553
+:1018900088E908955898509A000089B1509858984E
+:1018A00080FD22C05098589A59B149B1000039B111
+:1018B0000000000029B100000000000099B1000004
+:1018C00000000000000089B15098589850FD0EC0EB
+:1018D00040FD0EC030FD0EC020FD0EC090FD0EC0BC
+:1018E00080FD0EC080EE089580EF089580E0089599
+:1018F00081E0089583E0089586E008958AE00895E0
+:101900008FE008950F931F93CF93C82F842F8901E1
+:10191000C230F9F030F4CC2389F0C130B1F0C6E91F
+:101920000FC0C430F1F0C0F0C038C9F781E0F90150
+:1019300080830E944A0CF801818309C00E94B90B80
+:101940008C2FCF911F910F9108950E94E00BC0E062
+:10195000F7CF0E94FD0BFBCFCF911F910F910C94FD
+:10196000210CCF911F910F910C943D0C10921401FA
+:101970008FEF84B915B85F9A5F9814B85098589A49
+:1019800080E880936C0310927A03EBE7F3E0119206
+:1019900083E0EB39F807D9F7089560917A03813134
+:1019A00009F441C0109214019FEF94B99091140171
+:1019B00095B95F9A5F9814B820E070E03FEF8032ED
+:1019C000C9F4E72FF0E0E558FC4F408150E0022ECB
+:1019D00002C0559547950A94E2F740FF28C092E06F
+:1019E00034B995B95F9A5F9814B82F5F283011F415
+:1019F0007F5F20E0492F446034B945B95F9A5F9812
+:101A000014B8615034B995B95F9A5F9814B86111F0
+:101A1000D6CF909314014093270134B915B85F9A3B
+:101A20005F9814B8089592E090931401BDCF90E0B0
+:101A3000D7CF0F931F93CF93DF9350917A03B09139
+:101A40007B03813109F46BC0109214019FEF94B9AC
+:101A50009091140195B95F9A5F9814B820E030E036
+:101A60007FEFC1E0D0E0803281F4EB2FF0E0022E76
+:101A700002C0F595E7950A94E2F7E0FF54C0916043
+:101A800074B995B95F9A5F9814B86032B1F42111B6
+:101A900005C0E32FF0E0E558FC4F1082489B0DC0D5
+:101AA000E32FF0E0E558FC4FA0818E01022E01C02B
+:101AB000000F0A94EAF7A02BA0835150442341F071
+:101AC000511106C0926074B995B95F9A5F9814B8C5
+:101AD000A92FA46074B9A5B95F9A5F9814B874B9B6
+:101AE00095B95F9A5F9814B82F5F283039F43F5F3B
+:101AF000E32FF0E0E558FC4FB08120E05111B3CF67
+:101B000090931401A09327018FEF84B915B85F9AC1
+:101B10005F9814B8DF91CF911F910F91089591E0D4
+:101B20009093140193CF9E7FABCF80916C03833849
+:101B3000D1F580916D03883009F463C0C0F483301F
+:101B400009F445C030F4813079F18230A1F18EEE94
+:101B500028C0863009F44AC008F04EC08430B9F776
+:101B600081E880936C0341E060E281E136C08F3010
+:101B7000C1F148F48D3031F18E3049F781E880931E
+:101B80006C0340E028C0803849F08F3F49F0803135
+:101B9000F1F681E880936C0340E02CC00C94B60C05
+:101BA00080EF80936C03089581E880936C0380E25A
+:101BB0000E94CD0C14C081E880936C0341E060E08A
+:101BC00080E20BC081E880936C0340E0F8CF81E8AD
+:101BD00080936C0341E060E280E10E94190D82E88D
+:101BE000E0CF81E880936C0340E0BECF81E8809332
+:101BF0006C0341E060E2E4CF81E880936C0380E114
+:101C0000D7CF81E880936C0381E1D2CFCF93DF936C
+:101C1000E901843061F138F48230E1F008F5813077
+:101C2000A1F087E80FC0873039F128F48530C9F773
+:101C300040937A0306C0883021F1803891F70E94E2
+:101C4000B60C80E0DF91CF91089590916D03998358
+:101C50008883F7CF40936D0383E880936C03F1CFC3
+:101C600040936D0383E880936C030E94950D8091EF
+:101C70006C03898381E0ECCF40937B0350937C031A
+:101C8000E0CF80917B03898380917C038A8380915C
+:101C90007D038B8380917E038C8380917F038D8372
+:101CA000809180038E8386E0D3CF82B98FEF84B991
+:101CB00095B9479A479814B884B965B9509A589815
+:101CC0005098589A14B80895509858984098419A46
+:101CD000429A82B92FEF24B995B9479A479814B818
+:101CE00000000000409A97FD4198000000000000AD
+:101CF00000000000000083B14098419A089582B925
+:101D00002FEF24B995B9479A479814B8409A97FD90
+:101D10004198000000000000000083B14098419A03
+:101D200008955098589882B92FEF24B995B9479AD9
+:101D3000479814B8429824B965B9409A97FD4198DC
+:101D4000000000004098419A429A14B80895811505
+:101D500020E2920708F4906882B98FEF84B995B9B0
+:101D6000479A479814B8449800000000000000000B
+:101D700083B1449A0895811520E2920708F490688F
+:101D800082B98FEF84B995B9479A479814B884B946
+:101D900065B9000045980000459A14B8089582B9C5
+:101DA0008FEF84B995B9479A479814B8409A4198EB
+:101DB000449800000000000083B1449A4098419A82
+:101DC000089582B98FEF84B995B9479A479814B8A6
+:101DD0004098419884B965B9000045980000459A3B
+:101DE00014B8419A089512B82FEF24B988E085B944
+:101DF000479A479814B889B1807290E024B924E0DA
+:101E000025B9479A479814B829B1207230E041E0CB
+:101E10002115310509F040E061E0009709F060E02C
+:101E2000442311F0611116C051E0232B09F450E056
+:101E300021E0892B09F420E0552311F021110CC079
+:101E4000662311F051110AC0442311F0211108C07A
+:101E50008FEF089580E1089581E1089582E108956A
+:101E600083E10895EF92FF920F93CF93DF9300D019
+:101E70001F92CDB7DEB77C018FEF84B965B9479A61
+:101E8000479814B8409A67FD419842B9000080E035
+:101E9000011119C0000000000000000093B1F7011B
+:101EA000E80FF11D90834F5F42B98F5F281780F7CD
+:101EB0004098419A0F900F900F90DF91CF910F9122
+:101EC000FF90EF9008952B834A8389830E944415E5
+:101ED0000000000089814A812B81E0CFEF92FF92C0
+:101EE0000F93CF93DF9300D01F92CDB7DEB77C0165
+:101EF000603208F460688FEF84B965B9479A4798F3
+:101F000014B8449842B9000080E0011116C00000E6
+:101F1000000093B1F701E80FF11D90834F5F42B9C4
+:101F20008F5F281790F7449A0F900F900F90DF91D2
+:101F3000CF910F91FF90EF9008952B834A8389836F
+:101F40000E94441589814A812B81E3CFEF92FF9251
+:101F50000F93CF93DF9300D01F92CDB7DEB77C01F4
+:101F60008FEF84B965B9479A479814B8409A419859
+:101F7000449842B9000080E0011118C00000000040
+:101F800093B1F701E80FF11D90834F5F42B98F5F66
+:101F9000281790F7449A4098419A0F900F900F900D
+:101FA000DF91CF910F91FF90EF9008952B834A839B
+:101FB00089830E94441589814A812B81E1CF0F9347
+:101FC0001F93CF93DF938C01D62F442349F080E0F9
+:101FD00090E80E947F0E60E880E090E80E94910EF9
+:101FE000C5E0C8010E947F0E6D2FC8010E94910EAE
+:101FF000D695C150B1F7DF91CF911F910F91089500
+:102000000F931F93CF93C82FCA018901C53079F16F
+:1020100048F4C13029F1E8F0C23031F1C43051F157
+:10202000C0EA19C0C23891F150F4C03839F1C13852
+:10203000B9F721E0F80120830E947F0E24C0C33845
+:1020400059F1C43869F721E0F80120830E94CF0ECE
+:102050001AC00E94550E8C2FCF911F910F91089599
+:102060000E94BB0EC0E0F7CF0E94910EFBCF0E94F2
+:10207000E10EF8CF40E00E94DF0FF4CF21E0F8013D
+:1020800020830E94640EF8018183ECCF21E0F801E7
+:1020900020830E94A70EF7CF81E0F90180830E9480
+:1020A000F30EF1CFCF93DF93FB01DC0112962C915D
+:1020B000222329F0203479F082ED808308C0108239
+:1020C000A0910201B0910301EC018C818C93CF01AE
+:1020D000DF91CF910895108281E08183A091020168
+:1020E000B09103018C918283F2CFE0910201F091D3
+:1020F000030180830895E0910201F0910301808142
+:1021000008950F931F93D901082F10E0083111058E
+:1021100008F0C2C2F801E157FF4E0C94A217C91093
+:10212000A71004115F11AB11F7114312EE12F31255
+:10213000F812FB12FF1202130A13121316131913CB
+:102140001D1326132D133113391340134413463135
+:10215000510508F0A3C2FA01E055FF4E0C94A217F6
+:10216000C610CC10D010D410D810DC10E010E41041
+:10217000E810EC10F010F410F810FC104E134E1391
+:102180004E134E134E134E134E1300113898409AAF
+:1021900080E01F910F9108953998419A80E0F9CF1E
+:1021A0003A98429A80E0F5CF3B98439A80E0F1CF8D
+:1021B0003C98449A80E0EDCF3D98459A80E0E9CF85
+:1021C0003E98469A80E0E5CF3F98479A80E0E1CF7D
+:1021D0005098589A80E0DDCF5198599A80E0D9CF35
+:1021E00053985B9A80E0D5CF55985D9A80E0D1CF27
+:1021F00056985E9A80E0CDCF57985F9A80E0C9CF1D
+:102200005098589A80E0C5CF4631510508F048C231
+:10221000FA01E35FFE4E0C94A217231127112B1134
+:102220002F11331137113B113F11431147114B113E
+:102230004F11531157115013501350135013501383
+:10224000501350135B113898409880E0A2CF399812
+:10225000419880E09ECF3A98429880E09ACF3B9890
+:10226000439880E096CF3C98449880E092CF3D9888
+:10227000459880E08ECF3E98469880E08ACF3F9880
+:10228000479880E086CF5098589880E082CF519848
+:10229000599880E07ECF53985B9880E07ACF55982C
+:1022A0005D9880E076CF56985E9880E072CF579820
+:1022B0005F9880E06ECF5098589880E06ACF4631A2
+:1022C000510508F0EFC1FA01E859FE4E0C94A2172F
+:1022D0007E118111841187118A118D119011931132
+:1022E000961199119C119F11A211A511521352130D
+:1022F00052135213521352135213A811389A80E0FA
+:1023000048CF399A80E045CF3A9A80E042CF3B9A55
+:1023100080E03FCF3C9A80E03CCF3D9A80E039CFCF
+:102320003E9A80E036CF3F9A80E033CF509A80E0EB
+:1023300030CF519A80E02DCF539A80E02ACF559A22
+:1023400080E027CF569A80E024CF579A80E021CFB3
+:10235000509A80E01ECF4631510508F0A5C1FA0120
+:10236000EC54FE4E0C94A217CA11CD11D011D3110A
+:10237000D611D911DC11DF11E211E511E811EB11D1
+:10238000EE11F111541354135413541354135413E2
+:102390005413F411409880E0FCCE419880E0F9CECF
+:1023A000429880E0F6CE439880E0F3CE449880E0F7
+:1023B000F0CE459880E0EDCE469880E0EACE479892
+:1023C00080E0E7CE589880E0E4CE599880E0E1CEF6
+:1023D0005B9880E0DECE5D9880E0DBCE5E9880E0AA
+:1023E000D8CE5F9880E0D5CE589880E0D2CE4631E6
+:1023F000510508F05BC1FA01E050FE4E0C94A217A3
+:10240000161219121C121F122212251228122B1238
+:102410002E123112341237123A123D12561356133D
+:10242000561356135613561356134012409A80E013
+:10243000B0CE419A80E0ADCE429A80E0AACE439AD7
+:1024400080E0A7CE449A80E0A4CE459A80E0A1CE59
+:10245000469A80E09ECE479A80E09BCE589A80E0D4
+:1024600098CE599A80E095CE5B9A80E092CE5D9AA4
+:1024700080E08FCE5E9A80E08CCE5F9A80E089CE3D
+:10248000589A80E086CE82E08C934631510508F060
+:10249000A2C0FA01E25BFD4E0C94A21764126D1209
+:1024A00076127F12881291129A12A312AC12B512F0
+:1024B000BE12C712D012D912EB12EB12EB12EB12B2
+:1024C000EB12EB12EB12E21286B1817011968C9333
+:1024D000119712961C9280E05CCE86B1827090E0DB
+:1024E00012969C938E93119780E053CE86B18470A0
+:1024F00090E012969C938E93119780E04ACE86B11D
+:10250000887090E012969C938E93119780E041CE54
+:1025100086B1807190E012969C938E93119780E023
+:1025200038CE86B1807290E012969C938E9311976C
+:1025300080E02FCE86B1807490E012969C938E93AB
+:10254000119780E026CE86B1807890E012969C9319
+:102550008E93119780E01DCE89B1817011968C9376
+:10256000119712961C9280E014CE89B1827090E08F
+:1025700012969C938E93119780E00BCE89B1887050
+:1025800090E012969C938E93119780E002CE89B1D1
+:10259000807290E012969C938E93119780E0F9CD13
+:1025A00089B1807490E012969C938E93119780E08D
+:1025B000F0CD89B1807890E012969C938E9311971C
+:1025C00080E0E7CD89B1817011968C9311971296B6
+:1025D0001C9280E0DECD1C928DE8DBCD14B88FEF2D
+:1025E00085B980E0D6CD14B88FEF85B980E0D1CD24
+:1025F00014B880E0CECD8FEF84B980E0CACD45B964
+:1026000080E0C7CD83B111968C93119781E08C93B4
+:1026100080E0BFCD14B88FEF85B93F9A479881B954
+:1026200080E0B7CD8FEF82B980E0B3CD11B880E004
+:10263000B0CD8FEF81B980E0ACCD42B98FEF84B9D6
+:1026400055B9479A479814B880E0A3CD14B88FEFD6
+:1026500085B9579A5F9880E09CCD57985F9A80E043
+:1026600098CD8FEF84B945B95F9A5F9814B880E030
+:1026700090CD14B88FEF85B9579A5F9880E089CDD7
+:1026800057985F9A80E085CD8FEF84B945B95F9AFE
+:102690005F9814B880E07DCD8CE87BCD8DE879CD56
+:1026A0008DE877CD8DE875CD8DE873CD8DE871CD52
+:1026B00082B98FEF84B995B9479A479814B8419871
+:1026C000449800000000000000000000000000002E
+:1026D00000000000000000000000000083B1449AE8
+:1026E000419A089582B98FEF84B995B9479A47986E
+:1026F00014B884B965B945984198000000000000FD
+:102700000000459A419A14B80895CF93DF93952F0E
+:10271000E901813099F020F0823059F08AEA06C050
+:102720009FEF94B945B95F9A5F9814B8DF91CF9144
+:102730000895842F0E94721380E0F8CF8883842F3D
+:102740000E9458138983F8CF9FEF94B985B94598B3
+:1027500041980000000000000000459A419A14B81A
+:102760000895EF92FF920F93CF93DF9300D01F92C3
+:10277000CDB7DEB77C018FEF84B965B9479A47982A
+:1027800014B84498419842B980E0011119C0000082
+:1027900000000000000093B1F701E80FF11D9083E5
+:1027A0004F5F42B98F5F281780F7449A419A0F9084
+:1027B0000F900F90DF91CF910F91FF90EF900895C0
+:1027C0002B834A8389830E94441500000000000087
+:1027D00089814A812B81DFCF880F991F880F991F2C
+:1027E00020E030E02817390709F4089500000000C0
+:1027F0002F5F3F4FF7CF20E030E02817390709F46B
+:102800000895000000002F5F3F4FF7CFCF93DF9375
+:1028100080E190E00E94EC13C4E0D0E084EF91E00E
+:102820000E94EC1384EF91E00E94EC132197B1F722
+:10283000C4E0D0E08AEF90E00E94EC138AEF90E0D1
+:102840000E94EC132197B1F7DF91CF91089580E1B9
+:1028500090E00C94EC13CF93DF931F92CDB7DEB7CB
+:10286000F901813171F038F48130C1F078F08230B3
+:10287000C9F082E80FC08132A9F0823299F082312A
+:10288000C1F782E08083128211820AC089830E948C
+:10289000061489810F90DF91CF9108950E9427142B
+:1028A00080E0F8CF81E080831182FACF482F90E05A
+:1028B000982F882720E0411103C0211180680895D6
+:1028C00020953FEF340F4323F6CF80E090E008954A
+:1028D00080E0089560E070E0CB010895CF93DF932E
+:1028E0001F92CDB7DEB7DC018FEF80930701109206
+:1028F000080187E091E09093C6038093C503169684
+:102900008C91169789831196EC9111974E2F50E078
+:10291000FA013197EA30F10508F08CC0EE56FB4E13
+:102920000C94A2179C14AC14BA14C81400151A15F0
+:102930001115D614E414F21414964D915C91159768
+:1029400028E031E013966C91139712968C910E94B7
+:1029500081108093070160C014964D915C9115978A
+:1029600028E031E013966C91139712968C910E9497
+:10297000820CEFCF14964D915C91159728E031E0D1
+:1029800013966C91139712968C910E940010E1CFD0
+:1029900014964D915C91159728E031E013966C9157
+:1029A000139712968C910E948513D3CF14964D9154
+:1029B0005C91159728E031E013966C91139712966D
+:1029C0008C910E942B14C5CF14964D915C91159754
+:1029D00028E031E013966C91139712968C910E9427
+:1029E000060EB7CF14964D915C91159728E031E013
+:1029F00013966C91139712968C910E949500A9CF13
+:102A0000AE014F5F5F4F67E071E0CD010E947C0136
+:102A10009093C6038093C50389810F90DF91CF9176
+:102A20000895AE014F5F5F4F67E071E0CD010E94F6
+:102A30005210EECF80E88DCFE0916903F0916A03E8
+:102A4000278144815581322F360F231312C0E09124
+:102A50006903F0916A038781860F8783809138012B
+:102A6000861B8093380181110DC088E9838381E042
+:102A70000895FC017191CF01FA01E20FF11D7083FD
+:102A80002F5FE3CF80E00895CF93DF936091C7037A
+:102A9000635067FD91C08091C403CCE0D0E0C81BB7
+:102AA000D109C553DC4F8091C3038D3209F0CFC0EB
+:102AB000683009F07FC083EC8093B7038AE5809388
+:102AC000050110920F018881807679F0CE010E9475
+:102AD0006E148F3F09F466C09F81911169C09E8179
+:102AE000981708F065C0892F63C02A811092C0032F
+:102AF000998191110AC01092C10320EC33E082E069
+:102B00003093C6032093C503E7CF953029F4209373
+:102B1000C80320EC33E0F4CF963099F59B819130D7
+:102B200059F48EE890E09093C6038093C50382E148
+:102B300090E490930F01D0CF923019F48CE790E09D
+:102B4000F2CF9330A9F7211108C088EE90E090935E
+:102B5000C6038093C50384E0EBCF213041F48EEBB4
+:102B600090E09093C6038093C5038AE2E1CF2230C0
+:102B7000F9F680EA90E09093C6038093C5038EE156
+:102B8000D7CF983059F0993019F42093CA03C1CFA8
+:102B900081E09A3009F4BDCF80E0BBCF2AEC33E06E
+:102BA00081E0AECF988197FD8E8190E890930F01E0
+:102BB000809304011092C7038091050184FF3AC0FD
+:102BC000809104018F3FB1F1C82F893008F0C8E02F
+:102BD0008C1B809304018091B70398E88927809328
+:102BE000B703CC23D1F08091C5039091C603209107
+:102BF0000F0126FF3FC0A8EBB3E0FC012C2F34915E
+:102C00003D9331962150D9F701962FEF2C0F820F6B
+:102C1000911D9093C6038093C5036C2F88EB93E0BE
+:102C20000E945F16CC5FCC3019F08FEF80930401C7
+:102C3000C093050184E199B1947131F48150D9F7C1
+:102C40001092C8031092C203DF91CF910895809132
+:102C50000F0187FFAFCFCE010E941C158F3F21F4DB
+:102C60008EE180930501A6CF882309F4A3CF1092AB
+:102C70000401A0CFE8EBF3E0DC012C2F3D91319370
+:102C80002150E1F7C1CFE9E6F0E0808182608083E6
+:102C9000E89A0895A82FB92F80E090E041E050EA2B
+:102CA000609530E009C02D9182279795879510F0A7
+:102CB00084279527305EC8F36F5FA8F30895EADF95
+:102CC0008D939D930895CF93CFB7CF93DF93C39503
+:102CD0004C9BE9F74C9B0BC04C9B09C04C9B07C01D
+:102CE0004C9B05C04C9B03C04C9B01C089C06F939B
+:102CF000C091C403DD27C553DC4F2F9365E54C9B82
+:102D000003C02F916F91E6CF0F931F934F9320E055
+:102D100040E15F9309B1047104FB27F93F9350E050
+:102D20003BE039C0147140642F77012F5F5F1EC0F4
+:102D3000406819B114712F7752501FC0406409B117
+:102D40002F770471D1F15F5F00C023C0406219B1D9
+:102D50002F77147191F15F5F00C025C004711027B7
+:102D6000515012F45D5F0000115027952C3F19B1AE
+:102D7000C8F614710127015027952C3FC8F6422749
+:102D8000499309B1047110274F73115027952C3FB7
+:102D9000A8F64695469519B1147179F001270150AE
+:102DA00027952C3F98F66B5A60F3315009B1B0F675
+:102DB00000C011E01CBB002717C03B503195C31B5E
+:102DC000D04011E01CBB0881033CF9F00B34E9F062
+:102DD0002091C2031981110F1213EDCF093651F161
+:102DE0000D3211F0013E39F70093C9033F915F9115
+:102DF0004F911F910F912F916F91CCB3C0FD67CF71
+:102E0000DF91CF91CFBFCF9118952091C903222395
+:102E100069F31091C703112339F534303AF1309337
+:102E2000C7032093C3031091C4033BE0311B3093CD
+:102E3000C4031CC00091C7030130B4F40AE530910B
+:102E4000050134FD14C000930501C7EBD3E013C0A6
+:102E5000052710E000C000000BB91AC0052710E0DC
+:102E6000221F1DC010E021C04AE502C032ED432FF1
+:102E7000C4E1D0E032E01AB114615C9A0BB11AB926
+:102E800054E120E865E320FF05270BB92795179546
+:102E90001C3FF0F66695B8F7B1F720FF05270BB990
+:102EA000279517951C3FD0F62795179517FF0527EF
+:102EB00000001C3F0BB9B0F629913A9519F70B7E2B
+:102EC0001091C803110FC651D0400BB911F01093E7
+:102ED000C20311E01CBB00611AB11B7E402F4B7E68
+:102EE00054E05A95F1F70BB91AB94BB97FCF9EE070
+:102EF00088E10FB6F894A895809360000FBE909378
+:102F000060000E944316549A80E0815099F45498CE
+:102F100078940E94B90B80EF80936C03A8950E946F
+:102F200044150E94AB0280916C03803FB9F30E946C
+:102F3000950DF4CFA895EFE9FFE03197F1F700C0C8
+:102F40000000E3CFEE0FFF1F0590F491E02D0994F0
+:042F5000F894FFCF23
+:062F540069019B03FF5A16
:00000001FF
diff --git a/firmware/build_stm/inlretro_stm.bin b/firmware/build_stm/inlretro_stm.bin
index 061a677..d5958ca 100644
Binary files a/firmware/build_stm/inlretro_stm.bin and b/firmware/build_stm/inlretro_stm.bin differ
diff --git a/firmware/build_stm/inlretro_stm.elf b/firmware/build_stm/inlretro_stm.elf
index 0af0f16..cd8ae81 100644
Binary files a/firmware/build_stm/inlretro_stm.elf and b/firmware/build_stm/inlretro_stm.elf differ
diff --git a/firmware/build_stm/inlretro_stm.hex b/firmware/build_stm/inlretro_stm.hex
index 31341ac..bacf041 100644
--- a/firmware/build_stm/inlretro_stm.hex
+++ b/firmware/build_stm/inlretro_stm.hex
@@ -1,5 +1,5 @@
:020000040800F2
-:1000000000180020C1000008FD000008C92E0008EB
+:1000000000180020C1000008FD000008592F00085A
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000FD000008CB
:100030000000000000000000FD000008FD000008B6
@@ -13,1154 +13,1154 @@
:1000B000FD000008FD000008FD0000080101000827
:1000C00009490A4A0A4B9B1A03DD043BC858D05021
:1000D000FBDC0849084A0020521A02DD043A885025
-:1000E000FCDC01F0F7FE00002C47000800000020B7
-:1000F00030040020300400202C070020FEE7C0461A
-:10010000F0B5C94A89B0138801921BB2002B01DBFC
-:1001100001F0D6FB1388C54A1A4080231343019A85
-:100120001380019B1A8880231B011340C04A01D110
-:1001300001F094FBBF49C04C0B68C04801330B6011
-:1001400023787F211D008D43BD49BE4E0D70E1888F
-:10015000018000203080602633401370BA4A2600A8
-:100160001570834247D0FF23B84CCAB22370B84BF6
-:1001700060701C60029270780138082801D901F083
-:100180001BFB04F0E9F909003B06DC077B08C40906
-:10019000190B040BA6087D09B078B3888C221928A6
-:1001A00024D88022D20004F0D7F91A00560080012A
-:1001B00060023F03C8035B04170533053F0547058D
-:1001C0004F05580561056F0577057F0587058C0587
-:1001D000A005B605D705EC05030610033303B023CD
-:1001E0009C4A5B0351690B435361002222706A46AB
-:1001F000994B12891A803378602259B2002901DBA9
-:1002000001F0FDFA134016D17278062A0FD17288D8
-:10021000110A022901D101F0D1FA032901D101F01B
-:10022000D3FA8E4A012901D101F0C9FA03936A4633
-:10023000894B92891A80019B1A88894B1343894AFA
-:100240001A40C0239B015340019A9BB2138002F0D5
-:10025000DDFD01F0F5FA152B01D900F0C0FD180005
-:100260008023DB0004F078F9160023002E00BB0584
-:10027000390044004F00BB055C006900730080003A
-:10028000BB05BB058D009A00A500B200BF00CC00E5
-:10029000D60016019022D205136873490B401360F3
-:1002A0008023D1685B030B43D36000229EE790213B
-:1002B0000123C9050A689A430A60CA681343CB60E0
-:1002C000002293E790210423C9050A689A430A6033
-:1002D000CA681343CB60002288E790211023C90528
-:1002E0000A689A430A60CA681343CB6000227DE71C
-:1002F00090214023C9050A689A430A60CA681343DB
-:10030000CB60002272E79022D205136857490B4058
-:1003100013608023D168DB040B43D360002265E7C0
-:100320009022D205136852490B4013608023D16894
-:100330005B010B43D360002258E704234D490A6850
-:100340009A430A60CA681343CB6000224EE79022AA
-:10035000D205136848490B4013608023D168DB0540
-:100360000B43D360002241E79022D2051368434932
-:100370000B4013608023D168DB020B43D360002263
-:1003800034E79022D20513683D490B401360802367
-:10039000D1685B000B43D360002227E79022D2058F
-:1003A0001168384801401160D1680B43D3600022C6
-:1003B0001CE79022D205136833490B401360802359
-:1003C000D168DB010B43D36000220FE79022D205F6
-:1003D000136826490B4013608023D168DB040B436C
-:1003E000D360002202E79022D205136827490B4010
-:1003F00013608023D1685B050B43D3600022F5E6D0
-:1004000001231C490A689A430A60CA681343CB60F7
-:100410000022EBE610231E490A689A430A60CA6864
-:100420001343CB600022E1E6005C00408F0F000028
-:10043000EE0600208C04002048600040920400205A
-:10044000EC06002096040020ED060020F0060020B7
-:100450002007002000100240940400208645000878
-:100460008081FFFF8FBFFFFFFFFFEFFFFFFFFFFB5D
-:10047000FFEFFFFF00040048FFFFFFBFFFFFFBFF90
-:10048000FFFEFFFFFFFBFFFFFFBFFFFFFFFFFFEFD1
-:10049000000C00489021C9050A68D24802400A6051
-:1004A000CA681343CB600022A0E6152B01D900F0E7
-:1004B00099FC180004F050F8160021002C00960456
-:1004C000370042004D009604580063006D0078002C
-:1004D0009604960483008E009900A400AF00BA0031
-:1004E000C400CE009023DB051968BF4801401960A5
-:1004F000DA680240DA60002278E690230121DB0509
-:100500001A688A431A60DA688A43DA6000226DE664
-:1005100090230421DB051A688A431A60DA688A434B
-:10052000DA60002262E690231021DB051A688A4314
-:100530001A60DA688A43DA60002257E69023402185
-:10054000DB051A688A431A60DA688A43DA60002297
-:100550004CE69023DB051968A44801401960DA686D
-:100560000240DA60002241E69023DB051968A048CA
-:1005700001401960DA680240DA60002236E60421A0
-:100580009C4B1A688A431A60DA688A43DA60002250
-:100590002CE69023DB051968974801401960DA685A
-:1005A0000240DA60002221E69023DB0519689348B7
-:1005B00001401960DA680240DA60002216E69023F2
-:1005C000DB0519688E4801401960DA680240DA607C
-:1005D00000220BE69023DB05196882480140196070
-:1005E000DA680240DA60002200E69023DB05196831
-:1005F000844801401960DA680240DA600022F5E5BB
-:100600009023DB051968794801401960DA680240D7
-:10061000DA600022EAE59023DB0519687A48014098
-:100620001960DA680240DA600022DFE50121714BCF
-:100630001A688A431A60DA688A43DA600022D5E5CC
-:100640001021724B1A688A431A60DA688A43DA60AA
-:100650000022CBE59023DB05196862480140196050
-:10066000DA680240DA600022C0E5152B00D9BCE34D
-:10067000180003F071FF16001F002700BA032F00B7
-:1006800037003F00BA034800510058006100BA0328
-:10069000BA036A0073007A0083008C0095009C0006
-:1006A000A30090228023D20511685B030B431360E3
-:1006B00000229BE590220123D20511680B431360B1
-:1006C000002293E590220423D20511680B431360A6
-:1006D00000228BE590221023D20511680B43136092
-:1006E000002283E590224023D20511680B4313605A
-:1006F00000227BE590228023D2051168DB040B43A6
-:100700001360002272E590228023D20511685B01FC
-:100710000B431360002269E50423364A11680B433A
-:100720001360002262E590228023D2051168DB0568
-:100730000B431360002259E590228023D2051168F3
-:10074000DB020B431360002250E590228023D20588
-:1007500011685B000B431360002247E59021C90537
-:100760000B681A430A60002240E590228023D205DC
-:100770001168DB010B431360002237E590228023D0
-:10078000D2051168DB040B43136000222EE5902292
-:100790008023D20511685B050B431360002225E519
-:1007A0000123144A11680B43136000221EE5102335
-:1007B000164A11680B431360002217E59021C90502
-:1007C0000B681A430A60002210E58D22082B00D026
-:1007D0000CE59022D205516838330B435360002258
-:1007E00004E5C046FFFBFFFFFFFFEFFFFFFFFFFB3E
-:1007F000FFEFFFFF00040048FFFFFFBFFFFFFBFF0D
-:10080000FFFEFFFFFFBFFFFFFFFFFFEF000C0048F1
-:100810008D22082B00D0E9E490224021D2055368B4
-:100820008B4353600022E1E4152B00D9E0E218006D
-:1008300003F092FE16001B002100DE0227002D00AF
-:100840003300DE023A00400045004C00DE02DE02CA
-:10085000530059005F0065006C00730078007D0054
-:100860009023DB059A620022C0E490230122DB057D
-:100870009A620022BAE490230222DB059A620022E7
-:10088000B4E490230422DB059A620022AEE49023B4
-:100890000822DB059A620022A8E4802290239201BC
-:1008A000DB059A620022A1E490234022DB059A62D4
-:1008B00000229BE40222D14B9A62002296E480221D
-:1008C00090231202DB059A6200228FE4802290239B
-:1008D0009200DB059A62002288E490231022DB0557
-:1008E0009A62002282E490232022DB059A62002291
-:1008F0007CE490238022DB059A62002276E4802249
-:1009000090239201DB059A6200226FE480229023FB
-:10091000D201DB059A62002268E40122B74B9A6299
-:10092000002263E40422B64B9A6200225EE4902324
-:100930002022DB059A62002258E4152B00D95AE2E6
-:10094000180003F009FE16001B00210058022700C2
-:100950002D00330058023A00400045004D00580277
-:10096000580255005C0063006A0072007A00800043
-:1009700086009023DB059A61002237E49023012250
-:10098000DB059A61002231E490230222DB059A61A3
-:1009900000222BE490230422DB059A61002225E447
-:1009A00090230822DB059A6100221FE48022902315
-:1009B0009201DB059A61002218E490234022DB05B6
-:1009C0009A61002212E402228C4B9A6100220DE40B
-:1009D000802290231202DB059A610022FFF706FCB9
-:1009E000802290239200DB059A610022FFF7FEFB34
-:1009F00090231022DB059A610022FFF7F7FB90237A
-:100A00002022DB059A610022FFF7F0FB9023802271
-:100A1000DB059A610022FFF7E9FB80229023920117
-:100A2000DB059A610022FFF7E1FB80229023D201CF
-:100A3000DB059A610022FFF7D9FB01226F4B9A6117
-:100A40000022FFF7D3FB04226D4B9A610022FFF7CF
-:100A5000CDFB90232022DB059A610022FFF7C6FB25
-:100A600002226270152B00D9B1E0180003F060FD7E
-:100A70000B151EAF273039AF434C545DAFAF6770D5
-:100A800079828C969EA690238022DB051B69D2007A
-:100A9000134063800022FFF7A9FB90230122DB05AE
-:100AA0001B69134063800022FFF7A0FB9023022202
-:100AB000DB051B69134063800022FFF797FB90233F
-:100AC0000422DB051B69134063800022FFF78EFBC5
-:100AD00090230822DB051B69134063800022FFF787
-:100AE00085FB90238022DB051B6992011340638004
-:100AF0000022FFF77BFB90234022DB051B6913409C
-:100B000063800022FFF772FB02223C4B1B691340FB
-:100B100063800022FFF76AFB9023DB051B6900223C
-:100B2000DB0BDB036380FFF761FB90238022DB0597
-:100B30001B699200134063800022FFF757FB90234C
-:100B40001022DB051B69134063800022FFF74EFB78
-:100B500090232022DB051B69134063800022FFF7EE
-:100B600045FB90238022DB051B6913406380002234
-:100B7000FFF73CFB90238022DB051B6992011340A9
-:100B800063800022FFF732FB90238022DB051B6984
-:100B9000D201134063800022FFF728FB0122174B8C
-:100BA0001B69134063800022FFF720FB0422144BD3
-:100BB0001B69134063800022FFF718FB902320225B
-:100BC000DB051B69134063800022FFF70FFB002346
-:100BD0008D226370FFF70AFB80230A4ADB0251690A
-:100BE0000B435361054A084913680B401360D168F1
-:100BF000064B0B43D3600022FFF7F8FA00040048CD
-:100C0000000C004800100240FFFFAAAA0000555542
-:100C1000D34AD44913680B401360D168D24B0B43BD
-:100C2000D3600022FFF7E2FACD4ACE4913680B40A9
-:100C300013600022FFF7DAFAC94ACB4B11680B4365
-:100C400013600022FFF7D2FAC5491B024A69D2B2EB
-:100C500013434B610022FFF7C9FAC14B00221B6905
-:100C60001B0AA37001236370FFF7C0FA8023BF4AF9
-:100C70001B0351690B435361BD4ABE4B11680B43C3
-:100C800013600022FFF7B2FAB94ABA4BD1680B439E
-:100C9000D3600022FFF7AAFAB54AB74913680B40A0
-:100CA00013600022FFF7A2FAB14AB24B11680B435E
-:100CB00013600022FFF79AFAAD4A53610022FFF752
-:100CC00095FA8023A94A1B0351690B435361A44A37
-:100CD000AA4B11680B4313609022D2051168A84BF0
-:100CE0000B4313600022FFF781FA9D4AA34BD168A2
-:100CF0000B43D3609023DB05D868A1490143D96039
-:100D00001168A048014011601A689F490A401A60A2
-:100D10000022FFF76BFAF8228027914D980269694B
-:100D2000D20110403F025A023A4089051043890D12
-:100D300008439021686110205D08C90528404A6970
-:100D4000924DDB012A4002438020C001034013433F
-:100D50004B610022FFF74AFAC023844ADB02516943
-:100D60000B4353617E4A8A4B11680B4313609022F8
-:100D7000A023D20511685B030B4313600022FFF729
-:100D800035FA774A824BD1680B43D3609023A02178
-:100D9000DB05D86849030143D96011687D480140EB
-:100DA00011601A687C490A401A600022FFF71EFA97
-:100DB000FF216B489D0042692940784DDB002A40A5
-:100DC0000A4342619022C020D205C000516903400D
-:100DD000734801400B4353610022FFF707FA8D224D
-:100DE000FFF704FA8D22FFF701FA8D22FFF7FEF9D3
-:100DF0008D22FFF7FBF98D22FFF7F8F9B578B3885C
-:100E0000022D00D1D2E005D8002D60D0012D64D094
-:100E100096255EE0042D00D15DE100D219E1802D20
-:100E2000F6D19023012740218025DB056770996268
-:100E30001A686D012A431A60C0465A481C691A682C
-:100E40000C4002401A60DA680240DA60F022002C9E
-:100E50003AD11A6802401A60DA681543DD601A69EF
-:100E600094461A690A400492C0461A690592C0461F
-:100E7000C0461A690692C046C046C0461A69079223
-:100E8000C046C046C046C0461D691A6802401A6086
-:100E9000DA681040D860634622000B4214D1049BEC
-:100EA0003A00002B10D1059B02320B420CD1069B5D
-:100EB00003320B4208D10B0007990432194203D1C7
-:100EC00005321D4200D1D132374B9A7001E100F05A
-:100ED0005DFF354B1D70FFF78AF900F057FF902337
-:100EE000DB051A681F4C2A431A6080229D6119682D
-:100EF00052030A431A6080220421D2009A621A68BF
-:100F000000250A431A6002229A6118680E320243D1
-:100F10001A604022996119680A431A6008229A618E
-:100F200080231249DB024A6913434B610C4B1A6858
-:100F300022401A60D8680C4A1043D86018682040D4
-:100F40001860D8680243DA6080234A691B031343A0
-:100F50004B61074B074A19680A431A605D61B8E79D
-:100F600000040048FFFFAAAA0000555500100240E7
-:100F70000008004855555555AAAAAAAA0000505580
-:100F800000010010FFFFAFAAFFFEFFEFEFBF000060
-:100F900050550000AFAAFFFFFFFFEBFF03FF00006B
-:100FA000FFF90000FFEFFFFFF006002000F0EEFE6B
-:100FB00090230121DB051A68CE4D0A431A601022E6
-:100FC000996119680A431A60042240219A611A68DB
-:100FD0000A431A6008229A618022996119685201B5
-:100FE0000A431A608022C449D202486902434A6116
-:100FF000C24A106828401060D468C1480443D460D5
-:1010000014682C401460D4682043D06080204C6960
-:10101000000320434861BB48BB4C05682C430025B6
-:1010200004604561C0204C69C002204348611068DB
-:10103000B64901431160A0211868490301431960B2
-:10104000B3485169014051615A69B2490A405A6135
-:101050003FE7DBB2022B1ED00025032B00D138E77F
-:10106000012B6AD18022A4491203486902434A61D4
-:10107000A44A116899431160D1681943D16051683D
-:1010800019435160936111680B431360A24B1D70AB
-:10109000A24B1A601DE7B023974A5B0351694020B9
-:1010A0000B4353619023DB051A689D490A401A607F
-:1010B0008022D96852011143D960596801435960AF
-:1010C000986119680A4308211A60934A1170934A7B
-:1010D00013600025FDE6DBB29825012B00D0F8E671
-:1010E000902106220A208F4BC90519608E4B1A7079
-:1010F000824B8E4A13608E4A10708E4A0130136004
-:101100008D4A10708D4A013013608D4A1070802016
-:10111000794A00035469204350611C688948204380
-:1011200018600868884B03430B60B02351695B0368
-:101130000B43536100F04EFDCBE79725C9E6B57828
-:10114000F178B088052D2CD009D8012D22D0002DA2
-:101150001BD0022D22D0042D26D0A02517E0822DF1
-:1011600052D009D8802D23D0812DF6D10123637070
-:1011700001F000FEA0700FE0832D4AD0842DECD149
-:101180000123637001F0E8FFF4E701F013FE25701E
-:10119000FFF72DF801F0FCFF0025F8E701F0B4FDA2
-:1011A000FAE701F0B1FFF7E7002201F091FFF3E762
-:1011B000012290236270DB051968594D294019609E
-:1011C000D9682940D96080210225C90099629A61B5
-:1011D0009D614C4D6861C046C04600B299610028CF
-:1011E00000DA9A62C046C046C046C046C046C04605
-:1011F00090228021414BD205C9001B6991620121D7
-:101200001B0A9161A370C7E70123637001F0E8FF37
-:10121000B0E701238022902080216370394B1201B6
-:101220005A61C00502695D69C900EDB2294359617F
-:1012300092B20369802110009BB2184389001025E7
-:10124000084219D00B4018000A40411E8841110085
-:101250004D1EA941C0B2C9B2002802D011250029F3
-:101260000AD1002A02D11225002805D1002B02D173
-:101270001325002900D1FF25A5708DE7B378B0882C
-:10128000012B21D0002B03D0022B18D0AA2313E06E
-:10129000FF221A4D870069693A401D4FC00039404E
-:1012A0000A436A619021C025C905ED004A690540DD
-:1012B000184802402A434A612370FEF798FFF178EC
-:1012C00001F0C0FE0023F7E7637001F0E1FEA070BB
-:1012D000F8E7B578F278B188112D00D1C9E035D89A
-:1012E000012D00D198E0002D3CD0022D00D1A9E0C5
-:1012F00082254CE7FFFFAAAA001002400004004824
-:1013000000005555000800485555555550550000EA
-:1013100003FF0000FFF90000FC060020F806002093
-:10132000FFEFFFFF10070020140700200807002030
-:101330000C070020180700201C07002000070020D1
-:10134000040700200000505500010010212D00D19D
-:1013500085E0222D00D188E0122DC9D10223102072
-:10136000637089E001252900C44AC54F12783B68A3
-:10137000914099625A6810208A435A6001F056FEE3
-:101380002900BE4B3A681B78042799400B009161F5
-:10139000516804950B435360FA20400001F046FE6B
-:1013A000B64A04991278FA209140B54D40002B6856
-:1013B000013F99625A68BFB28A435A6001F036FE13
-:1013C000AE4B04991B782A6899400B0091615168D3
-:1013D0000B435360002FDFD10425FA2001F026FED5
-:1013E0000121A64AA64F12783B68914099625A683B
-:1013F000FA208A435A6001F019FE01219F4B3A6896
-:101400001B78013D99400B0091615168ADB20B43CF
-:101410005360002DE1D1BAE62900984A984F12781E
-:101420003B68914099625A6810208A435A6001F0E3
-:10143000FDFD924A3B68127895409D615A681543BC
-:101440005D60A9E601238D4A637012788D4993404F
-:101450008B4A9BB21268002001F082FF8AE60123CA
-:101460000020637001F032FD84E6012310206370D8
-:10147000F8E702230020637001F082FD60808BE6B4
-:10148000B378B288042B1AD006D8022B1CD021D8EE
-:10149000012B0FD087230FE7072B24D003D8052B70
-:1014A000F8D1794B14E0082B22D0802BF2D100F038
-:1014B00091FB07E7754A1278A270637002E7744BDC
-:1014C0001B78A3700123F8E7704B1A708322704BCE
-:1014D0001A70F7E66D4B6E4D1A7083232B7000F077
-:1014E000E9FB2B78EDE76B4B1A70120A5A70E9E6AC
-:1014F000684B1A78A2705A78E2709A782271DA787A
-:1015000062711A79A2715B79E3710623D5E7B2782B
-:101510001300303B2F2B19D8F078032800D9EEE0C8
-:1015200003F006F8140210125B4B512A00D177E049
-:1015300024D8312A53D00BD8002A33D0302A49D0AE
-:10154000B42345E0554BF0E7554BEEE7554BECE740
-:10155000332A4ED048D3502AF2D1002222700632CC
-:1015600062701A7AA270DA78E2705A7A22719A7AE4
-:1015700062719A78A2715B7CE37145E07F2A00D9A1
-:10158000A3E0702A5CD2602A36D0612A40D0522A69
-:10159000D6D100221B882270A37002321B0A62700F
-:1015A000E37031E0FF23404953540132102AFBD14C
-:1015B000394A3C49D3709370394ACB70D3709370D9
-:1015C00001228B703549CB708B70384B1A70002319
-:1015D000237019E0B288110AD9721A73F7E7B2883A
-:1015E000110A59739A73F2E7B288110AD9731A74FF
-:1015F000EDE7B2885A74EAE7002323700133637081
-:10160000B388294AD35CA370294B1C60FEF7EFFD19
-:101610000023237001336370264B1B68DB78F2E7ED
-:101620000022227006326270DA7AA2701A7BE270AF
-:101630005A7B22719A7B6271DA7BA2711B7C9BE7D9
-:10164000184B1C495C6833787F2B00D956E16846FB
-:10165000194B007A18700868C378002B2ED0002030
-:101660000290982B05D151E100200290D02B00D19F
-:101670004CE10E4B10301870FF2324E0FC060020D4
-:10168000F806002004000200D9040020B80400205D
-:10169000DA040020B904002044040020580400208B
-:1016A0006C04002030040020DB040020980400209B
-:1016B0002007002080040020880400209F4B186031
-:1016C0009023C3706F33029320E10720104003285A
-:1016D00015D802F02DFF16021812994B802A93D3C9
-:1016E000872A12D97032D2B2072A8DD800222270EE
-:1016F000F2789A72B2881A8086E7924BEEE7B523A9
-:1017000066E7914BEAE7914BE8E7B188F0780A0A7F
-:10171000C9B245189446BE22102D2DDC0432002893
-:101720002AD0DD78033AFF2D26D19D780132FF2D96
-:1017300022D10022D5B2A84220D862464501013DFF
-:101740001D724D012F009A700022814DDA70ED1943
-:101750005A729A721A80DA721A735A739A73DA7317
-:101760001A745A745D607B4B591863468B5401326E
-:10177000D3B29842F9D80022227045E701328D1881
-:10178000744F013D7D5DFF2DD4D0C122F4E7B278C6
-:10179000002A04D0402A07D0D222227035E72270D6
-:1017A000B1886D4A117030E70022227001326270F8
-:1017B000694A1278A27028E780237DE5674A684B62
-:1017C0001A601223FEF732FDD2B2012A11D0002A8C
-:1017D00009D0022A01D0FEF729FD614B614A1A6047
-:1017E000614BFEF723FD5E4B604A1A600423FEF74F
-:1017F0001DFD5B4B5E4A1A605E4BFEF717FD134200
-:1018000008D17378052B05D173885B4A13705B4A46
-:10181000DBB21380019B5A4A1B8801991340594A35
-:1018200013439BB20B800021574B1980019B1B88EF
-:101830001A43564B1A40564B5A40019B92B21A809B
-:10184000544BDA8F520507D58021534A118000226C
-:10185000DA87524B019A138009B0F0BD1278402A02
-:10186000EED14F4A1278002AEAD14E4A1088334A04
-:10187000C0B211684D7A4E68DAB25419E4B290429F
-:1018800018D84A7A82184A72474A13781B1ADBB270
-:101890001370002B01D19833CB70019B1A88394B00
-:1018A0001343424A1A40C0239B015340019A9BB202
-:1018B0001380C5E73E4A9A18127801333255DBE7A8
-:1018C000019B1B881B06BBD5019B3A4A1B88134012
-:1018D000802212021343019A1380374B1B78802B0E
-:1018E00001D1FEF7B4FC244A1378002BA8D0802144
-:1018F0000B4329490B8000231370A1E70868C378C4
-:10190000D82B00D0B0E680234468C3700B68002158
-:101910005972DB78902B00D076E6712A00D073E6FE
-:10192000064BB2881B6859680A70B2885968120A57
-:101930004A705A7A02325A7266E6C046840400201F
-:10194000440400206C0400203004002058040020CF
-:10195000EC040020DB0400209804002074450008FB
-:1019600020070020F04500081E03000098450008ED
-:101970009C4500082A0300009004002050600040AD
-:101980008F8EFFFF8080FFFF02600040BFBFFFFF20
-:1019900030300000065C00404C5C0040203200000B
-:1019A000ED06002006600040880400208FBFFFFF86
-:1019B000486000400F8FFFFFEC060020F0B5404B61
-:1019C0008BB0089119783F4B09921B7801900293D4
-:1019D0003D4B019D1C683D4B3D481A7801231E007C
-:1019E00096403C4AA662102D5ED112780068934062
-:1019F000836201200200364B05901F68354B1B782F
-:101A00009A4003920200344B1B680693334B1B78B9
-:101A10009A4093B202000793314B1B689C46314BAE
-:101A20001B789A40002304921A000198202806D1BE
-:101A3000029D05981D4105423ED00398B861089863
-:101A400020280FD1002B01D11E4883540698056928
-:101A50000798054206D01B48855C059898400543C9
-:101A60001848855409980139C9B2002802D00029C4
-:101A700000D1A6616046049D0133DBB285618562B9
-:101A8000082B05D101320F4BD2B29B5C029300238D
-:101A90000029CAD10E4B1A680E4B197801238B40CE
-:101AA0009362A6620BB0F0BD019D112DA1D11278F9
-:101AB0000068934083619CE70398B862BFE7C04623
-:101AC000D9040020B9040020180700201C070020BA
-:101AD000080700200C070020100700201407002032
-:101AE0000007002004070020F7B51F4B1F491A7894
-:101AF0001F4B10282ED101241E780D68B440AC6213
-:101B0000012635000C6831001B7801969D40194B69
-:101B10001B680093184B1B78994000238C461900D2
-:101B200020280DD1154E019F765C1E413E4219D0F2
-:101B3000A5610133DBB2082B02D100230131C9B208
-:101B40006646009F013AD2B2BE61BE62002AE7D16A
-:101B5000A562F7BD1128D3D101241E780D68B440C9
-:101B6000AC61CDE7A562E4E7D904002018070020A6
-:101B70001C0700200007002004070020B9040020F3
-:101B8000022907D10F4B104A984218D0904209D130
-:101B9000180007E0032906D10A4B0B490B4A98426B
-:101BA0000BD1080070470429FCD1064B064A984225
-:101BB00005D006499042F4D0054A8842E6D110008B
-:101BC000F0E7C04630040020440400205804002000
-:101BD0006C040020F0B52C4B85B019682B4B2C48B9
-:101BE0001B7800780193012302901E0018001F004B
-:101BF000019A029C9640A040264D274A2D781268F3
-:101C0000AF408E628446906224489D40006887629F
-:101C1000046803941C00AC402500039C2543056028
-:101C20004568019CBD4345609C401D00A540086877
-:101C30001C00284308604868B04348601068029957
-:101C400099408C40210001436046116051688143F6
-:101C5000134851600078134A984083401268124834
-:101C6000116899431160D1680B43D36080220F4BF8
-:101C70001A70002319000E4A13701A1801331170DC
-:101C8000202BFAD105B0F0BD180700201C0700205A
-:101C90000C07002004070020080700200007002090
-:101CA0001407002010070020B9040020DA040020E7
-:101CB000D904002010B5334B1B78082B5DD016D803
-:101CC000314C032B44D007D8012B2DD0022B31D01F
-:101CD000EE222D4B1A7023E0062B44D049D8042B5A
-:101CE000F6D18123012223702021112027E00F2B20
-:101CF00034D008D8244C0D2B25D00E2BE8D18123CD
-:101D00000022237027E0802B08D01F4CFF2B08D027
-:101D1000102BDDD181230022237027E0FFF75AFF2B
-:101D200010BDF0232370FBE7812320202370FFF7F1
-:101D3000DBFE06E081230122002123702020FFF733
-:101D40003DFE8223EEE78123002223701100F5E798
-:101D500081230122237020211020F0E781230A4CE7
-:101D600000222370C0E78123012223702021080074
-:101D7000E5E7812310202370D9E78123024C11204D
-:101D80002370D4E7B8040020DA040020BC22444BBE
-:101D9000D203996A70B50A439A629A6A4149424CE1
-:101DA0000A409A628022596912030A435A613F4AE3
-:101DB0003F4910683F4E084310601068204080245F
-:101DC0001060D068E4020143D1605A6922435A612D
-:101DD000394A116831401160D56838490D43D560E2
-:101DE000106830401060D0680143D160B02158695C
-:101DF0004903014359619023DB05196830480140CC
-:101E000019608021D868490301430120D96019680D
-:101E100081431960D9680143D96004211D688D434D
-:101E20001D60DD680D43DD6010251E68AE431E6039
-:101E3000DE683543DD6040251E68AE431E60DE6807
-:101E40003543DD601D681F4E35401D608025DE680E
-:101E5000ED043543DD601D681B4E35401D60802557
-:101E6000DE68ED053543DD601D68184E35401D60A8
-:101E7000DD682C43DC601468154D84431460D4681D
-:101E80002043D0601C682C401C60D8682840D86073
-:101E900013688B431360D3681943D16070BDC0468B
-:101EA00000100240FFFFA1FFAAAAAAAA000800484A
-:101EB00055555555FFFFAAAA000400480000555586
-:101EC000FFFFEFFFFFFFFFFBFFFFFFBFFFFFFBFF7A
-:101ED000FFEFFFFF9022DA4B12031968F0B50A43B7
-:101EE0001A60802289B0920219681142FCD0012246
-:101EF00059680A435A608022596852020A435A605C
-:101F00008022596852030A435A6080221968520499
-:101F10000A431A608022920419681142FCD01121F0
-:101F20000220C84A11605A680E398A4302435A6037
-:101F30001A6B7D310A431A638022DC691204224342
-:101F4000DA6162B6C04B4025DA8FC04C8243DA8733
-:101F5000DA8F01388243DA870022BD48C2872280A7
-:101F6000BC4C2580BC4C083525808025BB4C6D01C0
-:101F70002580BB4C2180C287BA49BB4A1180802191
-:101F8000BA4A090611608022D98FD2000A43DA8743
-:101F9000B74AB84B1A80FFF7F9FEF022B64B1A7019
-:101FA000B64E2023327811009943D2292ED1B4495C
-:101FB000B448C978C3780224FF2904D1FF3B1C0030
-:101FC000631E9C41E4B2B04BDB78FF2B00D00324AE
-:101FD000AE4BDB78FF2B00D00424AD4BAD4F1C7013
-:101FE0003860D22A12D10023012505E02100FFF735
-:101FF000C7FD01230135EDB2A542F7D3002B00D078
-:10200000386080223B68DA70D02333703378F22B4B
-:1020100005D10022023B33709E4B1B68DA70357885
-:10202000D02D01D000F016FE9A4E3068C378802B78
-:1020300001D000F00FFE964B1978FFF7A1FD0023A9
-:1020400030600188C57004004372C07ACDB2103888
-:10205000042801D900F0FCFD02F07EFA05006E00B4
-:1020600028012C01E700E27B012A0DD1802089099B
-:10207000CEB20002102101F02BF80F21E0203140F8
-:102080000022000201F024F8E37B032B0FD120880B
-:102090003D3380099D43804BC1B2C0B2C01880B2AD
-:1020A00000F032FE8021237AA278294334E01E2BEF
-:1020B00007D1C0202188223389099D43C9B200027B
-:1020C000EEE7222B01D00B2B07D12088C009C1B22B
-:1020D000C0B26C3880B200F017FEE37B1C2B11D12C
-:1020E000A0208121C001268800F00EFE8020F60984
-:1020F000F6B23100000200F007FEA0200021C0016E
-:1021000000F002FE8023E27B5B421F2A08D01D43C1
-:10211000EDB22900237AA278606801F0B1F883E07B
-:102120007022A0202188954309091D43C9B2C0012E
-:10213000EDB200F0E9FDECE7E37B002B06D1237A5A
-:10214000A2782900606801F0D1F86072E37B0B2B64
-:102150000FD12188514849090901C9B200F0D4FDC5
-:102160001F231D40A278237A2900606801F0BEF881
-:102170006072E37BFE2B3ED1218849484909C9B2F0
-:1021800001F006F81F231D40237AA1780393454BE5
-:1021900028025A696768D2B202435A6180209022AD
-:1021A000C000D20590610120FF269062033090624A
-:1021B0005A69360232400A435A61C0463A48002200
-:1021C0008446C046604600690131000AB854586927
-:1021D000C9B230400843586101320398D2B29042EC
-:1021E000EFD290230421DB0599618021C900996217
-:1021F000012199616272E27B012A16D180201021AF
-:102200000002268800F064FF1F21A0203609F6B2E4
-:1022100031400022000200F05BFF0F21237AA278F8
-:102220002940606801F062F860721A4B1B681988D7
-:102230009A7A52181A80D822DA7000F00BFDC04644
-:102240000010024000200240025C0040505C004050
-:10225000065C0040006000400460004006600040F2
-:102260004C5C004020320000005C004000E100E0D7
-:102270000080FFFF585C0040DA0400209804002032
-:102280004404002030040020580400206C04002086
-:10229000240700208004002073E4FFFFFFFF0000FC
-:1022A000FF3F00000008004800040048237AA2789D
-:1022B0006021FAE6CB09FF21DB48DC4F46699A0032
-:1022C0003E400A403243C02790264261F605FF0097
-:1022D000DB0072693B40D64F7F393A40134373614C
-:1022E00063680D430393237AA2780493D14B7F3123
-:1022F0005F692D020F403D43FB395D61B1620339D7
-:10230000B162FF26596936023140114359610021FB
-:10231000C046C046C046C0460569039F2D0A7D548D
-:102320005D690132D2B2354015435D610131049DD2
-:10233000C9B28D42ECD290230422DB059A61033AA4
-:102340009A61617271E7F37B002B09D18020039BB6
-:10235000B94A1843B94BBA490093330000F05CFF07
-:10236000F27B012A1CD1802010210002378800F066
-:10237000AFFEE020BF053F0F00223900000200F051
-:10238000A7FE747A039AA3B20493802313431B021B
-:102390001BB20693337A049A934200D3E9E0747235
-:1023A000F37B032B17D1039A3C331A40130080228E
-:1023B0001343039333889B0904936B461B7C06935A
-:1023C000039B747A1B021BB2A7B20793337ABB42FA
-:1023D00000D343E17472F37B1E2B15D1039A213392
-:1023E0001A40130080221343039333889B09DBB206
-:1023F0000593039B747A1B021BB2A5B20693337A32
-:10240000AB4200D370E17472F37B222B01D00B2B13
-:1024100011D13088C009C1B2C0B26C3880B200F0AE
-:1024200073FC8020039B844A1843844B84490093A7
-:10243000330000F0F1FEF37B0C2B1AD1039A133317
-:102440001A401300C0208022348813436409A52158
-:10245000C001E4B2039300F057FC2100794800F07A
-:1024600053FC794B794A009379493300039800F083
-:10247000D3FEF37B1C2B3ED1A02033888121DB09C6
-:10248000DBB2C001059300F03FFC802005990002FB
-:1024900000F03AFCA0205421C00100F035FC757A10
-:1024A000AA21ABB26B48049300F02EFC55216A4878
-:1024B00000F02AFC2021674800F026FC8023A0279A
-:1024C000039AFF0113431B021BB20793337A049A4A
-:1024D000934200D356E1802090210002757200F0F3
-:1024E00013FC80200021000200F00EFC8020F0216F
-:1024F000000200F009FCF37B1F2B33D1A0203188B0
-:10250000C0010909C9B200F0FFFB747AAA21A3B285
-:102510005048049300F0F8FB55214F4800F0F4FBBD
-:1025200020214C4800F0F0FB70230427039A9A43C3
-:10253000F03B13435BB21B020593337A049A934238
-:1025400000D364E1802090210002747200F0DCFB73
-:1025500080200021000200F0D7FB8020F021000243
-:1025600000F0D2FBF4233288F370B37A9B183380E7
-:1025700092E3802000221021000200F0A9FDAA2190
-:10258000334800F0C1FB5521304800F0BDFBA021CD
-:102590002F4800F0B9FB069D73682543ADB2195D65
-:1025A000280000F0B1FB802001221021000200F081
-:1025B0008FFDE02000223900000200F089FDC046B6
-:1025C000280000F0D7FB0590280000F0D3FB059B06
-:1025D0008342F4D17368059A1B5D134D93420FD16A
-:1025E000049B2A6801339BB2049304239A432A6014
-:1025F000EA6801341343EB600223E4B2AB62C9E63C
-:10260000802001221021000200F062FDE020002263
-:102610003900000200F05CFD04232A6813432B609C
-:102620000223AB61B6E6C0460004004803FF000089
-:10263000FFF9000000080048AA2A0000B52D000894
-:1026400055550000FFFF0000092D0008AAAA000050
-:1026500055D50000AA8A0000558500000021CC480D
-:1026600000F052FBAA21CB4800F0A4FB5521CA4838
-:1026700000F0A0FBA021C74800F09CFB6B46187C33
-:10268000C64B0699C01880B200F03EFB079D7368E8
-:102690002543ADB2195D280000F08CFBC046280030
-:1026A00000F068FB0590280000F064FB059B834266
-:1026B000F4D1736805991A5DB94B8A420DD1042291
-:1026C0001968013491431960D96801370A43DA6007
-:1026D0000222E4B2BFB29A6278E6042219680A4381
-:1026E0001A6002229A6171E6C0200121000200F006
-:1026F0000BFBAA21AB4800F007FBC0200021000221
-:1027000000F002FB5521A84800F0FEFAC02001218C
-:10271000000200F0F9FAA021A24800F0F5FAC0206A
-:102720000599000200F0F0FA069B23439FB27368FC
-:102730003800195D00F0E8FAC046380000F01AFBD6
-:102740000490380000F016FB049B8342F4D17368B8
-:1027500004991A5D924B8A420DD104221968013402
-:1027600091431960D96801350A43DA600222E4B264
-:10277000ADB29A6243E6042219680A431A60022243
-:102780009A613CE65421380000F0BEFA079CA02173
-:102790002C43A4B2200000F0B7FA73682000595D02
-:1027A00000F0B2FAC046200000F0E4FA06902000E3
-:1027B00000F0E0FA069B8342F4D17368069A5B5DF1
-:1027C000774C93420FD16B1CDDB2049B226801331E
-:1027D0009BB2049304239A432260E2681343E360AC
-:1027E0000223A36272E68121380000F08DFA802076
-:1027F0000599000200F088FA5421380000F084FAAC
-:1028000004232268134323600223A3615EE6059D2F
-:10281000A0212543ADB2280000F076FA73682800A5
-:10282000195D00F071FAC046280000F0A3FA039089
-:10283000280000F09FFA039B8342F4D17368039948
-:102840001A5D574B8A420ED1049A0134013292B27A
-:1028500004921A68E4B2BA431A60DA683A43DA605A
-:1028600002229A6269E61A683A431A6002229A6161
-:1028700063E6F37B002B09D1039B747A1B021BB226
-:10288000A5B20593337AAB4247D27472F37B0B2B1C
-:1028900011D1039A14331A40338803925B091B0148
-:1028A000747ADBB205931302A5B20693337AAB4276
-:1028B00000D383E07472F37BFE2B00D052E63188A4
-:1028C0003A484909C9B200F063FC747AAA21A3B25C
-:1028D0003748049300F018FC5521364800F014FCEA
-:1028E0002021334800F010FC1F230427039A1A40CC
-:1028F00013020593337A049A934200D3ACE07472C6
-:102900009021002000F000FC0021080000F0FCFBFA
-:10291000F021002000F0F8FB24E6AA21264800F070
-:1029200037FC5521224800F033FCA021224800F05A
-:102930002FFC059B23439FB273683800195D00F09C
-:1029400027FCC046380000F04BFC0490380000F033
-:1029500047FC049B8342F4D1736804991A5D104BC1
-:102960008A420DD104221968013491431960D96853
-:1029700001350A43DA600222E4B2ADB29A6281E71D
-:10298000042219680A431A6002229A617AE7C04653
-:1029900073E4000055550000AA2A000073E4FFFF0D
-:1029A0000004004855950000AAAA0000FF3F00005F
-:1029B000AA0A0000550500005515000080202021BE
-:1029C000000200F0A1F9AA21BA4800F0E1FB802042
-:1029D0001021000200F098F95521B74800F0D8FB0B
-:1029E00080202021000200F08FF9A021B14800F0E2
-:1029F000CFFB80200599000200F086F9069B234357
-:102A00009FB273683800195D00F0C2FBC046380001
-:102A100000F0E6FB0490380000F0E2FB049B8342E8
-:102A2000F4D1736804991A5DA44B8A420DD1042233
-:102A30001968013491431960D96801350A43DA6095
-:102A40000222E4B2ADB29A6230E7042219680A4366
-:102A50001A6002229A6129E7059DA02125432800DA
-:102A600000F052FB73682800195D00F04DFBC04672
-:102A7000280000F071FB0390280000F06DFB039B21
-:102A80008342F4D1736803991A5D8C4B8A420ED14C
-:102A9000049A0134013292B204921A68E4B2BA4341
-:102AA0001A60DA683A43DA6002229A6222E71A6808
-:102AB0003A431A6002229A611CE7FF257F4CDB092A
-:102AC00061697F489A0001402A400A436261C02040
-:102AD0009022C000D205DB005169034079480140D3
-:102AE0000B435361777AC046C046C046C046C046D5
-:102AF000C046C046C046C046AA21734800F0A2FAAC
-:102B00005521724800F09EFA20216F4800F09AFA91
-:102B10008023039A05951A4313021BB20693FBB256
-:102B20000393337ABB4213D26B4680201B7B9021E8
-:102B30007372000200F086FA80200021000200F08B
-:102B400081FA8020F021000200F07CFAC04609E5FD
-:102B500022685F4B082113432360059A6369134081
-:102B6000A02212021343636190230122DB059962C4
-:102B70009A62C046C046C046C04699619A612368C1
-:102B8000544A059D13402360069B3D40039A1D4314
-:102B90007368ADB2995C280000F054FAC046C04694
-:102BA000C046C046C046C046C046C046C046C046F5
-:102BB000280000F06DFA0490C046C046C046C046EA
-:102BC000C046C046C046C046C0467368039A9B5C78
-:102BD000834217D0C046C046C046C046C046C04625
-:102BE000C046C046C046280000F052FA049B9842F6
-:102BF0000BD1C046C046C046C046C046C046C046CF
-:102C0000C046C0460137BFB289E7C046C046C0468D
-:102C1000C046C046C046C046C046C046C046C04684
-:102C2000C046C046C046C046C046C046C046C04674
-:102C3000C046C046C046C046C046C046C046C04664
-:102C4000C046C046C046280000F022FA0490CAE7F9
-:102C5000C323E370204B1C78F02C1DD11F4D2E6830
-:102C6000F378982B18D11E4B30001978FEF788FFA7
-:102C700000232860C3703388F470DAB20392F07ACC
-:102C80001038042806D801F05DFC5EFBF4FD6DFCF5
-:102C900018FF6DFCC323F370124B1B78F02B01D18E
-:102CA000FFF77EF9832B01D0FFF77AF9FFF702F8DF
-:102CB000FFF776F955150000AA0A00000004004845
-:102CC00003FF0000FFF90000AA8A000055850000FC
-:102CD00000005555FFFFAAAA980400208004002098
-:102CE00024070020DA040020002302000002002A4A
-:102CF00004D1002B01D0802318437047DB43511EC1
-:102D0000DBB20A40F3E700009023DB0530B51C6816
-:102D1000134D09022C401C60DA68124C2A40DA601C
-:102D2000114A506102229A62104A00B215682C437F
-:102D300014605469E4B2214351618021C900996152
-:102D4000002801DA01209862C046C046996201213C
-:102D5000996149189961136805490B40136030BDAA
-:102D6000FFEFFFFF00005555000800480004004831
-:102D7000FFFFAAAA0D4B802258619023D200DB05E9
-:102D800000B29A61002801DA01229A62C046C04668
-:102D9000C046C046064B802218699023D200DB054E
-:102DA0009A620122000AC0B29A6170470008004886
-:102DB00000040048104B114A10B558611068104BC0
-:102DC00009020343136053690E4CDBB2194390238D
-:102DD00051618021DB0518684901084318604020D3
-:102DE0009862186820401860D8680143D960136859
-:102DF00005490B40136010BD00080048000400485E
-:102E000000005555FFEFFFFFFFFFAAAA224B10B5A8
-:102E10001968224B224C1A8852085200505A214AF3
-:102E200010801A88023292B21A8052085200505A08
-:102E30001D4A10801A88023292B21A80520852003B
-:102E4000505A1A4A10801A881948023292B21A80CF
-:102E500052085200515A174A11801A8821880232AA
-:102E600092B21A808A4210D908318A1A92B202802C
-:102E700022881A801049114B0A881343104A1A40BD
-:102E8000302353409BB20B8010BD0E4C21888A42E8
-:102E9000EAD808230380EDE72007002096040020ED
-:102EA00094040020406000404260004044600040C4
-:102EB0000260004046600040005C00408080FFFFF0
-:102EC000BF8FFFFF92040020FEE70000F7B501234B
-:102ED0000225294F01923A7800910543934004213D
-:102EE000A020264E2D049BB229433268C00100F079
-:102EF00037FA040001283DD13B7809209C40054366
-:102F00007830A3B232682900FF3000F029FA0400BB
-:102F100001282FD13B7832689C402900A3B20020C1
-:102F200000F01EFA0400012824D1009B180AFFF7C4
-:102F3000DBFE3B7832689C402900A3B200F010FA17
-:102F40000400012816D16B461878FFF7CDFE220049
-:102F50003B7829009A4093B2326800F001FA019858
-:102F6000FFF7C2FE3B7832689C402900A3B200F014
-:102F7000F7F90400E0B2FEBDFC060020F8060020D0
-:102F8000F7B501230225274F00903A7801910543B8
-:102F900093400421C020244E2D049BB22943326863
-:102FA000800100F0DDF90400012838D109231D4318
-:102FB0003B78C0209C403268A3B22900400000F05A
-:102FC000CFF9040001282AD13B7832689C402900BF
-:102FD000A3B2002000F0C4F9040001281FD1019B16
-:102FE000180AFFF781FE3B7832689C402900A3B2A3
-:102FF00000F0B6F90400012811D16B461879FFF7EB
-:1030000073FE22003B789A4093B2009A144309223F
-:10301000E1B209041143326800F0A2F90400A0B241
-:10302000FEBDC046FC060020F806002000238000FC
-:1030300080B2834200D17047C046C04601339BB284
-:10304000F7E700000E4B0F4A58610F4B0902186852
-:1030500002431A605A690820D2B211439022596182
-:103060000121D20590629162C046C046C046C0466A
-:10307000906191611A6805490A401A607047C0461C
-:10308000000800480000555500040048FFFFAAAAA8
-:103090000D4B0122586190230421DB059A6299624D
-:1030A000C046C046C046C046C046C046C046C046F0
-:1030B000C046C046C046C046C04604480069996143
-:1030C000000AC0B29A617047000800480004004836
-:1030D00070B506000D00002A08D080200002FFF71E
-:1030E00049FE802080210002FFF70EFE05243000FB
-:1030F000013CFFF73FFEE4B229003000FFF704FE79
-:103100006D08002CF3D170BD0F4B30B59022586183
-:1031100080230124D205DB0093620C4B94621D686E
-:103120000B480902284318605869C0B2014359612D
-:10313000C04608219162C046916119680548014066
-:103140001960946130BDC046000800480004004882
-:1031500000005555FFFFAAAA0B4B10B580215861FE
-:10316000902301220424DB05C90099619A629C62C4
-:10317000C046C046C046054800699C61000A996285
-:10318000C0B29A6110BDC046000800480004004863
-:103190000E4B984202D880231B0218430C4B0D4A59
-:1031A00058610D4B0902186802431A605A69D2B27D
-:1031B00011435961C04690220821D2059162C04650
-:1031C00091611A6805490A401A607047FF1F0000A4
-:1031D000000800480000555500040048FFFFAAAA57
-:1031E0000A4B984202D880231B021843084B042242
-:1031F00058619023DB059A62C046C046C046C0466F
-:10320000044908699A61000AC0B27047FF1F0000B4
-:103210000008004800040048F0B585B00191039211
-:1032200000025E7A1D0003B202932B7AF7B2B3421A
-:1032300003D200206F7205B0F0BDFF24AA210198CF
-:103240000A9B9847552103980A9B9847A02101980B
-:103250000A9B9847029B34401C436B68A4B2D95D1B
-:1032600020000A9B9847C0462000FFF783FD070017
-:103270002000FFF77FFD8742F5D10136B6B2D4E7D3
-:10328000F0B5184C050060690E02C0B230436061B1
-:1032900080269020F600C00549B28661002901DA37
-:1032A00001218162FF26616936023140114361616B
-:1032B000C04600200C4FC04639690132090A295422
-:1032C0006169D2B2314001301143C0B261619842AC
-:1032D000F1D990238022DB05D2009A6201229A6103
-:1032E000F0BDC0460008004800040048F0B5174C87
-:1032F00005000E0060691F2925D88021314309028D
-:10330000C0B20143616190210420FF26C905886293
-:1033100061693602314011436161C04600200C4FA3
-:10332000C04639690132090A29546169D2B2314073
-:1033300001301143C0B261619842F1D99023042257
-:10334000DB059A61F0BDC0B20902DAE70008004867
-:103350000004004800000000000000000000000021
-:10336000F0B5474680B4061C081C000C102801D597
-:10337000162700E004270007000F8046FF200140C9
-:103380005468251C1D439C43F60313850AD5C0468B
-:10339000C046C046C046C046C046C046948013835F
-:1033A000958002E0012000F081F801390AD4381C30
-:1033B00000F07CF8C046948013839580C046C046D8
-:1033C0007600E2E7381C013800F070F8948013832F
-:1033D0009580042000F06AF8108A184001D0FF2080
-:1033E00061E0C046C046C046C046C046C046948064
-:1033F0009580108A184055D001200226B04552D041
-:103400000921168A1E40FCD1012000F04FF894805B
-:10341000C0469580C04603E0C046C046C046C04690
-:10342000948095807600108A1840EFF30080400069
-:10343000C00F0643381C023800F038F8948095809D
-:10344000022000F033F80139EAD513859480012079
-:1034500000F02CF813839580301C802102239940C2
-:103460000E401BD1002341085E4149085E414908D6
-:103470005E4149085E4149085E4149085E4149088C
-:103480005E4149085E4149085E41760808D340081C
-:10349000FF21084048400002013004E00E2002E015
-:1034A000092000E0002080BCB846F0BD0138FDD105
-:1034B0007047C04603685A0003D45B005B08C0181D
-:1034C0007047802212061343F9E7C046F0B557460D
-:1034D0004E46DE464546E0B5814683B09246002919
-:1034E00025D04B1E9B46002701935B46FB18DC0F43
-:1034F000E4184B466410E5005E193000FFF7DAFF70
-:10350000019B8046A3420BD0280008304844FFF7B7
-:10351000D1FFD04506D80138504509D2671CE4E7F1
-:10352000504505D9A74202D0631E9B46DDE7002621
-:10353000300003B03CBC90469946A246AB46F0BD75
-:10354000012809D0022805D0002801D000207047AA
-:103550000248FCE70248FAE70248F8E7613C000845
-:10356000793C00086D3C000830B5234B83B0050062
-:103570008C1E002B2AD001A9200000E000BF0028EB
-:1035800020D001992200FFF7A1FF041E1AD0FFF7F7
-:1035900091FF6368A864012B10D0201D002B1BDB5A
-:1035A000FFF788FF0023E8642B650368002B17DB17
-:1035B000FFF780FF2861002003B030BD0023052005
-:1035C0002B61F9E7002309202B61F5E70B480C4933
-:1035D000091AC9100191D5E70123E8642B65E4E7D6
-:1035E0001801000FFFF7ACFF2861002801D1093056
-:1035F000E2E70020E0E7C046000000005C4600086B
-:103600002C470008036810B50400DA0705D49B07AF
-:103610000FD5483000F084FC23685A070FD51A07ED
-:1036200014D5DB0604D42000D130FF3000F084FC38
-:1036300010BD483000F070FC23685A07EFD420001A
-:10364000D03000F071FC23681A07EAD42000513012
-:10365000FF3000F06DFC2368E3E7C0460368002BF1
-:1036600000D01B1818007047092070477047C046EB
-:1036700070B504000D0008E02B6C2A006361210086
-:10368000012023699847082807D1296C2000FFF7FB
-:103690006BFF0028F0D000F09FFE0728FBD1002030
-:1036A000296CFFF7E3FF281D00F020FCF0B5CE46A3
-:1036B000474680B5C368324C9846A54483690600E6
-:1036C00014000431402205A8994600F08DFE002325
-:1036D00004AD296C30000493FFF746FF631E9C4144
-:1036E00007000934002F15D0AB6B10216B644B46DB
-:1036F00021430193C9B20095330032000120C04735
-:10370000002833D13800F5239B009D440CBC904623
-:103710009946F0BDF0222B6C5200736129007CA801
-:1037200000F062FE7CAA31003369200098478A9B32
-:1037300007006B6403934B460095019332003300FE
-:1037400021000120C047002810D1F0227CA952009E
-:10375000280000F049FE082F06D1296C3000FFF741
-:1037600003FF09240700BDE7072F01D00927C9E798
-:103770000020296CFFF77AFF05A800F0B7FBC046D0
-:103780002CFCFFFF406C704770B5CB6BFAB00B643C
-:1037900004000E004022043103A800F025FE01239E
-:1037A0005B42029306E002AA2100236998470500C4
-:1037B00008280AD1129B200019000193FFF7D4FEBC
-:1037C0000028F0D009207AB070BD02A8FFF71AFFD8
-:1037D000062DF7D131002000FFF74AFF10B58261B6
-:1037E000DA6BC1601A6419000022FFF75FFF10BD99
-:1037F000436970B50B64C36804000D00002B04D04E
-:103800000122FFF753FF00F0E7FD0A0023690100E2
-:1038100002209847072807D0082803D12900200054
-:10382000FFF726FF00F0D8FD0020296CFFF71EFFF0
-:10383000281D00F05BFBC046C36810B5002B05D007
-:10384000CB6B00220B64FFF731FF10BDFFF79CFF2D
-:10385000FBE7C0467047C046836810B5002B02D016
-:1038600001000120984710BD10B5012907D000299B
-:1038700007D003390224012901D9200010BD0124F9
-:10388000FBE70224002BF8D10F2AF6D89200821809
-:103890005268029B00241A60EFE7C04600B585B06D
-:1038A00003AB0A00009300210023FFF7DDFF03981C
-:1038B00005B000BD10B5012907D0002907D0033994
-:1038C0000224012901D9200010BD0124FBE70224B4
-:1038D000002BF8D10F2AF6D8029B92001B688218A1
-:1038E00053600024EFE7C04600B585B003AB0392F8
-:1038F00000930A0000230021FFF7DCFF05B000BDA4
-:1039000070B51A4CD36BA544136406000D0019A8BA
-:10391000111D402200F068FD01235B42189314E062
-:103920000C2118A802AAFFF7DFFF290018A8B0474A
-:10393000002812D1069B18AA02A9083001939847C3
-:10394000040005280AD0092807D0289B02A81900DE
-:103950000193FFF709FE0028E2D0092418A8FFF719
-:1039600051FE200090239B009D4470BDC0FDFFFFD1
-:10397000F0B5DE464E464546574693460322E0B52F
-:103980001E0013008BB003400193CB6C0D001C1D77
-:103990001B6808940793002E66D11B02079306ABA1
-:1039A0005E731A73019B022B00D16EE02B6DDB0757
-:1039B00047D40023A846B24602930833034003933A
-:1039C0002568002D00D137E15346022B49D02588C8
-:1039D000668804340123370099469F4343469B6C15
-:1039E0000F219C4658466744FFF758FF0022874244
-:1039F00006D82A004B469A43D719B8428041424222
-:103A000002230121760033400D402B43012B3ED091
-:103A1000002B5AD0022B1CD1236801995F007F082C
-:103A2000002965D1002A06D0039A002A00D188E037
-:103A3000002F00D1AAE0002B65DB0137BF00E4199D
-:103A4000BEE700230293022E47DDFFF70DFE00289C
-:103A500049D009200BB03CBC90469946A246AB46E3
-:103A6000F0BD66680834B5E7022E9BDC1A0C1B0417
-:103A70000793022306A90B73FD3313409B00E41840
-:103A8000019B4A73022B00D090E7AC6B8EE7019B41
-:103A9000002B3AD1002A16D02368DD0F63689A1CE8
-:103AA000D7D0424658320692013300D1C6E0201DDD
-:103AB000FFF7D4FD06AB01002A00404600E000BF3E
-:103AC000002800D0A7E008347AE7019B002B02D041
-:103AD000002A00D08BE0043472E707A9584600F0B2
-:103AE000D1FA0028B5D1029B002B5DD10820B1E7A7
-:103AF00043460D2158461D6AFFF7D0FE854263D02C
-:103B00002368002B99DA043497E743460D21584681
-:103B10001D6AFFF7C3FE8542D5D143469B6A9C428E
-:103B2000D1D145462000FFF7C5FC0F2102005846C1
-:103B3000FFF7DAFE58462A000021FFF7D5FE0720DE
-:103B400088E7002F22D058235146434406AABA469C
-:103B5000251D0026049405911F00914603E00435BD
-:103B60002600A24514D028000697FFF777FD4B46A4
-:103B7000010000224046741C00E000BF0028EED087
-:103B80005746059B049C9A46B742B9D1454601E089
-:103B90004546049C0D215846FFF780FE069B28628F
-:103BA0006B62AC62062055E70F215846FFF776FEA0
-:103BB0000E2102005846FFF797FE5846274A0F216C
-:103BC000FFF792FE072045E743469B6A9C4297D148
-:103BD000434642469F620023D36204331363231D8E
-:103BE00053632368002B32DB0123029325E7200077
-:103BF000FFF760FC454604340600AC63404600E035
-:103C000000BF002800D124E7584632000F21FFF7FB
-:103C10006BFE07201EE707000D2158464546FFF7BB
-:103C20003DFE2862022F0FD1069BEB6243462C33E8
-:103C30006B62AC6206200DE7564604E70D2158463C
-:103C40004546FFF72BFE2862069B6B62F1E73800C2
-:103C5000013080004546201865E7C046000000009E
-:103C600010B50023FFF784FE10BDC04610B5012338
-:103C7000FFF77EFE10BDC04610B50223FFF778FEA9
-:103C800010BDC046F0B5CE46474680B50600C3B06D
-:103C900014001D0001294ED0002933D003290AD079
-:103CA000042902D1002B00D189E0022043B00CBCD2
-:103CB00090469946F0BD032BF7D11404150C240C43
-:103CC0002B19102BF1D8082203681A4200D0E7E024
-:103CD00020AB1800984600F02DF9B36BED001A00E8
-:103CE000002C09D0E400EA1A1C1942441968D1508A
-:103CF00004339C42FAD12200B263404600F018F926
-:103D00000020D3E70220002BD0D10023012710048C
-:103D1000B56B000C321D39009940084202D0296869
-:103D20000435116001330432102BF4D10020A304B8
-:103D3000BCD4B563BAE71404170C240C012B5FD074
-:103D4000052BB2D13B19202BAFD80F2F7DD9A1461F
-:103D5000002C65D1002223009146B16B002B00DCC2
-:103D600088E020A88046FA00DB00521ACB184244B3
-:103D70000868505004318B42FAD119004B46002B91
-:103D800010D04B4658003A00102F00D210220023CA
-:103D9000103AD2006A448000CC58D4500433834295
-:103DA000FAD1C918012D5ED0B1630F2F74D94B46DB
-:103DB000002BA5D0684600F0B7F8002076E7102A5F
-:103DC00000D972E7102203681A4245D120AB1800CF
-:103DD000984600F0B3F800230120B16B02009A402E
-:103DE000144204D045460F689A00AF5004310133A5
-:103DF000042BF3D14046B16300F09EF8002055E754
-:103E00003B19102B00D950E70F2F00D94DE70023A5
-:103E10009946012233681A4230D14B46002B5AD0C2
-:103E2000042233681A4242D1012D47D00F2F06D801
-:103E300020AB180000F076F84B46002B8AD068467D
-:103E400000F074F81023DB1B87E7102BDFD910225A
-:103E5000524291469944DCE793430360D130FF30EE
-:103E600000F06CF8B2E7043120A8B16300F054F818
-:103E700000201BE74B46002B84D193E719009143A8
-:103E80000A003160052D1ED00322300093433360B9
-:103E9000483000F043F8C0E720A800F041F886E77A
-:103EA000934303605130FF3000F044F810E73000D6
-:103EB00093433360D03000F039F8B5E720AB1800F9
-:103EC00000F02CF8BEE7022330001A43326048307D
-:103ED00000F028F8A1E7012D03D00F2F00D939E712
-:103EE000A6E720AB180000F019F833E7011C3431C5
-:103EF00038C9043B9C461D60A646011C20313CC9C4
-:103F000090469946A246AB46011C0831FCC941685F
-:103F10000068E54600BDC0467047C0467047C046D1
-:103F20007047C0467047C0467047C0467047C0469D
-:103F30007047C0467047C0467047C0467047C0468D
-:103F400001B401A801B585B0FFB408A841464A46AE
-:103F500053465C4665463EC001A83EC80F98009097
-:103F600000230CB401A9FFF70FFC109B12B01847F7
-:103F700001B401A801B585B0FFB408A841464A467E
-:103F800053465C4665463EC001A83EC80F98009067
-:103F900000230CB401A9FFF72BFC109B12B01847AB
-:103FA00001B401A801B585B0FFB408A841464A464E
-:103FB00053465C4665463EC001A83EC80F98009037
-:103FC00000230CB401A9FFF737FC109B12B018476F
-:103FD00001B401A801B585B0FFB408A841464A461E
-:103FE00053465C4665463EC001A83EC80F98009007
-:103FF00000230CB401ABFFF7F1FB109B12B0184784
-:1040000001B401A801B585B0FFB408A841464A46ED
-:1040100053465C4665463EC001A83EC80F980090D6
-:1040200000230CB401AAFFF76BFC109B12B01847D9
-:10403000027A0300002A04D1427AB020002A07D174
-:104040007047013A02720268100E12021A60F7E716
-:10405000013A5A725A68111D596003211268197287
-:10406000F2E7C04600B585B003AB00930C220023F5
-:104070000021FFF7F9FB039805B000BD10B5FFF76D
-:10408000F1FF10BDF0B557464E464546DE460023CB
-:10409000E0B587B003930F339846083B99468023D9
-:1040A0001B0306000F009A463800FFF7C1FF04000B
-:1040B000B02821D0030632D4FF2583001D4005AB74
-:1040C0009B4600930D220023002130000435FFF7AA
-:1040D000CBFB63064CD5059B5D1B05955B460093AA
-:1040E00000230D2200213000FFF7E4FB3800FFF72A
-:1040F0009FFF0400B028DDD1039B0024002B2FD1AB
-:1041000005AD00950E2200213000FFF7ADFB0095B4
-:1041100000230F2200213000FFF7CCFB20E003003A
-:1041200042469343DBB2802B63D0902B25D0A02B4B
-:1041300032D0B02B45D0C02B00D173E003004A46EB
-:104140009343DBB2D02B0AD15346024001321A43CB
-:10415000052301213000FFF795FD0028A4D0092494
-:10416000200007B03CBC90469946A246AB46F0BD45
-:10417000059B9C4665440595B0E7833B03400D2BAA
-:10418000EDD0424605AD02400095002300213000ED
-:10419000FFF76AFB0095A3E7FF234A461B011900BE
-:1041A000824311410A001A40030702D58023DB0134
-:1041B0001A43002300213000FFF764FD0028CED110
-:1041C00072E7B1284AD0B2285ED0B32800D18BE084
-:1041D000FC230340B42BC2D04A465346024001326E
-:1041E0001A43012101233000FFF74CFD0028B6D10E
-:1041F0005AE704023800FFF71BFF802520432D02F9
-:10420000A842ACD004010005020C002300213000BC
-:10421000FFF738FD0028A2D12C4200D144E701234A
-:10422000039341E7C6286AD0C7287CD003004A46DA
-:104230009343DBB2C02B00D18BE0C82800D18FE0C4
-:10424000C92800D08BE73800FFF7F2FEF023020305
-:104250001B03134042460240013278E73800FFF763
-:10426000E7FE002800D17AE7030042469343DBB221
-:10427000002B00D073E7020000213000FFF702FDA1
-:10428000002800D06BE70FE705AB00939B460D229B
-:10429000002300213000FFF7E7FA3800FFF7C8FEDF
-:1042A00003066AD57F25B03C059B2840A0409C466C
-:1042B0006044059038000734FFF7BAFE0306F3D4D4
-:1042C000812292009446863AFF3A1040A040059B16
-:1042D000723A634418185B4605900093002100234E
-:1042E0003000FFF7E7FADFE63800FFF7A1FEF02322
-:1042F00002031B03134042460240013270E73800BC
-:10430000FFF796FEF02302031B03134042460240D0
-:1043100001321A43032303213000FFF7B3FC0028C6
-:1043200000D01CE7C0E63800FFF782FE002800D16D
-:1043300015E7030042469343DBB2002B00D00EE7A3
-:10434000020004213000FFF79DFC002800D006E7A2
-:10435000AAE64346A0221C40013412032243D9E7B7
-:104360003800FFF765FE434602009A43D2B210328E
-:104370001840120301300243EAE60224A0E7C046D7
-:10438000030000B5DB6C85B05A6808001202019288
-:104390001A0001A908324A6003220A72DB794B72C3
-:1043A000FFF770FE05B000BD10B5FFF767FE806C2B
-:1043B00010BDC04610B5FFF761FEC26CD3799B00FB
-:1043C0000833D01810BDC04610B500F005F8C0463F
-:1043D00010B5FFF7F9FFC04610B5062000F074F8DD
-:1043E000012000F0A3F8C046F0B505000F2A2FD930
-:1043F0000B0003439B0734D116000C000300103E52
-:10440000350901352D01451927681F6067685F6010
-:10441000A7689F60E7681034DF6010339D42F3D1D6
-:104420000F239E431036851989191340032B1AD97F
-:104430001E1F0023B4080134A400CF58EF500433EA
-:10444000A342FAD10324A643331D2240C918ED1814
-:10445000002A05D00023CC5CEC5401339342FAD1FE
-:10446000F0BD0500F6E71A00F2E7C04670B505009A
-:104470000C001F2922D8B7239B00C358002B14D04F
-:104480008A009B181A68002A0FD0012A0BD0511CF1
-:1044900005D00021200019609047002070BD162330
-:1044A00003600120FAE70020F8E7280000F02AF86E
-:1044B00022000100280000F011F8EFE71623036046
-:1044C00001204042EAE7C04610B5034B01001868DE
-:1044D000FFF7CCFF10BDC04600000020002370B5E0
-:1044E000074C050008001100236000F017F8431C7A
-:1044F00000D070BD2368002BFBD02B60F9E7C046CD
-:104500002807002010B500F001F810BD5822012046
-:10451000014B40421A6070472807002058220120B2
-:10452000014B40421A60704728070020FEE7C04652
-:1045300002B4714649084900095C49008E4402BC36
-:104540007047C04603B47146490840004900095EFF
-:1045500049008E4403BC704703B4714649084000CB
-:104560004900095A49008E4403BC7047F8B5C0465B
-:10457000F8B5C046090212000101008032090400AA
-:1045800000000000000012010002FF000008C01639
-:10459000DC05000201020001040309042A034900AA
-:1045A0006E00660069006E006900740065004E00D0
-:1045B000650073004C0069007600650073002E00F2
-:1045C00063006F006D0000000000000000000000AC
-:1045D00000000000000000000000000000000000DB
-:1045E00000000000000000000000000000000000CB
-:1045F0001E0349004E004C0020005200650074006C
-:1046000072006F002D00500072006F006700000004
-:10461000000000000000000000000000000000009A
-:0C4620000000000000000000000000008E
-:10462C0074B20181B0AB308000000000800A0181BF
-:10463C00B0B0ABF0000000003F020181B0AB3080A5
-:10464C000000000080060181B0B0ABF0000000005B
-:10465C0004EDFF7FB0B0B08050EEFF7F0100000092
-:10466C00FCEEFF7FB0A9028090EFFF7FB0B0A88076
-:10467C00E0EFFF7F01000000ECEFFF7FB0B0AA80FD
-:10468C0020F0FF7F9CFFFF7FF0F0FF7F0100000018
-:10469C00ECF0FF7FAA3F398038F1FF7FB0B0A880E3
-:1046AC0044F1FF7FB0B0AA8084F1FF7FB0B0A88046
-:1046BC0098F1FF7F0100000094F1FF7FB0B0A8805B
-:1046CC009CF1FF7F010000002CF2FF7FAA0FB2804B
-:1046DC0094F2FF7F58FFFF7F7CF5FF7FB0B0A8807E
-:1046EC0098F5FF7F54FFFF7FF8F7FF7F0100000074
-:1046FC0068F9FF7F0084048078F9FF7FB0B0A88050
-:10470C0078F9FF7F40FFFF7F6CFCFF7F0084048003
-:10471C008CFCFF7FB0B0A880A4FCFF7F01000000E0
-:10472C00080000200000000000000000F40200203F
-:10473C005C030020C4030020000000000000000007
-:10474C00000000000000000000000000000000005D
-:10475C00000000000000000000000000000000004D
-:10476C00000000000000000000000000000000003D
-:10477C00000000000000000000000000000000002D
-:10478C00000000000000000000000000000000001D
-:10479C00000000000000000000000000000000000D
-:1047AC0000000000000000000000000000000000FD
-:1047BC0000000000000000000000000000000000ED
-:1047CC0000000000000000000000000000000000DD
-:1047DC0001000000000000000E33CDAB34126DE67A
-:1047EC00ECDE05000B0000000000000000000000E3
-:1047FC0000000000000000000000000000000000AD
-:10480C00000000000000000000000000000000009C
-:10481C00000000000000000000000000000000008C
-:10482C00000000000000000000000000000000007C
-:10483C00000000000000000000000000000000006C
-:10484C00000000000000000000000000000000005C
-:10485C00000000000000000000000000000000004C
-:10486C00000000000000000000000000000000003C
-:10487C00000000000000000000000000000000002C
-:10488C00000000000000000000000000000000001C
+:1000E000FCDC01F051FF00007C480008000000200B
+:1000F000300400203004002030070020FEE7C04616
+:10010000F0B5C74A89B0138801921BB2002B01DBFE
+:1001100001F02EFC1388C34A1A4080231343019A2E
+:100120001380019B1A8880231B011340BE4A01D112
+:1001300001F0ECFBBD49BE4C0B68BE4801330B60BF
+:1001400023787F211D008D43BB49BC4E0D70E18893
+:10015000018000203080602633401370B84A2600AA
+:10016000157083424DD0FF23B64CCAB22370B64BF4
+:1001700060701C600292707801380E2801D901F07D
+:1001800073FB04F091FA0F003F06E00788081C0A91
+:10019000710B5C0B0409AD09F4091A0AB308E708EE
+:1001A000EF08F708B078B3888C22192824D8802269
+:1001B000D20004F079FA1A0056007E015E023D0377
+:1001C000C6035904150531053D0545054D05560580
+:1001D0005F056D0575057D0585058A059E05B405D8
+:1001E000D505EA05010625033103B023974A5B03D1
+:1001F00051690B435361002222706A46944B128965
+:100200001A803378602259B2002901DB01F04FFBDC
+:10021000134016D17278062A0FD17288110A02296A
+:1002200001D101F023FB032901D101F025FB894A0B
+:10023000012901D101F01BFB03936A46844B92898B
+:100240001A80019B1A88844B1343844A1A40C023A6
+:100250009B015340019A9BB2138002F01FFE01F0F4
+:1002600047FB152B01D900F0BEFD18008023DB00F1
+:1002700004F01AFA160023002E00B90539004400D4
+:100280004F00B9055C00690073008000B905B9052D
+:100290008D009A00A500B200BF00CC000A01140135
+:1002A0009022D20513686E490B4013608023D168F9
+:1002B0005B030B43D36000229EE790210123C90515
+:1002C0000A689A430A60CA681343CB60002293E726
+:1002D00090210423C9050A689A430A60CA68134337
+:1002E000CB60002288E790211023C9050A689A4351
+:1002F0000A60CA681343CB6000227DE79021402347
+:10030000C9050A689A430A60CA681343CB60002291
+:1003100072E79022D205136852490B401360802384
+:10032000D168DB040B43D360002265E79022D2053D
+:1003300013684D490B4013608023D1685B010B4368
+:10034000D360002258E7042348490A689A430A60A8
+:10035000CA681343CB6000224EE79022D20513688F
+:1003600043490B4013608023D168DB050B43D36006
+:10037000002241E79022D20513683E490B401360EA
+:100380008023D168DB020B43D360002234E7902244
+:10039000D205136838490B4013608023D1685B0095
+:1003A0000B43D360002227E79022D205116833481F
+:1003B00001401160D1680B43D36000221CE79022FA
+:1003C000D20513682E490B4013608023D168DB01EE
+:1003D0000B43D36000220FE79022D2051368214916
+:1003E0000B4013608023D168DB040B43D3600022F1
+:1003F00002E79022D205136822490B401360802344
+:10040000D1685B050B43D3600022F5E60123174951
+:100410000A689A430A60CA681343CB600022EBE67D
+:10042000005C00408F0F0000F206002090040020C6
+:100430004860004096040020F00600209A04002046
+:10044000F1060020F40600202407002000100240DE
+:1004500098040020D64600088081FFFF8FBFFFFF71
+:10046000FFFFEFFFFFFFFFFBFFEFFFFF0004004870
+:10047000FFFFFFBFFFFFFBFFFFFEFFFFFFFBFFFFD5
+:10048000FFBFFFFFFFFFFFEF1023D2490A689A4327
+:100490000A60CA681343CB600022ADE69021C9050B
+:1004A0000A68CD4802400A60CA681343CB60002244
+:1004B000A2E6152B01D900F099FC180004F0F4F81D
+:1004C000160021002C009604370042004D009604CF
+:1004D000580063006D0078009604960483008E0037
+:1004E0009900A400AF00BA00C400CE009023DB0541
+:1004F0001968BA4801401960DA680240DA600022DF
+:100500007AE690230121DB051A688A431A60DA68CB
+:100510008A43DA6000226FE690230421DB051A6823
+:100520008A431A60DA688A43DA60002264E690231C
+:100530001021DB051A688A431A60DA688A43DA6098
+:10054000002259E690234021DB051A688A431A608D
+:10055000DA688A43DA6000224EE69023DB051968E8
+:100560009F4801401960DA680240DA60002243E6E1
+:100570009023DB0519689B4801401960DA68024046
+:10058000DA60002238E60421974B1A688A431A6021
+:10059000DA688A43DA6000222EE69023DB051968C8
+:1005A000924801401960DA680240DA60002223E6CE
+:1005B0009023DB0519688E4801401960DA68024013
+:1005C000DA60002218E69023DB05196889480140AB
+:1005D0001960DA680240DA6000220DE69023DB053C
+:1005E00019687D4801401960DA680240DA6000222B
+:1005F00002E69023DB0519687F4801401960DA683C
+:100600000240DA600022F7E59023DB0519687448A0
+:1006100001401960DA680240DA600022ECE59023BC
+:10062000DB051968754801401960DA680240DA6034
+:100630000022E1E501216C4B1A688A431A60DA68EE
+:100640008A43DA600022D7E51021624B1A688A4398
+:100650001A60DA688A43DA600022CDE59023DB0570
+:1006600019685D4801401960DA680240DA600022CA
+:10067000C2E5152B00D9BCE3180004F015F81600EC
+:100680001F002700BA032F0037003F00BA034800BD
+:10069000510058006100BA03BA036A0073007A007F
+:1006A00083008C0095009C00A30090228023D2053B
+:1006B00011685B030B43136000229DE59022012328
+:1006C000D20511680B431360002295E590220423A4
+:1006D000D20511680B43136000228DE59022102390
+:1006E000D20511680B431360002285E59022402358
+:1006F000D20511680B43136000227DE59022802310
+:10070000D2051168DB040B431360002274E59022CC
+:100710008023D20511685B010B43136000226BE557
+:100720000423314A11680B431360002264E59022D0
+:100730008023D2051168DB050B43136000225BE5C3
+:1007400090228023D2051168DB020B431360002244
+:1007500052E590228023D20511685B000B431360A1
+:10076000002249E59021C9050B681A430A6000225E
+:1007700042E590228023D2051168DB010B43136010
+:10078000002239E590228023D2051168DB040B4357
+:100790001360002230E590228023D20511685B05AA
+:1007A0000B431360002227E501230F4A11680B4316
+:1007B0001360002220E51023064A11680B431360E2
+:1007C000002219E59021C9050B681A430A6000222E
+:1007D00012E5C046000C0048FFFBFFFFFFFFEFFFE4
+:1007E000FFFFFFFBFFEFFFFF00040048FFFFFFBF1D
+:1007F000FFFFFBFFFFFEFFFFFFBFFFFFFFFFFFEF5E
+:100800008D22082B00D0F7E49022D20551683833AE
+:100810000B4353600022EFE48D22082B00D0EBE461
+:1008200090224021D20553688B4353600022E3E4B9
+:10083000152B00D9E0E2180003F036FF16001B006C
+:100840002100DE0227002D003300DE023A004000C6
+:1008500045004C00DE02DE02530059005F006500D7
+:100860006C00730078007D009023DB059A62002203
+:10087000C2E490230122DB059A620022BCE49023AB
+:100880000222DB059A620022B6E490230422DB05F3
+:100890009A620022B0E490230822DB059A620022CB
+:1008A000AAE4802290239201DB059A620022A3E44D
+:1008B00090234022DB059A6200229DE40222D14B64
+:1008C0009A62002298E4802290231202DB059A6249
+:1008D000002291E4802290239200DB059A6200229C
+:1008E0008AE490231022DB059A62002284E490239C
+:1008F0002022DB059A6200227EE490238022DB0521
+:100900009A62002278E4802290239201DB059A62A9
+:10091000002271E480229023D201DB059A6200223A
+:100920006AE40122B74B9A62002265E40422B64BC6
+:100930009A62002260E490232022DB059A62002262
+:100940005AE4152B00D95AE2180003F0ADFE160048
+:100950001B002100580227002D00330058023A00E6
+:10096000400045004D005802580255005C006300ED
+:100970006A0072007A00800086009023DB059A618D
+:10098000002239E490230122DB059A61002233E43E
+:1009900090230222DB059A6100222DE49023042299
+:1009A000DB059A61002227E490230822DB059A6187
+:1009B000002221E4802290239201DB059A6100222B
+:1009C0001AE490234022DB059A61002214E40222FB
+:1009D0008C4B9A6100220FE4802290231202DB05E7
+:1009E0009A610022FFF708FC802290239200DB0529
+:1009F0009A610022FFF700FC90231022DB059A6128
+:100A00000022FFF7F9FB90232022DB059A610022E8
+:100A1000FFF7F2FB90238022DB059A610022FFF7AB
+:100A2000EBFB802290239201DB059A610022FFF705
+:100A3000E3FB80229023D201DB059A610022FFF7BD
+:100A4000DBFB01226F4B9A610022FFF7D5FB0422EA
+:100A50006D4B9A610022FFF7CFFB90232022DB052C
+:100A60009A610022FFF7C8FB02226270152B00D9A1
+:100A7000B1E0180003F004FE0B151EAF273039AFAC
+:100A8000434C545DAFAF677079828C969EA69023DD
+:100A90008022DB051B69D200134063800022FFF730
+:100AA000ABFB90230122DB051B691340638000220E
+:100AB000FFF7A2FB90230222DB051B691340638032
+:100AC0000022FFF799FB90230422DB051B691340EA
+:100AD00063800022FFF790FB90230822DB051B694F
+:100AE000134063800022FFF787FB90238022DB0501
+:100AF0001B699201134063800022FFF77DFB902366
+:100B00004022DB051B69134063800022FFF774FB62
+:100B100002223C4B1B69134063800022FFF76CFBF1
+:100B20009023DB051B690022DB0BDB036380FFF7EF
+:100B300063FB90238022DB051B69920013406380D6
+:100B40000022FFF759FB90231022DB051B6913409D
+:100B500063800022FFF750FB90232022DB051B69F6
+:100B6000134063800022FFF747FB90238022DB05C0
+:100B70001B69134063800022FFF73EFB9023802215
+:100B8000DB051B699201134063800022FFF734FBF1
+:100B900090238022DB051B69D20113406380002271
+:100BA000FFF72AFB0122174B1B69134063800022C9
+:100BB000FFF722FB0422144B1B69134063800022C1
+:100BC000FFF71AFB90232022DB051B69134063808B
+:100BD0000022FFF711FB00238D226370FFF70CFB4F
+:100BE00080230A4ADB0251690B435361054A0849D5
+:100BF00013680B401360D168064B0B43D36000228F
+:100C0000FFF7FAFA00040048000C00480010024008
+:100C1000FFFFAAAA00005555D34AD44913680B40D8
+:100C20001360D168D24B0B43D3600022FFF7E4FA84
+:100C3000CD4ACE4913680B4013600022FFF7DCFA5F
+:100C4000C94ACB4B11680B4313600022FFF7D4FA5B
+:100C5000C5491B024A69D2B213434B610022FFF718
+:100C6000CBFAC14B00221B691B0AA37001236370DE
+:100C7000FFF7C2FA8023BF4A1B0351690B4353613C
+:100C8000BD4ABE4B11680B4313600022FFF7B4FA54
+:100C9000B94ABA4BD1680B43D3600022FFF7ACFAD4
+:100CA000B54AB74913680B4013600022FFF7A4FA56
+:100CB000B14AB24B11680B4313600022FFF79CFA54
+:100CC000AD4A53610022FFF797FA8023A94A1B031C
+:100CD00051690B435361A44AAA4B11680B4313603B
+:100CE0009022D2051168A84B0B4313600022FFF736
+:100CF00083FA9D4AA34BD1680B43D3609023DB0555
+:100D0000D868A1490143D9601168A0480140116029
+:100D10001A689F490A401A600022FFF76DFAF8220C
+:100D20008027914D98026969D20110403F025A0212
+:100D30003A4089051043890D0843902168611020CD
+:100D40005D08C90528404A69924DDB012A400243EB
+:100D50008020C001034013434B610022FFF74CFA8F
+:100D6000C023844ADB0251690B4353617E4A8A4B9C
+:100D700011680B4313609022A023D20511685B0316
+:100D80000B4313600022FFF737FA774A824BD16892
+:100D90000B43D3609023A021DB05D86849030143AE
+:100DA000D96011687D48014011601A687C490A4089
+:100DB0001A600022FFF720FAFF216B489D0042696C
+:100DC0002940784DDB002A400A4342619022C0202E
+:100DD000D205C00051690340734801400B43536181
+:100DE0000022FFF709FA8D22FFF706FA8D22FFF79E
+:100DF00003FA8D22FFF700FA8D22FFF7FDF98D220D
+:100E0000FFF7FAF9B578B388022D00D1D2E005D802
+:100E1000002D5FD0012D63D096255DE0042D00D11B
+:100E20005DE100D219E1802DF6D190230127402108
+:100E30008025DB05677099621A686D012A431A6084
+:100E4000C0465A481C691A680C4002401A60DA68A9
+:100E50000240DA60F022002C39D11A6802401A6090
+:100E6000DA681543DD601A6994461A690492C0462F
+:100E70001A690592C046C0461A690692C046C04625
+:100E8000C0461A690792C046C046C046C0461D69A2
+:100E90001A6802401A60DA681040D860634622007F
+:100EA0000B4214D1049B3A000B4210D1059B023235
+:100EB0000B420CD1069B03320B4208D10B00079961
+:100EC0000432194203D105321D4200D1D132384BD0
+:100ED0009A7002E100F0B4FF354B1D70FFF78DF9F9
+:100EE00000F0AEFF9023DB051A68204C2A431A60FD
+:100EF00080229D61196852030A431A6080220421EE
+:100F0000D2009A621A6800250A431A6002229A6186
+:100F100018680E3202431A604022996119680A4328
+:100F20001A6008229A6180231249DB024A6913433E
+:100F30004B610D4B1A6822401A60D8680C4A104366
+:100F4000D860186820401860D8680243DA608023AF
+:100F50004A691B0313434B61074B084A19680A434C
+:100F60001A605D61B8E7C04600040048FFFFAAAA06
+:100F700000005555001002400008004855555555D1
+:100F8000AAAAAAAA0000505500010010FFFFAFAAAC
+:100F9000FFFEFFEFEFBF000050550000AFAAFFFFBC
+:100FA000FFFFEBFF03FF0000FFF90000FFEFFFFF73
+:100FB000F406002000F044FF90230121DB051A68AD
+:100FC000CE4D0A431A601022996119680A431A60CB
+:100FD000042240219A611A680A431A6008229A6121
+:100FE00080229961196852010A431A608022C4491B
+:100FF000D202486902434A61C24A10682840106020
+:10100000D468C1480443D46014682C401460D46888
+:101010002043D06080204C69000320434861BB48D6
+:10102000BB4C05682C43002504604561C0204C6919
+:10103000C002204348611068B64901431160A021F5
+:101040001868490301431960B3485169014051616F
+:101050005A69B2490A405A613EE7DBB2022B1ED000
+:101060000025032B00D137E7012B6AD18022A44948
+:101070001203486902434A61A44A11689943116006
+:10108000D1681943D1605168194351609361116867
+:101090000B431360A24B1D70A24B1A601CE7B023D8
+:1010A000974A5B03516940200B4353619023DB0552
+:1010B0001A689D490A401A608022D968520111437A
+:1010C000D960596801435960986119680A43082139
+:1010D0001A60934A1170934A13600025FCE6DBB254
+:1010E0009825012B00D0F7E6902106220A208F4B8D
+:1010F000C90519608E4B1A70824B8E4A13608E4A56
+:1011000010708E4A013013608D4A10708D4A013084
+:1011100013608D4A10708020794A0003546920437F
+:1011200050611C688948204318600868884B034355
+:101130000B60B02351695B030B43536100F0A4FDC6
+:10114000CBE79725C8E6B578F178B088062D2BD087
+:101150000FD8022D2FD005D8002D20D0012D27D05B
+:10116000A0251EE0042D29D0052DF9D102F014F898
+:101170001CE0822D52D009D8802D23D0812DEFD1B3
+:101180000123637001F01AFEA0700FE0832D4AD096
+:10119000842DE5D10123637002F026F8F4E701F015
+:1011A00051FE2570FFF729F801F028FE0025F8E729
+:1011B00002F036F8FAE701F0CBFDF7E7002201F084
+:1011C000CFFFF3E7012290236270DB051968564DCB
+:1011D00029401960D9682940D96080210225C900B9
+:1011E00099629A619D61494D6861C046C04600B2EE
+:1011F0009961002800DA9A62C046C046C046C046DF
+:10120000C046C046902280213E4BD205C9001B69D2
+:10121000916201211B0A9161A370C7E701236370EA
+:1012200002F026F8B0E70123637080239027374946
+:101230001B014B61FF053B6980229BB218009200A5
+:101240001040844680204D69C000EDB228434861BB
+:10125000396989B208000B4310401021134218D09D
+:101260000200531E9A416346591E8B41D2B2DBB233
+:10127000002A02D01121002B0BD16146002902D196
+:101280001231002A05D1002802D11321002B00D1F0
+:10129000FF21A1708AE7B378B088012B21D0002B01
+:1012A00003D0022B18D0AA2313E0FF22154D87008C
+:1012B00069693A40184FC00039400A436A61902179
+:1012C000C025C905ED004A690540144802402A437B
+:1012D0004A612370FEF791FFF17801F0FBFE0023D5
+:1012E000F7E7637001F01CFFA070F8E7B278002AFE
+:1012F00048D00023012AECD0AF23EAE7FFFFAAAAD7
+:101300000010024000040048000055550008004845
+:10131000555555555055000003FF0000FFF90000DA
+:1013200000070020FC060020FFEFFFFF140700204D
+:10133000180700200C070020100700201C070020C1
+:101340002007002004070020080700200000505557
+:1013500000010010B278002A14D00023012AB8D06E
+:10136000B023B6E7B278002A0CD00023012AB0D00F
+:10137000B123AEE7B278002A04D00023012AA8D016
+:10138000B223A6E701236370A933A370A7E7B5785A
+:10139000F278B188112D00D19BE007D8012D6BD0D8
+:1013A000002D0FD0022D7DD08225FAE6212D00D10F
+:1013B00085E0222D00D188E0122DF5D102231020E6
+:1013C000637089E001252900BE4ABF4F12783B684F
+:1013D000914099625A6810208A435A6001F06EFE6B
+:1013E0002900B84B3A681B78042799400B0091619B
+:1013F000516804950B435360FA20400001F05EFEF3
+:10140000B04A04991278FA209140AF4D40002B6801
+:10141000013F99625A68BFB28A435A6001F04EFE9A
+:10142000A84B04991B782A6899400B009161516878
+:101430000B435360002FDFD10425FA2001F03EFE5C
+:101440000121A04AA04F12783B68914099625A68E6
+:10145000FA208A435A6001F031FE0121994B3A6823
+:101460001B78013D99400B0091615168ADB20B436F
+:101470005360002DE1D194E62900924A924F1278F0
+:101480003B68914099625A6810208A435A6001F083
+:1014900015FE8C4A3B68127895409D615A68154349
+:1014A0005D6083E60123874A637012788749934021
+:1014B000854A9BB21268002001F0FAFF64E601231E
+:1014C0000020637001F04AFD5EE601231020637086
+:1014D000F8E702230020637001F09AFD608065E662
+:1014E000B378B288042B1AD006D8022B1CD021D88E
+:1014F000012B0FD08723ECE6072B24D003D8052B34
+:10150000F8D1734B14E0082B22D0802BF2D100F0DD
+:10151000BBFBE4E66F4A1278A2706370DFE66E4BA5
+:101520001B78A3700123F8E76A4B1A7083226A4B79
+:101530001A70D4E6674B684D1A7083232B7000F045
+:1015400013FC2B78EDE7654B1A70120A5A70C6E649
+:10155000624B1A78A2705A78E2709A782271DA781F
+:1015600062711A79A2715B79E3710623D5E7B378CA
+:10157000B288022B15D0032B16D0012B1BD10248A9
+:1015800085460248001C004778120020C5CAFF1F8C
+:10159000060005000800070019C9FF1FEFBEADDEF9
+:1015A0009DE64F4B1A609AE64D4B186800041043B5
+:1015B00001F076FF93E68A238BE6882389E6B278EA
+:1015C0001300303B2F2B19D8F078032800D9EEE018
+:1015D00003F056F814021012424B512A00D197E042
+:1015E00024D8312A54D00BD8002A34D0302A4AD0FB
+:1015F000B42346E03C4BF0E73C4BEEE73C4BECE7DA
+:10160000332A4FD049D3502AF2D100222270063219
+:1016100062701A7AA270DA78E2705A7A22719A7A33
+:1016200062719A78A2715B7CE37146E07F2A00D9EF
+:10163000A3E0702A00D37BE0602A36D0612A5FD015
+:10164000522AD5D100221B882270A37002321B0AB5
+:101650006270E37031E0FF23264953540132102AAF
+:10166000FBD1204A2249D3709370204ACB70D370AB
+:10167000937001228B701C49CB708B701E4B1A70BB
+:101680000023237019E0B288110AD9721A73F7E7A0
+:10169000B288110A59739A73F2E7B288110AD973A2
+:1016A0001A74EDE7B2885A74EAE700232370013315
+:1016B0006370B3880F4AD35CA370104B1C60FEF7B5
+:1016C0009CFDC04600070020FC060020040002002C
+:1016D000DD040020BC040020DE040020BD04002046
+:1016E00030040020480400205C0400207004002026
+:1016F00034040020DF0400209C0400202407002084
+:101700000023237001336370B84B1B68DB78D3E789
+:101710000022227006326270DA7AA2701A7BE270BE
+:101720005A7B22719A7B6271DA7BA2711B7C7BE708
+:10173000AF4BAE495C6833787F2B00D936E1684601
+:10174000AC4B007A18700868C378002B0ED00020CC
+:101750000290982B05D131E100200290D02B00D1CE
+:101760002CE1A54B10301870FF2304E0A34B186048
+:101770009023C3706F33029320E1072010400328A9
+:1017800015D802F07DFF160218129D4B802A94D3C3
+:10179000872A12D97032D2B2072A8ED8002222703C
+:1017A000F2789A72B2881A8087E7964BEEE7B523F3
+:1017B00067E78F4BEAE7944BE8E7B188F0780A0ACD
+:1017C000C9B245189446BE22102D2DDC04320028E3
+:1017D0002AD0DD78033AFF2D26D19D780132FF2DE6
+:1017E00022D10022D5B2A84220D862464501013D4F
+:1017F0001D724D012F009A700022844DDA70ED1990
+:101800005A729A721A80DA721A735A739A73DA7366
+:101810001A745A745D607E4B591863468B540132BA
+:10182000D3B29842F9D80022227046E701328D18CF
+:10183000774F013D7D5DFF2DD4D0C122F4E7B27812
+:10184000002A04D0402A07D0D222227036E7227024
+:10185000B188694A117031E700222270013262704A
+:10186000654A1278A27029E7802332E5694A6A4BFB
+:101870001A601223FEF7E0FCD2B2012A11D0002A2E
+:1018800009D0022A01D0FEF7D7FC634B634A1A60E5
+:10189000634BFEF7D1FC604B624A1A600423FEF7EB
+:1018A000CBFC5D4B604A1A60604BFEF7C5FC1342EF
+:1018B00008D17378052B05D173885D4A13705D4A92
+:1018C000DBB21380019B5C4A1B88019913405B4A81
+:1018D00013439BB20B800021594B1980019B1B883D
+:1018E0001A43584B1A40584B5A40019B92B21A80E7
+:1018F000564BDA8F520507D58021554A11800022B8
+:10190000DA87544B019A138009B0F0BD1278402A4F
+:10191000EED1514A1278002AEAD1504A1088374A4B
+:10192000C0B211684D7A4E68DAB25419E4B29042EE
+:1019300018D84A7A82184A722E4A13781B1ADBB2D8
+:101940001370002B01D19833CB70019B1A883B4B4D
+:101950001343434A1A40C0239B015340019A9BB250
+:101960001380C5E73F4A9A18127801333255DBE7F6
+:10197000019B1B881B06BBD5019B3B4A1B88134060
+:10198000802212021343019A1380384B1B78802B5C
+:1019900001D1FEF762FC264A1378002BA8D08021E3
+:1019A0000B432B490B8000231370A1E70868C37811
+:1019B000D82B00D0D0E680234468C3700B68002188
+:1019C0005972DB78902B00D077E6712A00D074E64C
+:1019D0000A4BB2881B6859680A70B2885968120AA3
+:1019E0004A705A7A02325A7267E6C046840400206E
+:1019F000340400208C0400209C0400208804002073
+:101A000048040020700400205C040020F004002042
+:101A1000DF040020C44600082407002040470008D7
+:101A20001E030000E8460008EC4600082A030000F8
+:101A300094040020506000408F8EFFFF8080FFFFE5
+:101A400002600040BFBFFFFF30300000065C004076
+:101A50004C5C004020320000F1060020066000408F
+:101A60008FBFFFFF486000400F8FFFFFF006002090
+:101A7000F0B5404B8BB0089119783F4B09921B7819
+:101A8000019002933D4B019D1C683D4B3D481A78E7
+:101A900001231E0096403C4AA662102D5ED11278AA
+:101AA00000689340836201200200364B05901F6856
+:101AB000354B1B789A4003920200344B1B68069307
+:101AC000334B1B789A4093B202000793314B1B684B
+:101AD0009C46314B1B789A40002304921A000198CF
+:101AE000202806D1029D05981D4105423ED003984D
+:101AF000B861089820280FD1002B01D11E488354CB
+:101B0000069805690798054206D01B48855C05982C
+:101B1000984005431848855409980139C9B20028EE
+:101B200002D0002900D1A6616046049D0133DBB2DA
+:101B300085618562082B05D101320F4BD2B29B5CC7
+:101B4000029300230029CAD10E4B1A680E4B197854
+:101B500001238B409362A6620BB0F0BD019D112D55
+:101B6000A1D112780068934083619CE70398B86222
+:101B7000BFE7C046DD040020BD0400201C07002094
+:101B8000200700200C070020100700201407002069
+:101B9000180700200407002008070020F7B51F4B96
+:101BA0001F491A781F4B10282ED101241E780D686A
+:101BB000B440AC62012635000C6831001B780196F8
+:101BC0009D40194B1B680093184B1B7899400023CC
+:101BD0008C46190020280DD1154E019F765C1E41C0
+:101BE0003E4219D0A5610133DBB2082B02D100239C
+:101BF0000131C9B26646009F013AD2B2BE61BE62EF
+:101C0000002AE7D1A562F7BD1128D3D101241E789F
+:101C10000D68B440AC61CDE7A562E4E7DD040020C7
+:101C20001C070020200700200407002008070020D0
+:101C3000BD040020022907D10F4B104A984218D04A
+:101C4000904209D1180007E0032906D10A4B0B493D
+:101C50000B4A98420BD1080070470429FCD1064B6F
+:101C6000064A984205D006499042F4D0054A884277
+:101C7000E6D11000F0E7C0463404002048040020FC
+:101C80005C04002070040020F0B52C4B85B019686E
+:101C90002B4B2C481B7800780193012302901E00E7
+:101CA00018001F00019A029C9640A040264D274A2A
+:101CB0002D781268AF408E628446906224489D4021
+:101CC00000688762046803941C00AC402500039CF4
+:101CD000254305604568019CBD4345609C401D004F
+:101CE000A54008681C00284308604868B043486065
+:101CF0001068029999408C402100014360461160B0
+:101D000051688143134851600078134A98408340DA
+:101D100012681248116899431160D1680B43D3606F
+:101D200080220F4B1A70002319000E4A13701A18E4
+:101D300001331170202BFAD105B0F0BD1C07002033
+:101D40002007002010070020080700200C070020B3
+:101D5000040700201807002014070020BD040020FD
+:101D6000DE040020DD04002010B5334B1B78082B67
+:101D70005DD016D8314C032B44D007D8012B2DD081
+:101D8000022B31D0EE222D4B1A7023E0062B44D0CB
+:101D900049D8042BF6D18123012223702021112060
+:101DA00027E00F2B34D008D8244C0D2B25D00E2B38
+:101DB000E8D181230022237027E0802B08D01F4C1C
+:101DC000FF2B08D0102BDDD181230022237027E0C8
+:101DD000FFF75AFF10BDF0232370FBE7812320207B
+:101DE0002370FFF7DBFE06E0812301220021237030
+:101DF0002020FFF73DFE8223EEE78123002223709F
+:101E00001100F5E781230122237020211020F0E743
+:101E100081230A4C00222370C0E781230122237012
+:101E200020210800E5E7812310202370D9E78123D2
+:101E3000024C11202370D4E7BC040020DE040020F3
+:101E4000BC22444BD203996A70B50A439A629A6ADB
+:101E50004149424C0A409A628022596912030A435E
+:101E60005A613F4A3F4910683F4E0843106010686E
+:101E7000204080241060D068E4020143D1605A6998
+:101E800022435A61394A116831401160D568384996
+:101E90000D43D560106830401060D0680143D160B8
+:101EA000B02158694903014359619023DB05196842
+:101EB0003048014019608021D8684903014301205E
+:101EC000D960196881431960D9680143D960042138
+:101ED0001D688D431D60DD680D43DD6010251E68A3
+:101EE000AE431E60DE683543DD6040251E68AE43AC
+:101EF0001E60DE683543DD601D681F4E35401D6085
+:101F00008025DE68ED043543DD601D681B4E3540DD
+:101F10001D608025DE68ED053543DD601D68184EC7
+:101F200035401D60DD682C43DC601468154D84432A
+:101F30001460D4682043D0601C682C401C60D868B2
+:101F40002840D86013688B431360D3681943D1606D
+:101F500070BDC04600100240FFFFA1FFAAAAAAAAB6
+:101F60000008004855555555FFFFAAAA000400482F
+:101F700000005555FFFFEFFFFFFFFFFBFFFFFFBF17
+:101F8000FFFFFBFFFFEFFFFF9022DA4B1203196800
+:101F9000F0B50A431A60802289B092021968114292
+:101FA000FCD0012259680A435A60802259685202C3
+:101FB0000A435A608022596852030A435A608022B9
+:101FC000196852040A431A60802292041968114267
+:101FD000FCD011210220C84A11605A680E398A4388
+:101FE00002435A601A6B7D310A431A638022DC690E
+:101FF00012042243DA6162B6C04B4025DA8FC04C2E
+:102000008243DA87DA8F01388243DA870022BD48BB
+:10201000C2872280BC4C2580BC4C08352580802599
+:10202000BB4C6D012580BB4C2180C287BA49BB4A9D
+:1020300011808021BA4A090611608022D98FD2000E
+:102040000A43DA87B74AB84B1A80FFF7F9FEF02245
+:10205000B64B1A70B64E2023327811009943D2291C
+:102060002ED1B449B448C978C3780224FF2904D1D9
+:10207000FF3B1C00631E9C41E4B2B04BDB78FF2B9E
+:1020800000D00324AE4BDB78FF2B00D00424AD4BF3
+:10209000AD4F1C703860D22A12D10023012505E013
+:1020A0002100FFF7C7FD01230135EDB2A542F7D3AB
+:1020B000002B00D0386080223B68DA70D023337068
+:1020C0003378F22B05D10022023B33709E4B1B6804
+:1020D000DA703578D02D01D000F0E3FD9A4E3068EB
+:1020E000C378802B01D000F0DCFD964B1978FFF708
+:1020F000A1FD002330600400C57006884372C07AD9
+:10210000F5B21038042801D900F0C9FD02F0CCFA6C
+:1021100005006E0028012C01E700E27B012A0DD1A9
+:1021200080201021000201F01BF80F21E020B609E9
+:10213000F6B231400022000201F012F8E37B032BDB
+:102140000FD120883D3380099D43804BC1B2C0B27E
+:10215000C01880B200F0FCFD8021237AA2782943C8
+:1021600034E01E2B07D1C0202188223389099D43EA
+:10217000C9B20002EEE7222B01D00B2B07D1208839
+:10218000C009C1B2C0B26C3880B200F0E1FDE37B9F
+:102190001C2B11D1A0208121C001268800F0D8FD80
+:1021A0008020F609F6B23100000200F0D1FDA02037
+:1021B0000021C00100F0CCFD8023E27B5B421F2A9E
+:1021C00008D01D43EDB22900237AA278606801F09F
+:1021D000FDF883E07022A0202188954309091D4362
+:1021E000C9B2C001EDB200F0B3FDECE7E37B002B18
+:1021F00006D1237AA2782900606801F01DF9607287
+:10220000E37B0B2B0FD12188514849090901C9B241
+:1022100000F09EFD1F231D40A278237A29006068EC
+:1022200001F00AF96072E37BFE2B3ED12188494818
+:102230004909C9B200F0F4FF1F231D40237AA17899
+:102240000293454B28025A696768D2B202435A6129
+:1022500080209022C000D20590610120FF2690626C
+:10226000033090625A69360232400A435A61C046CE
+:102270003A4800228446C046604600690131000A9F
+:10228000B8545869C9B230400843586101320298C5
+:10229000D2B29042EFD290230421DB0599618021D4
+:1022A000C9009962012199616272E27B012A16D10B
+:1022B000802010210002268800F052FF1F21A0205C
+:1022C0003609F6B231400022000200F049FF0F212A
+:1022D000237AA2782940606801F0AEF860721A4B48
+:1022E0001B6819889A7A52181A80D822DA7000F07E
+:1022F000D8FCC0460010024000200240025C0040B2
+:10230000505C0040065C00400060004004600040FB
+:10231000066000404C5C004020320000005C004041
+:1023200000E100E00080FFFF585C0040DE04002078
+:102330009C04002048040020340400205C04002099
+:1023400070040020280700208404002069FDFFFF9E
+:10235000FFFF0000FF3F00000008004800040048A5
+:10236000237AA2786021FAE6E37B002B4BD18033FD
+:10237000F6091D43F3B20393FF27DE48039B42692E
+:10238000DD499B000A403B4013434361039B902679
+:10239000D900C023F605DB0072690B40D7490A401B
+:1023A000134373616368A2789C46237A0293D44BEB
+:1023B00059690F402902394359610421B162033937
+:1023C000B162FF265969360231401143596100213B
+:1023D000C046C046C046C0466746056901322D0A60
+:1023E0007D545D69D2B2354015435D610131029D76
+:1023F000C9B28D42ECD290230422DB059A61033AE4
+:102400009A6161726BE7012BB6D14021B604B60E1A
+:1024100031430391B0E7E37B002B09D18020029B7D
+:10242000B84A1843B84BB9490093230000F03CFF69
+:10243000E27B012A1BD18020238810219B051B0FE2
+:102440000002049300F08CFEE020002204990002B8
+:1024500000F086FE8023029A657A13431B021BB2AA
+:10246000AFB20793237ABB4200D3EBE06572E37B04
+:10247000032B0ED1029A3C331A401300802220888D
+:10248000134302938009C0B29F4B2200029900F0CF
+:102490003FFFE37BFD2B0ED1029ABE3B1A40130097
+:1024A00080222088134302938009C0B2984B2200F7
+:1024B000029900F02DFFE37B1E2B15D1029A2133E8
+:1024C0001A40130080221343029323889B09DBB236
+:1024D0000693029B657A1B021BB2AFB20793237A65
+:1024E000BB4200D322E16572E37B222B01D00B2B90
+:1024F00011D12088C009C1B2C0B26C3880B200F0DE
+:1025000027FC8020029B7F4A18437F4B7F49009322
+:10251000230000F0C9FEE37B0C2B1AD1029A13337F
+:102520001A401300C0208022258813436D09A5217D
+:10253000C001EDB2029300F00BFC2900754800F0D9
+:1025400007FC754B754A009375492300029800F00B
+:10255000ABFEE37B1C2B3AD1A02023888121DB0931
+:10256000DBB2C001049300F0F3FB80200499000269
+:1025700000F0EEFBA0205421C00100F0E9FBAA21ED
+:102580006848677A00F0E4FB5521674800F0E0FBFB
+:102590002021644800F0DCFB8023029ABEB2134382
+:1025A0001B021BB20793237AB34200D30CE18020B5
+:1025B00090210002677200F0CBFB80200021000216
+:1025C00000F0C6FB8020F021000200F0C1FBE37B9D
+:1025D0001F2B30D1A0202188C0010909C9B200F009
+:1025E000B7FBAA214F48657A00F0B2FB55214E484F
+:1025F00000F0AEFB20214B4800F0AAFB7023029AAA
+:10260000AFB29A43F03B13435BB21B020493237AAD
+:10261000BB4200D31EE1802090210002657200F0D1
+:1026200097FB80200021000200F092FB8020F02127
+:10263000000200F08DFBF4232288E370A37A9B183C
+:10264000238050E3802000221021000200F088FD4A
+:10265000AA21334800F07CFB5521304800F078FB7C
+:10266000A0212F4800F074FB079E63682E43B6B28A
+:10267000595D300000F06CFB802001221021000227
+:1026800000F06EFDE02000220499000200F068FDD9
+:10269000C046300000F092FB0690300000F08EFB48
+:1026A000069B8342F4D16368069A5B5D114E9342A8
+:1026B0000DD10423326801359A433260F268013744
+:1026C0001343F3600223EDB2BFB2B362CAE68020C7
+:1026D00001221021000200F043FDE02000220499B5
+:1026E000000200F03DFD04233268134333600223EF
+:1026F000B361B7E60004004803FF0000FFF90000E3
+:1027000000080048AA2A0000452E00085555000080
+:10271000FD2D0008FFFF0000512D0008AAAA0000AF
+:1027200055D50000AA8A000055850000C02001216F
+:10273000000200F00DFBAA21E04800F009FBC020D8
+:102740000021000200F004FB5521DD4800F000FBF1
+:10275000C0200121000200F0FBFAA021D74800F0C0
+:10276000F7FAC0200699000200F0F2FA079E6368AB
+:102770002E43B6B2595D300000F0EAFAC046300090
+:1027800000F01CFB0490300000F018FB049B834217
+:10279000F4D1636804995A5DCA4B8A420DD1042270
+:1027A0001968013591431960D96801370A43DA6025
+:1027B0000222EDB2BFB29A6291E6042219680A437E
+:1027C0001A6002229A618AE6A0205421C00100F01A
+:1027D000BFFA079DA0213D43ADB2280000F0B8FA32
+:1027E00063682800D95D00F0B3FAC046280000F005
+:1027F000E5FA0690280000F0E1FA069B8342F4D146
+:102800006368069ADB5DAF4D93420DD104232A68BD
+:1028100001379A432A60EA6801361343EB600223CA
+:10282000FFB2B6B2AB62BEE6A0208121C00100F0CB
+:102830008FFA80200499000200F08AFAA020542127
+:10284000C00100F085FA04232A6813432B60022399
+:10285000AB61A8E6049EA0212E43B6B2300000F082
+:1028600077FA63683000595D00F072FAC0463000B4
+:1028700000F0A4FA0290300000F0A0FA029B83421C
+:10288000F4D1636802995A5D8E4B8A420DD10421BE
+:102890001A6801358A431A60DA6801370A43DA6038
+:1028A0000222EDB2BFB29A62B1E604211A680A436D
+:1028B0001A6002229A61AAE6E37B002B09D1029BEF
+:1028C000657A1B021BB2AFB20693237ABB4243D296
+:1028D0006572E37B0B2B10D1029A14331A402388C4
+:1028E00002925B091B01657ADBB206931302AFB259
+:1028F0000793237ABB4269D26572E37BFE2B00D03B
+:1029000099E6218870484909C9B200F089FCAA21DA
+:102910006E48657A00F040FC55216D4800F03CFCA3
+:1029200020216A4800F038FC1F23029AAFB21A40F7
+:1029300013020493237ABB4200D395E06572902181
+:10294000002000F029FC0021080000F025FCF02107
+:10295000002000F021FC6EE6AA215E4800F060FC39
+:1029600055215A4800F05CFCA0215A4800F058FC60
+:10297000069E63682E43B6B2595D300000F050FCED
+:10298000C046300000F074FC0490300000F070FC91
+:10299000049B8342F4D1636804995A5D494B8A428F
+:1029A0000DD104221968013591431960D9680137A6
+:1029B0000A43DA600222EDB2BFB29A6285E70422CE
+:1029C00019680A431A6002229A617EE7802020215A
+:1029D000000200F0BDF9AA213E4800F021FC802051
+:1029E0001021000200F0B4F95521384800F018FC1D
+:1029F00080202021000200F0ABF9A021354800F032
+:102A00000FFC80200699000200F0A2F9079E63687F
+:102A10002E43B6B2595D300000F002FCC0463000D3
+:102A200000F026FC0490300000F022FC049B83425E
+:102A3000F4D1636804995A5D224B8A420DD1042275
+:102A40001968013591431960D96801370A43DA6082
+:102A50000222EDB2BFB29A624BE7042219680A4320
+:102A60001A6002229A6144E7049EA0212E4330009E
+:102A700000F092FB63683000595D00F08DFBC046AA
+:102A8000300000F0B1FB0290300000F0ADFB029B83
+:102A90008342F4D1636802995A5D0A4B8A421BD182
+:102AA00004211A6801358A431A60DA6801370A433B
+:102AB000DA600222EDB2BFB29A623BE755950000A0
+:102AC000AAAA000000040048FF3F0000AA0A000074
+:102AD000550500005515000004211A680A431A60C4
+:102AE00002229A6126E7E27B002A50D1D9B28032D5
+:102AF000DB091143DBB202910593824DFF266A691F
+:102B00008149C0200A409021059BC9059B003340A4
+:102B100013436B61059BC000DB004A6903407B489F
+:102B2000024013434B61677AC046C046C046C04668
+:102B3000C046C046C046C046C046AA21744800F000
+:102B4000C9FA5521734800F0C5FA2021704800F0F9
+:102B5000C1FA029B06961B021BB20793FBB20293BB
+:102B6000237ABB421BD26B4680201B7A9021637272
+:102B7000000200F0AFFA80200021000200F0AAFA63
+:102B80008020F021000200F0A5FAC04653E5012A9A
+:102B9000B3D19B049B0E3F321A430592ADE72A68DE
+:102BA0005D4B082113432B60069A6B691340A022EA
+:102BB000120213436B6190230122DB0599629A6232
+:102BC000C046C046C046C04699619A612B68534AC8
+:102BD000069E13402B60079B3E40029A1E4363688B
+:102BE000B6B2995C300000F075FAC046C046C046E7
+:102BF000C046C046C046C046C046C046C04630007B
+:102C000000F08EFA0490C046C046C046C046C0469A
+:102C1000C046C046C046C0466368029A9B5C834279
+:102C200017D0C046C046C046C046C046C046C04693
+:102C3000C046C046300000F073FA049B98420BD1A6
+:102C4000C046C046C046C046C046C046C046C04654
+:102C5000C0460137BFB281E7C046C046C046C04645
+:102C6000C046C046C046C046C046C046C046C04634
+:102C7000C046C046C046C046C046C046C046C04624
+:102C8000C046C046C046C046C046C046C046C04614
+:102C9000C046C046300000F043FA0490CAE7C323A0
+:102CA000E3701F4B1D78F02D1DD11E4E3468E37864
+:102CB000982B18D11C4B20001978FEF7BBFF00237E
+:102CC0003060C3702388E570DAB20292E07A10387F
+:102CD000042806D801F0DEFC9FFBF0FDAFFC07FFE7
+:102CE000AFFCC323E370114B1B78F02B01D1FFF72E
+:102CF000B1F9832B01D0FFF7ADF9FFF735F8FFF7F6
+:102D0000A9F9C0460004004803FF0000FFF90000D5
+:102D1000AA8A00005585000000005555FFFFAAAAA9
+:102D20009C0400208404002028070020DE040020EA
+:102D3000002302000002002A04D1002B01D08023CE
+:102D400018437047DB43511EDBB20A40F3E7000033
+:102D50009023DB0530B51C68134D09022C401C6024
+:102D6000DA68124C2A40DA60114A506102229A62F3
+:102D7000104A00B215682C4314605469E4B2214330
+:102D800051618021C9009961002801DA012098620F
+:102D9000C046C0469962012199614918996113683A
+:102DA00005490B40136030BDFFEFFFFF0000555594
+:102DB0000008004800040048FFFFAAAA0D4B80222B
+:102DC00058619023D200DB0500B29A61002801DA35
+:102DD00001229A62C046C046C046C046064B8022C9
+:102DE00018699023D200DB059A620122000AC0B262
+:102DF0009A61704700080048000400480D4B0E4AD5
+:102E000058610E4B0902186802431A605A69D2B21F
+:102E10001143902259618021D20510684901014374
+:102E200011604021916291611A6805490A401A6057
+:102E30007047C0460008004800005555000400488F
+:102E4000FFFFAAAA104B114A10B558611068104B29
+:102E500009020343136053690E4CDBB219439023FC
+:102E600051618021DB051868490108431860402042
+:102E70009862186820401860D8680143D9601368C8
+:102E800005490B40136010BD0008004800040048CD
+:102E900000005555FFEFFFFFFFFFAAAA224B10B518
+:102EA0001968224B224C1A8852085200505A214A63
+:102EB00010801A88023292B21A8052085200505A78
+:102EC0001D4A10801A88023292B21A8052085200AB
+:102ED000505A1A4A10801A881948023292B21A803F
+:102EE00052085200515A174A11801A88218802321A
+:102EF00092B21A808A4210D908318A1A92B202809C
+:102F000022881A801049114B0A881343104A1A402C
+:102F1000302353409BB20B8010BD0E4C21888A4257
+:102F2000EAD808230380EDE7240700209A04002054
+:102F3000980400204060004042600040446000402F
+:102F40000260004046600040005C00408080FFFF5F
+:102F5000BF8FFFFF96040020FEE70000F7B50123B6
+:102F60000225294F01923A780091054393400421AC
+:102F7000A020264E2D049BB229433268C00100F0E8
+:102F800097FA040001283DD13B7809209C40054375
+:102F90007830A3B232682900FF3000F089FA0400CB
+:102FA00001282FD13B7832689C402900A3B2002031
+:102FB00000F07EFA0400012824D1009B180AFFF7D4
+:102FC000B7FE3B7832689C402900A3B200F070FA4B
+:102FD0000400012816D16B461878FFF7A9FE2200DD
+:102FE0003B7829009A4093B2326800F061FA019868
+:102FF000FFF79EFE3B7832689C402900A3B200F0A8
+:1030000057FA0400E0B2FEBD00070020FC060020D5
+:10301000F7B501230225274F00903A780191054327
+:1030200093400421C020244E2D049BB229433268D2
+:10303000800100F03DFA0400012838D109231D4326
+:103040003B78C0209C403268A3B22900400000F0C9
+:103050002FFA040001282AD13B7832689C402900CD
+:10306000A3B2002000F024FA040001281FD1019B24
+:10307000180AFFF75DFE3B7832689C402900A3B236
+:1030800000F016FA0400012811D16B461879FFF7F9
+:103090004FFE22003B789A4093B2009A14430922D3
+:1030A000E1B209041143326800F002FA0400A0B250
+:1030B000FEBDC04600070020FC0600200023800063
+:1030C00080B2834200D17047C046C04601339BB2F4
+:1030D000F7E700000E4B0F4A58610F4B09021868C2
+:1030E00002431A605A690820D2B2114390225961F2
+:1030F0000121D20590629162C046C046C046C046DA
+:10310000906191611A6805490A401A607047C0468B
+:10311000000800480000555500040048FFFFAAAA17
+:103120000D4B0122586190230421DB059A629962BC
+:10313000C046C046C046C046C046C046C046C0465F
+:10314000C046C046C046C046C046044800699961B2
+:10315000000AC0B29A6170470008004800040048A5
+:1031600070B506000D00002A08D080200002FFF78D
+:1031700025FE802080210002FFF7EAFD05243000B3
+:10318000013CFFF71BFEE4B229003000FFF7E0FD31
+:103190006D08002CF3D170BD0F4B30B590225861F3
+:1031A00080230124D205DB0093620C4B94621D68DE
+:1031B0000B480902284318605869C0B2014359619D
+:1031C000C04608219162C0469161196805480140D6
+:1031D0001960946130BDC0460008004800040048F2
+:1031E00000005555FFFFAAAA0B4B10B5802158616E
+:1031F000902301220424DB05C90099619A629C6234
+:10320000C046C046C046054800699C61000A9962F4
+:10321000C0B29A6110BDC0460008004800040048D2
+:103220000E4B984202D880231B0218430C4B0D4AC8
+:1032300058610D4B0902186802431A605A69D2B2EC
+:1032400011435961C04690220821D2059162C046BF
+:1032500091611A6805490A401A607047FF1F000013
+:10326000000800480000555500040048FFFFAAAAC6
+:103270000A4B984202D880231B021843084B0422B1
+:1032800058619023DB059A62C046C046C046C046DE
+:10329000044908699A61000AC0B27047FF1F000024
+:1032A0000008004800040048F0B585B00191039281
+:1032B00000025E7A1D0003B202932B7AF7B2B3428A
+:1032C00003D200206F7205B0F0BDFF24AA2101983F
+:1032D0000A9B9847552103980A9B9847A02101987B
+:1032E0000A9B9847029B34401C436B68A4B2D95D8B
+:1032F00020000A9B9847C0462000FFF75FFD0700AB
+:103300002000FFF75BFD8742F5D10136B6B2D4E766
+:10331000F0B5150085B00190547A09021E000BB279
+:10332000A7B203932B7ABB4203D200206C7205B084
+:10333000F0BD00212048FFF70BFDAA211F48B04730
+:1033400055211F48B047A0211C48B047019B1D4A8A
+:103350001900981880B2FFF7FBFC039B23439BB234
+:1033600000936B680098195DB047C0460098FFF75E
+:1033700025FD02900098FFF721FD029B8342F4D1C6
+:103380006B6802991A5D104B8A420DD104221968AC
+:10339000013491431960D96801370A43DA60022287
+:1033A000E4B2BFB29A62BDE7042219680A431A6008
+:1033B00002229A61B6E7C04669FD0000555500003B
+:1033C000AA2A000069FDFFFF00040048F0B5184C70
+:1033D000050060690E02C0B2304360618026902013
+:1033E000F600C00549B28661002901DA0121816237
+:1033F000FF2661693602314011436161C0460020F9
+:103400000C4FC04639690132090A29546169D2B2A8
+:10341000314001301143C0B261619842F1D990232B
+:103420008022DB05D2009A6201229A61F0BDC0467B
+:103430000008004800040048F0B5174C05000E00D5
+:1034400060691F2925D8802131430902C0B2014398
+:10345000616190210420FF26C905886261693602F6
+:10346000314011436161C04600200C4FC0463969AC
+:103470000132090A29546169D2B231400130114345
+:10348000C0B261619842F1D990230422DB059A61B0
+:10349000F0BDC0B20902DAE70008004800040048A5
+:1034A0008047C0460000000000000000000000004F
+:1034B000F0B5474680B4061C081C000C102801D546
+:1034C000162700E004270007000F8046FF20014078
+:1034D0005468251C1D439C43F60313850AD5C0463A
+:1034E000C046C046C046C046C046C046948013830E
+:1034F000958002E0012000F081F801390AD4381CDF
+:1035000000F07CF8C046948013839580C046C04686
+:103510007600E2E7381C013800F070F894801383DD
+:103520009580042000F06AF8108A184001D0FF202E
+:1035300061E0C046C046C046C046C046C046948012
+:103540009580108A184055D001200226B04552D0EF
+:103550000921168A1E40FCD1012000F04FF894800A
+:10356000C0469580C04603E0C046C046C046C0463F
+:10357000948095807600108A1840EFF30080400018
+:10358000C00F0643381C023800F038F8948095804C
+:10359000022000F033F80139EAD513859480012028
+:1035A00000F02CF813839580301C80210223994071
+:1035B0000E401BD1002341085E4149085E41490885
+:1035C0005E4149085E4149085E4149085E4149083B
+:1035D0005E4149085E4149085E41760808D34008CB
+:1035E000FF21084048400002013004E00E2002E0C4
+:1035F000092000E0002080BCB846F0BD0138FDD1B4
+:103600007047C04603685A0003D45B005B08C018CB
+:103610007047802212061343F9E7C046F0B55746BB
+:103620004E46DE464546E0B5814683B092460029C7
+:1036300025D04B1E9B46002701935B46FB18DC0FF1
+:10364000E4184B466410E5005E193000FFF7DAFF1E
+:10365000019B8046A3420BD0280008304844FFF766
+:10366000D1FFD04506D80138504509D2671CE4E7A0
+:10367000504505D9A74202D0631E9B46DDE70026D0
+:10368000300003B03CBC90469946A246AB46F0BD24
+:10369000012809D0022805D0002801D00020704759
+:1036A0000248FCE70248FAE70248F8E7B13D0008A3
+:1036B000C93D0008BD3D000830B5234B83B005006F
+:1036C0008C1E002B2AD001A9200000E000BF00289A
+:1036D00020D001992200FFF7A1FF041E1AD0FFF7A6
+:1036E00091FF6368A864012B10D0201D002B1BDB09
+:1036F000FFF788FF0023E8642B650368002B17DBC6
+:10370000FFF780FF2861002003B030BD00230520B3
+:103710002B61F9E7002309202B61F5E70B480C49E1
+:10372000091AC9100191D5E70123E8642B65E4E784
+:103730001801000FFFF7ACFF2861002801D1093004
+:10374000E2E70020E0E7C04600000000AC470008C8
+:103750007C480008036810B50400DA0705D49B070D
+:103760000FD5483000F084FC23685A070FD51A079C
+:1037700014D5DB0604D42000D130FF3000F084FCE7
+:1037800010BD483000F070FC23685A07EFD42000C9
+:10379000D03000F071FC23681A07EAD420005130C1
+:1037A000FF3000F06DFC2368E3E7C0460368002BA0
+:1037B00000D01B1818007047092070477047C0469A
+:1037C00070B504000D0008E02B6C2A006361210035
+:1037D000012023699847082807D1296C2000FFF7AA
+:1037E0006BFF0028F0D000F09FFE0728FBD10020DF
+:1037F000296CFFF7E3FF281D00F020FCF0B5CE4652
+:10380000474680B5C368324C9846A5448369060094
+:1038100014000431402205A8994600F08DFE0023D3
+:1038200004AD296C30000493FFF746FF631E9C41F2
+:1038300007000934002F15D0AB6B10216B644B4689
+:1038400021430193C9B20095330032000120C047E3
+:10385000002833D13800F5239B009D440CBC9046D2
+:103860009946F0BDF0222B6C5200736129007CA8B0
+:1038700000F062FE7CAA31003369200098478A9BE1
+:1038800007006B6403934B460095019332003300AD
+:1038900021000120C047002810D1F0227CA952004D
+:1038A000280000F049FE082F06D1296C3000FFF7F0
+:1038B00003FF09240700BDE7072F01D00927C9E747
+:1038C0000020296CFFF77AFF05A800F0B7FBC0467F
+:1038D0002CFCFFFF406C704770B5CB6BFAB00B64EB
+:1038E00004000E004022043103A800F025FE01234D
+:1038F0005B42029306E002AA210023699847050073
+:1039000008280AD1129B200019000193FFF7D4FE6A
+:103910000028F0D009207AB070BD02A8FFF71AFF86
+:10392000062DF7D131002000FFF74AFF10B5826164
+:10393000DA6BC1601A6419000022FFF75FFF10BD47
+:10394000436970B50B64C36804000D00002B04D0FC
+:103950000122FFF753FF00F0E7FD0A002369010091
+:1039600002209847072807D0082803D12900200003
+:10397000FFF726FF00F0D8FD0020296CFFF71EFF9F
+:10398000281D00F05BFBC046C36810B5002B05D0B6
+:10399000CB6B00220B64FFF731FF10BDFFF79CFFDC
+:1039A000FBE7C0467047C046836810B5002B02D0C5
+:1039B00001000120984710BD10B5012907D000294A
+:1039C00007D003390224012901D9200010BD0124A8
+:1039D000FBE70224002BF8D10F2AF6D892008218B8
+:1039E0005268029B00241A60EFE7C04600B585B01C
+:1039F00003AB0A00009300210023FFF7DDFF0398CB
+:103A000005B000BD10B5012907D0002907D0033942
+:103A10000224012901D9200010BD0124FBE7022462
+:103A2000002BF8D10F2AF6D8029B92001B6882184F
+:103A300053600024EFE7C04600B585B003AB0392A6
+:103A400000930A0000230021FFF7DCFF05B000BD52
+:103A500070B51A4CD36BA544136406000D0019A869
+:103A6000111D402200F068FD01235B42189314E011
+:103A70000C2118A802AAFFF7DFFF290018A8B047F9
+:103A8000002812D1069B18AA02A908300193984772
+:103A9000040005280AD0092807D0289B02A819008D
+:103AA0000193FFF709FE0028E2D0092418A8FFF7C8
+:103AB00051FE200090239B009D4470BDC0FDFFFF80
+:103AC000F0B5DE464E464546574693460322E0B5DE
+:103AD0001E0013008BB003400193CB6C0D001C1D26
+:103AE0001B6808940793002E66D11B02079306AB50
+:103AF0005E731A73019B022B00D16EE02B6DDB0706
+:103B000047D40023A846B2460293083303400393E8
+:103B10002568002D00D137E15346022B49D0258876
+:103B2000668804340123370099469F4343469B6CC3
+:103B30000F219C4658466744FFF758FF00228742F2
+:103B400006D82A004B469A43D719B84280414242D0
+:103B500002230121760033400D402B43012B3ED040
+:103B6000002B5AD0022B1CD1236801995F007F08DB
+:103B7000002965D1002A06D0039A002A00D188E0E6
+:103B8000002F00D1AAE0002B65DB0137BF00E4194C
+:103B9000BEE700230293022E47DDFFF70DFE00284B
+:103BA00049D009200BB03CBC90469946A246AB4692
+:103BB000F0BD66680834B5E7022E9BDC1A0C1B04C6
+:103BC0000793022306A90B73FD3313409B00E418EF
+:103BD000019B4A73022B00D090E7AC6B8EE7019BF0
+:103BE000002B3AD1002A16D02368DD0F63689A1C97
+:103BF000D7D0424658320692013300D1C6E0201D8C
+:103C0000FFF7D4FD06AB01002A00404600E000BFEC
+:103C1000002800D0A7E008347AE7019B002B02D0EF
+:103C2000002A00D08BE0043472E707A9584600F060
+:103C3000D1FA0028B5D1029B002B5DD10820B1E755
+:103C400043460D2158461D6AFFF7D0FE854263D0DA
+:103C50002368002B99DA043497E743460D21584630
+:103C60001D6AFFF7C3FE8542D5D143469B6A9C423D
+:103C7000D1D145462000FFF7C5FC0F210200584670
+:103C8000FFF7DAFE58462A000021FFF7D5FE07208D
+:103C900088E7002F22D058235146434406AABA464B
+:103CA000251D0026049405911F00914603E004356C
+:103CB0002600A24514D028000697FFF777FD4B4653
+:103CC000010000224046741C00E000BF0028EED036
+:103CD0005746059B049C9A46B742B9D1454601E038
+:103CE0004546049C0D215846FFF780FE069B28623E
+:103CF0006B62AC62062055E70F215846FFF776FE4F
+:103D00000E2102005846FFF797FE5846274A0F211A
+:103D1000FFF792FE072045E743469B6A9C4297D1F6
+:103D2000434642469F620023D36204331363231D3C
+:103D300053632368002B32DB0123029325E7200025
+:103D4000FFF760FC454604340600AC63404600E0E3
+:103D500000BF002800D124E7584632000F21FFF7AA
+:103D60006BFE07201EE707000D2158464546FFF76A
+:103D70003DFE2862022F0FD1069BEB6243462C3397
+:103D80006B62AC6206200DE7564604E70D215846EB
+:103D90004546FFF72BFE2862069B6B62F1E7380071
+:103DA000013080004546201865E7C046000000004D
+:103DB00010B50023FFF784FE10BDC04610B50123E7
+:103DC000FFF77EFE10BDC04610B50223FFF778FE58
+:103DD00010BDC046F0B5CE46474680B50600C3B01C
+:103DE00014001D0001294ED0002933D003290AD028
+:103DF000042902D1002B00D189E0022043B00CBC81
+:103E000090469946F0BD032BF7D11404150C240CF1
+:103E10002B19102BF1D8082203681A4200D0E7E0D2
+:103E200020AB1800984600F02DF9B36BED001A0096
+:103E3000002C09D0E400EA1A1C1942441968D15038
+:103E400004339C42FAD12200B263404600F018F9D4
+:103E50000020D3E70220002BD0D10023012710043B
+:103E6000B56B000C321D39009940084202D0296818
+:103E70000435116001330432102BF4D10020A30467
+:103E8000BCD4B563BAE71404170C240C012B5FD023
+:103E9000052BB2D13B19202BAFD80F2F7DD9A146CE
+:103EA000002C65D1002223009146B16B002B00DC71
+:103EB00088E020A88046FA00DB00521ACB18424462
+:103EC0000868505004318B42FAD119004B46002B40
+:103ED00010D04B4658003A00102F00D21022002379
+:103EE000103AD2006A448000CC58D4500433834244
+:103EF000FAD1C918012D5ED0B1630F2F74D94B468A
+:103F0000002BA5D0684600F0B7F8002076E7102A0D
+:103F100000D972E7102203681A4245D120AB18007D
+:103F2000984600F0B3F800230120B16B02009A40DC
+:103F3000144204D045460F689A00AF500431013353
+:103F4000042BF3D14046B16300F09EF8002055E702
+:103F50003B19102B00D950E70F2F00D94DE7002354
+:103F60009946012233681A4230D14B46002B5AD071
+:103F7000042233681A4242D1012D47D00F2F06D8B0
+:103F800020AB180000F076F84B46002B8AD068462C
+:103F900000F074F81023DB1B87E7102BDFD9102209
+:103FA000524291469944DCE793430360D130FF309D
+:103FB00000F06CF8B2E7043120A8B16300F054F8C7
+:103FC00000201BE74B46002B84D193E71900914357
+:103FD0000A003160052D1ED0032230009343336068
+:103FE000483000F043F8C0E720A800F041F886E729
+:103FF000934303605130FF3000F044F810E7300085
+:1040000093433360D03000F039F8B5E720AB1800A7
+:1040100000F02CF8BEE7022330001A43326048302B
+:1040200000F028F8A1E7012D03D00F2F00D939E7C0
+:10403000A6E720AB180000F019F833E7011C343173
+:1040400038C9043B9C461D60A646011C20313CC972
+:1040500090469946A246AB46011C0831FCC941680E
+:104060000068E54600BDC0467047C0467047C04680
+:104070007047C0467047C0467047C0467047C0464C
+:104080007047C0467047C0467047C0467047C0463C
+:1040900001B401A801B585B0FFB408A841464A465D
+:1040A00053465C4665463EC001A83EC80F98009046
+:1040B00000230CB401A9FFF70FFC109B12B01847A6
+:1040C00001B401A801B585B0FFB408A841464A462D
+:1040D00053465C4665463EC001A83EC80F98009016
+:1040E00000230CB401A9FFF72BFC109B12B018475A
+:1040F00001B401A801B585B0FFB408A841464A46FD
+:1041000053465C4665463EC001A83EC80F980090E5
+:1041100000230CB401A9FFF737FC109B12B018471D
+:1041200001B401A801B585B0FFB408A841464A46CC
+:1041300053465C4665463EC001A83EC80F980090B5
+:1041400000230CB401ABFFF7F1FB109B12B0184732
+:1041500001B401A801B585B0FFB408A841464A469C
+:1041600053465C4665463EC001A83EC80F98009085
+:1041700000230CB401AAFFF76BFC109B12B0184788
+:10418000027A0300002A04D1427AB020002A07D123
+:104190007047013A02720268100E12021A60F7E7C5
+:1041A000013A5A725A68111D596003211268197236
+:1041B000F2E7C04600B585B003AB00930C220023A4
+:1041C0000021FFF7F9FB039805B000BD10B5FFF71C
+:1041D000F1FF10BDF0B557464E464546DE4600237A
+:1041E000E0B587B003930F339846083B9946802388
+:1041F0001B0306000F009A463800FFF7C1FF0400BA
+:10420000B02821D0030632D4FF2583001D4005AB22
+:104210009B4600930D220023002130000435FFF758
+:10422000CBFB63064CD5059B5D1B05955B46009358
+:1042300000230D2200213000FFF7E4FB3800FFF7D8
+:104240009FFF0400B028DDD1039B0024002B2FD159
+:1042500005AD00950E2200213000FFF7ADFB009563
+:1042600000230F2200213000FFF7CCFB20E00300E9
+:1042700042469343DBB2802B63D0902B25D0A02BFA
+:1042800032D0B02B45D0C02B00D173E003004A469A
+:104290009343DBB2D02B0AD15346024001321A437A
+:1042A000052301213000FFF795FD0028A4D0092443
+:1042B000200007B03CBC90469946A246AB46F0BDF4
+:1042C000059B9C4665440595B0E7833B03400D2B59
+:1042D000EDD0424605AD024000950023002130009C
+:1042E000FFF76AFB0095A3E7FF234A461B0119006D
+:1042F000824311410A001A40030702D58023DB01E3
+:104300001A43002300213000FFF764FD0028CED1BE
+:1043100072E7B1284AD0B2285ED0B32800D18BE032
+:10432000FC230340B42BC2D04A465346024001321C
+:104330001A43012101233000FFF74CFD0028B6D1BC
+:104340005AE704023800FFF71BFF802520432D02A7
+:10435000A842ACD004010005020C0023002130006B
+:10436000FFF738FD0028A2D12C4200D144E70123F9
+:10437000039341E7C6286AD0C7287CD003004A4689
+:104380009343DBB2C02B00D18BE0C82800D18FE073
+:10439000C92800D08BE73800FFF7F2FEF0230203B4
+:1043A0001B03134042460240013278E73800FFF712
+:1043B000E7FE002800D17AE7030042469343DBB2D0
+:1043C000002B00D073E7020000213000FFF702FD50
+:1043D000002800D06BE70FE705AB00939B460D224A
+:1043E000002300213000FFF7E7FA3800FFF7C8FE8E
+:1043F00003066AD57F25B03C059B2840A0409C461B
+:104400006044059038000734FFF7BAFE0306F3D482
+:10441000812292009446863AFF3A1040A040059BC4
+:10442000723A634418185B460590009300210023FC
+:104430003000FFF7E7FADFE63800FFF7A1FEF023D0
+:1044400002031B03134042460240013270E738006A
+:10445000FFF796FEF02302031B031340424602407F
+:1044600001321A43032303213000FFF7B3FC002875
+:1044700000D01CE7C0E63800FFF782FE002800D11C
+:1044800015E7030042469343DBB2002B00D00EE752
+:10449000020004213000FFF79DFC002800D006E751
+:1044A000AAE64346A0221C40013412032243D9E766
+:1044B0003800FFF765FE434602009A43D2B210323D
+:1044C0001840120301300243EAE60224A0E7C04686
+:1044D000030000B5DB6C85B05A6808001202019237
+:1044E0001A0001A908324A6003220A72DB794B7272
+:1044F000FFF770FE05B000BD10B5FFF767FE806CDA
+:1045000010BDC04610B5FFF761FEC26CD3799B00A9
+:104510000833D01810BDC04610B500F005F8C046ED
+:1045200010B5FFF7F9FFC04610B5062000F074F88B
+:10453000012000F0A3F8C046F0B505000F2A2FD9DE
+:104540000B0003439B0734D116000C000300103E00
+:10455000350901352D01451927681F6067685F60BF
+:10456000A7689F60E7681034DF6010339D42F3D185
+:104570000F239E431036851989191340032B1AD92E
+:104580001E1F0023B4080134A400CF58EF50043399
+:10459000A342FAD10324A643331D2240C918ED18C3
+:1045A000002A05D00023CC5CEC5401339342FAD1AD
+:1045B000F0BD0500F6E71A00F2E7C04670B5050049
+:1045C0000C001F2922D8B7239B00C358002B14D0FE
+:1045D0008A009B181A68002A0FD0012A0BD0511CA0
+:1045E00005D00021200019609047002070BD1623DF
+:1045F00003600120FAE70020F8E7280000F02AF81D
+:1046000022000100280000F011F8EFE716230360F4
+:1046100001204042EAE7C04610B5034B010018688C
+:10462000FFF7CCFF10BDC04600000020002370B58E
+:10463000074C050008001100236000F017F8431C28
+:1046400000D070BD2368002BFBD02B60F9E7C0467B
+:104650002C07002010B500F001F810BD58220120F1
+:10466000014B40421A6070472C070020582201205D
+:10467000014B40421A6070472C070020FEE7C046FD
+:1046800002B4714649084900095C49008E4402BCE5
+:104690007047C04603B47146490840004900095EAE
+:1046A00049008E4403BC704703B47146490840007A
+:1046B0004900095A49008E4403BC7047F8B5C0460A
+:1046C000F8B5C04609021200010100803209040059
+:1046D00000000000000012010002FF000008C016E8
+:1046E000DC05000201020001040309042A03490059
+:1046F0006E00660069006E006900740065004E007F
+:10470000650073004C0069007600650073002E00A0
+:1047100063006F006D00000000000000000000005A
+:104720000000000000000000000000000000000089
+:104730000000000000000000000000000000000079
+:104740001E0349004E004C0020005200650074001A
+:1047500072006F002D00500072006F0067000000B3
+:104760000000000000000000000000000000000049
+:0C4770000000000000000000000000003D
+:10477C0074B20181B0AB308000000000800A01816E
+:10478C00B0B0ABF0000000003F020181B0AB308054
+:10479C000000000080060181B0B0ABF0000000000A
+:1047AC00F4ECFF7FB0B0B08050EEFF7F0100000052
+:1047BC00FCEEFF7FB0A9028090EFFF7FB0B0A88025
+:1047CC00E0EFFF7F01000000ECEFFF7FB0B0AA80AC
+:1047DC0020F0FF7F9CFFFF7FF0F0FF7F01000000C7
+:1047EC00ECF0FF7FAA3F398038F1FF7FB0B0A88092
+:1047FC0044F1FF7FB0B0AA8084F1FF7FB0B0A880F5
+:10480C0098F1FF7F0100000094F1FF7FB0B0A88009
+:10481C009CF1FF7F010000002CF2FF7FAA0FB280F9
+:10482C0094F2FF7F58FFFF7F7CF5FF7FB0B0A8802C
+:10483C0098F5FF7F54FFFF7FF8F7FF7F0100000022
+:10484C0068F9FF7F0084048078F9FF7FB0B0A880FE
+:10485C0078F9FF7F40FFFF7F6CFCFF7F00840480B2
+:10486C008CFCFF7FB0B0A880A4FCFF7F010000008F
+:10487C00080000200000000000000000F4020020EE
+:10488C005C030020C40300200000000000000000B6
:10489C00000000000000000000000000000000000C
:1048AC0000000000000000000000000000000000FC
:1048BC0000000000000000000000000000000000EC
@@ -1170,8 +1170,8 @@
:1048FC0000000000000000000000000000000000AC
:10490C00000000000000000000000000000000009B
:10491C00000000000000000000000000000000008B
-:10492C00000000000000000000000000000000007B
-:10493C00000000000000000000000000000000006B
+:10492C0001000000000000000E33CDAB34126DE628
+:10493C00ECDE05000B000000000000000000000091
:10494C00000000000000000000000000000000005B
:10495C00000000000000000000000000000000004B
:10496C00000000000000000000000000000000003B
@@ -1205,5 +1205,26 @@
:104B2C000000000000000000000000000000000079
:104B3C000000000000000000000000000000000069
:104B4C000000000000000000000000000000000059
+:104B5C000000000000000000000000000000000049
+:104B6C000000000000000000000000000000000039
+:104B7C000000000000000000000000000000000029
+:104B8C000000000000000000000000000000000019
+:104B9C000000000000000000000000000000000009
+:104BAC0000000000000000000000000000000000F9
+:104BBC0000000000000000000000000000000000E9
+:104BCC0000000000000000000000000000000000D9
+:104BDC0000000000000000000000000000000000C9
+:104BEC0000000000000000000000000000000000B9
+:104BFC0000000000000000000000000000000000A9
+:104C0C000000000000000000000000000000000098
+:104C1C000000000000000000000000000000000088
+:104C2C000000000000000000000000000000000078
+:104C3C000000000000000000000000000000000068
+:104C4C000000000000000000000000000000000058
+:104C5C000000000000000000000000000000000048
+:104C6C000000000000000000000000000000000038
+:104C7C000000000000000000000000000000000028
+:104C8C000000000000000000000000000000000018
+:104C9C000000000000000000000000000000000008
:04000005080000C12E
:00000001FF
diff --git a/firmware/build_stm/inlretro_stm.map b/firmware/build_stm/inlretro_stm.map
index 025e55d..98f602a 100644
--- a/firmware/build_stm/inlretro_stm.map
+++ b/firmware/build_stm/inlretro_stm.map
@@ -1,7 +1,7 @@
Archive member included to satisfy reference by file (symbol)
c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o)
- C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o (__aeabi_unwind_cpp_pr0)
+ C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o (__aeabi_unwind_cpp_pr0)
c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(libunwind.o)
c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o) (restore_core_regs)
c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(pr-support.o)
@@ -51,11 +51,11 @@ c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3
c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(_exit.o)
c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-abort.o) (_exit)
c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o)
- C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o (__gnu_thumb1_case_uqi)
+ C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o (__gnu_thumb1_case_uqi)
c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_shi.o)
- C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o (__gnu_thumb1_case_shi)
+ C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o (__gnu_thumb1_case_shi)
c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o)
- C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o (__gnu_thumb1_case_uhi)
+ C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o (__gnu_thumb1_case_uhi)
Allocating common symbols
Common symbol size file
@@ -65,6 +65,7 @@ __lock___atexit_recursive_mutex
__lock___arc4random_mutex
0x1 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-lock.o)
errno 0x4 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-reent.o)
+addrh 0x4 source/bootload.o (symbol from plugin)
incoming_bytes_remain
0x1 source/buffer.o (symbol from plugin)
__lock___env_recursive_mutex
@@ -107,39 +108,48 @@ Discarded input sections
.ARM.exidx 0x00000000 0x8 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/crt0.o
.ARM.attributes
0x00000000 0x1b c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/crt0.o
- .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o
- .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o
- .text 0x00000000 0x0 source/buffer.o (symbol from plugin)
- .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
+ .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o
+ .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o
+ .text 0x00000000 0x0 source/bootload.o (symbol from plugin)
+ .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
.rodata.oper_info
- 0x00000000 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
- .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
- .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
- .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o
- .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o
- .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o
+ 0x00000000 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
+ .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
+ .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
+ .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ .text 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o
+ .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o
+ .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o
+ .text 0x00000000 0x0 source/buffer.o (symbol from plugin)
+ .text 0x00000000 0x0 source/ciccom.o (symbol from plugin)
.text 0x00000000 0x0 source/dump.o (symbol from plugin)
.text 0x00000000 0x0 source/flash.o (symbol from plugin)
+ .text 0x00000000 0x0 source/gameboy.o (symbol from plugin)
+ .text 0x00000000 0x0 source/gba.o (symbol from plugin)
.text 0x00000000 0x0 source/io.o (symbol from plugin)
.text 0x00000000 0x0 source/jtag.o (symbol from plugin)
.text 0x00000000 0x0 source/main.o (symbol from plugin)
+ .text 0x00000000 0x0 source/n64.o (symbol from plugin)
.text 0x00000000 0x0 source/nes.o (symbol from plugin)
.text 0x00000000 0x0 source/operation.o (symbol from plugin)
.text 0x00000000 0x0 source/pinport.o (symbol from plugin)
+ .text 0x00000000 0x0 source/sega.o (symbol from plugin)
.text 0x00000000 0x0 source/snes.o (symbol from plugin)
.text 0x00000000 0x0 source/swim.o (symbol from plugin)
.text 0x00000000 0x0 source/usb.o (symbol from plugin)
.text 0x00000000 0x0 source_stm_only/stm_init.o (symbol from plugin)
.text 0x00000000 0x0 source_stm_only/usbstm.o (symbol from plugin)
- .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o
- .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o
- .ARM.extab 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o
+ .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o
+ .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o
+ .ARM.extab 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o
+ .data 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o
+ .bss 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o
+ .ARM.extab 0x00000000 0x0 C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o
.data 0x00000000 0x0 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o)
.bss 0x00000000 0x0 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o)
.debug_frame 0x00000000 0x2c4 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o)
@@ -405,26 +415,33 @@ Linker script and memory map
LOAD c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crti.o
LOAD c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crtbegin.o
LOAD c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m/crt0.o
-LOAD C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o
+LOAD C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o
+LOAD source/bootload.o
+LOAD C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+LOAD C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
+LOAD C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+LOAD C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o
LOAD source/buffer.o
-LOAD C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
-LOAD C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
-LOAD C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
-LOAD C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o
+LOAD source/ciccom.o
LOAD source/dump.o
LOAD source/flash.o
+LOAD source/gameboy.o
+LOAD source/gba.o
LOAD source/io.o
LOAD source/jtag.o
LOAD source/main.o
+LOAD source/n64.o
LOAD source/nes.o
LOAD source/operation.o
LOAD source/pinport.o
+LOAD source/sega.o
LOAD source/snes.o
LOAD source/swim.o
LOAD source/usb.o
LOAD source_stm_only/stm_init.o
LOAD source_stm_only/usbstm.o
-LOAD C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o
+LOAD C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o
+LOAD C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o
START GROUP
LOAD c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a
LOAD c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a
@@ -438,12 +455,12 @@ END GROUP
LOAD c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crtend.o
LOAD c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crtn.o
-.text 0x08000000 0x462c
+.text 0x08000000 0x477c
*(.isr_vector)
- .isr_vector 0x08000000 0xc0 C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o
+ .isr_vector 0x08000000 0xc0 C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o
0x08000000 __isr_vector
*(.text*)
- .text 0x080000c0 0x40 C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o
+ .text 0x080000c0 0x40 C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o
0x080000c0 Reset_Handler
0x080000fc TSC_IRQHandler
0x080000fc ADC1_COMP_IRQHandler
@@ -483,164 +500,172 @@ LOAD c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eab
0x080000fc USART1_IRQHandler
0x080000fc TIM1_BRK_UP_TRG_COM_IRQHandler
.text.USB_IRQHandler
- 0x08000100 0x18bc C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
+ 0x08000100 0x1970 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
0x08000100 USB_IRQHandler
.text.pbje_scan
- 0x080019bc 0x12c C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
+ 0x08001a70 0x12c C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
.text.pbje_state_change
- 0x08001ae8 0x98 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
+ 0x08001b9c 0x98 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
.text.get_next_buff
- 0x08001b80 0x54 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
+ 0x08001c34 0x54 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
.text.jtag_init_pbje
- 0x08001bd4 0xe0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
- 0x08001bd4 jtag_init_pbje
+ 0x08001c88 0xe0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
+ 0x08001c88 jtag_init_pbje
.text.jtag_run_pbje.part.0
- 0x08001cb4 0xd8 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
- 0x08001cb4 jtag_run_pbje.part.0
+ 0x08001d68 0xd8 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
+ 0x08001d68 jtag_run_pbje.part.0
.text.io_reset
- 0x08001d8c 0x148 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
- 0x08001d8c io_reset
+ 0x08001e40 0x148 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
+ 0x08001e40 io_reset
.text.startup.main
- 0x08001ed4 0xe14 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
- 0x08001ed4 main
+ 0x08001f88 0xda8 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
+ 0x08001f88 main
.text.append_pairity
- 0x08002ce8 0x1e C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- *fill* 0x08002d06 0x2
+ 0x08002d30 0x1e C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ *fill* 0x08002d4e 0x2
.text.nes_cpu_wr
- 0x08002d08 0x6c C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- 0x08002d08 nes_cpu_wr
+ 0x08002d50 0x6c C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ 0x08002d50 nes_cpu_wr
.text.nes_cpu_rd
- 0x08002d74 0x40 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- 0x08002d74 nes_cpu_rd
+ 0x08002dbc 0x40 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ 0x08002dbc nes_cpu_rd
+ .text.disc_push_exp0_prgrom_wr
+ 0x08002dfc 0x48 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ 0x08002dfc disc_push_exp0_prgrom_wr
.text.discrete_exp0_prgrom_wr
- 0x08002db4 0x58 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- 0x08002db4 discrete_exp0_prgrom_wr
- .text.control_xfr_in.lto_priv.33
- 0x08002e0c 0xbc C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- 0x08002e0c control_xfr_in.lto_priv.33
+ 0x08002e44 0x58 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ 0x08002e44 discrete_exp0_prgrom_wr
+ .text.control_xfr_in.lto_priv.39
+ 0x08002e9c 0xbc C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ 0x08002e9c control_xfr_in.lto_priv.39
.text.HardFault_Handler
- 0x08002ec8 0x2 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- 0x08002ec8 HardFault_Handler
- *fill* 0x08002eca 0x2
+ 0x08002f58 0x2 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ 0x08002f58 HardFault_Handler
+ *fill* 0x08002f5a 0x2
.text.swim_wotf
- 0x08002ecc 0xb4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- 0x08002ecc swim_wotf
+ 0x08002f5c 0xb4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ 0x08002f5c swim_wotf
.text.swim_rotf
- 0x08002f80 0xac C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- 0x08002f80 swim_rotf
+ 0x08003010 0xac C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ 0x08003010 swim_rotf
.text.delay_us
- 0x0800302c 0x16 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- 0x0800302c delay_us
- *fill* 0x08003042 0x2
+ 0x080030bc 0x16 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ 0x080030bc delay_us
+ *fill* 0x080030d2 0x2
.text.snes_rom_wr
- 0x08003044 0x4c C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- 0x08003044 snes_rom_wr
+ 0x080030d4 0x4c C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ 0x080030d4 snes_rom_wr
.text.snes_rom_rd
- 0x08003090 0x40 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- 0x08003090 snes_rom_rd
- .text.mmc1_wr 0x080030d0 0x38 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- 0x080030d0 mmc1_wr
+ 0x08003120 0x40 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ 0x08003120 snes_rom_rd
+ .text.mmc1_wr 0x08003160 0x38 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ 0x08003160 mmc1_wr
.text.nes_dualport_wr
- 0x08003108 0x50 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- 0x08003108 nes_dualport_wr
+ 0x08003198 0x50 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ 0x08003198 nes_dualport_wr
.text.nes_dualport_rd
- 0x08003158 0x38 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- 0x08003158 nes_dualport_rd
+ 0x080031e8 0x38 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ 0x080031e8 nes_dualport_rd
.text.nes_ppu_wr
- 0x08003190 0x50 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- 0x08003190 nes_ppu_wr
+ 0x08003220 0x50 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ 0x08003220 nes_ppu_wr
.text.nes_ppu_rd
- 0x080031e0 0x38 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- 0x080031e0 nes_ppu_rd
- .text.write_page.constprop.23
- 0x08003218 0x68 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o
- 0x08003218 write_page.constprop.23
- .text.nes_cpu_page_rd_poll.constprop.17
- 0x08003280 0x6c C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o
- 0x08003280 nes_cpu_page_rd_poll.constprop.17
- .text.nes_ppu_page_rd_poll.constprop.16
- 0x080032ec 0x68 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o
- 0x080032ec nes_ppu_page_rd_poll.constprop.16
- *fill* 0x08003354 0xc
- .text 0x08003360 0x154 C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o
- 0x08003360 swim_xfr
- .text 0x080034b4 0xa38 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o)
- 0x08003784 _Unwind_GetCFA
- 0x08003788 __gnu_Unwind_RaiseException
- 0x080037dc __gnu_Unwind_ForcedUnwind
- 0x080037f0 __gnu_Unwind_Resume
- 0x08003838 __gnu_Unwind_Resume_or_Rethrow
- 0x08003854 _Unwind_Complete
- 0x08003858 _Unwind_DeleteException
- 0x08003868 _Unwind_VRS_Get
- 0x080038b4 _Unwind_VRS_Set
- 0x08003900 __gnu_Unwind_Backtrace
- 0x08003c60 __aeabi_unwind_cpp_pr0
- 0x08003c6c __aeabi_unwind_cpp_pr1
- 0x08003c78 __aeabi_unwind_cpp_pr2
- 0x08003c84 _Unwind_VRS_Pop
- .text 0x08003eec 0x144 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(libunwind.o)
- 0x08003eec __restore_core_regs
- 0x08003eec restore_core_regs
- 0x08003f18 __gnu_Unwind_Restore_VFP
- 0x08003f1c __gnu_Unwind_Save_VFP
- 0x08003f20 __gnu_Unwind_Restore_VFP_D
- 0x08003f24 __gnu_Unwind_Save_VFP_D
- 0x08003f28 __gnu_Unwind_Restore_VFP_D_16_to_31
- 0x08003f2c __gnu_Unwind_Save_VFP_D_16_to_31
- 0x08003f30 __gnu_Unwind_Restore_WMMXD
- 0x08003f34 __gnu_Unwind_Save_WMMXD
- 0x08003f38 __gnu_Unwind_Restore_WMMXC
- 0x08003f3c __gnu_Unwind_Save_WMMXC
- 0x08003f40 ___Unwind_RaiseException
- 0x08003f40 _Unwind_RaiseException
- 0x08003f70 _Unwind_Resume
- 0x08003f70 ___Unwind_Resume
- 0x08003fa0 _Unwind_Resume_or_Rethrow
- 0x08003fa0 ___Unwind_Resume_or_Rethrow
- 0x08003fd0 _Unwind_ForcedUnwind
- 0x08003fd0 ___Unwind_ForcedUnwind
- 0x08004000 ___Unwind_Backtrace
- 0x08004000 _Unwind_Backtrace
- .text 0x08004030 0x3a8 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(pr-support.o)
- 0x08004084 __gnu_unwind_execute
- 0x08004380 __gnu_unwind_frame
- 0x080043a8 _Unwind_GetRegionStart
- 0x080043b4 _Unwind_GetLanguageSpecificData
- 0x080043c8 _Unwind_GetTextRelBase
- 0x080043d0 _Unwind_GetDataRelBase
- .text.abort 0x080043d8 0x10 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-abort.o)
- 0x080043d8 abort
- .text.memcpy 0x080043e8 0x84 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-memcpy-stub.o)
- 0x080043e8 memcpy
+ 0x08003270 0x38 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ 0x08003270 nes_ppu_rd
+ .text.write_page.constprop.28
+ 0x080032a8 0x68 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o
+ 0x080032a8 write_page.constprop.28
+ .text.write_page_bank.constprop.26
+ 0x08003310 0xbc C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o
+ 0x08003310 write_page_bank.constprop.26
+ .text.nes_cpu_page_rd_poll.constprop.22
+ 0x080033cc 0x6c C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o
+ 0x080033cc nes_cpu_page_rd_poll.constprop.22
+ .text.nes_ppu_page_rd_poll.constprop.21
+ 0x08003438 0x68 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o
+ 0x08003438 nes_ppu_page_rd_poll.constprop.21
+ .text 0x080034a0 0x4 C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o
+ 0x080034a0 jump2addr
+ *fill* 0x080034a4 0xc
+ .text 0x080034b0 0x154 C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o
+ 0x080034b0 swim_xfr
+ .text 0x08003604 0xa38 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o)
+ 0x080038d4 _Unwind_GetCFA
+ 0x080038d8 __gnu_Unwind_RaiseException
+ 0x0800392c __gnu_Unwind_ForcedUnwind
+ 0x08003940 __gnu_Unwind_Resume
+ 0x08003988 __gnu_Unwind_Resume_or_Rethrow
+ 0x080039a4 _Unwind_Complete
+ 0x080039a8 _Unwind_DeleteException
+ 0x080039b8 _Unwind_VRS_Get
+ 0x08003a04 _Unwind_VRS_Set
+ 0x08003a50 __gnu_Unwind_Backtrace
+ 0x08003db0 __aeabi_unwind_cpp_pr0
+ 0x08003dbc __aeabi_unwind_cpp_pr1
+ 0x08003dc8 __aeabi_unwind_cpp_pr2
+ 0x08003dd4 _Unwind_VRS_Pop
+ .text 0x0800403c 0x144 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(libunwind.o)
+ 0x0800403c __restore_core_regs
+ 0x0800403c restore_core_regs
+ 0x08004068 __gnu_Unwind_Restore_VFP
+ 0x0800406c __gnu_Unwind_Save_VFP
+ 0x08004070 __gnu_Unwind_Restore_VFP_D
+ 0x08004074 __gnu_Unwind_Save_VFP_D
+ 0x08004078 __gnu_Unwind_Restore_VFP_D_16_to_31
+ 0x0800407c __gnu_Unwind_Save_VFP_D_16_to_31
+ 0x08004080 __gnu_Unwind_Restore_WMMXD
+ 0x08004084 __gnu_Unwind_Save_WMMXD
+ 0x08004088 __gnu_Unwind_Restore_WMMXC
+ 0x0800408c __gnu_Unwind_Save_WMMXC
+ 0x08004090 ___Unwind_RaiseException
+ 0x08004090 _Unwind_RaiseException
+ 0x080040c0 _Unwind_Resume
+ 0x080040c0 ___Unwind_Resume
+ 0x080040f0 _Unwind_Resume_or_Rethrow
+ 0x080040f0 ___Unwind_Resume_or_Rethrow
+ 0x08004120 _Unwind_ForcedUnwind
+ 0x08004120 ___Unwind_ForcedUnwind
+ 0x08004150 ___Unwind_Backtrace
+ 0x08004150 _Unwind_Backtrace
+ .text 0x08004180 0x3a8 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(pr-support.o)
+ 0x080041d4 __gnu_unwind_execute
+ 0x080044d0 __gnu_unwind_frame
+ 0x080044f8 _Unwind_GetRegionStart
+ 0x08004504 _Unwind_GetLanguageSpecificData
+ 0x08004518 _Unwind_GetTextRelBase
+ 0x08004520 _Unwind_GetDataRelBase
+ .text.abort 0x08004528 0x10 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-abort.o)
+ 0x08004528 abort
+ .text.memcpy 0x08004538 0x84 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-memcpy-stub.o)
+ 0x08004538 memcpy
.text._raise_r
- 0x0800446c 0x5c c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o)
- 0x0800446c _raise_r
- .text.raise 0x080044c8 0x14 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o)
- 0x080044c8 raise
- .text._kill_r 0x080044dc 0x28 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signalr.o)
- 0x080044dc _kill_r
+ 0x080045bc 0x5c c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o)
+ 0x080045bc _raise_r
+ .text.raise 0x08004618 0x14 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signal.o)
+ 0x08004618 raise
+ .text._kill_r 0x0800462c 0x28 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signalr.o)
+ 0x0800462c _kill_r
.text._getpid_r
- 0x08004504 0x8 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signalr.o)
- 0x08004504 _getpid_r
- .text._getpid 0x0800450c 0x10 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(getpid.o)
- 0x0800450c _getpid
- .text._kill 0x0800451c 0x10 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(kill.o)
- 0x0800451c _kill
- .text._exit 0x0800452c 0x4 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(_exit.o)
- 0x0800452c _exit
- .text 0x08004530 0x14 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o)
- 0x08004530 __gnu_thumb1_case_uqi
- .text 0x08004544 0x14 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_shi.o)
- 0x08004544 __gnu_thumb1_case_shi
- .text 0x08004558 0x14 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o)
- 0x08004558 __gnu_thumb1_case_uhi
+ 0x08004654 0x8 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-signalr.o)
+ 0x08004654 _getpid_r
+ .text._getpid 0x0800465c 0x10 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(getpid.o)
+ 0x0800465c _getpid
+ .text._kill 0x0800466c 0x10 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(kill.o)
+ 0x0800466c _kill
+ .text._exit 0x0800467c 0x4 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(_exit.o)
+ 0x0800467c _exit
+ .text 0x08004680 0x14 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o)
+ 0x08004680 __gnu_thumb1_case_uqi
+ .text 0x08004694 0x14 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_shi.o)
+ 0x08004694 __gnu_thumb1_case_shi
+ .text 0x080046a8 0x14 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o)
+ 0x080046a8 __gnu_thumb1_case_uhi
*(.init)
- .init 0x0800456c 0x4 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crti.o
- 0x0800456c _init
+ .init 0x080046bc 0x4 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crti.o
+ 0x080046bc _init
*(.fini)
- .fini 0x08004570 0x4 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crti.o
- 0x08004570 _fini
+ .fini 0x080046c0 0x4 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crti.o
+ 0x080046c0 _fini
*crtbegin.o(.ctors)
*crtbegin?.o(.ctors)
*(EXCLUDE_FILE(*crtend.o *crtend?.o) .ctors)
@@ -653,53 +678,54 @@ LOAD c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eab
*(.dtors)
*(.rodata*)
.rodata.config_desc
- 0x08004574 0x12 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
+ 0x080046c4 0x12 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
.rodata.device_desc
- 0x08004586 0x12 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
+ 0x080046d6 0x12 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
.rodata.string0_desc
- 0x08004598 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
+ 0x080046e8 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
.rodata.string1_desc
- 0x0800459c 0x54 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
+ 0x080046ec 0x54 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
.rodata.string2_desc
- 0x080045f0 0x3c C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
+ 0x08004740 0x3c C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
*(.eh_frame*)
-.glue_7 0x0800462c 0x0
- .glue_7 0x0800462c 0x0 linker stubs
+.glue_7 0x0800477c 0x0
+ .glue_7 0x0800477c 0x0 linker stubs
-.glue_7t 0x0800462c 0x0
- .glue_7t 0x0800462c 0x0 linker stubs
+.glue_7t 0x0800477c 0x0
+ .glue_7t 0x0800477c 0x0 linker stubs
-.vfp11_veneer 0x0800462c 0x0
- .vfp11_veneer 0x0800462c 0x0 linker stubs
+.vfp11_veneer 0x0800477c 0x0
+ .vfp11_veneer 0x0800477c 0x0 linker stubs
-.v4_bx 0x0800462c 0x0
- .v4_bx 0x0800462c 0x0 linker stubs
+.v4_bx 0x0800477c 0x0
+ .v4_bx 0x0800477c 0x0 linker stubs
-.iplt 0x0800462c 0x0
- .iplt 0x0800462c 0x0 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crtbegin.o
+.iplt 0x0800477c 0x0
+ .iplt 0x0800477c 0x0 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crtbegin.o
-.ARM.extab 0x0800462c 0x30
+.ARM.extab 0x0800477c 0x30
*(.ARM.extab* .gnu.linkonce.armextab.*)
- .ARM.extab 0x0800462c 0x24 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o)
- .ARM.extab 0x08004650 0xc c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(pr-support.o)
- 0x0800465c __exidx_start = .
+ .ARM.extab 0x0800477c 0x24 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o)
+ .ARM.extab 0x080047a0 0xc c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(pr-support.o)
+ 0x080047ac __exidx_start = .
-.ARM.exidx 0x0800465c 0xd0
+.ARM.exidx 0x080047ac 0xd0
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
- .ARM.exidx 0x0800465c 0x8 C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o
+ .ARM.exidx 0x080047ac 0x8 C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o
+ .ARM.exidx 0x080047b4 0x0 C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o
0x10 (size before relaxing)
- .ARM.exidx 0x08004664 0x98 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o)
+ .ARM.exidx 0x080047b4 0x98 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(unwind-arm.o)
0xd8 (size before relaxing)
- .ARM.exidx 0x080046fc 0x30 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(pr-support.o)
+ .ARM.exidx 0x0800484c 0x30 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(pr-support.o)
0x48 (size before relaxing)
- 0x0800472c __exidx_end = .
- 0x0800472c __etext = ALIGN (0x4)
+ 0x0800487c __exidx_end = .
+ 0x0800487c __etext = ALIGN (0x4)
-.rel.dyn 0x0800472c 0x0
- .rel.iplt 0x0800472c 0x0 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crtbegin.o
+.rel.dyn 0x0800487c 0x0
+ .rel.iplt 0x0800487c 0x0 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crtbegin.o
-.data 0x20000000 0x430 load address 0x0800472c
+.data 0x20000000 0x430 load address 0x0800487c
0x20000000 __data_start__ = .
*(vtable)
*(.data*)
@@ -727,115 +753,116 @@ LOAD c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eab
0x20000430 . = ALIGN (0x4)
0x20000430 __data_end__ = .
-.igot.plt 0x20000430 0x0 load address 0x08004b5c
+.igot.plt 0x20000430 0x0 load address 0x08004cac
.igot.plt 0x20000430 0x0 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crtbegin.o
-.bss 0x20000430 0x2fc load address 0x08004b5c
+.bss 0x20000430 0x300 load address 0x08004cac
0x20000430 . = ALIGN (0x4)
0x20000430 __bss_start__ = .
*(.bss*)
- .bss.buff0 0x20000430 0x14 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x20000430 buff0
- .bss.buff1 0x20000444 0x14 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x20000444 buff1
- .bss.buff2 0x20000458 0x14 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x20000458 buff2
- .bss.buff3 0x2000046c 0x14 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x2000046c buff3
- .bss.cur_buff 0x20000480 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x20000480 cur_buff
+ .bss.addrh 0x20000430 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ .bss.buff0 0x20000434 0x14 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x20000434 buff0
+ .bss.buff1 0x20000448 0x14 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x20000448 buff1
+ .bss.buff2 0x2000045c 0x14 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x2000045c buff2
+ .bss.buff3 0x20000470 0x14 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x20000470 buff3
+ .bss.cur_buff 0x20000484 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x20000484 cur_buff
.bss.cur_usb_load_buff
- 0x20000484 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
+ 0x20000488 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
.bss.incoming_bytes_remain
- 0x20000488 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- *fill* 0x20000489 0x3
- .bss.log 0x2000048c 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
+ 0x2000048c 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ *fill* 0x2000048d 0x3
+ .bss.log 0x20000490 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
.bss.new_address
- 0x20000490 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- *fill* 0x20000491 0x1
- .bss.num_bytes_req.lto_priv.36
- 0x20000492 0x2 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x20000492 num_bytes_req.lto_priv.36
- .bss.num_bytes_sending.lto_priv.35
- 0x20000494 0x2 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x20000494 num_bytes_sending.lto_priv.35
- .bss.num_bytes_xfrd.lto_priv.34
- 0x20000496 0x2 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x20000496 num_bytes_xfrd.lto_priv.34
+ 0x20000494 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ *fill* 0x20000495 0x1
+ .bss.num_bytes_req.lto_priv.42
+ 0x20000496 0x2 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x20000496 num_bytes_req.lto_priv.42
+ .bss.num_bytes_sending.lto_priv.41
+ 0x20000498 0x2 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x20000498 num_bytes_sending.lto_priv.41
+ .bss.num_bytes_xfrd.lto_priv.40
+ 0x2000049a 0x2 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x2000049a num_bytes_xfrd.lto_priv.40
.bss.oper_info_struct
- 0x20000498 0x20 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x20000498 oper_info_struct
+ 0x2000049c 0x20 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x2000049c oper_info_struct
.bss.pbje_command
- 0x200004b8 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x200004b8 pbje_command
+ 0x200004bc 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x200004bc pbje_command
.bss.pbje_data
- 0x200004b9 0x20 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x200004b9 pbje_data
+ 0x200004bd 0x20 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x200004bd pbje_data
.bss.pbje_numclk
- 0x200004d9 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x200004d9 pbje_numclk
+ 0x200004dd 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x200004dd pbje_numclk
.bss.pbje_status
- 0x200004da 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x200004da pbje_status
+ 0x200004de 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x200004de pbje_status
.bss.raw_bank_status
- 0x200004db 0x10 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- *fill* 0x200004eb 0x1
+ 0x200004df 0x10 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ *fill* 0x200004ef 0x1
.bss.raw_buffer16
- 0x200004ec 0x200 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- .bss.req_dir 0x200006ec 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- .bss.reqdir 0x200006ed 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- .bss.reqtype 0x200006ee 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- *fill* 0x200006ef 0x1
- .bss.rv16.4882
- 0x200006f0 0x8 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
+ 0x200004f0 0x200 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ .bss.req_dir 0x200006f0 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ .bss.reqdir 0x200006f1 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ .bss.reqtype 0x200006f2 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ *fill* 0x200006f3 0x1
+ .bss.rv16.4938
+ 0x200006f4 0x8 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
.bss.swim_base
- 0x200006f8 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x200006f8 swim_base
- .bss.swim_pin 0x200006fc 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x200006fc swim_pin
- *fill* 0x200006fd 0x3
- .bss.tck_base 0x20000700 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x20000700 tck_base
- .bss.tck_pin 0x20000704 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x20000704 tck_pin
- *fill* 0x20000705 0x3
- .bss.tdi_base 0x20000708 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x20000708 tdi_base
- .bss.tdi_pin 0x2000070c 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x2000070c tdi_pin
- *fill* 0x2000070d 0x3
- .bss.tdo_base 0x20000710 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x20000710 tdo_base
- .bss.tdo_pin 0x20000714 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x20000714 tdo_pin
- *fill* 0x20000715 0x3
- .bss.tms_base 0x20000718 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x20000718 tms_base
- .bss.tms_pin 0x2000071c 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x2000071c tms_pin
- *fill* 0x2000071d 0x3
+ 0x200006fc 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x200006fc swim_base
+ .bss.swim_pin 0x20000700 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x20000700 swim_pin
+ *fill* 0x20000701 0x3
+ .bss.tck_base 0x20000704 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x20000704 tck_base
+ .bss.tck_pin 0x20000708 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x20000708 tck_pin
+ *fill* 0x20000709 0x3
+ .bss.tdi_base 0x2000070c 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x2000070c tdi_base
+ .bss.tdi_pin 0x20000710 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x20000710 tdi_pin
+ *fill* 0x20000711 0x3
+ .bss.tdo_base 0x20000714 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x20000714 tdo_base
+ .bss.tdo_pin 0x20000718 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x20000718 tdo_pin
+ *fill* 0x20000719 0x3
+ .bss.tms_base 0x2000071c 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x2000071c tms_base
+ .bss.tms_pin 0x20000720 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x20000720 tms_pin
+ *fill* 0x20000721 0x3
.bss.usbMsgPtr
- 0x20000720 0x4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x20000720 usbMsgPtr
- .bss.num_buff.4962
- 0x20000724 0x1 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
+ 0x20000724 0x4 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x20000724 usbMsgPtr
+ .bss.num_buff.5018
+ 0x20000728 0x1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
*(COMMON)
- *fill* 0x20000725 0x3
- COMMON 0x20000728 0x4 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-reent.o)
- 0x20000728 errno
- 0x2000072c . = ALIGN (0x4)
- 0x2000072c __bss_end__ = .
+ *fill* 0x20000729 0x3
+ COMMON 0x2000072c 0x4 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libg.a(lib_a-reent.o)
+ 0x2000072c errno
+ 0x20000730 . = ALIGN (0x4)
+ 0x20000730 __bss_end__ = .
.heap 0x20000730 0x0
0x20000730 __end__ = .
0x20000730 PROVIDE (end, .)
*(.heap*)
- .heap 0x20000730 0x0 C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o
+ .heap 0x20000730 0x0 C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o
0x20000730 __HeapLimit = .
.stack_dummy 0x20000730 0xc00
*(.stack*)
- .stack 0x20000730 0xc00 C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o
+ .stack 0x20000730 0xc00 C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o
0x20001800 __StackTop = (ORIGIN (RAM) + LENGTH (RAM))
0x20000c00 __StackLimit = (__StackTop - SIZEOF (.stack_dummy))
0x20001800 PROVIDE (__stack, __StackTop)
@@ -847,96 +874,103 @@ OUTPUT(build_stm/inlretro_stm.elf elf32-littlearm)
.ARM.attributes
0x00000000 0x1e c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m/crti.o
.ARM.attributes
- 0x0000001e 0x1b C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o
+ 0x0000001e 0x1b C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o
.ARM.attributes
- 0x00000039 0x2f C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
+ 0x00000039 0x2f C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
.ARM.attributes
- 0x00000068 0x2f C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
+ 0x00000068 0x2f C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
.ARM.attributes
- 0x00000097 0x2f C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
+ 0x00000097 0x2f C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
.ARM.attributes
- 0x000000c6 0x2f C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o
+ 0x000000c6 0x2f C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o
.ARM.attributes
- 0x000000f5 0x21 C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o
+ 0x000000f5 0x21 C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o
.ARM.attributes
- 0x00000116 0x1e c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o)
+ 0x00000116 0x21 C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o
.ARM.attributes
- 0x00000134 0x1e c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_shi.o)
+ 0x00000137 0x1e c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_uqi.o)
.ARM.attributes
- 0x00000152 0x1e c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o)
+ 0x00000155 0x1e c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_shi.o)
+ .ARM.attributes
+ 0x00000173 0x1e c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/thumb/v6-m\libgcc.a(_thumb1_case_uhi.o)
.comment 0x00000000 0x7f
- .comment 0x00000000 0x7f C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
+ .comment 0x00000000 0x7f C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
0x80 (size before relaxing)
- .comment 0x0000007f 0x80 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
- .comment 0x0000007f 0x80 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- .comment 0x0000007f 0x80 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o
+ .comment 0x0000007f 0x80 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
+ .comment 0x0000007f 0x80 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ .comment 0x0000007f 0x80 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o
-.debug_line 0x00000000 0x18dc
- .debug_line 0x00000000 0x6f C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o
- .debug_line 0x0000006f 0xa19 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- .debug_line 0x00000a88 0x815 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
- .debug_line 0x0000129d 0x3a8 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- .debug_line 0x00001645 0x1a4 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o
- .debug_line 0x000017e9 0xf3 C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o
+.debug_line 0x00000000 0x19fd
+ .debug_line 0x00000000 0x6f C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o
+ .debug_line 0x0000006f 0xab1 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ .debug_line 0x00000b20 0x7ec C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
+ .debug_line 0x0000130c 0x3ce C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ .debug_line 0x000016da 0x1e6 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o
+ .debug_line 0x000018c0 0x4a C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o
+ .debug_line 0x0000190a 0xf3 C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o
-.debug_info 0x00000000 0x38f0
- .debug_info 0x00000000 0x82 C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o
- .debug_info 0x00000082 0x14d6 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- .debug_info 0x00001558 0x18c6 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
- .debug_info 0x00002e1e 0x632 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- .debug_info 0x00003450 0x425 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o
- .debug_info 0x00003875 0x7b C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o
+.debug_info 0x00000000 0x3d46
+ .debug_info 0x00000000 0x82 C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o
+ .debug_info 0x00000082 0x1823 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ .debug_info 0x000018a5 0x177e C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
+ .debug_info 0x00003023 0x66d C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ .debug_info 0x00003690 0x5bc C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o
+ .debug_info 0x00003c4c 0x7f C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o
+ .debug_info 0x00003ccb 0x7b C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o
-.debug_abbrev 0x00000000 0xa81
- .debug_abbrev 0x00000000 0x14 C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o
- .debug_abbrev 0x00000014 0x387 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- .debug_abbrev 0x0000039b 0x396 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
- .debug_abbrev 0x00000731 0x1ba C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- .debug_abbrev 0x000008eb 0x182 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o
- .debug_abbrev 0x00000a6d 0x14 C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o
+.debug_abbrev 0x00000000 0xabf
+ .debug_abbrev 0x00000000 0x14 C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o
+ .debug_abbrev 0x00000014 0x3a8 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ .debug_abbrev 0x000003bc 0x396 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
+ .debug_abbrev 0x00000752 0x1ba C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ .debug_abbrev 0x0000090c 0x18b C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o
+ .debug_abbrev 0x00000a97 0x14 C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o
+ .debug_abbrev 0x00000aab 0x14 C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o
-.debug_aranges 0x00000000 0x178
+.debug_aranges 0x00000000 0x1a8
.debug_aranges
- 0x00000000 0x20 C:\Users\Paul\AppData\Local\Temp\cceBaBiJ.o
+ 0x00000000 0x20 C:\Users\Paul\AppData\Local\Temp\cceBDSbg.o
.debug_aranges
- 0x00000020 0x20 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
+ 0x00000020 0x20 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
.debug_aranges
- 0x00000040 0x50 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
+ 0x00000040 0x50 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
.debug_aranges
- 0x00000090 0x98 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
+ 0x00000090 0xa0 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
.debug_aranges
- 0x00000128 0x30 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o
+ 0x00000130 0x38 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o
.debug_aranges
- 0x00000158 0x20 C:\Users\Paul\AppData\Local\Temp\cclhBf2A.o
+ 0x00000168 0x20 C:\Users\Paul\AppData\Local\Temp\ccRslRPq.o
+ .debug_aranges
+ 0x00000188 0x20 C:\Users\Paul\AppData\Local\Temp\ccj81ITq.o
-.debug_loc 0x00000000 0x3cfd
- .debug_loc 0x00000000 0x2457 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- .debug_loc 0x00002457 0xfc0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
- .debug_loc 0x00003417 0x61e C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- .debug_loc 0x00003a35 0x2c8 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o
+.debug_loc 0x00000000 0x404b
+ .debug_loc 0x00000000 0x2691 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ .debug_loc 0x00002691 0xf75 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
+ .debug_loc 0x00003606 0x660 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ .debug_loc 0x00003c66 0x3e5 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o
-.debug_ranges 0x00000000 0x1608
- .debug_ranges 0x00000000 0x12d0 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- .debug_ranges 0x000012d0 0x290 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
- .debug_ranges 0x00001560 0x88 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- .debug_ranges 0x000015e8 0x20 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o
+.debug_ranges 0x00000000 0x1708
+ .debug_ranges 0x00000000 0x13e8 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ .debug_ranges 0x000013e8 0x268 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
+ .debug_ranges 0x00001650 0x90 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ .debug_ranges 0x000016e0 0x28 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o
-.debug_str 0x00000000 0xc68
- .debug_str 0x00000000 0x87d C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- 0x8e2 (size before relaxing)
- .debug_str 0x0000087d 0x247 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
- 0x4d9 (size before relaxing)
- .debug_str 0x00000ac4 0x113 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- 0x2f8 (size before relaxing)
- .debug_str 0x00000bd7 0x91 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o
- 0x307 (size before relaxing)
+.debug_str 0x00000000 0xd18
+ .debug_str 0x00000000 0x8f7 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ 0x95c (size before relaxing)
+ .debug_str 0x000008f7 0x237 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
+ 0x4d2 (size before relaxing)
+ .debug_str 0x00000b2e 0x12c C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ 0x311 (size before relaxing)
+ .debug_str 0x00000c5a 0xbe C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o
+ 0x33d (size before relaxing)
-.debug_frame 0x00000000 0x2ec
- .debug_frame 0x00000000 0x30 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans0.ltrans.o
- .debug_frame 0x00000030 0xd8 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans1.ltrans.o
- .debug_frame 0x00000108 0x174 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans2.ltrans.o
- .debug_frame 0x0000027c 0x70 C:\Users\Paul\AppData\Local\Temp\ccHx4fn8.ltrans3.ltrans.o
+.debug_frame 0x00000000 0x31c
+ .debug_frame 0x00000000 0x30 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans0.ltrans.o
+ .debug_frame 0x00000030 0xd8 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans1.ltrans.o
+ .debug_frame 0x00000108 0x184 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans2.ltrans.o
+ .debug_frame 0x0000028c 0x90 C:\Users\Paul\AppData\Local\Temp\cc6CqT8m.ltrans3.ltrans.o
.stabstr 0x00000000 0x76
.stabstr 0x00000000 0x76 c:/arm/gcc-arm-none-eabi-6-2017-q2-update-win32/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v6-m\libnosys.a(getpid.o)
diff --git a/firmware/source/asm_stm/bootload.s b/firmware/source/asm_stm/bootload.s
new file mode 100644
index 0000000..56ce877
--- /dev/null
+++ b/firmware/source/asm_stm/bootload.s
@@ -0,0 +1,37 @@
+
+
+//;Ensure that your assembly code complies with the Procedure Call Standard for the ARM Architecture (AAPCS).
+//;
+//;The AAPCS describes a contract between caller functions and callee functions. For example, for integer or pointer types, it specifies that:
+//;
+//; Registers R0-R3 pass argument values to the callee function, with subsequent arguments passed on the stack.
+//; Register R0 passes the result value back to the caller function.
+//; Caller functions must preserve R0-R3 and R12, because these registers are allowed to be corrupted by the callee function.
+//; Callee functions must preserve R4-R11 and LR, because these registers are not allowed to be corrupted by the callee function.
+//;
+//;For more information, see the Procedure Call Standard for the ARM Architecture (AAPCS).
+
+//;WARNING!!! logic instructions all affect flags despite the 's' postfix arm_none_eabi_gcc doesn't like 's' instructions
+//; but the 's' affect flag instructions are the only ones the M0 supports
+//; because of this, issue the following code isn't compatible with other cores.
+
+
+
+.globl jump2addr
+.p2align 2
+.type jump2addr,%function
+ //;r0 - r3 contain function args (excess on stack)
+ //;jump2addr( data_pb, spddir_len, swim_base, swim_mask);
+ //;spddir_len = (SWIM_RD_LS<<16) | len;
+//; stream .req a1 this arg is moved to variable reg after stack push
+ addr .req a1
+//; rv .req r0
+//; len .req a2
+//; swim_base .req a3
+//; swim_mask .req a4
+jump2addr: //;Function entry point.
+.fnstart
+
+ //;bkpt
+ blx r0
+.fnend
diff --git a/firmware/source/bootload.c b/firmware/source/bootload.c
new file mode 100644
index 0000000..ac5b0a2
--- /dev/null
+++ b/firmware/source/bootload.c
@@ -0,0 +1,106 @@
+#include "bootload.h"
+
+//=================================================================================================
+//
+// BOOTLOAD operations
+// This file includes all the bootload functions possible to be called from the bootload dictionary.
+//
+// See description of the commands contained here in shared/shared_dictionaries.h
+//
+//=================================================================================================
+
+
+//const uint32_t fixed_const __attribute__((at(0x0800F000)));
+//fixed_const= 0xDEADBEEF;
+
+//int gSquared __attribute__((at(0x5000))); // Place at 0x5000
+
+
+/* Desc:Function takes an opcode which was transmitted via USB
+ * then decodes it to call designated function.
+ * shared_dict_bootload.h is used in both host and fw to ensure opcodes/names align
+ * Pre: Macros must be defined in firmware pinport.h & bootload.h
+ * opcode must be defined in shared_dict_bootload.h
+ * Post:function call complete.
+ * Rtn: SUCCESS if opcode found, error if opcode not present or other problem.
+ */
+
+uint32_t addrh;
+
+
+uint8_t bootload_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata )
+{
+ switch (opcode) {
+#ifdef STM_CORE
+ case JUMP_BL: jump_to_bootloader(); break;
+ //device won't respond after this point so actually expect an error to result
+
+ case LOAD_ADDRH: addrh = operand; break;
+ case JUMP_ADDR: jump2addr((addrh<<16) | (operand)); break;
+ //device may not respond depending on the address/function being jumped to
+
+ default:
+ //opcode doesn't exist
+ return ERR_UNKN_BOOTLOAD_OPCODE;
+#endif
+ }
+
+ return SUCCESS;
+
+}
+
+void jump_to_bootloader()
+{
+
+#ifdef STM_INL6
+// 070C6 jump to: 0x1FFFC519
+// 070RB jump to: 0x1FFFCBC1
+
+
+ asm(
+ //"ldr pc, boot_addr\n\t"
+// "ldr r0, =0x12345678\n\t"
+// "mov r0, r0\n\t"
+// "mov r0, r0\n\t"
+ //".p2align 2\n\t"
+ //"boot_addr:\n\t"
+ //".word 0x1FFFC519"
+ "ldr r0, [pc, #8]\n\t"// @ remember pc is 8 bytes ahead
+ "mov r13, r0\n\t" //load main stack pointer
+ "ldr r0, [pc, #8]\n\t"// @ remember pc is 8 bytes ahead
+ //"mov lr, r0\n\t"
+ //"bx lr \n\t"// @ function return
+ //"bkpt\n\t"
+ "mov r0, r0\n\t"
+ //"mov pc, r0\n\t"
+ "bx r0\n\t"
+ //"bootaddr\n\t"//
+ //".word 0x1FFFC519" //070C6
+ ".p2align 2\n\t"
+ ".word 0x20001278\n\t" //C6 MSP @ reset
+// ".word 0x00010002\n\t"
+ //".word 0x00030004\n\t"
+ //".word 0x1FFFC519\n\t" //C6 AN2606
+ ".word 0x1FFFCAC5\n\t" //C6 BL reset vector
+ //".word 0x1FFFCBC1\n\t" //stlink PC when connecting with BL grounded
+ //".word 0x1FFFC919\n\t" //best guess based on C6
+ //".word 0x1FFFCBC1\n\t" //bootloader reset vector
+ ".word 0x00050006\n\t"
+ ".word 0x00070008\n\t"
+// ".word 0x1FFFC919\n\t"
+// ".word 0x1FFFC919\n\t"
+// ".word 0x1FFFC919\n\t"
+// ".word 0x1FFFC919\n\t"
+// ".word 0x1FFFC919\n\t"
+ ".word 0x1FFFC919"
+ //".word 0x1FFFCBC1"
+ );
+bootaddr:
+ asm(
+ ".word 0xDEADBEEF"
+ );
+
+#endif
+
+
+}
diff --git a/firmware/source/bootload.h b/firmware/source/bootload.h
new file mode 100644
index 0000000..3cd9fd8
--- /dev/null
+++ b/firmware/source/bootload.h
@@ -0,0 +1,18 @@
+#ifndef _bootload_h
+#define _bootload_h
+
+#include "pinport.h"
+#include "shared_dictionaries.h"
+#include "shared_errors.h"
+
+#ifdef STM_INL6
+
+#endif //end STM_INL6
+
+uint8_t bootload_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata );
+
+void jump2addr(uint32_t addr);
+void jump_to_bootloader();
+
+
+#endif
diff --git a/firmware/source/ciccom.c b/firmware/source/ciccom.c
new file mode 100644
index 0000000..8345687
--- /dev/null
+++ b/firmware/source/ciccom.c
@@ -0,0 +1,47 @@
+#include "ciccom.h"
+
+//=================================================================================================
+//
+// CICCOM operations
+// This file includes all the ciccom functions possible to be called from the ciccom dictionary.
+//
+// See description of the commands contained here in shared/shared_dictionaries.h
+//
+//=================================================================================================
+
+
+
+/* Desc:Function takes an opcode which was transmitted via USB
+ * then decodes it to call designated function.
+ * shared_dict_ciccom.h is used in both host and fw to ensure opcodes/names align
+ * Pre: Macros must be defined in firmware pinport.h & ciccom.h
+ * opcode must be defined in shared_dict_ciccom.h
+ * Post:function call complete.
+ * Rtn: SUCCESS if opcode found, error if opcode not present or other problem.
+ */
+uint8_t ciccom_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata )
+{
+#define RD_LEN 0
+#define RD0 1
+#define RD1 2
+#define RD2 3
+#define RD3 4
+#define RD4 5
+#define RD5 6
+// uint16_t *ret_hword = (uint16_t*) &rdata[1];
+
+#define BYTE_LEN 1
+#define HWORD_LEN 2
+ switch (opcode) {
+
+// case CICCOM_INIT: ciccom_init(); break;
+
+ default:
+ //opcode doesn't exist
+ return ERR_UNKN_CICCOM_OPCODE;
+ }
+
+ return SUCCESS;
+
+}
+
diff --git a/firmware/source/ciccom.h b/firmware/source/ciccom.h
new file mode 100644
index 0000000..5c3b2aa
--- /dev/null
+++ b/firmware/source/ciccom.h
@@ -0,0 +1,12 @@
+#ifndef _ciccom_h
+#define _ciccom_h
+
+#include "pinport.h"
+#include "shared_dictionaries.h"
+#include "shared_errors.h"
+
+
+uint8_t ciccom_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata );
+
+
+#endif
diff --git a/firmware/source/dump.c b/firmware/source/dump.c
index ce43d1d..807ba76 100644
--- a/firmware/source/dump.c
+++ b/firmware/source/dump.c
@@ -38,13 +38,15 @@ uint8_t dump_buff( buffer *buff ) {
//Nomolos bank table @ CC84
//nes_cpu_wr( (0xCC84+bank), bank );
//Owlia bank table @ CC84
- nes_cpu_wr( (0xE473+bank), bank );
+ //nes_cpu_wr( (0xE473+bank), bank );
//Rushnattack
//nes_cpu_wr( (0x8000+bank), bank );
//twindragons
//nes_cpu_wr( (0xC000+bank), bank );
//h1
//nes_cpu_wr( (0xFFC0+bank), bank );
+ //AFB
+ nes_cpu_wr( (0xFD69+bank), bank );
buff->cur_byte = nes_cpu_page_rd_poll( buff->data, addrH, buff->id,
//id contains MSb of page when <256B buffer
@@ -159,15 +161,26 @@ uint8_t dump_buff( buffer *buff ) {
buff->last_idx, ~FALSE );
break;
case SNESROM:
- addrH |= 0x80; //$8000 LOROM space
- //need to split page_num
- //A14-8 page_num[7-0]
- //A15 high (LOROM)
- //A23-16 page_num[14-8]
- HADDR_SET( (buff->page_num)>>7 );
+ if (buff->mapper == LOROM) {
+ addrH |= 0x80; //$8000 LOROM space
+ //need to split page_num
+ //A14-8 page_num[6-0]
+ //A15 high (LOROM)
+ //A23-16 page_num[14-7]
+ bank = (buff->page_num)>>7;
+ }
+ if (buff->mapper == HIROM) {
+ //need to split page_num
+ //A15-8 page_num[7-0]
+ //A21-16 page_num[13-8]
+ //A22 high (HIROM)
+ //A23 ~page_num[14] (bank CO starts first half, bank 40 starts second)
+ bank = ((((buff->page_num)>>8) | 0x40) & 0x7F);
+ }
+ HADDR_SET( bank );
buff->cur_byte = snes_rom_page_rd_poll( buff->data, addrH, buff->id,
- //id contains MSb of page when <256B buffer
- buff->last_idx, ~FALSE );
+ //id contains MSb of page when <256B buffer
+ buff->last_idx, ~FALSE );
case SNESRAM:
//warn addrX = ((buff->page_num)>>8);
break;
diff --git a/firmware/source/flash.c b/firmware/source/flash.c
index 3c2f736..60ade47 100644
--- a/firmware/source/flash.c
+++ b/firmware/source/flash.c
@@ -81,8 +81,9 @@ uint8_t write_page_bank( uint8_t bank, uint8_t addrH, uint16_t unlock1, uint16_t
//select first bank for unlock sequence
//needs to be written to bank table!
// nes_cpu_wr( (0xCC84), 0x00 );
- nes_cpu_wr( (0xE473), 0x00 );
+// nes_cpu_wr( (0xE473), 0x00 );
// nes_cpu_wr( (0xC000), 0x00 );
+ nes_cpu_wr( (0xFD69), 0x00 );
//wr_func( 0x5555, 0xAA );
wr_func( unlock1, 0xAA );
@@ -94,10 +95,11 @@ uint8_t write_page_bank( uint8_t bank, uint8_t addrH, uint16_t unlock1, uint16_t
//now need to select bank for the actual write!
//but this write can't be applied to the PRG-ROM
// nes_cpu_wr( (0xCC84+bank), bank );
- nes_cpu_wr( (0xE473+bank), bank );
+ // nes_cpu_wr( (0xE473+bank), bank );
// nes_cpu_wr( (0x8000+bank), bank );
//nes_cpu_wr( (0xC000+bank), bank );
// nes_cpu_wr( (0xFFC0+bank), bank );
+ nes_cpu_wr( (0xFD69+bank), bank );
wr_func( ((addrH<<8)| n), buff->data[n] );
@@ -836,6 +838,16 @@ uint8_t flash_buff( buffer *buff ) {
//bank gets written inside flash algo
write_page_bank( bank, addrH, 0x5555, 0x2AAA, buff, discrete_exp0_prgrom_wr, nes_cpu_rd );
}
+ if (buff->mapper == MM2) {
+ //addrH &= 0b1011 1111 A14 must always be low
+ addrH &= 0x3F;
+ addrH |= 0x80; //A15 doesn't apply to exp0 write, but needed for read back
+ //write bank value
+ //page_num shift by 6 bits A14 >> A8(0)
+ bank = buff->page_num >> 6;
+ //bank gets written inside flash algo
+ write_page_bank( bank, addrH, 0x5555, 0x2AAA, buff, disc_push_exp0_prgrom_wr, nes_cpu_rd );
+ }
if (buff->mapper == MAP30) {
//addrH &= 0b1011 1111 A14 must always be low
addrH &= 0x3F;
@@ -939,14 +951,25 @@ uint8_t flash_buff( buffer *buff ) {
// buff->last_idx, ~FALSE );
break;
case SNESROM:
- addrH |= 0x80; //$8000 LOROM space
- //need to split page_num
- //A14-8 page_num[7-0]
- //A15 high (LOROM)
- //A23-16 page_num[14-8]
- HADDR_SET( (buff->page_num)>>7 );
- //clear any reset state
- //EXP0_HI();
+ if (buff->mapper == LOROM) {
+ addrH |= 0x80; //$8000 LOROM space
+ //need to split page_num
+ //A14-8 page_num[7-0]
+ //A15 high (LOROM)
+ //A23-16 page_num[14-8]
+ bank = (buff->page_num)>>7;
+ //clear any reset state
+ //EXP0_HI();
+ }
+ if (buff->mapper == HIROM) {
+ //need to split page_num
+ //A15-8 page_num[7-0]
+ //A21-16 page_num[13-8]
+ //A22 high (HIROM)
+ //A23 ~page_num[14] (bank CO starts first half, bank 40 starts second)
+ bank = ((((buff->page_num)>>8) | 0x40) & 0x7F);
+ }
+ HADDR_SET( bank );
write_page_snes( 0, addrH, buff, snes_rom_wr, snes_rom_rd );
case SNESRAM:
//warn addrX = ((buff->page_num)>>8);
diff --git a/firmware/source/gameboy.c b/firmware/source/gameboy.c
new file mode 100644
index 0000000..5d66c32
--- /dev/null
+++ b/firmware/source/gameboy.c
@@ -0,0 +1,59 @@
+#include "gameboy.h"
+
+//=================================================================================================
+//
+// GAMEBOY operations
+// This file includes all the gameboy functions possible to be called from the gameboy dictionary.
+//
+// See description of the commands contained here in shared/shared_dictionaries.h
+//
+//=================================================================================================
+
+/* Desc:Function takes an opcode which was transmitted via USB
+ * then decodes it to call designated function.
+ * shared_dict_gameboy.h is used in both host and fw to ensure opcodes/names align
+ * Pre: Macros must be defined in firmware pinport.h
+ * opcode must be defined in shared_dict_gameboy.h
+ * Post:function call complete.
+ * Rtn: SUCCESS if opcode found and completed, error if opcode not present or other problem.
+ */
+uint8_t gameboy_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata )
+{
+
+#define RD_LEN 0
+#define RD0 1
+#define RD1 2
+
+#define BYTE_LEN 1
+#define HWORD_LEN 2
+
+ switch (opcode) {
+// //no return value:
+ case DMG_WR:
+ dmg_wr( operand, miscdata );
+ break;
+
+ //8bit return values:
+ case DMG_RD:
+ rdata[RD_LEN] = BYTE_LEN;
+ rdata[RD0] = dmg_rd( operand );
+ break;
+ default:
+ //macro doesn't exist
+ return ERR_UNKN_GAMEBOY_OPCODE;
+ }
+
+ return SUCCESS;
+
+}
+
+uint8_t dmg_rd( uint16_t addr )
+{
+ return 0xAA;
+}
+
+
+void dmg_wr( uint16_t addr, uint8_t data )
+{
+ return;
+}
diff --git a/firmware/source/gameboy.h b/firmware/source/gameboy.h
new file mode 100644
index 0000000..b2f111d
--- /dev/null
+++ b/firmware/source/gameboy.h
@@ -0,0 +1,13 @@
+#ifndef _gameboy_h
+#define _gameboy_h
+
+#include "pinport.h"
+#include "shared_dictionaries.h"
+#include "shared_errors.h"
+
+uint8_t gameboy_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata );
+
+uint8_t dmg_rd( uint16_t addr );
+void dmg_wr( uint16_t addr, uint8_t data );
+
+#endif
diff --git a/firmware/source/gba.c b/firmware/source/gba.c
new file mode 100644
index 0000000..11ea1f7
--- /dev/null
+++ b/firmware/source/gba.c
@@ -0,0 +1,59 @@
+#include "gba.h"
+
+//=================================================================================================
+//
+// GBA operations
+// This file includes all the gba functions possible to be called from the gba dictionary.
+//
+// See description of the commands contained here in shared/shared_dictionaries.h
+//
+//=================================================================================================
+
+/* Desc:Function takes an opcode which was transmitted via USB
+ * then decodes it to call designated function.
+ * shared_dict_gba.h is used in both host and fw to ensure opcodes/names align
+ * Pre: Macros must be defined in firmware pinport.h
+ * opcode must be defined in shared_dict_gba.h
+ * Post:function call complete.
+ * Rtn: SUCCESS if opcode found and completed, error if opcode not present or other problem.
+ */
+uint8_t gba_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata )
+{
+
+#define RD_LEN 0
+#define RD0 1
+#define RD1 2
+
+#define BYTE_LEN 1
+#define HWORD_LEN 2
+
+ switch (opcode) {
+// //no return value:
+ case GBA_WR:
+ gba_wr( operand, miscdata );
+ break;
+
+ //8bit return values:
+ case GBA_RD:
+ rdata[RD_LEN] = BYTE_LEN;
+ rdata[RD0] = gba_rd( operand );
+ break;
+ default:
+ //macro doesn't exist
+ return ERR_UNKN_GBA_OPCODE;
+ }
+
+ return SUCCESS;
+
+}
+
+uint8_t gba_rd( uint16_t addr )
+{
+ return 0xAA;
+}
+
+
+void gba_wr( uint16_t addr, uint8_t data )
+{
+ return;
+}
diff --git a/firmware/source/gba.h b/firmware/source/gba.h
new file mode 100644
index 0000000..ee6f930
--- /dev/null
+++ b/firmware/source/gba.h
@@ -0,0 +1,13 @@
+#ifndef _gba_h
+#define _gba_h
+
+#include "pinport.h"
+#include "shared_dictionaries.h"
+#include "shared_errors.h"
+
+uint8_t gba_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata );
+
+uint8_t gba_rd( uint16_t addr );
+void gba_wr( uint16_t addr, uint8_t data );
+
+#endif
diff --git a/firmware/source/main.c b/firmware/source/main.c
index f658fa4..17ef5b5 100644
--- a/firmware/source/main.c
+++ b/firmware/source/main.c
@@ -2,6 +2,7 @@
#include "usb.h"
#include "io.h"
#include "buffer.h"
+#include "bootload.h"
#include "jtag.h"
#ifdef AVR_CORE
@@ -53,6 +54,15 @@ int main(void)
#endif
#ifdef STM_CORE
+
+ //remap system memory (including vector table)
+// SYSCFG->CFGR1 = 0x00000002; //boot value (BOOT1:0 = 0b10
+// SYSCFG->CFGR1 = 0x00000001; //map sysmem bootloader to 0x00000000
+ //SYSCFG->CFGR1 |= SYSCFG_CFGR1_MEM_MODE_ | 0x0001;
+ //jump to bootloader
+// jump_to_bootloader();
+// jump_to_addr(0x1FFFC519);
+
//System is running at reset defaults
//Default clock is in operation
diff --git a/firmware/source/n64.c b/firmware/source/n64.c
new file mode 100644
index 0000000..6dcf567
--- /dev/null
+++ b/firmware/source/n64.c
@@ -0,0 +1,59 @@
+#include "n64.h"
+
+//=================================================================================================
+//
+// N64 operations
+// This file includes all the n64 functions possible to be called from the n64 dictionary.
+//
+// See description of the commands contained here in shared/shared_dictionaries.h
+//
+//=================================================================================================
+
+/* Desc:Function takes an opcode which was transmitted via USB
+ * then decodes it to call designated function.
+ * shared_dict_n64.h is used in both host and fw to ensure opcodes/names align
+ * Pre: Macros must be defined in firmware pinport.h
+ * opcode must be defined in shared_dict_n64.h
+ * Post:function call complete.
+ * Rtn: SUCCESS if opcode found and completed, error if opcode not present or other problem.
+ */
+uint8_t n64_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata )
+{
+
+#define RD_LEN 0
+#define RD0 1
+#define RD1 2
+
+#define BYTE_LEN 1
+#define HWORD_LEN 2
+
+ switch (opcode) {
+// //no return value:
+ case N64_WR:
+ n64_wr( operand, miscdata );
+ break;
+
+ //8bit return values:
+ case N64_RD:
+ rdata[RD_LEN] = BYTE_LEN;
+ rdata[RD0] = n64_rd( operand );
+ break;
+ default:
+ //macro doesn't exist
+ return ERR_UNKN_N64_OPCODE;
+ }
+
+ return SUCCESS;
+
+}
+
+uint8_t n64_rd( uint16_t addr )
+{
+ return 0xAA;
+}
+
+
+void n64_wr( uint16_t addr, uint8_t data )
+{
+ return;
+}
diff --git a/firmware/source/n64.h b/firmware/source/n64.h
new file mode 100644
index 0000000..f09dcb4
--- /dev/null
+++ b/firmware/source/n64.h
@@ -0,0 +1,13 @@
+#ifndef _n64_h
+#define _n64_h
+
+#include "pinport.h"
+#include "shared_dictionaries.h"
+#include "shared_errors.h"
+
+uint8_t n64_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata );
+
+uint8_t n64_rd( uint16_t addr );
+void n64_wr( uint16_t addr, uint8_t data );
+
+#endif
diff --git a/firmware/source/nes.c b/firmware/source/nes.c
index da66f4b..b11cf79 100644
--- a/firmware/source/nes.c
+++ b/firmware/source/nes.c
@@ -32,6 +32,9 @@ uint8_t nes_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *r
case DISCRETE_EXP0_PRGROM_WR:
discrete_exp0_prgrom_wr( operand, miscdata );
break;
+ case DISC_PUSH_EXP0_PRGROM_WR:
+ disc_push_exp0_prgrom_wr( operand, miscdata );
+ break;
case NES_PPU_WR:
nes_ppu_wr( operand, miscdata );
break;
@@ -113,6 +116,24 @@ void discrete_exp0_prgrom_wr( uint16_t addr, uint8_t data )
}
+//like above, but push on EXP0 instead of pullup
+void disc_push_exp0_prgrom_wr( uint16_t addr, uint8_t data )
+{
+ ADDR_SET(addr);
+
+ DATA_OP();
+ DATA_SET(data);
+
+ EXP0_OP(); //Tas = 0ns, Tah = 30ns
+ EXP0_LO();
+ //EXP0_IP_PU(); //Twp = 40ns, Tds = 40ns, Tdh = 0ns
+ EXP0_HI(); //Twp = 40ns, Tds = 40ns, Tdh = 0ns
+ //16Mhz avr clk = 62.5ns period guarantees timing reqts
+ DATA_IP();
+}
+
+
+
/* Desc: Discrete board MAPPER write without bus conflicts
* will also write to PRG-ROM, but PRG-ROM shouldn't output
* data while writting to mapper. Thus removing need for bank table.
diff --git a/firmware/source/nes.h b/firmware/source/nes.h
index c18a9e7..6ffc666 100644
--- a/firmware/source/nes.h
+++ b/firmware/source/nes.h
@@ -9,6 +9,7 @@
uint8_t nes_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata );
void discrete_exp0_prgrom_wr( uint16_t addr, uint8_t data );
+void disc_push_exp0_prgrom_wr( uint16_t addr, uint8_t data );
//void discrete_exp0_mapper_wr( uint16_t addr, uint8_t data );
uint8_t emulate_nes_cpu_rd( uint16_t addr );
uint8_t nes_cpu_rd( uint16_t addr );
diff --git a/firmware/source/sega.c b/firmware/source/sega.c
new file mode 100644
index 0000000..4421d15
--- /dev/null
+++ b/firmware/source/sega.c
@@ -0,0 +1,59 @@
+#include "sega.h"
+
+//=================================================================================================
+//
+// SEGA operations
+// This file includes all the sega functions possible to be called from the sega dictionary.
+//
+// See description of the commands contained here in shared/shared_dictionaries.h
+//
+//=================================================================================================
+
+/* Desc:Function takes an opcode which was transmitted via USB
+ * then decodes it to call designated function.
+ * shared_dict_sega.h is used in both host and fw to ensure opcodes/names align
+ * Pre: Macros must be defined in firmware pinport.h
+ * opcode must be defined in shared_dict_sega.h
+ * Post:function call complete.
+ * Rtn: SUCCESS if opcode found and completed, error if opcode not present or other problem.
+ */
+uint8_t sega_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata )
+{
+
+#define RD_LEN 0
+#define RD0 1
+#define RD1 2
+
+#define BYTE_LEN 1
+#define HWORD_LEN 2
+
+ switch (opcode) {
+// //no return value:
+ case SEGA_WR:
+ sega_wr( operand, miscdata );
+ break;
+
+ //8bit return values:
+ case SEGA_RD:
+ rdata[RD_LEN] = BYTE_LEN;
+ rdata[RD0] = sega_rd( operand );
+ break;
+ default:
+ //macro doesn't exist
+ return ERR_UNKN_SEGA_OPCODE;
+ }
+
+ return SUCCESS;
+
+}
+
+uint8_t sega_rd( uint16_t addr )
+{
+ return 0xAA;
+}
+
+
+void sega_wr( uint16_t addr, uint8_t data )
+{
+ return;
+}
diff --git a/firmware/source/sega.h b/firmware/source/sega.h
new file mode 100644
index 0000000..2e0b5fc
--- /dev/null
+++ b/firmware/source/sega.h
@@ -0,0 +1,13 @@
+#ifndef _sega_h
+#define _sega_h
+
+#include "pinport.h"
+#include "shared_dictionaries.h"
+#include "shared_errors.h"
+
+uint8_t sega_call( uint8_t opcode, uint8_t miscdata, uint16_t operand, uint8_t *rdata );
+
+uint8_t sega_rd( uint16_t addr );
+void sega_wr( uint16_t addr, uint8_t data );
+
+#endif
diff --git a/firmware/source/usb.c b/firmware/source/usb.c
index 543966b..48df866 100644
--- a/firmware/source/usb.c
+++ b/firmware/source/usb.c
@@ -117,6 +117,22 @@ uint16_t usbFunctionSetup(uint8_t data[8]) {
rv[RETURN_ERR_IDX] = snes_call( spacket->opcode, spacket->miscdata, spacket->operand, &rv[RETURN_LEN_IDX] );
break;
+ case DICT_GAMEBOY:
+ rv[RETURN_ERR_IDX] = gameboy_call( spacket->opcode, spacket->miscdata, spacket->operand, &rv[RETURN_LEN_IDX] );
+ break;
+
+ case DICT_GBA:
+ rv[RETURN_ERR_IDX] = gba_call( spacket->opcode, spacket->miscdata, spacket->operand, &rv[RETURN_LEN_IDX] );
+ break;
+
+ case DICT_SEGA:
+ rv[RETURN_ERR_IDX] = sega_call( spacket->opcode, spacket->miscdata, spacket->operand, &rv[RETURN_LEN_IDX] );
+ break;
+
+ case DICT_N64:
+ rv[RETURN_ERR_IDX] = n64_call( spacket->opcode, spacket->miscdata, spacket->operand, &rv[RETURN_LEN_IDX] );
+ break;
+
case DICT_SWIM:
rv[RETURN_ERR_IDX] = swim_call( spacket->opcode, spacket->miscdata, spacket->operand, &rv[RETURN_LEN_IDX] );
break;
@@ -125,6 +141,14 @@ uint16_t usbFunctionSetup(uint8_t data[8]) {
rv[RETURN_ERR_IDX] = jtag_call( spacket->opcode, spacket->miscdata, spacket->operand, &rv[RETURN_LEN_IDX] );
break;
+ case DICT_BOOTLOAD:
+ rv[RETURN_ERR_IDX] = bootload_call( spacket->opcode, spacket->miscdata, spacket->operand, &rv[RETURN_LEN_IDX] );
+ break;
+
+ case DICT_CICCOM:
+ rv[RETURN_ERR_IDX] = ciccom_call( spacket->opcode, spacket->miscdata, spacket->operand, &rv[RETURN_LEN_IDX] );
+ break;
+
case DICT_BUFFER:
//just give buffer.c the setup packet and let it figure things out for itself
diff --git a/firmware/source/usb.h b/firmware/source/usb.h
index 9076bde..5f719f1 100644
--- a/firmware/source/usb.h
+++ b/firmware/source/usb.h
@@ -16,8 +16,14 @@
#include "io.h"
#include "nes.h"
#include "snes.h"
+#include "gameboy.h"
+#include "gba.h"
+#include "sega.h"
+#include "n64.h"
#include "buffer.h"
#include "swim.h"
+#include "bootload.h"
+#include "ciccom.h"
#include "types.h"
#include "shared_usb.h"
#include "shared_errors.h"
diff --git a/firmware/source_stm_only/stm_init.c b/firmware/source_stm_only/stm_init.c
index 0eb8f01..1ff7aa4 100644
--- a/firmware/source_stm_only/stm_init.c
+++ b/firmware/source_stm_only/stm_init.c
@@ -57,7 +57,8 @@ void HardFault_Handler(void)
#ifdef STM_INL6
#define XTAL_8Mhz
#else //kaz6 prototype & stm adapter have 16Mhz xtal
- #define XTAL_16Mhz
+ //#define XTAL_16Mhz
+ #define XTAL_8Mhz
#endif
void init_clock()
{
diff --git a/host/inlretro_commited.exe b/host/inlretro_commited.exe
index 979b8f8..7e32094 100644
Binary files a/host/inlretro_commited.exe and b/host/inlretro_commited.exe differ
diff --git a/host/scripts/app/ciccom.lua b/host/scripts/app/ciccom.lua
new file mode 100644
index 0000000..73a3abd
--- /dev/null
+++ b/host/scripts/app/ciccom.lua
@@ -0,0 +1,197 @@
+
+-- create the module's table
+local ciccom = {}
+
+-- import required modules
+local dict = require "scripts.app.dict"
+
+-- file constants
+
+-- local functions
+local function start( debug )
+
+ --CIC reset & clock needs to be low to start
+ dict.pinport( "CTL_OP", "AFL")
+ dict.pinport( "CTL_SET_LO", "AFL") --CIC RESET LOW
+
+ dict.pinport( "CTL_OP", "GBP")
+ dict.pinport( "CTL_SET_LO", "GBP") --INL CIC DATA LOW
+
+
+--[[
+ --reset the stm8 and disable SWIM, to get CIC in known state
+ dict.io("SWIM_INIT", "SWIM_ON_A0")
+ if swim.start(true) then
+ swim.stop_and_reset()
+ else
+ print("fail to activate SWIM")
+ end
+
+ --now the CIC should be restarting
+ --takes ~0.5msec for it to get through boot sequence
+ jtag.sleep(0.01) --10msec to be overly safe
+ --after that time it's waiting for a CIC reset pulse to wake it
+--]]
+
+
+
+ --CIC CLK needs to be low before taking CIC RESET HIGH
+ dict.pinport( "ADDR_ENABLE")
+ dict.pinport( "ADDR_OP")
+ dict.pinport( "ADDR_SET", 0) --CIC CLK LOW (A0)
+
+ --reset CIC by making it panic
+-- dict.pinport( "CTL_SET_HI", "AFL")
+-- dict.pinport( "CTL_SET_LO", "AFL")
+-- rv = 2000
+-- while rv ~= 0 do
+-- dict.pinport( "ADDR_SET", 1) --CIC CLK
+-- dict.pinport( "ADDR_SET", 0) --CIC CLK
+-- rv = rv -1
+-- end
+
+
+ dict.pinport( "ADDR_SET", 0) --CIC CLK
+ dict.pinport( "CTL_SET_HI", "AFL")
+
+ --CIC is now waiting for data to be clocked in using CIC CLK & KEY_DATA_OUT
+
+
+ return
+end
+
+local function set_opcode(opcode)
+
+ --KEY DATA IN is clocked in on rising edges of CIC CLK
+ --"M" 0x4D (0b0100_1101 needs to be written to CIC to cause it to toggle mirroring
+ --MSbit is latched first
+
+ if opcode == "M" then
+ dict.pinport( "CTL_SET_LO", "GBP")
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "CTL_SET_HI", "GBP")
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "CTL_SET_LO", "GBP")
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "CTL_SET_HI", "GBP")
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "CTL_SET_LO", "GBP")
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "CTL_SET_HI", "GBP")
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ end
+
+ --now that "M" is written to CIC, end OPCODE write sequence by taking CIC RESET LO
+ dict.pinport( "CTL_SET_LO", "AFL")
+
+
+end
+
+
+local function write(data)
+
+ --now send operand "V" (0x56) or "H" (0x48)
+
+ if data == "H" then
+ --HORIZONTAL
+ dict.pinport( "CTL_SET_LO", "GBP")
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "CTL_SET_HI", "GBP")
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "CTL_SET_LO", "GBP")
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "CTL_SET_HI", "GBP")
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "CTL_SET_LO", "GBP")
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ elseif data == "V" then
+
+ --VERTICAL
+ dict.pinport( "CTL_SET_LO", "GBP")
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "CTL_SET_HI", "GBP")
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "CTL_SET_LO", "GBP")
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "CTL_SET_HI", "GBP")
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "CTL_SET_LO", "GBP")
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "CTL_SET_HI", "GBP")
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+
+ dict.pinport( "CTL_SET_LO", "GBP")
+ dict.pinport( "ADDR_SET", 1)
+ dict.pinport( "ADDR_SET", 0)
+ end
+
+end
+
+
+
+-- global variables so other modules can use them
+
+
+-- call functions desired to run when script is called/imported
+
+
+-- functions other modules are able to call
+ciccom.start = start
+ciccom.set_opcode = set_opcode
+ciccom.write = write
+ciccom.wotf = wotf
+ciccom.rotf = rotf
+
+-- return the module's table
+return ciccom
diff --git a/host/scripts/app/dict.lua b/host/scripts/app/dict.lua
index cae5715..c24594b 100644
--- a/host/scripts/app/dict.lua
+++ b/host/scripts/app/dict.lua
@@ -361,6 +361,213 @@ local function snes( opcode, operand, misc, data )
end
+end
+
+-- external call for gameboy dictionary
+local function gameboy( opcode, operand, misc, data )
+
+ if not op_gameboy[opcode] then
+ print("ERROR undefined opcode:", opcode, "must be defined in shared_dict_gameboy.h")
+ return nil
+ end
+
+ if not operand then
+ operand = 0
+ elseif type(operand) == "string" then
+ if not op_gameboy[operand] then
+ print("ERROR undefined operand:", operand, "must be defined in shared_dict_gameboy.h")
+ return nil
+ end
+ --decode string operands into
+ operand = op_gameboy[operand]
+ end
+
+ if not misc then misc = 0 end
+
+ local wLength, ep = default_rlen_1_in(op_gameboy[opcode.."rlen"])
+
+ local count
+ count, data = usb_vend_xfr(
+ -- ep, dictionary wValue[misc:opcode] wIndex wLength data
+ ep, dict["DICT_GAMEBOY"], ( misc<<8 | op_gameboy[opcode]), operand, wLength, data)
+ --print(count)
+ local error_code, data_len
+ if ep == USB_IN then
+ error_code = data:byte(RETURN_ERR_IDX)
+ data_len = data:byte(RETURN_LEN_IDX)
+ end
+ --print("error:", error_code, "data_len:", data_len)
+
+ assert ( (error_code == err_codes["SUCCESS"]), "\n ERROR!!! problem with opcode: " .. opcode .. " device error code: " .. error_code)
+
+ if data_len and data_len ~= (wLength - RETURN_LEN_IDX) then
+ print("WARNING!! Device's return data length:", data_len, "did not match expected:", wLength-RETURN_LEN_IDX)
+ end
+
+ --process the return data string and return it to calling function
+ if data_len then
+ return string_to_int( data:sub(RETURN_DATA, data_len+RETURN_DATA), data_len)
+ else
+ return nil
+ end
+
+
+end
+
+
+-- external call for gba dictionary
+local function gba( opcode, operand, misc, data )
+
+ if not op_gba[opcode] then
+ print("ERROR undefined opcode:", opcode, "must be defined in shared_dict_gba.h")
+ return nil
+ end
+
+ if not operand then
+ operand = 0
+ elseif type(operand) == "string" then
+ if not op_gba[operand] then
+ print("ERROR undefined operand:", operand, "must be defined in shared_dict_gba.h")
+ return nil
+ end
+ --decode string operands into
+ operand = op_gba[operand]
+ end
+
+ if not misc then misc = 0 end
+
+ local wLength, ep = default_rlen_1_in(op_gba[opcode.."rlen"])
+
+ local count
+ count, data = usb_vend_xfr(
+ -- ep, dictionary wValue[misc:opcode] wIndex wLength data
+ ep, dict["DICT_GBA"], ( misc<<8 | op_gba[opcode]), operand, wLength, data)
+ --print(count)
+ local error_code, data_len
+ if ep == USB_IN then
+ error_code = data:byte(RETURN_ERR_IDX)
+ data_len = data:byte(RETURN_LEN_IDX)
+ end
+ --print("error:", error_code, "data_len:", data_len)
+
+ assert ( (error_code == err_codes["SUCCESS"]), "\n ERROR!!! problem with opcode: " .. opcode .. " device error code: " .. error_code)
+
+ if data_len and data_len ~= (wLength - RETURN_LEN_IDX) then
+ print("WARNING!! Device's return data length:", data_len, "did not match expected:", wLength-RETURN_LEN_IDX)
+ end
+
+ --process the return data string and return it to calling function
+ if data_len then
+ return string_to_int( data:sub(RETURN_DATA, data_len+RETURN_DATA), data_len)
+ else
+ return nil
+ end
+
+
+end
+
+
+-- external call for sega dictionary
+local function sega( opcode, operand, misc, data )
+
+ if not op_sega[opcode] then
+ print("ERROR undefined opcode:", opcode, "must be defined in shared_dict_sega.h")
+ return nil
+ end
+
+ if not operand then
+ operand = 0
+ elseif type(operand) == "string" then
+ if not op_sega[operand] then
+ print("ERROR undefined operand:", operand, "must be defined in shared_dict_sega.h")
+ return nil
+ end
+ --decode string operands into
+ operand = op_sega[operand]
+ end
+
+ if not misc then misc = 0 end
+
+ local wLength, ep = default_rlen_1_in(op_sega[opcode.."rlen"])
+
+ local count
+ count, data = usb_vend_xfr(
+ -- ep, dictionary wValue[misc:opcode] wIndex wLength data
+ ep, dict["DICT_SEGA"], ( misc<<8 | op_sega[opcode]), operand, wLength, data)
+ --print(count)
+ local error_code, data_len
+ if ep == USB_IN then
+ error_code = data:byte(RETURN_ERR_IDX)
+ data_len = data:byte(RETURN_LEN_IDX)
+ end
+ --print("error:", error_code, "data_len:", data_len)
+
+ assert ( (error_code == err_codes["SUCCESS"]), "\n ERROR!!! problem with opcode: " .. opcode .. " device error code: " .. error_code)
+
+ if data_len and data_len ~= (wLength - RETURN_LEN_IDX) then
+ print("WARNING!! Device's return data length:", data_len, "did not match expected:", wLength-RETURN_LEN_IDX)
+ end
+
+ --process the return data string and return it to calling function
+ if data_len then
+ return string_to_int( data:sub(RETURN_DATA, data_len+RETURN_DATA), data_len)
+ else
+ return nil
+ end
+
+
+end
+
+
+-- external call for n64 dictionary
+local function n64( opcode, operand, misc, data )
+
+ if not op_n64[opcode] then
+ print("ERROR undefined opcode:", opcode, "must be defined in shared_dict_n64.h")
+ return nil
+ end
+
+ if not operand then
+ operand = 0
+ elseif type(operand) == "string" then
+ if not op_n64[operand] then
+ print("ERROR undefined operand:", operand, "must be defined in shared_dict_n64.h")
+ return nil
+ end
+ --decode string operands into
+ operand = op_n64[operand]
+ end
+
+ if not misc then misc = 0 end
+
+ local wLength, ep = default_rlen_1_in(op_n64[opcode.."rlen"])
+
+ local count
+ count, data = usb_vend_xfr(
+ -- ep, dictionary wValue[misc:opcode] wIndex wLength data
+ ep, dict["DICT_N64"], ( misc<<8 | op_n64[opcode]), operand, wLength, data)
+ --print(count)
+ local error_code, data_len
+ if ep == USB_IN then
+ error_code = data:byte(RETURN_ERR_IDX)
+ data_len = data:byte(RETURN_LEN_IDX)
+ end
+ --print("error:", error_code, "data_len:", data_len)
+
+ assert ( (error_code == err_codes["SUCCESS"]), "\n ERROR!!! problem with opcode: " .. opcode .. " device error code: " .. error_code)
+
+ if data_len and data_len ~= (wLength - RETURN_LEN_IDX) then
+ print("WARNING!! Device's return data length:", data_len, "did not match expected:", wLength-RETURN_LEN_IDX)
+ end
+
+ --process the return data string and return it to calling function
+ if data_len then
+ return string_to_int( data:sub(RETURN_DATA, data_len+RETURN_DATA), data_len)
+ else
+ return nil
+ end
+
+
end
-- external call for swim dictionary
@@ -471,6 +678,112 @@ local function jtag( opcode, operand, misc, data )
end
+-- external call for bootload dictionary
+local function bootload( opcode, operand, misc, data )
+
+ if not op_bootload[opcode] then
+ print("ERROR undefined opcode:", opcode, "must be defined in shared_dict_bootload.h")
+ return nil
+ end
+
+ if not operand then
+ operand = 0
+ elseif type(operand) == "string" then
+ if not op_bootload[operand] then
+ print("ERROR undefined operand:", operand, "must be defined in shared_dict_bootload.h")
+ return nil
+ end
+ --decode string operands into
+ operand = op_bootload[operand]
+ end
+
+ if not misc then misc = 0 end
+
+ local wLength, ep = default_rlen_1_in(op_bootload[opcode.."rlen"])
+
+ local count
+ count, data = usb_vend_xfr(
+ -- ep, dictionary wValue[misc:opcode] wIndex wLength data
+ ep, dict["DICT_BOOTLOAD"], ( misc<<8 | op_bootload[opcode]), operand, wLength, data)
+ --print(count)
+ local error_code, data_len
+ if ep == USB_IN then
+ error_code = data:byte(RETURN_ERR_IDX)
+ data_len = data:byte(RETURN_LEN_IDX)
+ end
+ --print("error:", error_code, "data_len:", data_len)
+
+ assert ( (error_code == err_codes["SUCCESS"]), "\n ERROR!!! problem with opcode: " .. opcode .. " device error code: " .. error_code)
+
+ if data_len and data_len ~= (wLength - RETURN_LEN_IDX) then
+ print("WARNING!! Device's return data length:", data_len, "did not match expected:", wLength-RETURN_LEN_IDX)
+ end
+
+ --process the return data string and return it to calling function
+ if data_len then
+ return string_to_int( data:sub(RETURN_DATA, data_len+RETURN_DATA), data_len)
+ else
+ return nil
+ end
+
+
+
+end
+
+
+-- external call for ciccom dictionary
+local function ciccom( opcode, operand, misc, data )
+
+ if not op_ciccom[opcode] then
+ print("ERROR undefined opcode:", opcode, "must be defined in shared_dict_ciccom.h")
+ return nil
+ end
+
+ if not operand then
+ operand = 0
+ elseif type(operand) == "string" then
+ if not op_ciccom[operand] then
+ print("ERROR undefined operand:", operand, "must be defined in shared_dict_ciccom.h")
+ return nil
+ end
+ --decode string operands into
+ operand = op_ciccom[operand]
+ end
+
+ if not misc then misc = 0 end
+
+ local wLength, ep = default_rlen_1_in(op_ciccom[opcode.."rlen"])
+
+ local count
+ count, data = usb_vend_xfr(
+ -- ep, dictionary wValue[misc:opcode] wIndex wLength data
+ ep, dict["DICT_CICCOM"], ( misc<<8 | op_ciccom[opcode]), operand, wLength, data)
+ --print(count)
+ local error_code, data_len
+ if ep == USB_IN then
+ error_code = data:byte(RETURN_ERR_IDX)
+ data_len = data:byte(RETURN_LEN_IDX)
+ end
+ --print("error:", error_code, "data_len:", data_len)
+
+ assert ( (error_code == err_codes["SUCCESS"]), "\n ERROR!!! problem with opcode: " .. opcode .. " device error code: " .. error_code)
+
+ if data_len and data_len ~= (wLength - RETURN_LEN_IDX) then
+ print("WARNING!! Device's return data length:", data_len, "did not match expected:", wLength-RETURN_LEN_IDX)
+ end
+
+ --process the return data string and return it to calling function
+ if data_len then
+ return string_to_int( data:sub(RETURN_DATA, data_len+RETURN_DATA), data_len)
+ else
+ return nil
+ end
+
+
+
+end
+
+
local function buffer_payload_in( wLength, buff_num )
@@ -646,8 +959,14 @@ op_io = {}
op_operation = {}
op_nes = {}
op_snes = {}
+op_gameboy = {}
+op_gba = {}
+op_sega = {}
+op_n64 = {}
op_swim = {}
op_jtag = {}
+op_bootload = {}
+op_ciccom = {}
err_codes = {}
-- Dictionary table definitions initialized by calling parser
@@ -659,8 +978,14 @@ create_dict_tables( op_io, "../shared/shared_dict_io.h")
create_dict_tables( op_operation, "../shared/shared_dict_operation.h")
create_dict_tables( op_nes, "../shared/shared_dict_nes.h")
create_dict_tables( op_snes, "../shared/shared_dict_snes.h")
+create_dict_tables( op_gameboy, "../shared/shared_dict_gameboy.h")
+create_dict_tables( op_gba, "../shared/shared_dict_gba.h")
+create_dict_tables( op_sega, "../shared/shared_dict_sega.h")
+create_dict_tables( op_n64, "../shared/shared_dict_n64.h")
create_dict_tables( op_swim, "../shared/shared_dict_swim.h")
create_dict_tables( op_jtag, "../shared/shared_dict_jtag.h")
+create_dict_tables( op_bootload,"../shared/shared_dict_bootload.h")
+create_dict_tables( op_ciccom, "../shared/shared_dict_ciccom.h")
create_dict_tables( err_codes, "../shared/shared_errors.h")
-- functions other modules are able to call
@@ -668,8 +993,14 @@ dict.pinport = pinport
dict.io = io
dict.nes = nes
dict.snes = snes
+dict.gameboy = gameboy
+dict.gba = gba
+dict.sega = sega
+dict.n64 = n64
dict.swim = swim
dict.jtag = jtag
+dict.bootload = bootload
+dict.ciccom = ciccom
dict.buffer = buffer
dict.buffer_payload_in = buffer_payload_in
dict.buffer_payload_out = buffer_payload_out
diff --git a/host/scripts/app/swim.lua b/host/scripts/app/swim.lua
index cdee43d..fb80e39 100644
--- a/host/scripts/app/swim.lua
+++ b/host/scripts/app/swim.lua
@@ -317,7 +317,8 @@ local function read_stack()
--STM8 stack starts at $0200 which is where the CIC version
--and other special data is placed starting with v2.0
local stack_start = 0x0200
- local last_char = 73
+-- local last_char = 73 --73 end of copyright
+ local last_char = 74 --mirroring bit
local ack
local data = {}
@@ -331,6 +332,7 @@ local function read_stack()
local j = 1
while data[j] do
io.write(string.char(data[j]))
+ --io.write("B-",j,"=",data[j], " ")
j = j+1
end
print("\n")
@@ -342,7 +344,7 @@ end
-local function start( debug )
+local function start( debug, noreset )
--dict.io("IO_RESET")
@@ -376,8 +378,15 @@ local function start( debug )
--by default there is now a breakpoint set at reset vector
--reset the STM8 core
--- dict.swim("SWIM_SRST")
- system_reset( true )
+ dict.swim("SWIM_SRST")
+ --optionally reset core below, but not of much use since a ROP enabled device
+ --will reset once SWIM comms initiate rotf/wotf
+ --if(noreset ~= true) then
+ -- if debug then print("RESETTING STM8 CPU") end
+ -- system_reset( true )
+ --else
+ -- if debug then print("STM8 CPU WASN'T reset during activation") end
+ --end
--the STM8 core is now stalled @ reset vector
--can read/write to any address on STM8 core
@@ -401,6 +410,7 @@ local function start( debug )
return true
end
+
local function printCSR()
print(cur_CSR)
end
diff --git a/host/scripts/inlretro.lua b/host/scripts/inlretro.lua
index 9d6bef8..10be91c 100644
--- a/host/scripts/inlretro.lua
+++ b/host/scripts/inlretro.lua
@@ -12,11 +12,17 @@ function main ()
local cart = require "scripts.app.cart"
local nes = require "scripts.app.nes"
local snes = require "scripts.app.snes"
+-- local gameboy = require "scripts.app.gameboy"
+-- local gba = require "scripts.app.gba"
+-- local sega = require "scripts.app.sega"
+-- local n64 = require "scripts.app.n64"
local dump = require "scripts.app.dump"
local erase = require "scripts.app.erase"
local flash = require "scripts.app.flash"
local swim = require "scripts.app.swim"
local jtag = require "scripts.app.jtag"
+ local ciccom = require "scripts.app.ciccom"
+-- local bootload = require "scripts.app.bootload"
-- local crc32 = require "scripts.app.crc32"
@@ -25,7 +31,7 @@ function main ()
--local curcart = require "scripts.nes.mmc1"
--local curcart = require "scripts.nes.unrom"
--local curcart = require "scripts.nes.mm2"
- --local curcart = require "scripts.nes.mapper30"
+ local curcart = require "scripts.nes.mapper30"
--local curcart = require "scripts.nes.bnrom"
--local curcart = require "scripts.nes.cdream"
--local curcart = require "scripts.nes.cninja"
@@ -33,7 +39,7 @@ function main ()
--local curcart = require "scripts.nes.action53_tsop"
--local curcart = require "scripts.nes.easyNSF"
--local curcart = require "scripts.nes.dualport"
- local curcart = require "scripts.snes.v3"
+ --local curcart = require "scripts.snes.v3"
local rv
-- rv = dict.pinport( "DATA_SET", 0xAA )
@@ -65,6 +71,19 @@ function main ()
-- print(dict.io("EXP0_PULLUP_TEST"))
--
+ --BOOTLOADER TEST
+ --print("jumping...")
+
+ --jump to 0xDEADBEEF
+ --dict.bootload("LOAD_ADDRH", 0xDEAD)
+ --dict.bootload("JUMP_ADDR", 0xBEEF) --for ARM LSbit must be odd (Thumb mode)
+-- dict.bootload("LOAD_ADDRH", 0x1FFF)
+-- dict.bootload("JUMP_ADDR", 0xCAC5)
+-- dict.bootload("LOAD_ADDRH", 0x0800)
+-- dict.bootload("JUMP_ADDR", 0x00C1)
+
+ --dict.bootload("JUMP_BL")
+ --print("jumped")
-- debug = true
-- rv = cart.detect(debug)
@@ -78,16 +97,17 @@ function main ()
--PROCESS USER ARGS ON WHAT IS TO BE DONE WITH CART
local force_cart = true
- cart_console = "SNES"
+ cart_console = "NES"
if (force_cart or cart.detect_console(true)) then
if cart_console == "NES" or cart_console == "Famicom" then
dict.io("IO_RESET")
dict.io("NES_INIT")
- --[[
+ ---[[
--NES detect mirroring to gain mapper info
nes.detect_mapper_mirroring(true)
+ --[[
--NES detect memories to gain more mapper/board info
--check for CHR-RAM
nes.ppu_ram_sense(0x1000, true)
@@ -159,9 +179,27 @@ function main ()
--]]
- --[[
+ ---[[
+
+
+ ciccom.start()
+ ciccom.set_opcode("M")
+ --now send operand "V" (0x56) or "H" (0x48)
+ ciccom.write("H")
+
+
+
+ dict.io("IO_RESET")
+ jtag.sleep(0.01) --10msec to be overly safe
+
+
+ ---[[
+ --the CIC won't update the H/V stack flag unless it's reset
+ --reset caused during swim init doesn't count either bc it halts at reset vector
+
--test reading back CIC version
dict.io("SWIM_INIT", "SWIM_ON_A0")
+ --dict.io("SWIM_INIT", "SWIM_ON_EXP0")
if swim.start(true) then
swim.read_stack()
@@ -169,6 +207,7 @@ function main ()
else
print("ERROR trying to read back CIC signature stack data")
end
+ swim.stop_and_reset()
print("done reading STM8 stack on A0\n")
@@ -190,6 +229,7 @@ function main ()
--curcart.process( true, false, true, true, true, "ignore/dump.bin", "ignore/Zelda2.bin", "ignore/verifyout.bin")
--UxROM
+ --curcart.process( true, false, true, true, true, "ignore/dump.bin", "ignore/AFB_128.prg", "ignore/verifyout.bin")
--curcart.process( true, false, true, true, false, "ignore/dump.bin", "ignore/nomolosFINAL.prg", "ignore/verifyout.bin")
--curcart.process( true, false, true, true, false, "ignore/dump.bin", "ignore/owlia_revb.prg", "ignore/verifyout.bin")
--curcart.process( true, false, false, false, false, "ignore/dump.bin", "ignore/rushnattack.prg", "ignore/verifyout.bin")
@@ -200,7 +240,9 @@ function main ()
--curcart.process( true, true, false, false, false, "ignore/dump.bin", "ignore/mm2_i0.prg", "ignore/verifyout.bin")
--UNROM512 mapper 30
- --curcart.process( true, false, true, true, false, "ignore/dump.bin", "ignore/MysticOrigins.prg", "ignore/verifyout.bin")
+ --curcart.process( true, false, true, true, true, "ignore/dump.bin", "ignore/BBC_nonJW.bin", "ignore/verifyout.bin")
+ curcart.process( true, false, false, false, false, "ignore/dump.bin", "ignore/MysticOrigins.prg", "ignore/verifyout.bin")
+ --curcart.process( true, false, true, true, true, "ignore/dump.bin", "ignore/NESmaker.nes", "ignore/verifyout.bin")
--curcart.process( true, false, true, true, false, "ignore/dump.bin", "ignore/tb_map30.prg", "ignore/verifyout.bin")
@@ -266,8 +308,9 @@ function main ()
--curcart.process( true, false, true, true, true, "ignore/dump.bin", "ignore/MMXdump.bin", "ignore/verifyout.bin")
--curcart.process( true, false, true, true, true, "ignore/dump.bin", "ignore/smw.sfc", "ignore/verifyout.bin")
--curcart.process( true, true, false, false, false, "ignore/dump.bin", "ignore/hsbm_4Mbit_Lo.sfc", "ignore/verifyout.bin")
- curcart.process( true, false, true, true, true, "ignore/dump.bin", "ignore/hsbm_4Mbit_Lo.sfc", "ignore/verifyout.bin")
+ --curcart.process( true, false, true, true, true, "ignore/dump.bin", "ignore/hsbm_4Mbit_Lo.sfc", "ignore/verifyout.bin")
--curcart.process( true, false, true, true, true, "ignore/dump.bin", "ignore/hsbm_4Mbit_Hi.sfc", "ignore/verifyout.bin")
+ curcart.process( true, false, true, true, true, "ignore/dump.bin", "ignore/hsbm_32Mbit_Hi.sfc", "ignore/verifyout.bin")
-- --old SNES code
diff --git a/host/scripts/nes/action53_tsop.lua b/host/scripts/nes/action53_tsop.lua
index cf7b808..6b8e064 100644
--- a/host/scripts/nes/action53_tsop.lua
+++ b/host/scripts/nes/action53_tsop.lua
@@ -138,7 +138,7 @@ local function write_gift(base, off)
--local msg1 = "Regular Edition"
--local msg1 = "Contributor Edition"
local msg1 = "Limited Edition"
- local msg2 = "100 of 100" -- all flashed
+ local msg2 = "82 of 100" -- all flashed
--local msg1 = " Contributor Edition "
--local msg2 = " PinoBatch " --issue if capital P or R is first char for some reason..
diff --git a/host/scripts/nes/mapper30.lua b/host/scripts/nes/mapper30.lua
index 1e8a87e..9c3b4b3 100644
--- a/host/scripts/nes/mapper30.lua
+++ b/host/scripts/nes/mapper30.lua
@@ -51,6 +51,9 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile,
local rv = nil
local file
+ local size = 512
+ --local filetype = "nes"
+ local filetype = "bin"
--initialize device i/o for NES
dict.io("IO_RESET")
@@ -58,11 +61,59 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile,
--test cart by reading manf/prod ID
if test then
+ print("mapper 30")
nes.detect_mapper_mirroring(true)
nes.ppu_ram_sense(0x1000, true)
print("EXP0 pull-up test:", dict.io("EXP0_PULLUP_TEST"))
prgrom_manf_id( debug )
+
+ --test CHR-RAM banking
+ dict.nes("NES_CPU_WR", 0xC000, 0x00) --CHR bank 0
+ dict.nes("NES_PPU_WR", 0x0000, 0xAA)
+ dict.nes("NES_CPU_WR", 0xC000, 0x20) --CHR bank 1
+ dict.nes("NES_PPU_WR", 0x0000, 0x55)
+ dict.nes("NES_CPU_WR", 0xC000, 0x40) --CHR bank 2
+ dict.nes("NES_PPU_WR", 0x0000, 0xCC)
+ dict.nes("NES_CPU_WR", 0xC000, 0x60) --CHR bank 3
+ dict.nes("NES_PPU_WR", 0x0000, 0x33)
+
+ --read back
+ local test = true
+ dict.nes("NES_CPU_WR", 0xC000, 0x00) --CHR bank 0
+ rv = dict.nes("NES_PPU_RD", 0x0000)
+ if rv ~= 0xAA then
+ print( "\nFAIL CHR-RAM BANKING TEST!!!\n")
+ print("bank0 read:", string.format("%X", rv))
+ test = false
+ end
+ dict.nes("NES_CPU_WR", 0xC000, 0x20) --CHR bank 1
+ rv = dict.nes("NES_PPU_RD", 0x0000)
+ if rv ~= 0x55 then
+ print( "\nFAIL CHR-RAM BANKING TEST!!!\n")
+ print("bank1 read:", string.format("%X", rv))
+ test = false
+ end
+ dict.nes("NES_CPU_WR", 0xC000, 0x40) --CHR bank 2
+ rv = dict.nes("NES_PPU_RD", 0x0000)
+ if rv ~= 0xCC then
+ print( "\nFAIL CHR-RAM BANKING TEST!!!\n")
+ print("bank2 read:", string.format("%X", rv))
+ test = false
+ end
+ dict.nes("NES_CPU_WR", 0xC000, 0x60) --CHR bank 3
+ rv = dict.nes("NES_PPU_RD", 0x0000)
+ if rv ~= 0x33 then
+ print( "\nFAIL CHR-RAM BANKING TEST!!!\n")
+ print("bank3 read:", string.format("%X", rv))
+ test = false
+ end
+
+ if test then
+ print("CHR-RAM BANKING TEST PASSED")
+ end
+
+
end
--dump the cart to dumpfile
@@ -70,7 +121,7 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile,
file = assert(io.open(dumpfile, "wb"))
--dump cart into file
- dump.dumptofile( file, 512, "MAP30", "PRGROM", true )
+ dump.dumptofile( file, size, "MAP30", "PRGROM", true )
--close file
assert(file:close())
@@ -124,10 +175,26 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile,
file = assert(io.open(flashfile, "rb"))
--determine if auto-doubling, deinterleaving, etc,
--needs done to make board compatible with rom
+
+
+ if filetype == "nes" then
+ --advance past the 16byte header
+ --TODO set mirroring bit via ciccom
+ local buffsize = 1
+ local byte
+ local count = 1
+
+ for byte in file:lines(buffsize) do
+ local data = string.unpack("B", byte, 1)
+ --print(string.format("%X", data))
+ count = count + 1
+ if count == 17 then break end
+ end
+ end
--flash cart
- flash.write_file( file, 512, "MAP30", "PRGROM", true )
+ flash.write_file( file, size, "MAP30", "PRGROM", true )
--close file
assert(file:close())
@@ -140,7 +207,7 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile,
file = assert(io.open(verifyfile, "wb"))
--dump cart into file
- dump.dumptofile( file, 512, "MAP30", "PRGROM", true )
+ dump.dumptofile( file, size, "MAP30", "PRGROM", true )
--close file
assert(file:close())
diff --git a/host/scripts/nes/unrom.lua b/host/scripts/nes/unrom.lua
index 3dd0ba5..2925002 100644
--- a/host/scripts/nes/unrom.lua
+++ b/host/scripts/nes/unrom.lua
@@ -103,6 +103,7 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile,
local rv = nil
local file
+ local size = 128
--initialize device i/o for NES
dict.io("IO_RESET")
@@ -125,7 +126,7 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile,
--TODO find bank table to avoid bus conflicts!
--dump cart into file
- dump.dumptofile( file, 512, "UxROM", "PRGROM", true )
+ dump.dumptofile( file, size, "UxROM", "PRGROM", true )
--close file
assert(file:close())
@@ -174,14 +175,16 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile,
--Nomolos' bank table is at $CC84 so hard code that for now
--wr_bank_table(0xCC84, 32)
--Owlia bank table
- wr_bank_table(0xE473, 32)
+ --wr_bank_table(0xE473, 32)
--rushnattack
--wr_bank_table(0x8000, 8)
--twindragons
--wr_bank_table(0xC000, 32)
+ --Armed for Battle
+ wr_bank_table(0xFD69, 8)
--flash cart
- flash.write_file( file, 512, "UxROM", "PRGROM", true )
+ flash.write_file( file, size, "UxROM", "PRGROM", true )
--close file
assert(file:close())
@@ -194,7 +197,7 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile,
file = assert(io.open(verifyfile, "wb"))
--dump cart into file
- dump.dumptofile( file, 512, "UxROM", "PRGROM", true )
+ dump.dumptofile( file, size, "UxROM", "PRGROM", true )
--close file
assert(file:close())
diff --git a/host/scripts/snes/v3.lua b/host/scripts/snes/v3.lua
index 319e0e0..ca9b7a0 100644
--- a/host/scripts/snes/v3.lua
+++ b/host/scripts/snes/v3.lua
@@ -113,12 +113,21 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile,
dict.io("IO_RESET")
dict.io("SNES_INIT")
+-- local snes_mapping = "LOROM"
+ local snes_mapping = "HIROM"
+-- local rom_size = 512
+-- local rom_size = 1024
+-- local rom_size = 2048
+ local rom_size = 4096
+-- local rom_size = 8192
+-- local rom_size = 12288
+-- local rom_size = 16384
+
--test cart by reading manf/prod ID
if test then
--SNES detect HiROM or LoROM
--nes.detect_mapper_mirroring(true)
- local snes_mapping = "LOROM"
--SNES detect if there's save ram and size
--SNES detect if able to read flash ID's
@@ -148,13 +157,13 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile,
--dump the cart to dumpfile
if read then
--initialize the mapper for dumping
- init_mapper(debug)
+ --init_mapper(debug)
file = assert(io.open(dumpfile, "wb"))
--TODO find bank table to avoid bus conflicts!
--dump cart into file
- dump.dumptofile( file, 512, "LOROM", "SNESROM", true )
+ dump.dumptofile( file, rom_size, snes_mapping, "SNESROM", true )
--close file
assert(file:close())
@@ -215,7 +224,7 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile,
if program then
--initialize the mapper for dumping
- init_mapper(debug)
+ --init_mapper(debug)
--open file
file = assert(io.open(flashfile, "rb"))
@@ -225,7 +234,7 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile,
--not susceptible to bus conflicts
--flash cart
- flash.write_file( file, 512, "LOROM", "SNESROM", true )
+ flash.write_file( file, rom_size, snes_mapping, "SNESROM", true )
--close file
assert(file:close())
@@ -238,7 +247,7 @@ local function process( test, read, erase, program, verify, dumpfile, flashfile,
file = assert(io.open(verifyfile, "wb"))
--dump cart into file
- dump.dumptofile( file, 512, "LOROM", "SNESROM", true )
+ dump.dumptofile( file, rom_size, snes_mapping, "SNESROM", true )
--close file
assert(file:close())
diff --git a/shared/shared_dict_bootload.h b/shared/shared_dict_bootload.h
new file mode 100644
index 0000000..8c80620
--- /dev/null
+++ b/shared/shared_dict_bootload.h
@@ -0,0 +1,28 @@
+#ifndef _shared_dict_bootload_h
+#define _shared_dict_bootload_h
+
+//define dictionary's reference number in the shared_dictionaries.h file
+//then include this dictionary file in shared_dictionaries.h
+//The dictionary number is literally used as usb transfer request field
+//the opcodes and operands in this dictionary are fed directly into usb setup packet's wValue wIndex fields
+
+
+//=============================================================================================
+//=============================================================================================
+// BOOTLOAD DICTIONARY
+//
+// opcodes contained in this dictionary must be implemented in firmware/source/bootload.c
+//
+//=============================================================================================
+//=============================================================================================
+
+
+//BOOTLOAD opcodes
+#define JUMP_BL 1 //jump to the bootloader
+
+#define LOAD_ADDRH 2 //upper address of jump
+#define JUMP_ADDR 3 //jump to address upper 16bit provided previous opcode
+
+
+
+#endif
diff --git a/shared/shared_dict_buffer.h b/shared/shared_dict_buffer.h
index 2e02d5b..fbc3fbb 100644
--- a/shared/shared_dict_buffer.h
+++ b/shared/shared_dict_buffer.h
@@ -152,6 +152,7 @@
#define FME7 69 //SUNSOFT-5 with synth
#define HDIVER 78
#define DxROM 205
+ #define MM2 253
#define DPROM 254 //just a random mapper number for whatever I need it for
// UNKNOWN 255 don't assign to something meaningful
//operand LSB mapper variant
@@ -159,7 +160,10 @@
#define LOROM 0
- #define HIROM 1
+ #define HIROM 1 //file starts at bank 40 and is mirrored to C0
+ #define EXHIROM 2 //file starts at bank C0
+ #define SOROM 3 //12MB star ocean mapping
+
//set function
//miscdata: buffer number
diff --git a/shared/shared_dict_ciccom.h b/shared/shared_dict_ciccom.h
new file mode 100644
index 0000000..4726d47
--- /dev/null
+++ b/shared/shared_dict_ciccom.h
@@ -0,0 +1,21 @@
+#ifndef _shared_dict_ciccom_h
+#define _shared_dict_ciccom_h
+
+//define dictionary's reference number in the shared_dictionaries.h file
+//then include this dictionary file in shared_dictionaries.h
+//The dictionary number is literally used as usb transfer request field
+//the opcodes and operands in this dictionary are fed directly into usb setup packet's wValue wIndex fields
+
+
+//=============================================================================================
+//=============================================================================================
+// CICCOM DICTIONARY
+//
+// opcodes contained in this dictionary must be implemented in firmware/source/ciccom.c
+//
+//=============================================================================================
+//=============================================================================================
+
+#define CICCOM_INIT 0
+
+#endif
diff --git a/shared/shared_dict_gameboy.h b/shared/shared_dict_gameboy.h
new file mode 100644
index 0000000..0b63438
--- /dev/null
+++ b/shared/shared_dict_gameboy.h
@@ -0,0 +1,24 @@
+#ifndef _shared_dict_gameboy_h
+#define _shared_dict_gameboy_h
+
+//define dictionary's reference number in the shared_dictionaries.h file
+//then include this dictionary file in shared_dictionaries.h
+//The dictionary number is literally used as usb transfer request field
+//the opcodes and operands in this dictionary are fed directly into usb setup packet's wValue wIndex fields
+
+
+//=============================================================================================
+//=============================================================================================
+// GAMEBOY DICTIONARY
+//
+// opcodes contained in this dictionary must be implemented in firmware/source/gameboy.c
+//
+//=============================================================================================
+//=============================================================================================
+
+
+#define DMG_RD 0 //RL=3 return error code, data len = 1, 1 byte of data
+#define DMG_WR 1
+
+
+#endif
diff --git a/shared/shared_dict_gba.h b/shared/shared_dict_gba.h
new file mode 100644
index 0000000..3c5b540
--- /dev/null
+++ b/shared/shared_dict_gba.h
@@ -0,0 +1,24 @@
+#ifndef _shared_dict_gba_h
+#define _shared_dict_gba_h
+
+//define dictionary's reference number in the shared_dictionaries.h file
+//then include this dictionary file in shared_dictionaries.h
+//The dictionary number is literally used as usb transfer request field
+//the opcodes and operands in this dictionary are fed directly into usb setup packet's wValue wIndex fields
+
+
+//=============================================================================================
+//=============================================================================================
+// GBA (gameboy advance) DICTIONARY
+//
+// opcodes contained in this dictionary must be implemented in firmware/source/gba.c
+//
+//=============================================================================================
+//=============================================================================================
+
+
+#define GBA_RD 0 //RL=3 return error code, data len = 1, 1 byte of data
+#define GBA_WR 1
+
+
+#endif
diff --git a/shared/shared_dict_n64.h b/shared/shared_dict_n64.h
new file mode 100644
index 0000000..a87c336
--- /dev/null
+++ b/shared/shared_dict_n64.h
@@ -0,0 +1,23 @@
+#ifndef _shared_dict_n64_h
+#define _shared_dict_n64_h
+
+//define dictionary's reference number in the shared_dictionaries.h file
+//then include this dictionary file in shared_dictionaries.h
+//The dictionary number is literally used as usb transfer request field
+//the opcodes and operands in this dictionary are fed directly into usb setup packet's wValue wIndex fields
+
+
+//=============================================================================================
+//=============================================================================================
+// N64 DICTIONARY
+//
+// opcodes contained in this dictionary must be implemented in firmware/source/n64.c
+//
+//=============================================================================================
+//=============================================================================================
+
+
+#define N64_RD 0 //RL=3 return error code, data len = 1, 1 byte of data
+#define N64_WR 1
+
+#endif
diff --git a/shared/shared_dict_nes.h b/shared/shared_dict_nes.h
index b6c24c3..4492a3f 100644
--- a/shared/shared_dict_nes.h
+++ b/shared/shared_dict_nes.h
@@ -43,6 +43,8 @@
#define NES_DUALPORT_WR 0x05
+#define DISC_PUSH_EXP0_PRGROM_WR 0x06
+
//=============================================================================================
// OPCODES WITH OPERAND AND RETURN VALUE plus SUCCESS/ERROR_CODE
//=============================================================================================
diff --git a/shared/shared_dict_pinport.h b/shared/shared_dict_pinport.h
index 3ece1b6..520bd5d 100644
--- a/shared/shared_dict_pinport.h
+++ b/shared/shared_dict_pinport.h
@@ -111,7 +111,7 @@
#define SWD_ 17
// PC18 "SWC" mcu debug
#define C18_ 18
-// PC19 "AFL" flipflop addr expansion for FF0-7
+// PC19 "AFL" flipflop addr expansion for FF0-7 (also CIC RESET on NES)
#define C19_ 19
#define AFL_ 19
// PC20 "COUT" CIC data out
diff --git a/shared/shared_dict_sega.h b/shared/shared_dict_sega.h
new file mode 100644
index 0000000..1544d56
--- /dev/null
+++ b/shared/shared_dict_sega.h
@@ -0,0 +1,23 @@
+#ifndef _shared_dict_sega_h
+#define _shared_dict_sega_h
+
+//define dictionary's reference number in the shared_dictionaries.h file
+//then include this dictionary file in shared_dictionaries.h
+//The dictionary number is literally used as usb transfer request field
+//the opcodes and operands in this dictionary are fed directly into usb setup packet's wValue wIndex fields
+
+
+//=============================================================================================
+//=============================================================================================
+// SEGA (genesis/megadrive) DICTIONARY
+//
+// opcodes contained in this dictionary must be implemented in firmware/source/sega.c
+//
+//=============================================================================================
+//=============================================================================================
+
+#define SEGA_RD 0 //RL=3 return error code, data len = 1, 1 byte of data
+#define SEGA_WR 1
+
+
+#endif
diff --git a/shared/shared_dictionaries.h b/shared/shared_dictionaries.h
index e84c3c4..99cbf48 100644
--- a/shared/shared_dictionaries.h
+++ b/shared/shared_dictionaries.h
@@ -5,19 +5,110 @@
//these numbers literally sent in usb control transfer in request field
//the included dictionaries define opcodes and operands contained in transfer wValue wIndex fields
//they also define expected data buffer sizes and contents.
+
+//These dictionaries are imported to the device firmware at compile time
+//The host application loads & parses these dictionaries at run time
+//So creation of new dictionaries/opcodes requires device firmware to
+//be recompiled, and loaded onto the device. But the host application
+//does not need to be recompiled.
//
-//TODO eventually the host code should have access to these libraries during run time.
-//that way character strings can be interpreted by parsing the dictionary .h file
-//this would also allow for dictionary expansion after compilation of host code.
-//However the kazzo fw would still need rebuilt to support dictionary expansion.
-//Possible to take this one step further and remove dictionaries from host compiliation.
-//that way you simply point the host to a dictionary directory at runtime.
-//Perhaps utilizing a database of some sort would be better than directory of text/.h files.
-//but since firmware build relies on dictionary definition at build time, perhaps the simplest
-//solution of using those avr build .h files slurped up by host at run time is safest and easiest.
-//having host capability to convert command string to the usb dict/opcode is the first
-//step in having scripting support on host side. The thought above just expands it one
-//step further making the dictionaries themselves operate as run time 'scripts'.
+//
+//There are a number of updates that must be completed when creating new dictionaries:
+//
+//1: Define the dictionary number here in this file with #define & #include
+// This will get the new dictionary included in the firmware build
+// the assigned dictionary number must be between 0-255
+// This number is the actual USB bRequest value for the setup packet
+//
+//2: Create new "shared_dict_.h" file in the same directory as this file
+// Feel free to copy paste a similar dict, just make sure everything is
+// appropriately renamed in the file
+//
+//3: Add the new dictionary to host/scripts/app/dict.lua
+// This includes instantiating, creating, & exporting the module at the bottom
+// of dict.lua file as follows:
+// op_ = {}
+// create_dict_tables( op_, "../shared/shared_dict_.h")
+// dict. =
+// Create the dictionary function in dict.lua
+// This is the function that the host scripts use each time an opcode is
+// called for that dictionary. It designates how the operand, misc, & data
+// for the opcode are defined and how they map to the USB setup & data packets.
+// Currently there is no generic function for dictionaries to use
+// This is because some dictionaries may handle USB transfers in special ways
+// For now one can probably get by copy pasting one of the other functions
+// like nes, and then renaming all "nes" to "" and "NES" to ""
+// TODO: create generic dictionary script function for general use
+//
+//4: Define the desired opcodes in the newly created shared/shared_dict_.h file
+// This is done with lines like the following:
+// #define NEW_OPCODE 1 //RL=2
+// the opcode name comes first which is the name used to call the opcode
+// This is used in host scripts and device firmware
+// An underscore can be tacked to the end to allow direct mapping between
+// firmware defines and shared defines (see firmware/source/pinport.h for example)
+// In that case the trailing underscore is trimmed by the host parser
+// choose an arbitrary number between 0-255 that is different from all other
+// opcodes in that dictionary
+// This value is sent as USB setup packet wValue LSByte
+// the "RL=" that's follows the "//" C comment designates the "return data length"
+// This C comment is for the host side only so it knows the desired USB endpoint & data length.
+// If left out, the default is RL=1 which is ENDPOINT IN with data length of 1.
+// A negative value for RL denotes ENDPOINT OUT (write to device).
+// a positive is ENDPOINT IN (read data from device).
+// That 1 byte of data read back from the device is typically the success/error
+// code sent back from the device to denote if opcode wasn't found, or other problem.
+// If you want some actual data to be returned increased.
+// Typically the first byte is still reserved for error code, second byte gives data length
+// of the data that follows. So 1 byte of return data would be RL=3
+// first byte would be errorcode, second = 1, and third byte would be actual data
+// see nes.c for an example of this on reads
+// You must also dictate what to do with that data once it arrives in the
+// dict.lua function created in step 3 above.
+// dict.lua parses this RL value, all that really matters is it follows //
+// and contains RL= where the number is assumed decimal, but can be hex with 0x prefix
+// white space is okay, and RL doesn't have to be first thing in the comment
+// If one wants to comment out opcodes it must be done with // at the beginning of the line.
+// multiline C comments is not permitted by the dict.lua parser
+// Make notes about the opcode explaining operands and data when used.
+// Comments in shared_dict_.h must be single line C comments starting with //
+//
+//5: Add support for the dictionary in the device
+// This is done in firmware/source/usb.c within the usbFunctionSetup function
+// This is where setup packet is mapped to the firmware function you'd like to be called for
+// each incoming setup packet for this dictionary
+//
+//6: Create the firmware C code to implement the dictionary.
+// Something like .c & .h which can be copied from a similar dictionary
+// The .h file must be included in usb.h
+// Create a _call function in .c which you called in step 6 above.
+// Use a switch statement to key off the opcode and pass operands/data to the opcode's function
+// Be sure to return SUCCESS/ERROR when possible to get some sort of report back from device that
+// the opcode was found and executed properly.
+// the return SUCCESS/ERROR is not possible when sending data packets to device (ENDPOINT OUT)
+// in that case perhaps you want a 'GET_LAST_ERROR_CODE' opcode that would follow afterwards..
+// These error codes should be kept in shared/shared_errors.h
+//
+//7: Call opcodes in the new dictionary from host lua scripts!
+// For example:
+// dict.io("NES_INIT")
+// calls the NES_INIT opcode in the io dictionary, this opcode happens to initialize
+// the mcu GPIO pins to a known state to prepare for calling other opcodes in the nes dictionary
+//
+// dict.nes("NES_CPU_WR", 0x8000, 0xFF)
+// calls the NES_CPU_WR opcode from the nes dictionary, with operand 0x8000, and miscdata 0xFF
+// the host/scripts/app/dict.lua nes function is what determines how that operand/misc data is sent in the setup packet
+// in this example the value 0xFF is written to CPU address $8000
+//
+// dict.snes("SNES_SET_BANK", 0)
+// rv = dict.snes("SNES_ROM_RD", 0xFFFF)
+// the SNES_SET_BANK opcode sets the SNES bank address bits to 0
+// the second SNES_ROM_RD opcode reads the value from $FFFF (of the currently selected bank)
+// and the read value is stored in the variable rv for use in the script
+//
+// hex & decimal values can be used in data, operands, misc. Hex must have 0x prefix
+// this is lua code afterall, so anything that's possible in lua can be done here on the host side
+
//Notes:
@@ -121,4 +212,62 @@
//dictionary used to control jtag communications
//=============================================================================================
//=============================================================================================
+
+
+//=============================================================================================
+//=============================================================================================
+#define DICT_BOOTLOAD 10
+#include "shared_dict_bootload.h"
+//dictionary used to control USB device bootloader
+//=============================================================================================
+//=============================================================================================
+
+
+//=============================================================================================
+//=============================================================================================
+#define DICT_CICCOM 11
+#include "shared_dict_ciccom.h"
+//dictionary used to communicate to the CIC
+//The lockout microcontroller on some INL manufactured cartridges
+//is used for advanced features such as mirroring software switch, JTAG interface, etc.
+//=============================================================================================
+//=============================================================================================
+
+//=============================================================================================
+//=============================================================================================
+#define DICT_GAMEBOY 12
+#include "shared_dict_gameboy.h"
+//gameboy dictionary
+//These commands rely on io initialization from io dictionary prior to calling
+//=============================================================================================
+//=============================================================================================
+
+//=============================================================================================
+//=============================================================================================
+#define DICT_GBA 13
+#include "shared_dict_gba.h"
+//gameboy advance dictionary
+//These commands rely on io initialization from io dictionary prior to calling
+//=============================================================================================
+//=============================================================================================
+
+//=============================================================================================
+//=============================================================================================
+#define DICT_SEGA 14
+#include "shared_dict_sega.h"
+//Sega Genesis dictionary
+//These commands rely on io initialization from io dictionary prior to calling
+//=============================================================================================
+//=============================================================================================
+
+//=============================================================================================
+//=============================================================================================
+#define DICT_N64 15
+#include "shared_dict_n64.h"
+//Nintendo 64 dictionary
+//These commands rely on io initialization from io dictionary prior to calling
+//=============================================================================================
+//=============================================================================================
+
+
#endif
diff --git a/shared/shared_errors.h b/shared/shared_errors.h
index 5a21c8f..b35d7be 100644
--- a/shared/shared_errors.h
+++ b/shared/shared_errors.h
@@ -11,6 +11,8 @@
#define ERR_UNKN_SWIM_OPCODE 130
#define ERR_UNKN_JTAG_OPCODE 135
+#define ERR_UNKN_CICCOM_OPCODE 136
+#define ERR_UNKN_BOOTLOAD_OPCODE 138
#define ERR_UNKN_PP_OPCODE 140
#define ERR_CTL_PIN_NOT_PRESENT 141
@@ -25,6 +27,11 @@
//
#define ERR_UNKN_SNES_OPCODE 170
+#define ERR_UNKN_GAMEBOY_OPCODE 175
+#define ERR_UNKN_GBA_OPCODE 176
+#define ERR_UNKN_SEGA_OPCODE 177
+#define ERR_UNKN_N64_OPCODE 178
+
#define ERR_UNKN_BUFF_OPCODE 180
#define ERR_BUFN_DOES_NOT_EXIST 181